Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1220 / 1320
(#) Wezuv hozzászólása Márc 10, 2016 /
 
A legnagyobb bajom az, hogy ezen a héten 0 időm volt és ma sem lesz sok. Emellett lehet, hogy túlbonyolítottam a mód váltogatással. Talán a legjobb megoldást, ahol nem kell a TX INT módot menet közben módosítani, nem próbáltam.
A terv:
A megszakítási mód: 01 (Akkor szakít, ha kiürült a FIFO és az SR is.)
UART buffer pointer beállítása
Adat méret beállítása
RS485 irány kimenet
TX Interrupt engedélyezése
9 adat betöltése a FIFO-ba, ha van annyi. Ha hamarabb elfogy, kilépés és várakozása megszakításra
- ha kiürült a FIFO és az SR, megszakítás:
Ha van még adat ugrás az előzőre...
Ha nincs több adat, TX int tiltása, RS485 vonal bemenetre váltása, kész...

Remélem lesz időm este még kipróbálni.

Talán lehetne még variálni, de módot kellene közben váltani. Van a 10-s TX INT mód, ahol akkor szakít meg, ha üres a FIFO (de az SR még nem ment ki). Ezzel nyerhető valamennyi idő, de szerintem az minimális és a végén még is csak váltani kéne, amikor az adat elfogy, mert a legvégén meg kell várni az SR ürülését, mert az RS485 irány vezérlő vonalat nem szabad addig változtatni, míg ki nem ér az utolsó Byte is. Ellenben ez a változtatás akkor történne, amikor a FIFO üres, azaz az ajánlásnak megfelelne. Ezt is kipróbálom majd.
A hozzászólás módosítva: Márc 10, 2016
(#) Wezuv hozzászólása Márc 10, 2016 /
 
Egyik sem működik. Olyanokat csinál, hogy csak lesek. Pedig szerintem mindent jól csinálok. Ha a leírások szerint működne a megszakítás jel, akkor jól kéne működnie. Nem olyan bonyolult ez, hogy nagyot lehetne hibázni. Addig szórakozok vele, amíg lesz kedvem, meg időm, aztán hagyom a fenébe, marad a régi mód...
(#) Henrik1996 hozzászólása Márc 10, 2016 /
 
Sziasztok! Lehet felmerült már, de azért felteszem:
PIC-hez akarok készíteni bootloadert, FLASH memória írás segítségével. Azonban egy elég nagy akadályban elakadtam: a hex fájlból lehet-e a FLASH memóriába írandó adatokat kihozni, vagy ,ás fájltípus kell hozzá?

A program lényege, hogy leellenőrizz egy flash pontot a PIC-en belül, ha abban szerepel egy adott érték, akkor odaugrik goto paranccsal, ha viszont nem, akkor UARTON várja az adatcsomagot. A kérdés ahhoz fűződne, hogy pontosan milyen adatcsomagot küldjek, hiszen pusztán a hex fájl nem úgy látszik, hogy jó.
(#) f2f2 válasza Henrik1996 hozzászólására (») Márc 10, 2016 /
 
javasolnám ha a bootloader a flashben egy ponton ellenőríz
akkor ott álljon tárolt hossz és valamilyen checksum és ha a hosszra nézve nem felel
meg a checksum azaz a felírás nem hiteles szintén az Uartot figyelje.
Neked a bootloader módban majd bin állományt kell feltölteni ( nem hexa formában )
így gyorsabb lesz a felírás.

Amit alul leírtál ott valami nem világos. Ha müködik egy felírt programod, de majd másikat
akarsz feltenni, akkor mivel flashben egy pontot figyel és aszerint már GOTO ->
de akkor hogy fogsz újból feltölteni ?

Javaslom inkább bootolás adjon ki időközönként pár azonos karaktert,
akkor ha nem érkezik rá input flash címen ellenőrzés esetleg goto ->./boot vissza.
Ha érkezik azonnal leáll a bootjel és flash írás művelet
indulhat. E közbeni hiba esetén boot jelek újra.

Gondolom bármikor lecserélhető legyen
felíráskor a PIC mindíg tudja hova írjon
ezért lehetne a beküldés csomagonként [1 felírást jelző karakter][cím érték][hasznos írt hossz][checksumbyte][a byte sor...]
nem hiteles esetben jelezze hogy nem stimm és pár ismétlést felajánljon

vagy hogy gondoltad ?
(#) f2f2 hozzászólása Márc 11, 2016 /
 
A saját gondomból 1 siker született
szabályos5 baudos jel 4 8 16Mhz nél szabálytalan
de 2Mhz es órajelnél hibátlan formát vett.
Érdekes, hogy ehhez órajelet éppen lefele kellett vinni.
Már csak az maradt hogy TXregbe írva folyamatosan lövöldözi ki a karaktert a pinen.
18F26K22. jópár reget ma is változtattam vagy ez vagy síri csend.

1 doktorátusi címet felajánlanék, aki erre ötletet ad.
Kössz
(#) Wezuv hozzászólása Márc 11, 2016 /
 
Tegnap sikerült pár dolgot kideríteni:
Mód: 01, akkor szakít meg, ha a FIFO kiürült és az SR is kiment. (ilyenkor a TRMT is 1 lesz)
első 9 karakter FIFO-ba töltése
megszakításjel törlése (debuggerben elenőrizve, sikeres)
Ezt követően kilép a megszakítás kezelésből és nem kéne visszalépnie, csak amikor a FIFO kiürült és az SR is kitolta az utolsó karaktert.
Ennek ellenére gyakorlatilag azonnal visszatér.
A következő 9 karakter rátöltődik a FIFO-ra, ami abból látszik, hogy az első U6TXREG-be való töltéskor a BF (túlcsordulás) bit beáll.
A megszakítás jelző bit itt is törlésre kerül
Ekkor elmeg az első 9 bájt!
A megszakításba betér, de ekkor már az utolsó 4 bájt kivitelére fut a szál, mert az index 18-on áll. (összesen 24bájt kerül kivitelre most)
Az utolsó 4 bájt is kimegy, és megszakít.

Kérdés, miért nem várja meg az első 9 kiküldését a megszakítási logika?

Ami érdekes, ha csak 1-től 4 bájttokkal töltöm fel a FIFO-t, akkor jól működik. Ha már 5-el, akkor 1 bájt lemarad. Ha többel, akkor egyre több bájt marad le az első és az utolsó csomag között. 9 esetén az egész középső csomag lemarad.

Ha valakinek van ötlete, nagyon örülnék neki!
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Droot, nincs kedved kipróbálni, amivel küzdök? Elküldeném a megszakítási forrásokat...
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Tegnap előtt szétszedtem a kábeldzsungelt, amin be volt minden kötözgetve. Így sajna elég nagy meló lenne összerakni.
A forrást esetleg küldd át és belenézek.
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Adatot is fogadsz közben?
Az errata a 8. Pontjában említ egy RX FIFO szinkronizációs hibát.
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Előtte fogadok adatot, adás közben nem(Az RS485 half-duplex). Az RX FIFO külön hardver a TX FIFO-tól, remélem nem szólhatnak egymás dolgába, de itt bármi előfordulhat. A legnagyobb bajom az, hogy alig van még PIC32MZ-vel foglalkozó fórum, úgy tűnik kevesen használják.
A forrást ide is fel tudom majd tenni délután, nem titok, egyébként se működik , pedig kéne neki. Két dolog lehet, vagy eltolok valamit, vagy hibás a megszakítás kezelés, de még nem jelezték a microcip-nek. Sajnos a FIFO-t nem látom az MPLAB X-ben és az U6TXREG is mindig 0, bizonyára az ICD3 nem kezeli, vagy eleve nem hozzáférhető memóriahely, ezért nagyon nehéz hibát keresni.
A hozzászólás módosítva: Márc 11, 2016
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Azért szedted szét, hogy panelre tedd? Gondolom amíg megjön a log analizátor, addig úgy is van időd rá? (Nekem egyébként már kedden megjött, nagyon frankó...).
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Tedd fel a forrást és belenézek.
A megszakításokat kirpóbáltad külön külön?
Pl az Rx-nél egy lLED-en nyom egy toggle-t. A tx-ben pedig csak egy változót számlálsz és összehasonlítod annyi-e mint ahány karaktert küldtél?
Most nem emlékszem fejből, higy FIFO nélkül lehet-e használni.

A logikai analizátor már nem kell, mert jó lett az I2C. Az ack-nál i2c1 volt a regiszter neve, de az i2c2-t használtam. Most azért szedtem szét, mert mással kell foglalkoznom. Rakd fel a progit és megnézem szívesen.

Jut eszembe, én a Microchip fórumon kérdezősködtem már párszor az MZ-ről. Ott eléggé vágják a dolgokat. Végső esetben érdemes oda feltenni. A regisztráció viszont időbe telik, amíg egy admin jóváhagyja.
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Jelen esetben nincs köze az adásnak a vételhez, csak annyi, hogy a bejövő csomag indítja az adást. Adásban egy előre feltöltött tömb adatait küldöm el. A tömbbe 1...200 számokat teszek, így nagyon jól látható, hogy melyik bájt nem ért át. (Az elküldött számokat a brayterminallal nézem a PC-n.) Délután felteszem...
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Rendben. Akkor az RS485 illesztő be sincs kötve ugye? Tehát RS232-ről beszélünk.
Milyen RS232-USB konvertered van?
Én egyszar napokig szívtam az FT232-vel, mert elküldte az adatokat, fogadta is de amikor összekötöttem a cuccommal nem ért át minden. Aztán átraktam a PL2303-as adapterre és jó lett.
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
De be van kötve (panelen van kettő illesztő a 4 és a 6 UART-on). Tudod, írtam, hogy ha 1-től 4 mélységig töltöm fel a FIFO-t, akkor hibátlan (az 1 mélység felel meg a régi módnak, ahogy te is használod), ezért nem lehet külső hiba.
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Kicsit olvasgattam az adatlapját.
A 8 level deep azt jelenti, hogy 8 bájt?
Ha a FIFO ki van kapcsolva, az nem felel meg a célnak? Ha megszakításból kezeled, úgy jól tud működni.
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Majdnem igen, 8+1bit széles a FIFO, 8 mélységben.
Nem lehet a FIFO-t kikapcsolni (ha tévedek, akkor javítsatok ki).
Célnak? A célom az, hogy megismerjem és kihasználjam az MZ lehetőségeit.

Sokat gondolkodtam a dolgon, lehetséges, hogy a megszakítási logika 4 mélységnél többet nem tud kezelni, azaz bugos? Az MX-eken csak 4 mély a FIFO...
A hozzászólás módosítva: Márc 11, 2016
(#) Droot válasza Wezuv hozzászólására (») Márc 11, 2016 /
 
Lehet, hogy valamilyen bug-ról van szó. Szerintem a Microchip fórumban kérdezz rá. De ide is tedd fel a forrást, azért belekukkantok. Bár fifo-t nem használtam még, amit a forrásban láttál abban egy bájtot küldözgetek.
(#) Wezuv válasza Droot hozzászólására (») Márc 11, 2016 /
 
Igen, de végül is nem tudod nem használni a FIFO-t, csak ha minden egyes TXREG-be írás után kijössz a megszakításból, akkor csak egy mélységben használod. Ezt tudom feltornászni 4-re, eddig. Sajnos annyira nem tudok angolul, hogy ilyen bonyolult dolgokról tudjak társalogni velük.
(#) Wezuv hozzászólása Márc 11, 2016 /
 
A FIFO_Deep 1 és 4 közötti, akkor kimegy 121-ig minden bájt
Ha a FIFO_Deep x: kimenő bájtok 9 után elnyelődnek al alábbi módon.
5: 1-9, 11-121
6: 1-9, 13-121
7: 1-9, 15-121
8: 1-9, 17-121
9: 1-9, 19-121


  1. for(a=0;a<200;a++){
  2.         USART_Tx6_DataBuffer[a]=a+1;
  3. }
  4.  
  5. TX6_Send_CRC(121, &USART_Tx6_DataBuffer[0]);
  6.  
  7. void TX6_Send_CRC(unsigned char Size, unsigned char* Buffer){
  8.         unsigned int CRC_Ertek_int;        
  9.         while(IEC5bits.U6TXIE);                 //Várakozás az előző adás végére.
  10.         CRC_Ertek_int=Modbus_CRC16(Buffer, Size);
  11.         Buffer[Size++]=CRC_Ertek_int >> 8;      //CRC High
  12.         Buffer[Size++]=CRC_Ertek_int;           //CRC Low
  13.         Data_TX6_Size=Size;                     //Adatcsomag hossza;
  14.         TX6_cik=0;
  15.         TX6_DataPointer=Buffer;  
  16.         RS485_Adas_6();
  17.         DelayMs(200);
  18.         //Adás indítása TX6 megszakítás engedélyezésével.
  19.         IEC5bits.U6TXIE=Be;     //Adás megszakítás bekapcs.
  20. }
  21.  
  22. void __ISR(_UART6_TX_VECTOR, IPL6AUTO) UART6TXIntKezeles(void){ //UART6 TX INT
  23.     //Adás megszakításban (RS485)
  24.         unsigned char a;    
  25.         #define FIFO_Deep 4 //4-ig jól működik, 5-nél eldob bájtokat, felette sok bájtot dob el... ???
  26.         if(TX6_cik<Data_TX6_Size){
  27.                 if((Data_TX6_Size-TX6_cik)<=FIFO_Deep){ // Ha a maradék kisebb, vagy egyenlő FIFO+1-el
  28.                         while(TX6_cik<Data_TX6_Size){
  29.                                 U6TXREG=TX6_DataPointer[TX6_cik++]; //Maradék adat FIFO-ba
  30.                         }
  31.                         IFS5bits.U6TXIF=0;      //Megszakítás jel törölve. (Csak akkor törlődik, ha az okozója nem él)      
  32.                 }else{
  33.                         for(a=0;a<FIFO_Deep;a++){
  34.                                 U6TXREG=TX6_DataPointer[TX6_cik++];  //adat betöltése FIFO-ba.                        }
  35.                                 IFS5bits.U6TXIF=0;      //Megszakítás jel törölve. (Csak akkor törlődik, ha az okozója nem él)      
  36.                         }
  37.         }else{ //ha minden adat kiment.
  38.                 IEC5bits.U6TXIE=0;      //megszakítás kikapcs
  39.                 RS485_Vetel_6();        //RS485 vonal bemenet
  40.         }
  41. }
A hozzászólás módosítva: Márc 11, 2016
(#) pajti2 válasza Henrik1996 hozzászólására (») Márc 11, 2016 /
 
Szia!

Egy tipp. Belenéztél már abba a hex file-ba, hogy mi is van benne (klikk ide) ? Csak mert egy sima szöveg, egyszerű szerkezettel. Akár notepaddal is átszerkesztheted.
(#) Scorpyo hozzászólása Márc 13, 2016 /
 
Sziasztok!
Próbálkozom a PIC programozás tanulásával, de nehezen megy. Megköszönném, ha lenne valakinek ideje és leírná nekem, hogy hogyan működik az időzítés az alábbi programban, mert
nagyon nem értem.
A neten találtam szoftveres időzítésre példát,ott
CBLOCK 0x20
T1
T2
T3
ENDC

majd T1,T2,T3 kap egy értéket és DECFSZ, ez így érthető, de az alábbi programban
pl. a D_500mS időzítésnél csak temp3 kap értéket.


  1. ;****************************************************************
  2. ;Up/Down Counter for Bikes.  Started 30/4/2010  for R Cermak
  3. ;Up sw on RA2   Down on RA3
  4. ;Port B drives 7 segment display
  5. ;Down for 1 then up for 2,3,4,5,6
  6. ;or if up is pressed at the beginning, display shows 2
  7. ;   16F628.asm
  8.  
  9. ;****************************************************************
  10.  
  11.         list P = 16F628         ;microcontroller
  12.         include <P16F628.inc>   ;registers for F628
  13.  
  14.  
  15.         __Config        _cp_off & _lvp_off & _pwrte_on & _wdt_off & _intRC_osc_noclkout & _mclre_off
  16.        
  17. ;code protection - off
  18. ;low-voltage programming - off
  19. ;power-up timer -  on
  20. ;watchdog timer - off
  21. ;use internal RC for 4MHz - all pins for in-out
  22.  
  23.  
  24. ;****************************************************************
  25. ; variables - names and files
  26. ;****************************************************************
  27.  
  28.  
  29.                 ;Files for F628 start at 20h
  30.  
  31.                                                                        
  32. temp1           equ 20h ;for delay
  33. temp2           equ 21h ;for delay
  34. temp3           equ 22h ;for delay
  35. SwUp            equ     23h     ;
  36. SwDwn           equ     24h     ;
  37. count           equ     25h     ;
  38. Sw_Flag         equ     26h     ;
  39.  
  40.  
  41. ;****************************************************************
  42. ;Equates
  43. ;****************************************************************
  44. status          equ     0x03
  45. cmcon           equ     0x1F
  46. rp1                     equ     0x06
  47. rp0                     equ     0x05
  48. portA           equ 0x05
  49. portB           equ 0x06
  50.  
  51. ;****************************************************************
  52. ;Beginning of program
  53. ;****************************************************************
  54. Start   org             00                              ;reset vector address  
  55.                 goto    SetUp                   ;goto SetUp
  56.                        
  57.  
  58. table   addwf   PCL,F           ;02h,1  add W to program counter
  59.         retlw   b'00111111'     ; "0"   -|F|E|D|C|B|A
  60.         retlw   b'00000110'     ; "1"   -|-|-|-|C|B|-
  61.         retlw   b'01011011'     ; "2"   G|-|E|D|-|B|A
  62.         retlw   b'01001111'     ; "3"   G|-|-|D|C|B|A
  63.         retlw   b'01100110'     ; "4"   G|F|-|-|C|B|-
  64.         retlw   b'01101101'     ; "5"   G|F|-|D|C|-|A
  65.         retlw   b'01111101'     ; "6"   G|F|E|D|C|-|A
  66.        
  67.  
  68. ;****************************************************************
  69. ;* port A and B initialisation                                  *
  70. ;****************************************************************
  71.  
  72. SetUp   bsf             status,rp0     
  73.                 movlw   b'00001111'             ;Make RA0,1,2,3 in
  74.                 movwf   05h                    
  75.                 clrf    06h                             ;Make all RB output
  76.                 bcf             status,rp0              ;select programming area - bank0
  77.                 movlw   b'10000000'             ;Turn off T0CKI, prescale for TMR0 = 1:
  78.                 movwf   option_reg             
  79.                 clrf    portB                   ;Clear Port B of junk 
  80.                 clrf    count                   ;zero the count file           
  81.                 clrf    Sw_Flag
  82.                 movlw   07h                             ;turn comparators off and enable
  83.                 movwf   cmcon                   ;    pins for I/O functions                                            
  84.                 goto    Pre                             ;shows 0,1,2,3,4,5,6,0  at 2Hz and stops on "0"
  85.                                        
  86.  
  87.  
  88. ;****************************************************************
  89. ;* Delay 10mS           10 x 1,000uS                    *
  90. ;****************************************************************
  91.  
  92. D_10mS  movlw   0Ah
  93.                 movwf   temp2
  94. D_a             nop
  95.                 decfsz temp1,1
  96.                 goto    D_a
  97.                 decfsz temp2,1
  98.                 goto    D_a    
  99.                 retlw   00
  100.                
  101.                        
  102.         ;Delay 0.51 sec
  103.  
  104. D_500mS movlw   02h
  105.                 movwf   temp3  
  106. DelX    decfsz  temp1,1
  107.                 goto    DelX   
  108.                 decfsz  temp2,1        
  109.                 goto    DelX
  110.                 decfsz  temp3,1
  111.                 goto    DelX
  112.                 retlw   00
  113.                
  114.                        
  115. Up              btfsc   Sw_Flag,1
  116.                 goto    M1
  117.                 bsf             Sw_Flag,1
  118.                 movlw   06h                     ;put 6 into w
  119.                 xorwf   count,0         ;compare count file with 6
  120.                 btfsc   03,2            ;zero flag in status file. Will be set if count is 6
  121.                 goto    M1
  122.                 incf    count,f         ;increment display
  123.                 goto    M1                      ;
  124.                
  125.                
  126. Down    btfsc   Sw_Flag,1
  127.                 goto    M1
  128.                 bsf             Sw_Flag,1
  129.                 movlw   01h                     ;put 1 into w
  130.                 xorwf   count,0         ;compare units file with 1
  131.                 btfsc   03,2            ;zero flag in status file. Will be set if count is 1
  132.                 goto    M1
  133.                 movlw   00h                     ;put 0 into w
  134.                 xorwf   count,0         ;compare count file with 1
  135.                 btfsc   03,2            ;zero flag in status file. Will be set if count is 0
  136.                 goto    M1             
  137.                 decf    count,f         ;decrement display
  138.                 goto    M1                      ;
  139.                
  140.                
  141.                 ;Reset ONLY produces 0
  142.                
  143. Reset   clrf    count     ; "0"
  144.                 call    table          
  145.                 movwf   portB
  146.                 goto    Pre    
  147.                
  148.                
  149. dim             clrf    portB                  
  150.                 call    D_10mS                                 
  151.                 goto    Main   
  152.                
  153.                 ;Pre    shows 0,1,2,3,4,5,6,0  at 2Hz and stops on "0"
  154.                
  155.                
  156. Pre             movlw   b'00111111'     ;show 0
  157.                 movwf   portB
  158.                 call    D_500mS
  159.                 movlw   b'00000110' ;show 1
  160.                 movwf   portB
  161.                 call    D_500mS
  162.                 movlw   b'01011011' ;show 2
  163.                 movwf   portB
  164.                 call    D_500mS
  165.                 movlw   b'01001111' ;show 3
  166.                 movwf   portB
  167.                 call    D_500mS
  168.                 movlw   b'01100110'     ;show 4
  169.                 movwf   portB
  170.                 call    D_500mS
  171.                 movlw   b'01101101' ;show 5
  172.                 movwf   portB
  173.                 call    D_500mS
  174.                 movlw   b'01111101'     ;show 6
  175.                 movwf   portB
  176.                 call    D_500mS
  177.                 clrf    count
  178.                 call    table
  179.                 movwf   portB
  180.                 goto    M_First
  181.                
  182.                                                        
  183.                
  184. ;****************************************************************
  185. ;* Main                                                         *
  186. ;****************************************************************
  187.  
  188. M_First         btfss   portA,1                 ;test switch-press for reset
  189.                 goto    Reset                   ;reset pushed
  190.                 btfss   portA,2                 ;test switch-press for up
  191.                 goto    $+5                             ;
  192.                 btfsc   portA,3                 ;test switch-press for down
  193.                 goto    M_First
  194.                 incf    count,1                 ;show 1 if down pressed at start
  195.                 goto    Main   
  196.                 incf    count,1                 ;show 2 if Up pressed at start                         
  197.                 goto    Main
  198.                
  199.                
  200.                
  201.  
  202.                
  203.                
  204. Main            btfss   portA,1                 ;test switch-press for RESET
  205.                 goto    Reset
  206.                 btfss   portA,2                 ;test switch-press for UP
  207.                 call    Up                      ;UP switch pressed
  208.                 btfss   portA,3                 ;test switch-press for Down
  209.                 call    Down                    ;Down switch pressed                   
  210.                 movf    count,w                 ;copy count value into w
  211.                 call    table                   ;unit display value will return in w
  212.                 movwf   portB                   ;output count value
  213.                 call    D_10mS                  ;call delay            
  214.                 btfsc   portA,2                 ;bit will be zero when sw is pressed
  215.                 bcf     Sw_Flag,1
  216.                 btfsc   portA,3                 ;bit will be zero when sw is pressed
  217.                 bcf     Sw_Flag,1
  218.                 btfss   portA,0                 ;test switch for dim = HIGH input
  219.                 goto    dim                                            
  220. M1              goto    Main                           
  221.                
  222.                
  223.                
  224.                
  225.                
  226.                
  227.                                
  228.                
  229.                 END
(#) Hp41C válasza Scorpyo hozzászólására (») Márc 13, 2016 /
 
Akármi is volt a T1 és T2 értéke,a D_500mS másodszori meghívásakor már 0 értékűek lesznek, hiszen a decfsz utasítás 0 értéket hagy bennük.
A hozzászólás módosítva: Márc 13, 2016
(#) zenetom hozzászólása Márc 13, 2016 /
 
Sziasztok,
Számomra meglepő dologgal találkoztam, mégpedig egy új asm utasítással, 18F szériánál. Illetve már nagyon régóta jelen van ez az utasítás, de valahogy eddig nem használtam/elkerülte a figyelmemet.
Ez a "DAW" utasítás, ami annyit csinál, hogy felbontja a WREG-et alsó és felső bájtra (nibble), majd megvizsgálja az alsót és felsőt is: ha a nibble értéke nagyobb mint 9, akkor hozzáad 6-ot, és az eredmény kerül vissza (mármint értelemszerűen az alsó 4 bite). BCD kódolgatásoknál jól jöhet.
Ja, és 1 cycle alatt megcsinálja.
(#) killbill válasza zenetom hozzászólására (») Márc 14, 2016 /
 
Idézet:
„BCD kódolgatásoknál jól jöhet.”
Igen, mert arra valo. Ezt a z80 processzor mar 1976-ban tudta... Csak ott DAA volt a neve (Decimal Adjust Accumulator)
(#) Wezuv hozzászólása Márc 15, 2016 /
 
Van egy ilyen UART hibakezelőm megszakításban.
  1. void __ISR(_UART6_FAULT_VECTOR, IPL5AUTO) UART6ErrorIntKezeles(void){   //UART6 Error INT
  2.     RS485_Vetel_6();             //vételre váltunk
  3.     if(U6STAbits.FERR){
  4.         LED5_LAT=Be;
  5.     }
  6.     if(U6STAbits.PERR){
  7.         LED5_LAT=Be;
  8.     }    
  9.     if(U6STAbits.OERR){
  10.         U6MODEbits.ON=Ki;               // Modul kikapcs
  11.         U6MODEbits.ON=Be;               // Modul bekapcs        
  12.     }    
  13.     U6ErrCount++;
  14.     Rx6_pointer=0;
  15.     IFS5bits.U6RXIF=Clear;
  16.     //U6STAbits.URXEN=Ki;               // Continuous vétel tilt
  17.     //U6STAbits.URXEN=Be;               // Continuous vétel enged
  18.     UART6_RX_Folyamatban=Ki;
  19.     UART6_Buffer_Full=Ki;
  20.     //DelayMs(200);
  21.     U6STAbits.ADDEN=Be;     //Cím detektálás bekapcsolva    
  22.     IEC5bits.U6RXIE=Be;  
  23.     U6STAbits.OERR=Clear;
  24.     IFS5bits.U6EIF=Clear;    
  25.     if(LED2_LAT){
  26.         LED2_LAT=Ki;
  27.     }else{
  28.         LED2_LAT=Be;
  29.     }
  30. }


Kommunikáció során többször betér ide, amit a LED és a hiba számláló villogása illetve növekedése mutat. Ellenben egyetlen egyszer sem fut be a szál a három lehetséges kiváltó ok vizsgálatába. Breakpontot tettem mindháromra, nem fut bele.
Kérdésem, mi okozhat még megszakítást? Vagy létezik, hogy a kiváltó ok megszűnik, mire beér a megszakításba?
Az RX megszakítás kezelése gyors, elvileg minden adatot el tudok kapni, majdnem kizárt, hogy a 8 mélységű FIFO megteljen. FERR előfordulhat, de még nem tudtam elcsípni a fenti módon, lehet nem is lehet így...
A hozzászólás módosítva: Márc 15, 2016
(#) Wezuv válasza Wezuv hozzászólására (») Márc 15, 2016 /
 
Azt elfelejtettem, hogy 9bites módban van az UART. (és PIC32MZ EF) Nincs engedélyezve az auto cím detektálás mód.
A hozzászólás módosítva: Márc 15, 2016
(#) f2f2 hozzászólása Márc 15, 2016 /
 
Nekem az UARTra 1x TXREGbe írt adat állandó ismétlődő kiküldésének meglett a miértje.
A goto és bra gépi kódú számítása nem volt jó. Ezeket javítottam és TX üzemmód remek.
Most jön a RECEIVED művelet
félek itt se lesz egyszerű az élet.
(#) Droot hozzászólása Márc 19, 2016 /
 
Sziasztok!

Egy 65k szinu 7"-es TFT-n szeretnek egy menut megjeleniteni, illetve egy par adatot. Szuksegem lenne gombokra, csuszkakra. Nagyon rossz vagyok grafikaban.
Letezik olyan program, amiben vannak elore megtervezett csuszkak, checkbox-ok es gombok?
Hasonloan, mint a Visual Studio-ban amikor ablakos windows alkalmazast keszitek.
Probaltam parat, a mikro TFT-t, a CrankSoftware tervezojet, de szerintem elegge hasznalhatatlanok es idejetmult programok. Windows-ra es Linux-ra is johet.
(#) pajti2 válasza Droot hozzászólására (») Márc 19, 2016 /
 
A win / linux dolog kicsit zavaros. Ez egy pic topic.
Következő: »»   1220 / 1320
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