Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nem juthat. Nezd meg az adatlapon, mik a lehetosegeid
Ha le tudod forditani az ASM-et, es meg mukodik is a leforditott kod, akkor keresdd meg ezt:
es csereldd le a MOVLW-ket, pl:
stb stb stb
Milyen programmal fordítottad vissza?
PICDisasm-mal.
Sziasztok, ismét LCD kezelési gondom támadt. Van egy Seiko LCD-m, ami 8*24 karakteres. És valamiért csak 3 sorba hajlandó írni, de azt is úgy hogy a legelső karaktert is eltolja pár pixxellel lefelé. (Így nem pont a megfelelő sorokban van a szöveg.) Kiírja az első 2 sort, majd kihagy egyet. És kiír még egyet. Nem tudok rájönni hogy mi lehet a gond. Csatoltam az adatlapját. A rajta lévő vez. adatlapját és a forráskódot. (A vezérlő adatlapjában a 23. oldaltól lefelé mutatja az inicializálást.) Már elég sok variációt kipróbáltam, de eddig ez a legjobb eredmény.
![]()
Megnézted az adatlapban a sorok címeit és a szerint címezve viszed ki az adatokat a kijelzőre?
Megjegyzem, hogy a kérdésednek nem sok köze van a PIC-ekhez, legközelebb erre figyelj és keress megfelelő témájú topicot!
Nem, de van egy olyan hogy kezdő cím beállítása. Ott egy 0-át küldök ki. Ami számomra azt takarja, hogy onnantól folyamatosan kellene írnia. Vagy nem jól gondolom, és soronként meg kell címeznem?
![]()
Soronként kell címezni. Tehát nem nézted meg az adatlapot! De ne offoljunk tovább!
Oks, köszönöm.
![]()
Sziasztok!
16F57-be szeretném letölteni a firmware-t. Propic2 és PICkit 2 clone programozóim vannak. Az MPLAB nem támogatja a PICkit 2-nél, a WinPic800 a Propic2-nél. Tudja valaki hogy lehet?
Megtaláltam benne, elvileg jó lesz, köszönöm!
Sziasztok!
Mezei 230V-60W páka hőfokszabályozóját tervezem megvalósítani PIC12F683-mal (illetve a próbaáramkörön 16F1936-tal), a szoftveres PWM alkalmazásával (CCP1 kimenet). Mivel mindkettőben tök egyforma a PWM generálás, ezért 1 kalap alatt kezelhető a kérdés. Maga az áramkör kész, jó (BT136/137 és MOC3041), csak a PWM nem akar sikerülni. Remélem, valamelyikőtök el tudja nekem magyarázni a PWM képzésének lényegét; mert úgy tűnik, valamit nagyon félreértek. Úgy értelmeztem a doksikat, hogy a PWM generátorban a PR2 értéke adja meg az impulzusszélességet, a CCPR1L és CCP1CON 5:4 pedig a kitöltési tényezőt. Nos, a PIC felhasználói kézikönyvben 4 MHz órajeles mikihez .63 PR2 értéket és .00-.255 CCPR1L;CCP1CON 5:4 értéket láttam megadva. ? Hogy lehet a kitöltési tényező nagyobb, mint maga az impulzusszélesség ? ![]() ![]()
Szia!
A PWM modul maximum 10 bites. Ha a T2 előosztója nincs bekapcsolva, akkor a belső órajel osztó két bitje, ha be van kapcsolva akkor az előosztó utolsó két bitje és a PR2 regiszter adja a 10 bitet. A valódi felbontás a (PR2)+1 értékének 2 alapú logaritmusa + 2. Ha a PR2 63, azaz 64 állapota van, akkor a belbontás 8 bit, azaz a szélesség 0 .. 255 között lehet. A szélesség alsó két bitjét a CCPxCON regiszter 5..4 bitjeibe, a többit a CCPxL regiszterbe kell írni.
Üdv.
Köszi a gyors választ. Szóval PR2 nem az impulzusszélesség hossza, hanem a felbontások száma? Hogyan tudom belőni akkor a PWM frekvenciáját? fg
A PR2 es a Timer eloosztoja egyuttesen hatarozzak meg a periodus idot. Az impulzus szelesseget a CCPR1L:CCP1CON adja meg.
Szia!
A Timer2 az Fosc / 4 frenvenciát kapja meg a bemenetén. Ezt a bekapcsolható előosztó 4 -gyel vagy 16 -tal tudja osztani. A PR2 regiszter a TMR2 számláló tartalmát figyeli, egyezés esetén törli a timer számlálót. Ebből adüdok ki a periódud. A CCP modul PWM módban a fent leírt módon figyeli a timer2 állapotát, ha a kitöltés nem 0, a periódus kezdetén magasba viszi a CCP modul kimenetét, az egyezéskor alacsonyba. Ha a beírt szélesség nagyobb, mint a periódus, akkor nem megy alacsony szintre a CCP modul kimenete. 0 szélesség esetén a kimenet alacsony szinten marad.
Köszi Neked is, Trudnai
Szóval ha jól értem, TMR2 kapja az 1 MHz-es jelet (a ketyegőm 4 MHz INTOSC), ha PR2= .63, akkor a PWM freki 1:1 előosztásnál 1.000.000/63=15.873 Hz lesz, 1:4-esnél 3968 Hz, 1:16-osnál pedig 992 Hz? Hogyan értelmezzem a kitöltési tényezőt? Ha CCPR1L-CCP1CON5:4 -et nézem, az szám szerint nagyobb is lehet, mint .63 (max. 255)? ![]()
A BT136 egy triak a moc meg egy optoriak, ha jól tudom. Triakkal vagy impulzus csomag szabályozást vagy fázishasítást lehet végezni ( vagy ha nagyon rosszul működik a dolog, akkor egyszerre mindkettő megtörténik ).
4MHz-es órajelnél a PWM modul kimenetén a legkisebb PWM frekvencia 245Hz. Ez túl nagy ahhoz, hogy bármelyik szabályozást meg tudd oldani. Impulzuscsomag szabályozásnál nullátmenettől nullátmenetig kell bekapcsolni a triakot n*360° időtartamra, ami n*20ms az 50Hz-es hálózaton. Ilyenkor mindig teljes hullámok mennek keresztül a meghajtott áramkörön és nem terheli a fogyasztót egyenáram. Igazából csak a bekapcsolásra kell odafigyelni, mert ha nincs kapcsolójel, a triak nullátmenetnél kikapcsol. A fázishasításnál hasonló az eljárás, tehát a pozitív és a negatív félhullámot illik egyenlő arányban hasítani. Ehhez a módszerhez 50Hz-es PWM-re volna szükség. A nullátmenet után x idővel ( x < 10ms ; 50Hz esetén ) kell egy impulzussal bekapcsolni a triakot és ha a bekapcsoló impulzus nincs jelen, akkor a nulla átmenetnél kikapcsol. Ezután újabb x idővel ismételten be kell kapcsolni, hogy mindkét félperiódus meglegyen. Mindkét megoldáshoz meg kell oldani azt, hogy a PIC érzékelje a nullaátmeneteket. Ennél sokkal egyszerűbb, ha SSR-t ( szilárdtest relét ) használsz, amiben a nullaátmeneti kapcsolás már meg van oldva. Fűtésnél csak ritka esetben érdemes másodpercesnél rövidebb ciklusidőt alkalmazni. Már csak azért sem, mert már másodperces bekapcsolások esetén is teljes hullámcsomagok kapcsolásával a szabályozási lépcső 2%-ra adódik ( 1másodpercen belül 50 hullámcsomag van. 1/50 = 0,02 ). Ahogy csökkented a ciklusidőt a lépcső mértéke egyre nő.>
Üdv.
Bevallom őszintén, csak részleteket értek a magyarázatodból; gépész vagyok, nem elektromos. Csatoltam a triakos adapter kapcsolási vázlatát, melyet a 16F1936-ossal generált PWM jelekkel (illetve van 1 teljes áramkör 230V-5V feszcsökkentővel és beforrasztott 12F683-mal pákahőszabályozás céljából). Jól értelmeztem, hogy ha a triak nem kapcsol ki/be elegendő idaig, akkor csak az egyik hullám megy át rajta, és diódaként viselkedve hullámzó egyenáramot ad a fogyasztóra? Miért rossz ez annak? fg
Sziasztok !
Elméleti kérdés: Ha muszáj néha órajelet váltanom, de szeretném, ha a timer0 azonos időnként lépjen, akkor elég ha az előosztóját simán magasabb fokozatba kapcsolom amíg magasabb órajellel üzemel a pic ? Alapban 2 -es osztóval megy most, és 8Mhz az órajel, de néha felküldeném 16Mhz re. (Pontosabban néha vissza kell venni 8Mhz re, a defektes ADC miatt) Van-e itt valami csapda ? És a következő kérdés: az tényleg lehet, hogy ha 4xPLL-t kapcsolom be, akkor 2ms mire felpörög az órajel, jól olvasom az adatlapot ? Az nekem nagyon soknak tűnik. (Ezért gondoltam, hogy csak 16 és 8Mhz között váltogatok, az megvan elvileg 2us alatt. 16F1824 )
Ha nem okoz gondot, hogy az előosztó változtatásakor néhány órajel kimarad a Timer2 léptetéséből, akkor elvileg csak ennyiből áll a dolog.
A PLL az ilyen, de ez csak bekapcsoláskor van. Muszáj a 16MHz? Biztosan nem elég a 8MHz?
Végül is elég a 8. Nekem is gyanús hogy lehet hogy csak akkor 2ms ha beindul, de ha mondjuk elkapcsolok róla szoftveresen, akkor vajon leáll ?
Vicces azért hogy mondjuk váltanék 16F684 -ről erre a 16F1824-re, mert több a ram, meg gyorsabb, csak épp errata ból meg kiderül, hogy adc defektes, pwm vezérlő szintén.
Mi van velük, mit rontottak el ami miatt órajelet kell változtatni?
Jó reggelt.
Hp41C & trudnai & Ideiglenes & Mezoas köszönöm tegnapi segítségeteket - rájöttem, mi a baj a PWM gyártásommal és az áramkörömmel. Ma hajnalban rákötöttem a 16F1936-os próbaáramköröm PWM kimenetére egy próbapanelen összedugott MJx3055-ös power mosfet-es áramköri részt, 15V-os egyenáram és 12V-os autóizzó segítségével. A fényerőt 0-100% között, fokozatmentesen tudtam szabályozni; tehét nem a PWM képzés volt a baj, hanem az egyenáram/váltakozóáram közötti különbségeket nem tudtam megfelelően értelmezni - de tegnap este / ma hajnalban megértettem ! Még 1x köszi Mindannyiótoknak ! ![]()
Helyesbítenem kell. A MOC nem csak sima optotriak, benne van a nullátmeneti logika is. Megnéztem az adatlapját és tanultam belőle.
![]() Ezután már nem javasolok a választásod helyett SSR-t, mert ez is ugyanazt tudja ( elvileg ) a nullaátmenetekkel. A pulzáló egyenáramot jól érted. Ez azért problémás, mert a rendszerben mindig van transzformátor, aminek a vasa nem egyenáramra van méretezve, illetve az egyenáramnak lehetnek galvanikus hatásai. A te esetedben nem jön szóba, de induktív fogyasztókra sem szerencsés ilyen lüktető egyenáramot engedni. A TRIAK működtetésénél azt kell tudni, hogy ha egyszer átváltott bekapcsolt állapotra ( vezet ), a továbbiakban nem kell neki a vezérlőlábra semmilyen jel, mert bekapcsolva marad. Nem is tudod kikapcsolni, csak akkor, ha a rajta átfolyó áramot megszünteted ( az alsó határérték alá csökkented ). Váltakozó hálózatnál ez a szinuszhullám nullátmeneteinél történik meg, ezért lehet ezt ott eredményesen használni. Feltételezem, hogy a MOC áramkörben levő logika megteszi azt, hogy a bejövő jelet követő nullátmenetnél fogja bekapcsolni a triakot és ha a logikai jel megszűnik, akkor úgy fejezi be a működtetést, hogy a szinuszcsomag teljes legyen ( egész számra jöjjön ki a hullámszám ). Ebből az adódik, hogy rövid vezérlőjelek hatására vagy nem megy ki teljesítmény a fogyasztódra, vagy legfeljebb egy szinuszhullám. Egy szinuszhullám időtartama 20ms ( 50Hz esetén ). Ha két szinuszhullámnyi teljesítményt akarsz a fogyasztóra küldeni, akkor a vezérlőjel hossza valahogy 20 és 40 ms között kell legyen. Ekkor gyakorlatilag 40ms időtartamra kapcsolod be a triakot. A sort lehetne folytatni tovább és oda lyukadunk ki, hogy ha 980 és 1000ms időtartamú vezérlőjelet adsz ki, akkor 50db szinuszcsomag fog kimenni a fogyasztóra, lévén a hálózati frekvencia 50Hz. Ha a bekapcsolási időt 0 és 2 másodperc között szabályozod, akkor 1 - 100db szinuszcsomagot tudsz küldeni a fogyasztóra. Ez felel meg az 1%-os lépcsőnek. A CCP modult sajnos 2 másodperces periódusidőre nem lehet beállítani, ezért ezt már szoftveresen kell megoldani. De az meg nem bonyolult. Ha CCP modult használod erre, annak a nagy kimeneti frekvenciája miatt szinte minden periódusban akad olyan helyzet, hogy a kapcsolóeszközöd átváltson és ez teljesen független lesz a szabályzási kimenetedtől. Mondhatni teljesen kaotikusan fog viselkedni a fűtési kör.
Az a baj, hogy még soha nem próbáltam "fényerő" szabályozni MOC-ot, főleg olyat, amiben van 0 átmenet kapcsoló, de egy próbát megérne, hogy ha a LED-et fényerőszabályoznánk egyenárammal, akkor milyen kimenet lenne a Triakon. Ha a dolog működik(Sima triak esetében ugye tudjuk, hogy igen, csak a MOC mit kavar azt nem...), akkor a PWM-ből egy integráló taggal fényerőszabályozható a LED. Fontos, hogy nem tiszta PWM kell, hanem integrált egyenáramot kell előállítani belőle.
Egy próbát megér, lehet, működik...
Szia!
Nemrég én is a PWM-modul számításainak nehézségeibe ütköztem. Írtam egy C-programot, azóta könnyen be tudok állítani bármilyen frekvenciát. Megkérdezi az órajelfrekvenciát, a kívánt pwm-frekvenciát, a kívánt kitöltési tényező értéket. Ezek után megadja, hogy a bekért értékekhez milyen CCPRxL, CCPCON<5:4>,PR2 értékek tartoznak a Timer2 1,4, és 16- os előosztásai mellett. Ha adott előosztásnál nem tudja megvalósítani a kívánt értékeket, akkor ki sem listázza. Az 1% és 99%-os kitöltési tényezőhöz is megadja a CCPRxL és CCPxCON<5:4> értékeit hexadecimális formában. Én ezt a programot csatolom is ide, aki akarja használja egészséggel, és ha valami problémát észlel benne, azt jelezze nekem. Nem nagy dolog, de legalább a számológép használatától megment. ![]() Köszönöm. Üdv!
Hopp, lemaradt a csatolmány.
Én ezt Excelben szoktam...
![]() Viszont a felbontás kiszámításában sokszor ellentmondást vélek felfedezni. Pl. PR2=125, TMR2 Előosztás=4, Fosc=32MHz. Fpwm=15873,016Hz. Milyen a felbontás? Mert nekem a gyakorlatban 9 bit, a számítás szerint 10,977bit. Képlet: log(Fosc/Fpwm)/log(2). A képlet becsapós, mert a felbontást a PR2 határozza meg, kiegészítve a CCP1CON 5:4 bitjeivel. A 125 7bites szám + 2 = 9bit. Ezt a hibát a te programod is tartalmazza! ![]() |
Bejelentkezés
Hirdetés |