Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   1 / 3
(#) The_Saint válasza Hp41C hozzászólására (») Nov 10, 2015
  1. SdInitSequence
  2.         bsf             LED
  3.         bsf             SPI_CS
  4.         wait    .1250
  5.         wait    .1250
  6.         movlw   0x0B
  7.         movwf   Retry
  8. SdWakeupLoop
  9.         movlw   0xFF
  10.         movwf   SpiTxByte
  11.         call    SendByteToSpi
  12.         decfsz  Retry,f
  13.         goto    SdWakeupLoop
  14.         bcf             SPI_CS
  15.         loadTable       CMD0
  16.         call    SendMessageToSpi
  17.         call    ReadResponse
  18.         call    SendResponseToUART1
  19.         loadTable       CMD8
  20.         call    SendMessageToSpi
  21.         call    ReadResponse
  22.         call    SendResponseToUART1
  23.         call    SetTimer02s
  24. WaitForCardReady
  25.         btfsc   INTCON,TMR0IF
  26.         return
  27.         loadTable       CMD55
  28.         call    SendMessageToSpi
  29.         call    ReadResponse
  30.         call    SendResponseToUART1
  31.         loadTable       CMD41
  32.         call    SendMessageToSpi
  33.         call    ReadResponse
  34.         call    SendResponseToUART1
  35.         movf    R1Response,w
  36.         xorlw   0x00
  37.         btfsc   STATUS,Z
  38.         goto    NextInitSdCommand
  39.         goto    WaitForCardReady
  40. NextInitSdCommand
  41.         loadTable       CMD58
  42.         call    SendMessageToSpi
  43.         call    ReadResponse
  44.         call    SendResponseToUART1
  45.         loadTable       CMD16
  46.         call    SendMessageToSpi       
  47.         call    ReadResponse
  48.         call    SendResponseToUART1
  49.         bcf             LED
  50.         return


A SetTimer02s miatt kerüli ki a varakozó ciklust ha nincs benn a kártya és lejárt a timer. Ha benn van akkor nincs gond.
Ha kiveszem a timert, akkor benn marad ebben a ciklusban és nem kezeli az UART megszakítást...
Igazából azt nem értem, hogy az UART szempontjából semmi nem változik és mégsem kezeli. Kipróbáltam a TIMER0-t polling helyett megszakítással és az rendben van... de így pollingal egyszerűbbnek látom...
A fura a dologban, hogy átraktam az egészet 18F4580-ra és ott hibátlan... Ha van SD kártya, ha nincs a megszakítást akkor is kezeli, kivétel nélkül.
(#) The_Saint válasza Hp41C hozzászólására (») Nov 10, 2015
Üdv,

  1. _loop
  2.     nop
  3.     goto _loop


Ebben a loopban vár bármilyen megszakításra. UART1 és UART2 megszakítás esetén kezeli a bejövő charaktereket és törli a flaget... ahogy kell.
Aztán meghívom az SD inicializáló részt akkor eddig egy szintén végtelen ciklusban várt SD R1 válaszára. Mivel nem volt bent az SD ez ugye sose jött meg, de ennek ellenére ki kellett volna lépjen kezelni az UART-okat, de nem tette. Szóval itt tűnt el az UART megszakításra való reagálás.
Ha berakom az SD-t, mármint a kártyát magát, akkor inicializál, visszamegy a fenti loopra és utána minden normálisan működik.
(#) The_Saint hozzászólása Nov 10, 2015
Biztos mindegyikőtöknek megvan a Kónya féle PIC programozós könyv régebbi kiadása, az a fekete borítós... A tippek trükkök résznél van pár minta a 8 és 16 bites változók hasonlítására. Na eddig én ezeket sikerrel használtam, viszont a minap egy érdekes dolog történt:
Az alábbi kódrészlet a könyv 213. oldalán a RAM > x résznél található:

  1. movf RAML,w
  2. sublw XL
  3. movf RAMH,w
  4. btfss STATUS,C
  5. addlw 0x01
  6. sublw XH
  7. btfss STATUS,C
  8. goto true


Szóval ugrik ha a RAM > X

Ha X mindig 0 és a RAM értékét növelem 1-el, akkor PIC18F4580 esetében teszi is a dolgát egészen 0xFE10 értékig, utána viszont úgy ítéli meg, hogy az X > RAM....természetesen hibás működést okozva például egy LoadCell mérés esetében. Az okra eddig nem jöttem rá, nem volt időm foglalkozni vele. A problémát persze megoldattam egy másik hasonlítási eljárással.
Más is találkozott már ezzel?

Üdv
TheSaint
(#) The_Saint válasza bbalazs_ hozzászólására (») Nov 10, 2015
Üdv,

Ok, szóval pakolásztam a dolgokat ide oda, nem sok minden változott. A LED-es trükköt én is használom, bár nálam egy kijelzó is rá van akasztva, hogy néha többet láthassak egy blinknél. A végeredmény az lett, hogy újraírtam egy részt az SD kártya kezelésben.
Ha nem volt bent az SD akkor egy végtelen ciklusba került a program, amiből az UART megszakítás ki kellene léptesse... Ezért megszakítás a megszakítás, de sajnos ez nem teszi. Az érdekesség az az, hogy ha nincs dolga a CPUnak akkor is egy LOOP..NOP..GOTO LOOP ciklusban kering és abból simán kilép és kezeli az UART-ot. Egyenlőre a két UART-on kívül meg nincs másik megszakítás benne.
Az újraírás alapvetően a problémát nem oldotta meg, hanem csak megkerülte. 2mp után így vagy úgy de kiléptetem a SD-re várakozásból.
Sajnos még mindig nem értem hogy miért tűnik el az UART megszakítás ebben az esetben. Szóval ez a rész még ötleteket vár
De találtam egy másik problémát..lásd köv. hozzászólás...
(#) The_Saint hozzászólása Nov 9, 2015
Üdv!

A segítségétekre lenne szükségem. Egy PIC18F46K22-vel küzdök egy ideje. Mind a két UART működik megszakításos bejövö adatkezeléssel hibátlanul. A következő lépés egy SD kártya interface lenne, amit be kellene illesztenem a programba. Az SD kártya kezelő részt 18F4580-on írtam először, ahol tökéletesen működött. Copy + Paste és a szükséges SFR-ek névmódosítása után az UART megszakítás megszűnik működni. A bejövő karakterek nem okoznak megszakítást. Eddig sikerült kinyomoznom, hogy a következő programrész részleges kikommentezése megoldja a megszakítás problémát, persze ettől meg az SD kártya nem működik....


Ha ez így van benn akkor nincs UART interrupt:
  1. ReadResponse
  2.         clrf    DummyCounter
  3.         lfsr    FSR2,SPI_RX_BUFF
  4. WaitValidData
  5.         movlw   0xFF
  6.         movwf   SpiTxByte
  7.         call    SendByteToSpi
  8.         movwf   SpiRxByte
  9.         xorlw   0xFF
  10.         btfss   STATUS,Z
  11.         goto    WaitValidData
  12.         call    StoreByte
  13. ReadValidResponse
  14.         movlw   0xFF
  15.         movwf   SpiTxByte
  16.         call    SendByteToSpi
  17.         call    StoreByte
  18.         bcf             STATUS,C
  19.         movlw   0x05
  20.         subwf   DummyCounter,w
  21.         btfss   STATUS,C
  22.         goto    ReadValidResponse
  23.         return


Ha így, akkor működik az UART interrupt:
  1. ReadResponse
  2.         clrf    DummyCounter
  3.         lfsr    FSR2,SPI_RX_BUFF
  4. WaitValidData
  5.         movlw   0xFF
  6.         movwf   SpiTxByte
  7.         call    SendByteToSpi
  8.         movwf   SpiRxByte
  9.         xorlw   0xFF
  10.         btfss   STATUS,Z
  11.         goto    WaitValidData
  12.         call    StoreByte
  13. ;ReadValidResponse
  14.         ;movlw  0xFF
  15.         ;movwf  SpiTxByte
  16.         ;call   SendByteToSpi
  17.         ;call   StoreByte
  18.         ;bcf            STATUS,C
  19.         ;movlw  0x05
  20.         ;subwf  DummyCounter,w
  21.         ;btfss  STATUS,C
  22.         ;goto   ReadValidResponse
  23.         return


Ha jól tippelek a kettőnek nem nagyon van köze egymáshoz. A fenti programrészlet még nem része a futó programnak, vagyis az SD kezelést még nem hívom meg sehol...

Jó volna valami ötlet, mert kicsit tanácstalan lettem.... Köszi előre is!
Üdv
The_Saint
A hozzászólás módosítva: Nov 9, 2015
(#) The_Saint válasza kissi hozzászólására (») Nov 14, 2014
Szia! Igen, köszi erre gondoltam
(#) The_Saint válasza potyo hozzászólására (») Nov 13, 2014
Szia!
Bocs, nem C-ben programozok, asm-ben, csak a képkonverter program így adja ki a végeredményt és bemásoltam az egész blokkot elsőre. Aztán láttam, hogy túl hosszú és kivágtam nagyjából a 99%át és így maradt az eleje meg a vége
Még arra emléxem, hogy anno 16F876A-ra írtam valamit, mikor is egy 128x64 pontos kijelzőre kellett kiküldeni a képet....hát valami ilyesmi a helyzet most is.
Üdv
(#) The_Saint hozzászólása Nov 12, 2014
Sziasztok!

Tudom, hogy már ebben egyszer valamikor régen segítettek, és én annyira meg akartam találni, de 60 oldal végigböngészése után feladtam. Íme:

PIC16F628-assal szeretném a következőket:
van egy halom adatom ilyen formában:
  1. const unsigned char picture_name [] = {0x3B, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}

Ezeket szeretném egyenként a PORTB-re küldeni.
Persze NEM így:
  1. movlw 0x3B
  2. movwf PORTB


Sajnos a TBLRD itt nem működik
Köszi előre is !

Üdv
TheSaint
(#) The_Saint válasza kissi hozzászólására (») Nov 7, 2014
Szia,

Na ez már egy gyakorlati példa. Ez úgy nézne ki, hogy valami kommunikációs csatornán (soros, wifi, bluetooth) beküldöm az új progit távolról és a bootloader meg beírja a régi progi helyére. Jól értem?

proba: EEPROM helyett én is használtam már, de más nem jutott eszembe eddig
(#) The_Saint hozzászólása Nov 7, 2014
Sziasztok,

ha jól tudom, akkor a PIC18Fxxxxx-ek át tudják írni a saját program memóriájukat. Tudnátok mondni példákat...legalább egyet...ennek a gyakorlati hasznára. Hol és mire lehet ezt a tulajdonságot használni?

Köszi!
Üdv
TheSaint
(#) The_Saint válasza Hp41C hozzászólására (») Aug 7, 2014
Hát... mindig Te vagy a megmentő Ott a pont. A bankváltás hiányzott. Már megy is!! Hiába, aki tud az tud!!!
(#) The_Saint válasza kissi hozzászólására (») Aug 7, 2014
OK, értem. arra gondoltam, hogy valakinek esetleg van egy kész configja... De íme itt van amit én raktam össze:
  1. initialise_processor
  2.         movlw   0x07
  3.         movwf   TRISA
  4.         clrf    PORTA
  5.         clrf    LATA
  6.         clrf    PORTB
  7.         clrf    LATB
  8.         movlw   0x03
  9.         movwf   TRISB
  10.         clrf    TRISC
  11.         clrf    PORTC
  12.         clrf    LATC
  13.         clrf    TRISD
  14.         clrf    PORTD
  15.         clrf    LATD
  16.         clrf    TRISE
  17.         clrf    PORTE
  18.         clrf    LATE
  19.         clrf    ADCON0
  20.         clrf    ADCON1
  21.         clrf    ADCON2
  22.         clrf    ANCON0
  23.         clrf    ANCON1
  24.         movlw   0x80
  25.         movwf   INTCON2
  26.         clrf    CCP1CON
  27.         clrf    CCP2CON
  28.         clrf    CCP3CON
  29.         clrf    CCP4CON
  30.         clrf    CCP5CON
  31.         movlw   0x03
  32.         movwf   CM1CON
  33.         movwf   CM2CON
  34.         clrf    WPUB
  35.         clrf    SLRCON
  36.         clrf    ECCP1AS
  37.         clrf    ODCON
  38.         return


Nincs benn semmi extra. Minden port minden lábát digitálisként akarom használni. Az RB0, RB1, RA0, RA1, RA2 lennének a digitális bemenetek.

Ja és a CONFIG rész:
  1. CONFIG FOSC = HS2
  2.         CONFIG PLLCFG = OFF  
  3.         CONFIG WDTEN = OFF
  4.         CONFIG FCMEN = OFF
  5.         CONFIG PWRTEN = OFF
  6.         CONFIG MCLRE = ON
  7.         CONFIG BOREN = OFF
  8.         CONFIG  RETEN = ON
  9.         CONFIG  INTOSCSEL = LOW
  10.         CONFIG  SOSCSEL = DIG
  11.         CONFIG  XINST = OFF


A gond az az, hogy korábban ugyanez az áramkör 18F4580-nal tökéletesen működött, de most éppen nem volt a boltban ilyen, csak 18F46K80, ami lábkompatibilis, csak a progit nem eszi meg módosítás nélkül. Már majdnem megvagyok az átírással, csak 3db nyomógombot nem bírok beolvasni...
További szép estét!
(#) The_Saint hozzászólása Aug 7, 2014
Sziasztok!

Megint kell egy kis segítség. Valószínűleg már nem látom a fától az erdőt.... Egy PIC18F46K80-assal van gondom. Az RB0-t és az RB1-et akarom digitális bemenetnek használni...de Ő annyira nem akarja. Elvileg bállítottam mindent regisztert aminek köze van 2 lábhoz.... de nem és nem bírom kiolvasni a láb állapotát. Lécci valaki szóljon valami okosat! Köszi előre is.
(#) The_Saint válasza icserny hozzászólására (») Júl 2, 2014
Ez eddig tényleg tetszik! Nem akarok telhetetlen lenni, de mi van ha csak úgy van internet, hogy ha mobilomon bekapcsolom az AP-t.... nem tudok vezetéket húzni (se koax, se telefon) Ha jól sejtem akkor ott hagyom a mobilomat örökbe? Vagyis legalább addig amíg akarom hogy menjenek az adatok...
Amúgy közben nem tétlenkedtem, levizsgáztam villanyszerelésből meg találtam egy ilyet, lehet, hogy többeteknek tetszene:
RN370

bár a kérdés még mindig fennáll: mi van ha nincs AP közelben?

Szép estét!
(#) The_Saint válasza potyo hozzászólására (») Júl 2, 2014
Szia! Hát igen, egy file az egész, aztán majd egy másik PHP szétválogatja. De hogy kerül a PIC soros kimenetről egy másik országban lévő szerverre, bele abba bizonyos file-ba?
(#) The_Saint hozzászólása Júl 2, 2014
Sziasztok!

Előre is bocs, ha rossz helyre írok, de a kérdésemben PIC is szerepel
Szóval adott egy PIC ami sorosan kiküld egy számot. Ezt a számot kellene egy egyre bővülő listában tárolni. A lista egy webszerveren van... messze a PIC-től. Van erre valakinek elképzelése, hogy hogyan kell ilyet csinálni? Vagy AP vagy mobilnet lehetőség van....
Bármi érdekel amit tudtok mondani!
Üdv
TheSaint
(#) The_Saint válasza Kisvé hozzászólására (») Júl 10, 2013
Szia, igen van a DO-n egy 10k-s, bár korábban 4.7k-s volt, de már nem is emléxem pontosan, hogy miért is cseréltem le 10k-ra....
(#) The_Saint hozzászólása Júl 10, 2013
Üdv!

Szeretném újfent a segítségeteket kérni. SD kártyára akarok adatot menteni PIC18F458, vagy bármi hasonlóval. Pár mintát már ki is próbáltam, FAT-tal meg anélkül is, de valahogy egyik sem akar működni.
Ha valakinek lenne működő "include"-olható .asm forráskódja, vagy valami komplett tutorial féle, azt nagyon megköszönném.

További szép napot!
Üdv
The_Saint
(#) 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!
(#) 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
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?
(#) 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...
(#) 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!
(#) 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
(#) 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
(#) 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 mateakos hozzászólására (») Jún 17, 2013
Üdv!

watt és mateakos, köszi a segítséget, probléma megoldva. Naívan azt gondoltam, hogy nem kell olyan alaposan végignyálazzam a leírást

További szép napot!
The_Saint
(#) The_Saint hozzászólása Jún 16, 2013
Sziasztok! Egy PIC gurunak a segítségét szeretném kérni! Az alábbi kódot használom egy jó ideje 2x16soros LCD-hez, ami működött is tökéletesen, mindaddíg míg nem váltottam 18F...-es PIC-re.

  1. frow_text_table
  2.         movlw   HIGH(frow_text_table)
  3.         movwf   PCLATH
  4.         movf    count,w
  5.         addwf   PCL,f
  6.         retlw   0x54
  7.         retlw   0x65
  8.         retlw   0x6D
  9.         retlw   0x70
  10.         retlw   0x3A
  11.         retlw   0x20
  12.         retlw   0x48
  13.         retlw   0x75
  14.         retlw   0x6D
  15.         retlw   0x3A
  16.         retlw   0x20
  17.         retlw   0x44
  18.         retlw   0x61
  19.         retlw   0x79
  20.         retlw   0x73
  21.         retlw   0x3A
  22.         retlw   0x00
  23.  
  24. display_first_row
  25.         bsf             disprs
  26.         clrf    count
  27. frow_loop
  28.         call    frow_text_table
  29.         xorlw   0x00
  30.         btfsc   STATUS,Z
  31.         return
  32.         movwf   dispdat
  33.         call    sendis
  34.         incf    count,f
  35.         goto    frow_loop


A display_first_row hívása egy 16F877A-s PICen tökéletes eredményt produkál, a text_table-ból kírja a karaktereket.
Ám ha 18F458-on használom, akkor: minden karakter dduupplláánn jelenik meg.

Többféle dolgot kipróbáltam, pl. az időzítést nyújtani, de eredményre csak az utolsó előtti sor, az incf count,f duplázása vezetett eredményre. Kérdésem, hogy ez így normális?

Ha valaki látja a hibát, kérlek osszátok meg velem!

Előre is köszi!
Üdv
The_Saint
(#) The_Saint válasza Hp41C hozzászólására (») Feb 2, 2011
Köszi, megjött a fesz! Kimenet volt az RA2..
(#) The_Saint válasza Hp41C hozzászólására (») Feb 2, 2011
Szia! Köszi a gyors választ! 1 dolgot nem értek... miért kell bemenet legyen a láb? Én ott akarnék egy mérhető feszültséget, végső soron egy DAC kellene aminek a feszültsége a RA2-jelenik meg.... De akkor ez nem kimenet? Vagy ezért nem ment nekem eddig, mert eddig kimenetnek volt konfigolva. Na kipróbálom! Köszi még1x!
Üdv
Következő: »»   1 / 3
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