Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szia!
Hasonló problémába futottam bele az RS232 megszakításos kezelésénél, mint Te. A már jól működő programom az áramkör átépítése után nem működött (műkötött csak nagyon^3 lassan). Fél nap fejtörés után lett csak meg a hiba. Ha a vétel hibás, az adatlap szerint letiltottam, újraengedélyeztem az UART egséget, de nem olvastam ki az RCREG regisztert - ez töröli ugyanis a megszakítás kérést. (Itt szerintem nev teljesen világos az adatlap.) A megszakításból való visszatérés után újra és újra a megszakítási rutin futott le. Két módosítás után a program jól fut. 1. Az RCREG kiolvasása a megszakítási rutinban hibás vétel után. 2. Az RX láb magas szinre való felhúzása. Szia (hátha segít...)
És tényleg!
A poti minimumtól középig balra forgást szabályoz, középtől maximumig pedig jobbra forgást. Köszönöm!!
Bocs, de nekem nem volt problemem a soros vonal kezelesenel. En csak probaltam segiteni a szkrep kolleganak.
Udv Vili
Nem lehetséges, hogy csak újra kellene fordítani a programot az MPLAB IDE "Release" beállításával a "Debug" helyett?
Fordítás előtt állítsd be azt is, hogy az MPLAB IDE-ben a Debugger/Select Tool menüben a "None" előtt legyen pipa!
Indul a PICCOLO projekt!
Ismerkedés a PIC18 mikrovezérlőkkel (Egyéni tanuláshoz - kezdőknek) Szabadkozással kell kezdenem: bocs, de egyelőre a nyitólapon kívül csak egyetlen fejezet készült még el belőle, s a menüben még rengeteg az üres link. Bevezetés a PIC18 assembly programozásába A fejezet tartalma: * A programtároló memória szervezése * Az adattároló memória szervezése * EEPROM adatmemória * A CPU regiszterei * Adatmozgató utasítások * Indirekt címzés * Matematikai utasítások * A GOTO utasítás * Egy egyszerű program anatómiája * Mennyi idő alatt fut le a programunk? Folyt. köv. - legalábbis nagyon remélem. Bővebben: http://esca.atomki.hu/PIC18
Köszönjük ! Szép munka. Épp tervezek a 12F és 16F ek után szépen fokozatosan áttérni 18 -ra. És én is pont azt a két tipust (PIC18F14K50 és a PIC18F4550) szereztem be.
Egyszer csak ezt kezdte el kiírni az mplab.
Resetting Programming Target (2009.08.23. 18:39:04) PIC24FJ128GA008 found (Rev 0x3002) Erasing Target Programming Program Memory (0x0 - 0x2FF) PE Error: Using ICSP Verifying Program Memory (0x0 - 0x2FF) PE Error: Using ICSP PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x40200 - Value Read 0x0) PICkit 2 Ready Ha jól vettem ki a leírásból, akkor ez a kondi hiánya lenne, de ott van. Mondjuk egy sima elko, ez lehet gond? Ja és kiolvasni tudja.
Lehet gond a sima elkó is, mert annak nagy az ESR értéke. Ha nincs SMD kerámiád, forrassz oda ideiglenesen egy drótlábas példányt, természetesen minél rövidebb lábakkal.
Most jutott eszembe, hogy a Vdd lábon is van tápszűrő kerámiakondenzátor?
Mit értesz drótlábas alatt?
A következő nyákra ezeket már rátervezem, de ez próba panelnek lett készítve smd helyek nincsenek rajta
Nincs. A 18F-eknél nem volt ezzel gond. Mekkorát rakjak rájuk (mert van belőle 3 is)
Ilyen
Próbapanelre ugyanúgy kell kondenzátor, mint a végleges áramkörbe. A kondenzátor nem dísz, hanem működési feltétel...
De ez sima kondi, a tápra ilyet irnak, de a leírásban a vcap-on meg elko volt. Ez nem gond? Ilyenem van kilószámra csak smd alkatrészeim nincsenek. Hálistennek teliföldes, csak ki kell fúrnom a táplábak mellett, csak a lötstoppot kell lekaparnom (ami azért nem egyszerű, mert be is égettem, kemény mint a fene)
Még egy dolgot áruljatok el. Csinálok egy stabil 3.3 v-ot, telerakva szűrőkondikkal, mi a fenének kell a pic táplábaira szűrőkondi?
Az adatlapban írja, hogy low esr kondenzátor kell a VCap lábra. A kondenzátor az kondenzátor, csak egyes paramétereik különböznek. A kerámia az egyik legjobb kondenzátortipus, de sajnos a kapacitás/térfogat aránya elég rossz. Ezért kell kombinálni elkóval, aminek jó a kapacitás/térfogat aránya, viszont egyéb paraméterei meg elég siralmasak.
Hello
Most 32768Hz-es kvarccal próbálkoztam, de rájöttem, hogy a hosszú program miatt problémák lesznek. Ezért gondoltam főoszcillátornak egy több MHz-es kvarcot használni, és külön rákötni a pic-re még a 32768Hz-eset, de ha jól tudom akkor timer1 ezzel a kvarccal is legkevesebb 1 megszakítás/ 2 másodperc tud adni. Mindenképp másodpercenként több megszakítást szeretnék kapni, mert megszakításkor akarom léptetni a LED kijelző multiplexelését. Már arra is gondoltam, hogy egy 8 lábú pic fog megszakítást adni az fő pic-nek, de szerintem cd4060-al ez egyszerűbb. De pontos? Üdv.
Mondok egy példát: vegyünk 4 MHz-es oszcillátort, akkor a léptető jel 1 MHz-es. Ez 1:1-es osztásnál mivel a TMR1 65536 egységenként ad megszakítást 65,536 ms-ként ad.
1s/65,536ms=15,258... azaz 15 teljes és még 0,258... rész kell! A 0,258...*65536=16960. Tehát a TMR1-nek 15-ször kell túlcsordulnia + meg kell számolnia 16960 impulzust! Ezt úgy is lehet, hogy "előretekerem" 65536-16960=48576-ra és innen indítva mikor 16-szor túlcsordul, akkor pont eltelt 1 másodperc ( és közben még a MUX is működhet, ha gyorsabban szaggatod, de ezt már rád bízom!)! A pontosság természetesen a kvarctól függ, de szerintem ez kvarccal elég pontos lesz emberi méretekben! A számolást nem ellenőriztem, remélem nem rontottam el! Steve Idézet: „Csinálok egy stabil 3.3 v-ot, telerakva szűrőkondikkal, mi a fenének kell a pic táplábaira szűrőkondi?” Az nem szűrőkondenzátor, hanem "decoupling capacitor"! A digitális áramkörök szintátmeneteinél keletkező nanoszekundumos tüskéket kell "eltüntetnie". Ez csak helyileg és kis induktivitású kapacitással kezelhető. PIC24-nél Vcap-nál a 10 µF-os csepptantál nekem bevált. Vdd-re, Avdd-re pedig 100 nF-os kerámia, vagy csepptantál.
Köszi. Mondjuk csepptantál kondiról most hallottam először, de ez persze az Én hiányosságom. Este elnézek a boltba és megveszem a kondikat.
Pedig ezen a képen is láthattál néhányat....
Hát ezt a képet szerintem Én most látom először, de este elbattyogok az alkatrészesboltba, és veszek pár darabot.
Sziasztok.
segítséget szeretnék kérni.Még csak most tanulgatom a pic-programozást. Nagyon kezdő szinten vagyok. Írtam egy progit ami egy gombbal be-és kikapcsol ledeket. Működik is csak annyi baja van, hogy 2-3 másodperc múlva 3-dik és 5-dik ledem elkezd világítan. Valaki átnézné nekem, hogy mit rontottam el?[code=c]
Igen, a 32768Hz fő órajelnek használva elég hamar gondot okozhat, főleg, ha nem assemblyben programozol. Ténlyeg érdemes emiatt MHz-es nagyságrendű CPU órajelet alkalmazni.
Amiket írtál, azok úgy vannak, 32768Hz-es órakvarccal járatva a timer1-et 2 másodpercenként fogsz kapni megszakítást "szabadonfutó" módban, azaz amikor a timer1 regisztereit a bekövetkezett megszakításban egyáltalán nem piszkálod. Ha viszont újratöltöd a megszakításban, akkor elérheted azt, hogy nem 65536, hanem akármennyi impulzus megszámolása után kapj újabb interruptot. A timer1 regiszterek újratöltéséről írtam korábban, hogy figyelni kell pár apróságra, különben elveszhetnek megszámlálandó impulzusok, amik az óra késését okozzák. Egyébként nyílván a kvarctól (és az esetleges trimmeléstől) függ a pontosság. Az órakvarcokkal nekem jó tapasztalataim vannak, elég pontosan járnak róluk az órák, külön trimmelés nélkül is. Egyébként el kell gondolkozni azon, hogy fontos-e minden másodpercben növelni az időt, vagy esetleg elég 2 másodpercenként. Ha nem csinálsz másodperckijelzést, akkor szerintem teljesen felesleges bonyolítani a dolgokat, hagyni kell a timer1-et szabadon futni, és minden megszakításkor 2 másodperccel növelni az időt. A kijelző multiplexelését pedig (gondolatban legalábbis) függetleníteni kellene az idő mérésétől. Annak ugyanis nem kritikus a pontossága, teljesen mindegy, hogy 4 digitnél mondjuk másodpercenként 190-szer vagy 210-szer esik be egy megszakítás a névlegesen kiszámolt 200 helyett. Tehát ennek az ütemezését lehet szinkronizálni egy sokkal pontatlanabb órajelhez is, pl. a PIC belső oszcillátorához. Az kicsit komolyabb fejtörést okozna, ha nagyon fontos lenne a rendkívül alacsony fogyasztás, mert akkor kénytelen lennél az alvó állapotban is működőképes timer1-hez, így a 32768Hz-es órakvarcos oszcillátorhoz szinkronizálni az egész működést és ott már tényleg piszkálni kell a megszakításban a timer1 regisztereket. De mivel azt írtad, hogy LED kijelzős lesz az óra, a kijelző által felvett egy-két száz mA mellett teljesen eltörpül a PIC aktív állapotbeli 5-10 mA fogyasztása, így nem sok értelme lenne azt altatni az inaktív időben. Ja, egyébként hogy a konkrét kérdésedre is válaszoljak: a CD4060-nal felépített időalap is annyira lesz pontos, amennyire a felhasznált kvarc vagy rezonátor pontos. Én építettem valamikor nagyon régen órakvarcból, egy CD4060-ból és talán 7474-esből 1Hz-es időalapot frekimérőhöz, az elég pontosnak tűnt, de mint mondtam, az órakvarcok tapasztalatom szerint tényleg használható pontosságúak.
És még egy gondolat: ha van MHz-es nagyságrendű, pontos kvarcod, akkor természetesen szinkronizálhatod az órát, a kijelzést, és a programfutást is ehhez, mint fő oszcillátorhoz. Én valami túrkálóban vettem egyszer olcsón egy marék "12.000000MHz" feliratút, azok elég jónak tűnnek, mindenesetre sokkal pontosabban jár egy óra az ilyen kvarcomról, mint a szintén marékszámra otthon lévő (régi RS232 terminálokból kitermelt) "11MHz"-esekkel (de egyik sem összehasonlítható a 32768Hz-es órakvarcokról járatott órák pontosságával).
Tehát pl. egy 12MHz-es kvarc esetén a timer2-t felhasználva a következőt teheted: timer2 prescalert 1:16-ra, PR2-t 74-re állítod, ami 2500 timer2 túlcsordulást fog okozni másodpercenként. A postscalerrel lehet még játszani, 10-zel osztva pont 250 megszakítást fogsz kapni másodpercenként. A megszakításban már szoftverből, számlálókkal lehet megoldani, hogy minden 250-ediknél növeld az időt. A multiplex vezérlése akár mehet is a 250Hz-es ütemjel alapján.
A harmadik sor megjegyzése nem jó, oda akkor fut a program, ha az RA0=0! Ez az egyik probléma, a másik, hogy a W-nek nem adsz kezdő értéket, csak akkor ha RA0=0. Ettől mindenféle maradék értékek bejöhetnek a DELAY rutinból, vagy egy esetleges nem lekezelt megszakításból.
"
CALL DELAY BTFSS PORTA,0 MOVLW B'00000000' ;ha 1-es akkor kikapcsolom a LED-eket MOVWF PORTD " Szerintem(asm-ben nem programozok), a delay rutinod után lesz vmi w-be. BTFSS Skip if set, tehát ha 1, akkor szerintem a delay által bennhagyott W-t teszi ki portd-re. CALL DELAY BTFSS PORTA,0 MOVLW B'00000000' ;ha 1-es akkor kikapcsolom a LED-eket MOVLW B'00011111' ;egyébként be MOVWF PORTD A másik részen is így átírni.
Ezt nem értem, én úgy tudtam hogy minél magasabb a freki, annál pontosabb a quartz. Mivel ugye le kell osztanunk jócskán a quartz órajelét, így az esetleges kis hibát is jócskán leosztjuk.
Akkor jól gondoltam
A kód gombbal lehet úgy betenni a kódot?(Ezt jól megaszondtam ) |
Bejelentkezés
Hirdetés |