Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A linker állományt is módosítani kell, hogy a boot terület PROTECTED legyen. Ha megnézed a honlapomon a PICula projektet és letöltöd a szoftver segédletét (code_examples.zip), akkor abban meglátod, hogy én hogy csináltam.
Én is az AN1310 bootloadert használom, de csak 0x800-tól kezdve helyezem el az alkalmazói programokat, mert ekkora a boot blokk mérete, s így tudom azt írásvédetté tenni.
Működik most már a bootlopaderrel, mégegyszer köszönöm. Viszont akadt még egy problémám. Kipróbáltam ,hogy az interrupt is működik-e megfelelően, de a timer interrupt és az int0 is csak egyszer hajtódik végre. A probléma amiatt van szerintem, mert, ha megszakítás érkezik, elugrik a 0x08-as címre,
onnan átugrik a 0x408-as címre, végrehajtja az interruptot, de csak sima return utasítással tér vissza a főprogramba. Legalábbis ezt láttam a disassembly-listában. Ez azt eredményezi, hogy az INTCON regiszterben a GIE bit nem állítódik vissza 1-be, mert azt a retfie utasítás tenné meg. Most úgy működik rendesen, ha az ISR rutin végén mindig 1-be állítom a GIE bitet. Azt nem tudom, hogy korrektnek számít-e ez a megoldás? Te nem akadtál ilyen problémába?
Üdv mindenki! Segítséget szeretnék kérni! Van nekem egy PIC18F458-as mikrovezérlőm. Sajnos nincs PIC programozóm. Esetleg valaki elvállalné, hogy beleír nekem egy általam mellékelt HEX fájlt ha elküldöm postán a cuccot? Egy OP-COM eszközbe van beleszerelbe az IC. Van egy leírásom miszerint simán lehet PICkit2-vel pl. a helyén is égetni. Nem ingyen kérném, de reális áron. Köszi előre is mindenki! PÜ-t várok! Üdv!
1. Az átirányított RESET és interrupt vektorokban egy ugróutasítást kell elhelyezni:
2. A programmegszakítást kiszolgáló eljárásoknál jelezni kell, hogy ezek nem közönséges eljárások (#pragma interrupt, vagy #pragma interruptlow), ekkor nem return, hanem retfie fast vagy retfie kerül az eljárás végére.
Idézet: Így semmiképp sem korrekt, mert elmarad a futó program állapotának (a létfontosságú regiszterek tartalmának) mentése és visszaállítása. „Most úgy működik rendesen, ha az ISR rutin végén mindig 1-be állítom a GIE bitet. Azt nem tudom, hogy korrektnek számít-e ez a megoldás?”
Köszönöm, ezt az előfordító utasítást hagytam le:
#pragma interrupt. De most már teljesen jó.
Sziasztok! Most kezdtem a PIC programozást, és akadt egy kis gondom a megszakításkezelésse, egészpontosan egy PIC 16F819-es PIC-et szeretnék használni egy nyolc LED-es fényeffektben, és itt az lenne a feladat, hogy mikor az RB0-ra jön egy lefutóél a nyomógombról, akkor kérjen egy megszakítást, és váltson effektet. Minden megy frankón, de a megszakítás nem hajlandó működni, nem tudom mit rontottam el, segítsetek légyszíves, ha valaki leírná erre a picre azt, hogy hogyan kezeljem a megszakítást az jó lenne. Előre is köszönöm
Hali
Esetleg ha mellekelned a Te altalad irt progit, akkor lehet hogy gyorsabban segithetnenk. Csa Vili
Köszönöm a segítséget, ez nem a fényeffekt progi, de a megszakításnak itt is mennie kellene. Nem tudom mi lehet a gond, nem vagyok nagy spieler ebben, de szeretnék egszer majd az lenni .
Szia!
Rögtön, első ránézésre két hiba: - A megszakítási rutinnak a 0x0004 címen kell kezdődnie, - A megszakítási rutin elején a W és a STATUS regiszterek értékét menteni kell, a visszatérés előtt pedig visszaállítani. A feladattól függően más regiszterek mentése is szükséges lehet : PCLATH, FSR stb...
Köszönöm, átírom a címet, és mentem a mentendőket, és próbálkozom úgy.
Nagyon szépen köszönöm működik most már, még 1 x hálás köszönetem.
Még annyit hozzátennék, hogy néhány helyen láttam hibásan a W és STATUS elmentés MOVF vagy MOVFW utasítással megoldva. Ezek használata elrontja a mentést, mivel felülírhatja a STATUS bitjeit
Itt találsz egy helyes algoritmust Ahova mentesz, az legyen olyan helyen, ami minden bankból elérhető, pl 16f628-on a 0x70-0x7F címeken.
Ha pedig nincs ilyen hely (16F873), akkor minden bankban fenn kell tartani egy helyet a W mentésére (a címének alsó 7 bitje egyezen meg). A W mentése után STATUS a W -be menthető (swapf), a STATUS regiszter bank kiválasztó bitjei már megváltoztathatók. A többi mentésnek már elég egy bankban foglalni. Visszaállításnál a STATUS visszaállítása a bank kiválasztást is visszaállítja. Ezután kétszeri swapf segítségével a W tartalma visszaállítható, abból a bankból fogja venni az értéket, amiből mentette.
Sok 18F nem jól kezeli a movff, movsf, movss utasítást ha a cél regiszter a WREG, STATUS, BSR. Kerüljük (a sok adatlapban ajánlott) movff utasításokkal történő mentést és visszaállítást. A movff, movsf, movss utasítást ne használjuk a megszakítási regiszterek módosítására sem, ha bármelyik megszakítás engedélyezett. (A movsf, movss utasításokat ld. Extended Instruction Set leírásában)
Sziasztok. A kérdés a következő dspic pwm modult boncolgatom sikerült életre keltenem a regiszterek megfelelő beállításaival, (adatlap alapján) Viszont szimulálás közben azt tapasztaltam, hogy folyamatos run módban jól végzi a dolgát a megfelelő regiszterek törlődnek számólnak, de stepinto-nál mikor egyenként léptetem nem történnek meg a megfelelő történetek. Konkrétan:
[/code] #WORD PTCON = 0x1c0 #WORD PWMCON1 = 0x1c8 #WORD OVDCON = 0x1d4 #WORD PTPER = 0x1c4 #WORD PDC1 = 0x1d6 void main() { PTCON=0b1000000000000000; PWMCON1=0b0000111111111111; OVDCON=0b1111111111111111; PTPER=100; PDC1=50; while(1) {} }[code=c] A ptmr számláló el kezd számólni, mikor eléri a ptper-ben beállított értéket nullázódik a ptmr és újra számol. Step módban nem nullázódik mikor eléri a ptper-ben beállított értéket hanem számol felfelé tovább. Run módban tökéletesen működik. Ez zavar mert jó lenne látnom mikor mi hogyan történik. Válaszotokat köszönöm.
Pfff hiba oka a Ptcon regiszterben Pten bitet később kel setelni, előtte kell feltölteni a számláláshoz a regisztereket.Így már a legelső elején is teszi a dolgát.
Sziasztok!
20% engedményes év végi akció a ChipC@d -nál a Microchip fejlesztőeszközökre (január 7-ig)...
Sziasztok!
Eddigiekben már kommunikáltam PIC és PC között soros porton keresztül egy egyszerű terminál progival. Itt karakteres parancsokkal vezéreltem a PIC - et. Kicsit szeretnék megismerkedni a grafikus megoldásokkal is. Tehát például az '1' -es karakter elküldése helyett egy grafikus nyomógombot kellene megnyomni. Milyen programot ajánlotok?
A leértékelt cuccok között "jóárúsították" a DM330013 - Microstick for dsPIC33F and PIC24H kártyát is, ami a 16 bites adatúttal rendelkező mikrovezérlőkkel való ismerkedésre jól használható, s beépített programozót/debuggert is tartalmaz.
Akit érdekel, használhatja hozzá a honlapomon található PIC-kwik projekt c. tananyagot és a mintapéldákat.
Valaki találkozott már azzal a problémával, hogy MPLAB "PKWarn0003: Unexpected device ID"-t ír ki, a Pickit 2.61 meg simán felismeri a PIC-et (16F819). Reggel még az MPLAB is felismerte. Felprogramoztam és utána írta ki, hogy nem ismeri fel a PIC-et. Több PIC-kel is kipróbáltam csak a két darab 819-est nem ismeri fel, de csak azután, hogy felprogramoztam... Pickit 2.61-gyel simán tudom programozni. Természetesen semmi nincs a PIC-re kötve programozás közben. A céláramkörben egy RGB LED van a PIC RB4, RB5, RB7 lábaira kötve három ellenállással és RB6 a katódjára. Működik is a programom rendesen, csak MPLAB-ban nem ismeri már fel a PIC-et... Próbáltam már más USB-ben is és a gépet is újraindítottam, hátha... de nem jött semmilyen csoda
Halai
Gondolom belso RC osci. Hasznald a PK2 sajat progijat, ne az MPLAB-ot a programozashoz. Csa Vili
Igen belső. Igen, de az MPLAB sokkal kényelmesebb... és kb egy éve ezzel programozom a 819eimet és ilyen soha nem történt... Illetve volt, hogy kiírta már, de akkor egy progi újraindítás mindig segített... Már az sem.
Szia!
A kontrollert belső órajelről járatod, PGC vagy PGD lábat kimenetnek vagy Timer1 oszcillátornak, stb. használod, és a kimenetet elég hamar beállítod. - A PICKit2 saját programja, Vpp first programming entry módszer - a Vdd -t a PICKit2 -nek kell adnia. - A program elejéte tegyél be néhány ms késleltetést, mielőtt a portokat kimenetté, oszcillátornak állítod be.
Isten vagy! Na ezt a hozzászólást el is mentettem Látja mindkét progi és írni, olvasni is lehet. Köszi a gyors segítséget!
Sziaztok !
Most kezdtem Pic-kel foglalkozni. Azt szeretném kérdezi,hogy a Pic kit 2 tudja-e kezelni a Pic 18f45k20 controllert ami a Picklit 3 debug expresz panelon van?
Igen kezeli.
Sziasztok.
Pic 16f628 RB6-RB7 lábakon egy 62768Hz-es rezonátor a két kondijával és a következő beállitásokkal: T1CON.T1OSCEN = 1 T1CON.T1CKPS1 = 0 T1CON.T1CKPS0 = 0 T1CON.TMR1CS = 1 T1CON.TMR1ON = 1 INTCON.GIE = 1 PIE1.TMR1IE = 1 Csereltem már a rezonátort, de probléma változatlan megszakitás (PIR1.TMR1IF) kb. 3-4 sec-enként van és a T1CON.T1CKPS1 - T1CKPS0 hiába valtoztatom a megszakitás ugyanúgy "késik". A RB6-RB7 lábakon 32,8KHz-et mértem. Mit rontottam el? Idézet: „Pic 16f628 RB6-RB7 lábakon egy 62768Hz-es rezonátor” ... Idézet: „A RB6-RB7 lábakon 32,8KHz-et mértem.” Gondolom 32768Hz-es rezonatort akartal irni? Az amugy biztos, hogy rezonator? Nem kristaly? A megszakitasban mit csinasz amugy?
Szia!
A timer1 16 bites, 65536 -tal oszt (ha az előosztó 1), tehát 2 s -ként kell megszakítást kérnie. Az egy másodperces megszakításhoz a TMR1H 7. bitjét egybe kell állítani a timer beállításánál és a megszakítási rutinjában. A timer1 írásánál sok kontrollerben probláma van ld.: Timer1 modul errata. |
Bejelentkezés
Hirdetés |