Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
De ha Windows-ozol, akkor kiprobalhatod a WinMerge nevu programot, baromi jo grafikus kulonbseg nezegeto:
Bővebben: Link
Köszönöm a válaszokat!
Ezzel "kicsit" gyorsabban észrevenni a különbséget
Total Commander: File / Compare by content.
Sziasztok!
Egy olyan kérdésem lenne, hogy miért indul állandóan újra a PIC-em? Biztos nyilvánvaló a hiba, de nem jövök rá.
Tipikus probléma pl. a nem megfelelő tápellátás, pláne ha be van kapcsolva a Brown-Out-Reset.
A bekapcsolt watchdog is okozhat ilyen problémát. Azonban nem vagyunk távgyógyítók, ha Te nem mellékelsz sem kapcsrajzot, sem programot, akkor nehéz lesz többet segíteni.
Hiányzó MCLR felhúzó ellenállás is lehet...
Brown-out tiltva
wdt tiltva reset áramkör 1 és 10 kohm-mal szabályosan bekötve még a verem túlcsordulás reset-et is tiltottam a táp a PicKit2 (még eléggé az elején vagyok, lehet a programmal van baj, de LCD kezelésnél is, de főleg egy egyszerű RB4 interrupt-nál van jelen ami annyit csinál, hogy az RA1-et első nyomásra felhúzza következőre meg le)
Nézzétek el hogy nincs komment
#include "p18f4550.h" #include "delays.h" volatile unsigned char out, port4; #define SW1 PORTBbits.RB4 void lo_isr(void); void hi_isr(void); #pragma code high_vector_addr=0x08 void high_vector(void) { _asm GOTO hi_isr _endasm } void low_vector(void) { _asm GOTO lo_isr _endasm } #pragma code #pragma interrupt hi_isr void hi_isr(void) { Delay10KTCYx(1500); LATA^=0x01; port4=PORTB; INTCONbits.RBIF=0; } #pragma interrupt hi_isr void lo_isr(void) { } void main(void) { //------Megszakítási beállítása--------- TRISA=0x00; PORTA=0x00; RCON=0b1000000; //7.bit: Kétszintü megszakjtási mód beállítása TRISB=0x10; INTCON=0b10101000; //7.bit: A magas prioritású interrupt engedélyezése, 6.bit: alacsony prioritású interrupt tiltása, 5.bit: engerélyezi tulcsorduláskor a megszakítást stb. INTCON2=0b00000001; //3.bit: RB magas prioritású while(1) { while(SW1==1) { Delay10KTCYx(500); } while(SW1==0) { Delay10KTCYx(500); } } } Idézet: „a táp a PicKit2” És mi van a PIC-re kötve még, amit a Pickit2-nek táplálnia kéne tudni?
Ezt a GOTO-s ISR hívogatósdit megnézted assembly-ben? Jó kódot generál így a fordító? Mert nekem gyanús a dolog...
VDD és VSS bekötése rossz, remélem, hogy a valóságban nem így van!
Természetesen a rajz hibás.
A jelenség amúgy a led kaotikus villogása...
mindjárt átnézem. De ha LCD-kezelek az is újra indul csak ritkábban, és abban nincs interrupt.
Elméletileg jónk néz ki, az IT rutin elejére ugrik.
Olyan beállítási lehetőség van amivel az IT például csak felfutó élre kerül meghívásra?
Szia!
Mit is csinál a programod, ha a SW1 (azaz RB4 láb) kezdeti magas szinje után alacsonyra, majd magasra vált avagy kezdeti alacsony szintről magasra vált. A megfejtés: kilép a main függvényből. :csodalk: Egy másik programomban egy ugrást találok itt az inicializálásra aztán a main újbóli meghívása jön. A main függényben egy végtelen ciklusnak kellene lennie... Megszakítás kiszolgálásában ne használj delay függvényeket, programozott várakozásokat.
Kivettem a szoftveres pergésmentesítést a main-ből (úgy is ott a kondi SW1-nél), csak az inicializálás és egy végtelen ciklus van ahogy írod. Most úgy néz ki, hogy helyre állnak a dolgok, viszont két élváltozás van, így kétszer fut le az IT.
Jól látom az adatlapon, hogy csak az RB0-2 van lehetőség jelváltozás milyenségének a figyelésére?
Szia!
Kétféle változásfigyelési megszakítás kérésre van lehetőség: INT0 - RB0, INT1 - RB1, INT2 - RB2: Az INTCON2 6., 5., 4. bitjével állítható, hogy melyik él váltsa ki a kérést. Az RB4 .. RB7 lábakon az Interrupt on change funkció aktivizálható. Ezeknél minden változás megszakítás kérést okoz. A megszakítás kérés törléréhez ki kell olvasni a PORTB regiszter. Ha amúgyis be kell olvasni az új állapotot, akkor a program már el tudja dönteni, hogy magasra vagy alacsonyra váltott egy (vagy több) bemenet...
Köszönöm az építő jellegű gondolatokat.
Sikerült minden hibát elhárítani.
Sziasztok
Ismét a segítségeteket szeretném kérni. A timer 0 megszakításban szeretnék szoftveres pwm jelet kiadni(később többet is), és a fő programban szeretném variálni ezt a a pwm jel kitöltési tényezőt. Már hónapok óta szenvedek vele, de nem sikerül igazán. Itt az utolsó változat.
A fejlécbe a későbbi programbővitéshez szereppel ad meg még pár dolog. Köszönöm előre is a segitségetek
Nem volt idom vegignezni mindent, de a TMR0 IT-ben nem ajanlatos "printf()" hivast kezdemenyezni, mert elegge elhuzza az idot. En hasznalok ilyen PWM-et de lassu (1 Hz) periodusidovel.
Észrevettem, amikor megszakitás nélkül csináltam szoft pwm-et, de ha nem volt ott akkor is..
nagyon halványan villog a led.. és évi egyszer tér be adatér a printf-részbe.
Sziasztok!
Az volna a kérdésem, a PICKit 2 vel hogy lehet titkosítani. Azaz, ne lehessen többé kiolvasni/módosítani a beégetett programot.
Szia!
A konfigurációs szóban - szavakban be kell állítani a kódvédelmi bitet - biteket. Ld. a kontroller adatlapja és programozási adatlapja. |
Bejelentkezés
Hirdetés |