Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   982 / 1203
(#) usane válasza sonajkniz hozzászólására (») Okt 2, 2017 /
 
Idézet:
„leg könnyebben használható”


A legkönyebben használható sosem a leggyorsabb, ezt te is tudod már, hiszen amit ass-ben megírsz röviden az C-ben hoszabb. Nos nem tudom miben írták a PLC szoftverét, de ha C-ben akkor nyilván ha egy 3. nyelvet alakítanak ki belőle ami kényelemre alapul az még lasabb lesz. Ha ass-ben írták akkor ahogy pajti2 is mondta balfékek.
(#) kriszrap válasza pajti2 hozzászólására (») Okt 2, 2017 /
 
74hc595 nél a 13 lábat(OE) pwmezem nem a lacht lábat az baj lehet??
(#) pajti2 válasza kriszrap hozzászólására (») Okt 2, 2017 /
 
Az output enable vezérli a kimenetet, azzal tudod ki/bekapcsolni a meghajtást. Bajt nem jelent, de ha időnként bekapcsolgatod az eszközt, ne csodálkozz rajta, ha működik
(#) kriszrap válasza pajti2 hozzászólására (») Okt 2, 2017 /
 
Lacht ott kellene pwmezni nem a "blank" lábat?
(#) pajti2 válasza kriszrap hozzászólására (») Okt 2, 2017 /
 
Van rajta egy master reset a shift register-hez, a 10-es. Azt ha lehuzigálod, kitörölgeted a shift register-t. Az a szándékod?
(#) kriszrap válasza pajti2 hozzászólására (») Okt 2, 2017 /
 
Ha minden igaz meg van a gond.
idömultiplexem és a pwmenem nincs összhangba igy elöfordulhat az hogy vibrál a led és nem tudom 100% an a ledet elsötétiteni.
SZERINTEM.
hát megrobálom a C kódot beszurni hogy átlátható legyen.
  1. PWM beállítás():
  2. PWM2_Init(5000);
  3.     PWM3_Init(5000);
  4.     PWM4_Init(5000);
  5.    
  6.     PWM2_Start();
  7.     PWM3_Start();
  8.     PWM4_Start();
  9.    
  10.     PWM2_Set_Duty(255);//zöld
  11.     PWM3_Set_Duty(255);//kék
  12.     PWM4_Set_Duty(255);// piros
  13.  
  14. void jatek1()
  15. {
  16.         szinkeveres(1,2,3,4,5,6,7,0,5);
  17.         szinkeveres(1,2,3,4,5,6,7,0,4);
  18.         szinkeveres(1,2,3,4,5,6,7,0,3);
  19.         szinkeveres(0,0,0,0,0,0,0,0,2);
  20.         szinkeveres(1,2,3,4,5,6,7,0,1);
  21.         kirajzol(1,2,0,0,0);
  22.        xy ms,pwm mód,rgb értékeii.
  23. }
  24.  
  25. void kirajzol(int mill,char pwm_eng,char r,char g,char b)
  26. {
  27.     int i;
  28.     char k,x,y;
  29.     for(i=0;i<mill;i++) // for ciklus 1x lefutási ideje 1ms!!!!
  30.     {
  31.       pwm_beallitas(pwm_eng,r,g,b);itt állítombe a pwmnt
  32.       for(k=1;k<6;k++)//szint
  33.       {
  34.       shiftnullaz();
  35.       for(y=1;y<4;y++)//shiftregiszterek
  36.       {
  37.         for ( x = 8; x > 0; x--)
  38.         {
  39.             if (t[k][x] == 7
  40.             || (t[k][x] == 1 && y==3/*piros*/)
  41.             || (t[k][x] == 3 && y==2 /*kék*/)
  42.             || (t[k][x] == 2 && y==1/*zöld*/)
  43.             || (t[k][x] == 4 && (y==1 || y==3)/*sárga(zöld,piros)*/)
  44.             || (t[k][x] == 5 && (y==1 || y==2)/*cyan(zöld,kék)*/)
  45.             || (t[k][x] == 6 && (y==3 || y==2)/*lila(piros, kék)*/))
  46.             {
  47.               LATD.RD2=1;//adat
  48.               LATC.RC4=1; //clock
  49.  
  50.               LATD.RD2=0;//data
  51.               LATC.RC4=0;//clock
  52.  
  53.             }else{
  54.  
  55.               LATD.RD2=0;//data
  56.               LATC.RC4=1;//clock
  57.  
  58.               LATD.RD2=0;//data
  59.               LATC.RC4=0;//clock
  60.             }
  61.           }
  62.         }
  63.        if(k==5)LATA.RA6=1;else LATA.RA6=0;
  64.        if(k==4)LATC.RC0=1;else LATC.RC0=0;
  65.        if(k==3)LATC.RC1=1;else LATC.RC1=0;
  66.        if(k==2)LATC.RC2=1;else LATC.RC2=0;
  67.        if(k==1)LATC.RC3=1;else LATC.RC3=0;
  68.  
  69.       LATD.RD3=1;//lacth
  70.       Delay_us(200);
  71.       }
  72.     }
  73.   //tömb ürités
  74.  for(k=0;k<6;k++)
  75.   for(i=0;i<9;i++)
  76.     t[k][i]=0;
  77. }
  78. void pwm_beallitas(char pwm_eng,char r,char g,char b)
  79. {
  80.       int PwmAdc[4]={0,0,0,0};
  81.    .............
  82.       }else if(pwm_eng==2)
  83.       {
  84.         PWM2_Set_Duty(255-b);//kék
  85.         PWM3_Set_Duty(255-g);//zöld
  86.         PWM4_Set_Duty(255-r);// piros
  87.       }
  88. ................
  89. }

Megprobáltam le karcsúsitani a kódót.A prbléma az hogy ha 255 állítom az értéket a ledek kicsit villágítanak még pedig mérés alapján nem kellen...
Ha valaki tud segíteni kérem segítsen köszönöm.
(#) kriszrap hozzászólása Okt 2, 2017 /
 
Idézet:
„Van rajta egy master reset a shift register-hez, a 10-es. Azt ha lehuzigálod, kitörölgeted a shift register-t. Az a szándékod?”

Azt tudom de én csak annyit akarok hogy engedélyezem a shiftlábait és tiltom ennyit.
(#) kriszrap hozzászólása Okt 3, 2017 /
 
Ha a labon kikapcsolom a pwmete es a labat 1 be vagy nullaba billentem akkor jo de pwnel pedig marad a hiba jelenseg .Ugy hogy szoftveres a hiba... Csak nem tudom miert.... Ha valakinek van otlete megkoszonnem ha segitene . Koszonom
(#) bbalazs_ válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Szerintem te az OE labat szeretned kapcsolni (13-as, invertalt). Az engedelyezi a kimeneteket, a shift regiszter kozben a hatterben valtozatlan marad.
(#) kriszrap válasza bbalazs_ hozzászólására (») Okt 3, 2017 /
 
Igen úgy szeretném csak közbe idömultiplexelés is van....
De sajnos még mindig az a baj hogy a ledek fényerejét nem tudom 0-ra vinni. Manuálisan pedig tudom amikor a láb egy 1 vagy 0 (0v-5v)értéket adom.
(#) pajti2 válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Egy kapcsrajz lenne jobb, mert a jelek szerint valami fogalom zavar van, és el kellene kerülni a továbbiakat.
(#) usane válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
És ha a PWM-et rajta hagyod és a bemenetet tartod nullán. Vagyis a bemenetre fix nullákat küldesz? Meg szkóppal rá kéne mérni arra a teljes kitöltésre tényleg teljes-e? Ha fix 0 bemenettel jó és tényleg teljes kitöltés a teljes kitöltés akkor biztos, hogy nincs szinkronban a multiplex a PWM-el. Ha van 2 csatonás szkópod akkor még össze is nézheted a jeleket is abból is kiderül, hogy valószínűleg szinkron hiba.
(#) usane válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Egy kicsit javítom az előző gondolatomat. Azt mondtad teljes kitöltésnél is van fény?Ez egy LED-re vagy az összesre vonatkozik? Mert ha egy LED-re akkor az egyértelmű. Ha az összesre egyszerre akkor vagy a PWN nem teljes(ami szofver hiba), vagy valami áramköri huncutság van a dologban.
A hozzászólás módosítva: Okt 3, 2017
(#) kriszrap válasza usane hozzászólására (») Okt 3, 2017 /
 
Kapcsolást megrajzolom.

Idézet:
„És ha a PWM-et rajta hagyod és a bemenetet tartod nullán. Vagyis a bemenetre fix nullákat küldesz? Meg szkóppal rá kéne mérni arra a teljes kitöltésre tényleg teljes-e? Ha fix 0 bemenettel jó és tényleg teljes kitöltés a teljes kitöltés akkor biztos, hogy nincs szinkronban a multiplex a PWM-el. Ha van 2 csatonás szkópod akkor még össze is nézheted a jeleket is abból is kiderül, hogy valószínűleg szinkron hiba.”


Kiengettem rá a 5v-0v akkor teljesen jó volt de amikor pwmet állítottam rá és nem volt időmultiplexelve akkor pedig nem tudtam a ledeket teljesen ki offolni.
Mintha a pwm a teljes kitöltést nem tudná......
(#) usane válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Hát akkor nézz rá szkóppal arra pwm-re. Valam nem jó a programban. Ez mikroC igaz?
Nézd meg valahol nem indítod e ujra a PWM-et valamelyik ciklusban. Melyik PIC is ez?
(#) kriszrap válasza usane hozzászólására (») Okt 3, 2017 /
 
Ha jól csinálom amikor pic indul beállítom a 5khz pwmet és teljes kitöltésre állítom kezdésnek és a ciklusba csak a kitöltésekkel játszom nem állítom meg a pwmet csak kitöltést variálom ennyi a kódom feljebb található.
(#) Hp41C válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Nem tudjuk a magas szintű nyelven írt forrásból, hogy milyen értékeket állít be a programod a TxCON, PRx, CCPRxL és CCPRxH regiszterekbe. De ilyen problémával már küzdöttünk egyszer...
Ha a CCPRxL > PR2, a CCPx modul kimenete nem megy alalcsony, ha a CCPRxL = 0, akkor nem megy magas szintre.

Mutasd meg, milyen kódot fordít a C a
  1. PWM2_Init(5000);
  2.     PWM3_Init(5000);
  3.     PWM4_Init(5000);
  4.    
  5.     PWM2_Start();
  6.     PWM3_Start();
  7.     PWM4_Start();

sorokhoz.
(#) usane válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Nem nagyon olvasgattam vissza mhogyan is áll ez össze, de BCM-el nem lett volna egyszerűbb?
(#) kriszrap hozzászólása Okt 3, 2017 /
 
PWM 2 néztem meg és ezeket az eredményeket kaptam:
  1. Name    Value  
  2. T2CON   77     
  3. PR2     199    
  4. CCPR2H  0      
  5. CCPR2L  199
(#) Hp41C válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Egy sort lefelejtettem:
  1. PWM2_Set_Duty(255);
(#) kriszrap válasza Hp41C hozzászólására (») Okt 3, 2017 /
 
Semmit se véltoztatott az értékeken...Se ha 0 írtam se ha 1 est.
(#) Hp41C válasza kriszrap hozzászólására (») Okt 3, 2017 /
 
Nem tudok úgy segíteni, ha nem ismerem a programot. Hála a magas szintű nyelveknek a forrás listája nem tartalmazza azokat az értékeket, amik végül a megfelelő SFR -be kerülnek. Néhány hónapja pontosan ezzel a problémával küzdöttünk és bebizonyosodott, hogy a Mikroelektronika C PWM függvénykönyvtára meglehetősen speciálisan kezeli az értékeket.

A kérdés az, hogy ez a sor mire fordul le:
  1. PWM2_Set_Duty(255);
(#) kriszrap hozzászólása Okt 3, 2017 /
 
Lehet elbaltásztam holnap újra megprobálom csak az lenne a fő kérdés melyik értékeket figyeljem amit feljebb emlitettél??
(#) Hp41C válasza kriszrap hozzászólására (») Okt 4, 2017 /
 
Legjobb lenne, ha egy char típusú változót adnál meg paraméternek:
  1. PWM2_Set_Duty(char_típusú_változó);
(#) kriszrap válasza Hp41C hozzászólására (») Okt 4, 2017 /
 
Rendben ugy lesz de miert jobb a char tipus tudom mi az csak miert jobb ugy??
(#) Firefighter1 hozzászólása Okt 4, 2017 /
 
Sziasztok... csak nem hagy nyugodni a gondolat... ugyhogy tovább töröm a fejem..
A cél amit meg szeretnék valósítani az egy Master PIC és 5-6 slave PIC ( szenzorok lennének rajta, klasszikus SmartHome projekt!)
Mindezzel nem is lenne gond mert mondjuk kábelesen egy I2C protokollal megoldható, de én valahogy kanóc nélkül szeretném!
Egy forumtárs felvetése alapján gndolkodtam sima 433 modulokon RS232 protokollal és a mondatba elrejteni az azonosítást de még egy kicsit homályos ez nekem!

Esetleg van ötletetek erre vagy más tipusú megvalósításra?

Köszönöm
(#) Hp41C válasza kriszrap hozzászólására (») Okt 4, 2017 /
 
Ha az átadott érték konstans, a fordító a belőle származó értékeket már a fordításkor kiszámolhatja és azokat töltheti be a SFR -ekbe. Ha az átadott paraméter változó, csak a függvény hívásoknál kap tényleges értéket, a kódnak "számolnia" kell az SFR -ekbe törtendő értéket.
(#) kriszrap hozzászólása Okt 4, 2017 /
 
Teljesen szűz projectbe beállítottam az értékeke és ezeket az eredményeket kaptam.:
Duty(0):
  1. Name    Value  
  2. T2CON   5      
  3. PR2     199    
  4. CCPR2H  0      
  5. CCPR2L  0      
  6. CCP2_PORTC_bit  0


Duty(255):
  1. Name    Value  
  2. T2CON   5      
  3. PR2     199    
  4. CCPR2H  0      
  5. CCPR2L  199    
  6. CCP2_PORTC_bit  0
(#) Hp41C válasza kriszrap hozzászólására (») Okt 4, 2017 /
 
Az a bizonyos eb a másodikban van elhantolva:
A PWM 10 bites felbontású. A kitöltés felső 8 bitje a CCPRxL regiszter 8 bitje, az alsó két bit a CCPRxH 5.4 bitjei. A 1023/1024*100% -hoz a CCCRxH register 5.4 bitjeit is 1 -re kellene állítani.
Idézet egy 18F adatlapjából:
Idézet:
„If the PWM duty cycle value is longer than the PWM period, the CCP1 pin will not be cleared.”

Próbáld meg nagyobb számmal elérni, hogy a CCPRxL -be 199 -nél nagyobb szám kerüljön.
A paraméter átadás bírni fogja a 255 -nél nagyobb értéket is.
  1. void PWM1_Set_Duty(unsigned short duty_ratio);
(#) Elektro.on válasza Hp41C hozzászólására (») Okt 4, 2017 /
 
Az nem biztos.
Következő: »»   982 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem