Fórum témák

» Több friss téma
Fórum » PIC18F4550
 
Témaindító: plokmi, idő: Szept 10, 2006
Témakörök:
Lapozás: OK   4 / 4
(#) l0rika válasza zenetom hozzászólására (») Ápr 29, 2013 / 1
 
Ezt a microchip oldaláról szedtem le. Viszont olyanba is beleütköztem, hogy a timer1-est ha letíltottam akkor a timer0 sem működött. A többi timert nem is próbáltam már.
Ugyanakkor ha bármilyen megszakítást használok miközben jelen van az usb-s használat is (küldés vagy fogadás usb-n keresztül), akkor az usb csatlakozásnak vége. Még ha nem is csinálok semmit az usb-vel.

Boot.zip
    
(#) zenetom válasza l0rika hozzászólására (») Ápr 29, 2013 / 2
 
Esetleg olvasd át ezt a cikksorozatot: Bővebben: Link
És ez a topic lehet jobb lenne: Bővebben: Link
(#) Hp41C válasza l0rika hozzászólására (») Ápr 29, 2013 / 2
 
Szia!
A bootloader -es fejlesztésnek vannak hátulütői:
- A fejlesztednő program (nem a bootloader) áthelyezett interrupt vektorokat használ (RM_HIGH_INTERRUPT_VECTOR és RM_LOW_INTERRUPT_VECTOR). A boot loader egy-egy ugró utasítás tesz a megszakítási vektorokhoz.
  1. /** V E C T O R  R E M A P P I N G *******************************************/
  2. #pragma code _HIGH_INTERRUPT_VECTOR = 0x000008
  3. void _high_ISR (void)
  4. {
  5.     _asm goto RM_HIGH_INTERRUPT_VECTOR _endasm
  6. }
  7.  
  8. #pragma code _LOW_INTERRUPT_VECTOR = 0x000018
  9. void _low_ISR (void)
  10. {
  11.     _asm goto RM_LOW_INTERRUPT_VECTOR _endasm
  12. }

Ha a fejlesztendő programot fordítod, a bootloadert kitörölheti a MpLab a fordítás előtt. A reset vektorhoz beteszi a saját indító kódjára való ugrást. A megszakítási vektorokhoz nem tölt kódot. A helyes működéshez minden fordítás után rá kellene tölteni a booloader -t a programra - ezzel helyreállítani a reset és a megszakítási vektorok átirányítását.

Egy megkerülő, gyorsító megoldás: A fejlesztendő programba is írd bele a megszakítás átirányítását (a fent idézett kódot). A fordítás működő kódot fordít, a megszakítások működni fognak. A végleges konfigurációhoz a fordítás után betöltött bootloader felülírja ezt a területet...
A hozzászólás módosítva: Ápr 29, 2013
(#) l0rika válasza Hp41C hozzászólására (») Ápr 29, 2013 / 1
 
Error [1111] undefined label 'RM_HIGH_INTERRUPT_VECTOR' in '_high_ISR'

Ezt a hibát írta ki. Nincs ilyen cimke
(#) Hp41C válasza l0rika hozzászólására (») Ápr 29, 2013 / 1
 
Tedd fel az egész programot.... Tényleg nincs definiálva a cimke abban, amit feltettél...
Ennyi volt a PICKit2 programjában:
  1. /** V E C T O R  R E M A P P I N G *******************************************/
  2.  
  3. extern void _startup (void);        // See c018i.c in your C18 compiler dir
  4. #pragma code _RESET_INTERRUPT_VECTOR = 0x002000
  5. void _reset (void)
  6. {
  7.     _asm goto _startup _endasm
  8. }
  9.  
  10. #pragma code _HIGH_INTERRUPT_VECTOR = 0x002008
  11. void _high_ISR (void)
  12. {
  13.     _asm
  14.         goto InterruptHandler       // jump to interrupt routine
  15.     _endasm
  16. }
  17.  
  18. #pragma code InterruptVectorLow = 0x002018
  19. void InterruptVectorLow (void)
  20. {
  21.     _asm
  22.         goto InterruptHandler       // jump to interrupt routine
  23.     _endasm
  24. }

Ezt tettem bele, hogy működjön a nyomkövetés:
  1. // To make debugging possible           // Will be overwritten by merging with bootloader
  2. #pragma code IntHigh = 0x000008
  3. void IntH(void)
  4. {
  5.     _asm
  6.         goto 0x002008       // jump to interrupt routine
  7.     _endasm
  8. }
  9.  
  10. #pragma code IntLow = 0x000018
  11. void IntL(void)
  12. {
  13.     _asm
  14.         goto 0x002018       // jump to interrupt routine
  15.     _endasm
  16. }

Az alacsony és a magas szint kiszolgálása ugyan azzal a routinnal történik a PICKit2 -ben. Persze értelemszerűen át lehet írni két kiszolgálóra is.
A hozzászólás módosítva: Ápr 29, 2013
(#) zenetom válasza Hp41C hozzászólására (») Ápr 29, 2013 / 1
 
Ha áttérek a C-re, ebbe fogok megőrülni, az összevissza ugrálás...
(#) Hp41C válasza zenetom hozzászólására (») Ápr 30, 2013 / 1
 
A void IntH(void) még egy returnt is odatesz a végére
Nem ebbe fogsz beleőrülni, hanem abba, hogy nem férsz el a program vagy adatmemóriába... Főleg a fordítók ingyenes változatával -- De erről már írtam eleget...
A hozzászólás módosítva: Ápr 30, 2013
(#) l0rika hozzászólása Ápr 30, 2013 / 1
 
Na meglett a probléma és a megoldása.
Nem a címekkel volt a baki. Zeneton kolléga rátapintott a lényegre, amikor mondta, hogy nem RETFIE-val hanem RETURN-al tér vissza. Ez azért van így mert nem megszakításként hanem sima függvényként volt értelmezve az általam megszakításnak hitt rutin. Az első projektben jól látszik, hogy a megszakítás vektorban nem átirányítom a dolgokat hanem ottan akarom elvégezni a dolgokat amit a megszakításban akarok csinálni. Oda egy az elején #pragma interrupt HighHandler megszakításvektorként definiált függvény kell, hogy legyen.
Engem az tévesztett meg, hogy a demo programban volt egy függvény, hogy High_ISR és én örömömben mindent belegyúrtam , pedig ide átirányítás kell.

Köszönöm nektek, hogy segítettetek és időt szántatok a problémám megoldására.
(#) zlanczky hozzászólása Dec 27, 2014 /
 
Sziasztok!
Nem tudok dűlőre jutni a Pic18F4550 processzor AN0-on való analóg méréssel. Ott kezdődött a probléma, hogy már sikeresen működik egy DHT11.es páratartalom mérő és egy BMP180 légnyomásmérő, de a két csip két különböző hőmérsékletet mér, 1-2 fok eltéréssel, és hát csak pozitív tartományban. Ezért, gondoltam megmérem egy LM335 IC-vel is. (Ezt már használtam PIC16f887-tel.) Na de nem működik. És nem mér akkor sem, ha egy potit teszek az LM335 helyére.
A pic konfigja alapvetően az USB működéshez van beállítva. 20MHz-es kristályról megy, 48MHz:
  1. #pragma config PLLDIV   = 5         // 20Mhz external oscillator
  2. #pragma config CPUDIV   = OSC1_PLL2  
  3. #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
  4. #pragma config FOSC     = HSPLL_HS

Attól tartok, hogy rosszul állítom be az ADCON regisztereket.
Ez a főprogram vonatkozó részlete:
  1. config1 = ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_4_TAD ;
  2.     config2 = ADC_CH0 | ADC_INT_OFF | ADC_REF_VDD_VSS ;
  3.     portconfig = ADC_2ANA ;
  4.     while(1)
  5.     {
  6.     OpenADC(config1,config2,portconfig);
  7.         Delay10TCYx( 5 ); // Delay for 50TCY
  8. //---sample and convert----
  9.     for(i=0;i<meresszam;i++)
  10.     {
  11.         mStatusLED0_on(); Delay10TCYx(1); mStatusLED0_off();
  12.             ConvertADC();
  13.             while(BusyADC());
  14.             ADCResult += (unsigned int) ReadADC();
  15.             }
  16.     CloseADC();         //turn off ADC
  17.     ADCResult /= meresszam;
  18.     voltage = (ADCResult*5.0)/1024; // convert ADC count into voltage
  19.         homerseklet = (int)(voltage+0.5);


Van valakinek valami ötlete, mit rontok el?
köszönöm!
(#) dcsabi válasza zlanczky hozzászólására (») Dec 27, 2014 /
 
Ha gondolod ASM-ben tudok küldeni egy minta filet, ami néhány analóg bemenetet kiír egy 4x20-as kijelzőre. (pár perc alatt megírom) Ehhez kellene tudni melyik portot használod a kijelzőnél... 50-100db 4550-t már elhasználtam, legalább 60-70%-ra tele volt mind, máig is jól teljesítenek, nem fagytak le...Ha a sima konfigok elegek, azt is kiolvashatod belőle...
A hozzászólás módosítva: Dec 27, 2014
(#) zlanczky válasza dcsabi hozzászólására (») Dec 27, 2014 /
 
Szia, köszönöm, szívesen megnézem a programot, hátha kiderül belőle valami. Nekem is működik a 4550 a DHT11, BMP180 dolgokkal, az AD konverter nem akar megszólalni. Biztos időzítések...
csao laz
(#) dcsabi válasza zlanczky hozzászólására (») Dec 27, 2014 /
 
Bocs a késésért, közben el kellett ugranom valahova...Köldöm, Az LCD az D-porton van. (E-RD.5, RS-RD.4, Adat D.0-D.3) Első 3 analóg bemenet olvasása.
A hozzászólás módosítva: Dec 27, 2014

4550_AN_X.ASM
    
(#) vilmosd válasza zlanczky hozzászólására (») Dec 27, 2014 /
 
Ez milyen C lenne ? Probald meg az AD-t a sajat RC oszcival berugni, es csak egy meres eredmenyet irasd ki minden matematika nelkul. Mondjuk ha feltenned az egesz programot, lehet tobbet latnank.
Következő: »»   4 / 4
Bejelentkezés

Belépés

Hirdetés
XDT.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