Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1126 / 1318
(#) Gyimate válasza Kisvé hozzászólására (») Jún 17, 2013 /
 
Ha bepipálok bármit is még rosszabbodik a helyzet. Minden optimalizáció nélkül a kód 43%-ot foglal (367h-t a 800-ból), a 34!-ot már úgy értem el, hogy játszadoztam a beállításokkal, megjegyzem, hogy a project/settings/compiler-ben az Operation mode PRO-ra van állítva.
Megjegyzem, hogy PIC18-on is hasonló volt az eredmény, ha jól emlékszem annak az adatlapjában pedig már benne is van hogy C-re van optimalizálva a PIC, bár javítsatok ki ha tévedek.
A hozzászólás módosítva: Jún 17, 2013
(#) rubosbence hozzászólása Jún 17, 2013 /
 
Üdv!
Az itt olvasottak alapján még érdemes várni az MPLAB X kipróbálásával.
Az lenne a tiszteletteljes kérdésem, hogy a meglévő C18-as fordító integrálható MPLAB X-be?
(#) sirály12 válasza rubosbence hozzászólására (») Jún 18, 2013 /
 
Annyira nem rosz az MplabX, az igaz viszont, hogy jó gép kell alá. Jó proci sok ram.
Ha nem vagy profi, aki egész nap azon rugózik, akkor teljesen vállalható. Legalábbis nekem még eddig szépen tette a dolgát, persze nem hibátlan, de melyik program az.
(#) rubosbence válasza sirály12 hozzászólására (») Jún 18, 2013 /
 
És a meglévő C18-as fordító integrálása az MPLABX-be lehetséges?
(#) sirály12 válasza rubosbence hozzászólására (») Jún 18, 2013 /
 
Megmondom őszintén nem tudom, mert csak xc32-vel használom.
(#) watt válasza rubosbence hozzászólására (») Jún 18, 2013 /
 
Nemrég azt írták, hogy igen. Én még nem próbáltam, de ha az XC8 megy MPLAB 8.xx alatt, akkor fordítva is mennie kell.
(#) rubosbence hozzászólása Jún 18, 2013 /
 
Na feltelepítettem, simán megy File-> Import ->MPLAB IDE v8 Project.
Még az is lehet, hogy szép lassan összebarátkozok vele.
A hozzászólás módosítva: Jún 18, 2013
(#) pajti2 hozzászólása Jún 18, 2013 /
 
Beleütköztem egy pic endianess esetbe, és bár tudok alkalmazkodni a tapasztaltakhoz, jó lenne tudnom, mégis mit gondoljak az egészről?

Pic32 endianess: http://support2.microchip.com/KBSearch/KB_StdProb.aspx?ID=SQ6UJ9A00XYOS

C32 fordító által fordított program részlet:
  1. union bx {
  2.   unsigned char cx[4];
  3.   unsigned i;};
  4.  
  5.   union bx mx;
  6.   mx.i=0x01ul;
  7.  
  8.   mLED_1_On();
  9.   if (mx.cx[0]==0x01u) mLED_3_On();
  10.   if (mx.cx[3]==0x01u) mLED_2_On();


Eredmény: Led 1 + Led 3 világítanak.

Mit felejtettem ki a számításból?
(#) _vl_ válasza pajti2 hozzászólására (») Jún 18, 2013 /
 
Mi a kérdés? Ennek pont így kell mennie, PC-n is pont ugyanezt csinálja.
(#) pajti2 hozzászólása Jún 18, 2013 /
 
Törölve. Bocsi. A jelek szerint megártott nekem a hőmérséklet.
A hozzászólás módosítva: Jún 18, 2013
(#) The_Saint hozzászólása Jún 19, 2013 /
 
Üdv!

ismét csak bajom van azzal a PIC18F458-al. Íme:
A programja szerint egy funkcióbeállítást elmentenék eepromba, hogy kikapcs esetén is megőrizze a kívánt beállítást. Tulképp egyetlen bájtról van szó. Az írás tökéletesen működik. A visszaolvasás viszont eléggé hektikus. Bekapcsolás után nem olvassa az eepromot egészen addig, míg egy újabb írást rá nem küldök, vaaagy PICkit3-mal ki nem olvastatom a tartalmat. Ezután gond nélkül működik minden...írás is és olvasás is.
Segítséget illetve magyarázatot kérnék, ha tud valaki, mert már kifutottam az ötletekből.... Előre is köszönöm!

Üdv
TheSaint
(#) The_Saint válasza The_Saint hozzászólására (») Jún 19, 2013 /
 
Hát...meg van más bajom is.... most, hogy nő a program hossza, az ide oda ugráokat is rendbe kéne tenni.... de nem tudom, hogy kell. Ebben is kérném a segítségeteket! Köszi!

Üdv
TheSaint
(#) kissi válasza The_Saint hozzászólására (») Jún 19, 2013 /
 
Szia!
18-asnál nem igazán van gond az ugrásokkal ( GOTO-nál, viszont BRA-nál gond lehet ! ) ! Az EEPROM írás, olvasás benne szokott lenni a doksiban, ha azt átnézve alkalmazod ( találtam már hibát korábban valamelyik adatlapban, elfelejtenek valami bitet vizsgálni és akkor nem biztos, hogy jó ! ), akkor működnie kell ( írás kész ellenőrzése pl.ha elmarad az kikapcs vagy újraírás előtt ... )
(#) Hp41C válasza kissi hozzászólására (») Jún 19, 2013 /
 
A legnagyobb badarság a példákban, hogy feltétel nélkül engedélyezik a megszakítást. Előbb el kell tárolni, hogy engedélyezett volt-e a megszakítás, aztán tiltani a megszakításokat a kulcs beírásának idejére, vegül engedélyezni a megszakítást, ha engedélyezve volt. Ezekutén lehet várakozni a beírás végére... 18F prioritásos megszakítás esetén mind a két szintet külön kell tiltani és engedélyezni, ha ki volt használva mindkettő.
(#) kissi válasza Hp41C hozzászólására (») Jún 19, 2013 /
 
Idézet:
„A legnagyobb badarság a példákban, hogy feltétel nélkül engedélyezik a megszakítást.”
Ez igaz, de szerintem nem okozhatja az ő problémáját, mert neki az induláskor okoz gondot a kiolvasás ( az írás a leírása szerint sikerült! ) !
(#) The_Saint válasza kissi hozzászólására (») Jún 19, 2013 /
 
hmm...hát úgy néz ki, hogy nálam van. Eddig arra gyanakodtam, hogy egy-egy szubrutin túl messze van a hívástól a program memóriában, de most már 20 sorral arrébre sem tud úgy ugrani, hogy össze ne zavarodna...valamit csak nem csinálok jól. Pl, sajnos fogalmam sincs, hogy a BRA mit is tud csinálni valójában....

A másik kérdés, hogy a TBLRD-t értem, hogy mire való, de a kérdésem, hogy hogyan töltöm fel az adatokat, mert minden egyes fordítás az MPLAB-ban kitörli a beírt dolgokat.

Tudom, most mindenkinek az a kérdése, hogy minek programozok 18F-et, ha ennyire nehezen megy, de fejlődni muszáj, így meg lehet tanulni..
Válaszaitokat előre is köszi!
Üdv
TheSaint
(#) kissi válasza The_Saint hozzászólására (») Jún 19, 2013 /
 
Használd a szimulátort ( nem keveset, sokat ! ), ott kísérletezz és látod, hogy mi történik minden egyes bittel ! Vesd össze, hogy mit vártál, mi nem történik úgy, ahogy gondolod!
Ne add fel a "csüggedést" !
A hozzászólás módosítva: Jún 19, 2013
(#) The_Saint válasza kissi hozzászólására (») Jún 19, 2013 /
 
Igen, az írás rendben és végül ki is olvassa, de mikor megkapja a tápfeszt akkor az első írásig nem olvas, csak utána...
De már próbáltam azt is írok egy kamu adatot a 0xFF-re indulás után....de sajnos ekkor sem olvassa ki azt ami nekem kellene.
Viszont ha ugyanarra a helyre írok akkor ír is és utána olvas is szépen bármikor!
(#) kissi válasza The_Saint hozzászólására (») Jún 19, 2013 /
 
Nem elfelejtesz valami regisztert beállítani, amit az írásnál megteszel ?!
(#) Hp41C válasza kissi hozzászólására (») Jún 19, 2013 /
 
Idézet:
„A másik kérdés, hogy a TBLRD-t értem, hogy mire való, de a kérdésem, hogy hogyan töltöm fel az adatokat, mert minden egyes fordítás az MPLAB-ban kitörli a beírt dolgokat.”

A TBLRD utasítással nemlehet az adat EEPROM -ot olvasni.

- Az MpLab -bal olvasd be a kontroller tartalmát, fordítsd le a forrást, aztán programozz. Ehhez be kell állítani a project tulajdonságái között, hogy ne törölje a proghram memóriát fordítás előtt.
- A hex -et más programmal (PICKit2 saját) programozd be a PIC -be és tiltsd le az adat memória írását.
A hozzászólás módosítva: Jún 19, 2013
(#) kissi válasza Hp41C hozzászólására (») Jún 19, 2013 /
 
Ez gondolom a "Szent"-nek ment ?!
(#) The_Saint válasza Hp41C hozzászólására (») Jún 19, 2013 /
 
Igen, tudom. A TBLRD nem eeprom olvasásra való.
Viszont amire való azt nem tudom, hogyan töltsem fel adattal egyszer és mindenkorra...
(#) Hp41C válasza The_Saint hozzászólására (») Jún 19, 2013 /
 
Táblázat létrehozása abszolút kódban:
  1. ORG     0xED00           ; Start For Char table
  2. CharTab
  3.   DB  0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00    ; " "
  4.   DB  0x00 , 0x00 , 0x79 , 0x00 , 0x00 , 0x00    ; "!"
  5.   DB  0x00 , 0x70 , 0x00 , 0x70 , 0x00 , 0x00    ; """
  6.  
  7. ...
  8. CharTable
  9.                 movlw   upper(CharTab)
  10.                 movwf   TBLPTRU,ACCESS          ; Store it in TBLPTR upper
  11.                 movlw   high(CharTab)
  12.                 addwf   index_high,w,ACCESS     ; Get high byte
  13.                 movwf   TBLPTRH,ACCESS          ; Store it in TBLPTR high
  14.                 movff   BCD,TBLPTRL                     ; Copy low byte to TBLPTR low
  15.                 tblrd*                                          ; Get next character raw
  16.                 movf    TABLAT,w,ACCESS         ; Copy to W
A hozzászólás módosítva: Jún 19, 2013
(#) The_Saint válasza Hp41C hozzászólására (») Jún 20, 2013 /
 
Köszi, ez már kezd jó lenni. Lassan annyi sörrel jövök Neked, hogy nem tudjuk leinni egy ültő helyünkben

De sajnos még van egy kérdésem: van a program emória elején az a subrutin, ami kiküld egy karaktert vagy instrukciót az LCD-re. Ha ezt "távolabbról" hívom, akkor összekeveredik progi és elkezd mátrix kódot kíírni. A "távolabb" az azt jelenti, hogy pl a program memória közepén van egy call, szóval jó nagyot kell ugrania. Egyszer már megoldottuk ezt a problémát, de az 16F-en volt. Úgy tűnik mintha a 18F-nél máshogy működne... kérdés hogy hogyan?
(#) Hp41C válasza The_Saint hozzászólására (») Jún 20, 2013 /
 
Szia!
A call 20 bites címet kezel (a teljes címtartomány), a rcall csak 11 bitet kezel (2k) (PCL 0. bitje mindig 0). A goto, bra, feltétetes bra, call, rcall mindig közvetlenül írja a PC -t, nem kell előkészíteni a PCLATHU, PCLATH regisztereket.
Ha call -t használtál, akkor bárhol lehet a memóriában az eljárás. Lehet, hogy túllépted a 31 stack szintet?
(#) The_Saint válasza Hp41C hozzászólására (») Jún 20, 2013 /
 
Szia, nem hiszem, max 5-6 mélységben járhatok. Messze van még a 31, erre figyeltem. Mind1, most elvagyok egy darabig a menu rendszerrel.... ha majd nem megy, akkor még jelenkzem! Köszi és további szép napot!
(#) The_Saint válasza Hp41C hozzászólására (») Jún 20, 2013 /
 
Szia! Hát még1x köszi
A TBLRD használatával megoldódott minden propléma, legalábbis eddig. Nem is értem, hogy hogyan, de az EEPROM olvasás is.... További szép napot!
(#) MM hozzászólása Júl 1, 2013 /
 
Üdv mesterek!
C18 al szívok mint a torkos borz.. USART.. kiküldeni jól kiküld, karaktert, sztringet.. de ha beolvasok akkor valami elcsúszik..
  1. #include <p18f14k22.h>
  2. #include <delays.h>
  3. #include <adc.h>
  4. #include <timers.h>
  5. #include <usart.h>
  6.  
  7. volatile char dummy;
  8. unsigned char o=0,p=0,m=0,ri=0, imp=0, rval=0, i=0, kar=0;
  9.  
  10. void timer_isr (void);
  11. void interruptkezelo_low(void);
  12. void interruptkezelo_high(void);
  13.  
  14. #pragma code low_vector=0x18
  15. void interrupt_at_low_vector(void)
  16. {
  17. _asm GOTO interruptkezelo_low _endasm
  18. }
  19. #pragma code /* return to the default code section */
  20.  
  21. #pragma code high_vector=0x08
  22. void interrupt_at_high_vector(void)
  23. {
  24. _asm GOTO interruptkezelo_high _endasm
  25. }
  26.  
  27. #pragma code /* return to the default code section */
  28.  
  29. #pragma interrupt interruptkezelo_high
  30. void interruptkezelo_high(void)
  31.         {
  32.         ...
  33.                
  34.         }
  35.  
  36. #pragma interruptlow interruptkezelo_low
  37. void interruptkezelo_low(void)
  38.  
  39.         {
  40.         if(PIR1bits.RCIF == 1)
  41.                         {
  42.                                 kar = ReadUSART();
  43.                                 //kar = RCREG;
  44.                                 if(i == 20) i = 0;
  45.                                         else i++;
  46.                         if (led==0) {led=1;}
  47.                         else {led=0;}
  48.                                 Delay10KTCYx(10);
  49.                                 //      kar='A';       
  50.                                 WriteUSART(kar);
  51.                                 PIR1bits.RCIF = 0;
  52.                         }
  53.         }
  54.  
  55.  
  56. void setup (void)
  57.         {
  58.                 OSCCON= 0b11100000;            
  59.  
  60.                 PORTA=0;
  61.                 PORTB=0;
  62.                 PORTC=0;
  63.  
  64.                 LATA = 0;
  65.                 LATB = 0;
  66.                 LATC = 0;
  67.        
  68.                 TRISA = 0b11111100;
  69.                 TRISB = 0b01110000;
  70.                 TRISC = 0b01000111;
  71.                
  72.                 WDTCON = 0;
  73.        
  74.                 ANSEL = 0b00010100;
  75.                 ANSELH = 0;
  76.                 RCON   =  0b10000000;
  77.                 INTCON =  0b11001000;
  78.                 INTCON2 = 0b10000100;
  79.                 INTCON3 = 0b00000000;
  80.                 IOCB = 0b00000000;
  81.                 IPR1 = 0b00000000;
  82.                 PIE1 = 0b00100000;
  83.                 WPUB = 0;
  84.  
  85.         }
  86.  
  87. void main( void )
  88.         {
  89.  
  90.                 setup();
  91.                 //OpenTimer0 (TIMER_INT_ON & T0_SOURCE_INT & T0_16BIT & T0_PS_1_16);
  92.             OpenUSART( USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, 71 );
  93.                 baudUSART (BAUD_IDLE_CLK_LOW & BAUD_8_BIT_RATE & BAUD_WAKEUP_OFF & BAUD_AUTO_OFF);
  94.        
  95.         while(1)
  96.                 {
  97. //                      kar = ReadUSART();
  98. //                      WriteUSART(kar);
  99.                        
  100.                 }
  101.         }


Próbáltam belső oszcival, most egy 11,059es baud rate kvarc van benne...
próbáltam mindenféle módba BRGH=1 ben 16 bites módban.. de ugyanez..

  1. a [len=1]
  2. Oy
  3. a [len=1]
  4. Oy
  5. a [len=1]
  6. Oy
  7. b [len=1]
  8. §<RS>
  9. c [len=1]
  10. Ny
  11. d [len=1]
  12. S<RS>
  13. e [len=1]
  14. My
  15. f [len=1]
  16. ¦<RS>
  17. joska [len=5]
  18. ĄĘ)


ezt adja vissza... próbáltam valami logikát keresni benne de nincs és pl ha hosszabat irok be pl a "joska" akkor le is fagy a program! és többé nem reagál semmire..


Bocs hogy egy oldal lett a hozzászólás!
(#) icserny válasza MM hozzászólására (») Júl 1, 2013 /
 
A PICula projektben mutattam példát ring bufferes UART adás-vétel, nézd meg azt! (Én USB-UART protokol konvereteren keresztül nyomultam, ezért ne tévesszen meg, ha időnként az USB címszó alatt látod emlegetni...)
(#) Kori27 hozzászólása Júl 3, 2013 1 /
 
Sziasztok!
Bocsi, hogy nagyon kezdő a kérdés, de el tudná nekem egyszerűen és érthetően magyarázni valaki, hogyan kell PIC-kel timer-t kezelni? (16F628A, mikroC) Kerestem már sample-öket, meg mindent, de eddig még nem sikerült. Nem vagyok túl hülye a programozáshoz, de ez most tényleg kifogott rajtam...
Help pls, előre is köszi
Üdv!
Kori
A hozzászólás módosítva: Júl 3, 2013
Következő: »»   1126 / 1318
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