Fórum témák
» Több friss téma |
... meg kimaradt egy utasítás a Vissza címke után:
Idézet: Ez így nem világos számomra. Hogy néz ki a kód, mikor kapcsol be a LED (induláskor pl. természetesen hiszen akkor MÉG nincs USB kapcsolat) és törlöd-e valamikor az állapotát?„A processIO függvényben az USB státusz vizsgálatánál a return elé betettem az m_LED2 bekapcsolását, ami ilyenkor meg is történik.” Idézet: Természetesen nincs, hiszen nem tudom, hogy mit csinálsz és mi okozza a hibát. „van esetleg valami javaslatod?”
A kód így néz ki:
if ((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)){ van=0; mLED_2_On(); // return; } else{ van=1; mLED_2_Off(); } if (van==1) { //-- Read data from host if the input buffer is empty if (USBUSARTIsTxTrfReady() && (numBytesRead==Buffercp)) { numBytesRead = getsUSBUSART(USB_Out_Buffer,64); Buffercp=0; } //-- Send data to host if the output buffer is not empty if (USBUSARTIsTxTrfReady() && (numBytesToSend!=0)) { putUSBUSART(USB_In_Buffer,numBytesToSend); numBytesToSend=0; } CDCTxService(); } Induláskor természetesen a LED bekapcsol, (amikor leáll a progi akkor is) kapcsolat felvételkor meg ki.>
Ha az USB kábel kihúzása nélkül is leáll a kapcsolat, akkor az hiba, aminek ki kell deríteni az okát. Remélem, nem valami power save feature a PC részéről (Bluetooth egeremnél volt ilyne gond, 3 hónapig szenvedtem miatta, amikor találtam végre neten információt arról, hogy hol lehet ezt kikapcsolni).
Első körben tehát tisztázni kellene, hogy a két feltétel közül melyik billen be, és milyen alkalomból. (Pl. adott idejű bekapcsoltság után?) A kiíró eljárásnak pedig figyelnie kellene, hogy megvan-e a kapcsolat, s el kell döntened, hogy mit csináljon, ha küldeni szeretne, de nincs kinek.
Helló.
Kösz, 8x8 biteshez is kell ugye? A 8x8 bites az működik így is, de gondolom ennél sem árt esetleg kell még javítani rajta valamit? Amúgy a táblázatosnál mit rontottam el hogy nem jó? Most ugyan működik a bsf-el is.
Szia!
Ide is kell... A goto OSSZEAD goto X helyett miért nem használsz call OSSZEAD és return -t? Töltsd fe vagy küld el a táblázatosat ... Egyébként az MpLab szimulátorával tesztelem én is azt, amit megírtál...
Helló.
Kösz a segítséget. A táblázatosat inkább csak e-mailbe úgy jó?
Jelenleg ott tartok hogy a státus vizsgálat eredményének változóját (van=1) globálisá tettem és a főprogramban ennek teljesülésekor engedem a processIO, usb_cdc_getc() és az outdec(b1all,0) függvények hívását.
Azt elértem hogy a progi futása (amit az m LED_1_Toggle () jelez) nem áll le USB kapcsolat megszünésekor, amit meg az m_LED2 jelez. Újracsatlakozáskor lehet újból kapcsolatot létesíteni. A Dynamic CDC demo terminál (amit ajánlottál) folytatja a kommunikációt. (mint ha USB HID kapcsolat lenne). Azt viszont nem tudom hogyan lehetne ellenőrizni azt az állapotot amikor az USB kapcsolat nem szakad meg a PC-vel csak a lekérdező program nem fut. Van az USB-nek ilyen állapot ellenőrzése? Üdv.
Ha jobban szétnézel a piccolo_usb.c-ben, vannak ott a Microsoft demó alkalmazásból átvett "callback" függvények. Ezekkel is lehetne okosságokat csinálni, ha valakinek van kedve/ideje elmélyedni az USB rejtelmeiben. Én most nem érzem magam valakinek...
Köszi. Igaz nem érzem magam valakinek de már nézegetem és próbálkozom.
Szia!
inkább megmutatom mit írt ki mert full kezdő vagyok ilyen téren és köszi a gyors választ.
Szia!
Minden tökéletes (vagy majdnem az (program)). A nem használt konfigurációs bitek 0 értékkel olvashatók vissza, de a hex -ben 1 az értékük. A programozás jó. :yes:
Hát ez tényleg nagyon gyors volt köszi!
![]()
Üdv!
A napokban ezzel a kapcsolással:http://www.hobbielektronika.hu/kapcsolasok/digitalis_ora_homerovel.html kapcsolatban megkérdőjeleztem,hogy estleg a végleges .hex került-e föl az oldalra,mert nekem nem működött.Úgy érzem be kell vallanom,hogy én hibáztam.Akapcsolás kiválóan, azonnal működik.A programot a WPB LPT Minivel égettem és az eeprom tartalmat ezért külön kell beégetni amit nem tettem meg.Most hibátlanul működik!Úgy gondolom tartoztam ezzel a helyesbítéssel a szerzőnek.
Figyi, most oszinten, elolvastad Hp42C cikket??? A 4. oldal aljan a kepben levo kodot tanulanyoztad???
Akkor lathatod, hogy nem jo az ADDWF PCL,F -- nezd meg ott mi van helyette es miert! Masik, teljesen mindegy, hogy MOVLW 7 -et vagy MOVLW high(0x700) -at irsz-e... A high-nak nem az a lenyege, hogy kiszedje neked a literalis szambol a felso reszt! Hanem az, hogy egy cimket adsz meg neki, pl MOVLW high(tablazat). De ez is ott van tisztan a ckkben... Klikk IDE es a 4. oldal aljan levo kodot tanulmanyozd...
Ok, kicsit nehéz olvasmány el kellett olvasnom párszor, de igazából annyi még nem világos, hogy mondjuk nekem mivel jobb a bsf-nél? Ha a táblázat mindig változó címen van akkor megértem, mert akkor tényleg nagyon jó, de most úgymond felesleges nekem.
Mindazonáltal most már működik: tabla1 MOVLW 0X07 MOVWF PCLATH (adatok....200db) tabla2 MOVLW 0X06 MOVWF PCLATH (adatok...100db) Így már helyes ugye? Kösz a segítséget.
Annyi lemaradt, hogy a táblázat elemszámára mutató sorszámot a MOVWF PCLATH után kell tenni nem a call tábla elé, csak ezzel újabb gondok adódnak mivel az egyik táblázatnál 2db független mutató mozog és mivel call tábla után a W regiszter tartalma megváltozik a mozgatás miatt kell egy újabb segéd változó hogy tudjam mikor melyik mutatót kell figyelembe venni, ennyiből jobb a bsf nem?
Arra gondolunk, hogy eljön az az idő, amikor a programod kinövi az 1530 - 1700 utasítást. Ekkor majd a táblázatokat lesz érdemes áthelyezni más program lapra...
Ok, lehet átalakítom arra amit mondtál végül is csak egy egy bites változó kell pluszba vagy egy éppen nem használtat befogok. (Remélhetőleg ez a progi nem fogja túlnőni, de egyszer egy másik talán.)
BSF tobb okbol sem jo. Egyreszt mert ezzel csak es kizarolag "beegetett cimeket" lehet kezelni (ld alabb). Masreszt ha 3 bitet akarsz modositani akkor mar 1 utasitassal tobb, mintha MOVLW + MOVWF -et hasznalnal... Harmadreszt debuggolas es program megertes szempontjabol sem szerencses, ha ilyen modon modositgatod a PCLATH-ot.
Beegetett cimkek: Mikor BSF/BCF -et vagy pedig MOVLW 0x07 -et hasznalsz akkor a cim hivatkozasat "beegetted" a kododba. Ez megint csak tobb oknal fogva verzik: Ha pl kesobb valamilyen oknal fogva valtoztatod a tablazatod helyet, akkor a "beegetett cimhivatkozasokat" is modositanod kell a kododban -- ezt konnyu elfelejteni egy 3 sornal nagyobb program eseteben, emaitt ez programozas technikailag helytelen. Szerencsere minden modern Assembly fordito kepes cimkek kezelesere, es ezeket celszeru is kihasznalnunk. Tehat mikor azt csinalod, hogy:
Akkor a
helyett celszerubb
-ot irni... Igy ha a tabla cimet kesobb megvaltoztatod akkor is biztositva van, hogy a MOVLW high() jo erteket fog a W-be tolteni... Ha nagyon nem szeretnel segedvaltozot bevezetni (mert mondjuk annyira nincs helyed a PIC-ben), akkor lehet trukkozni, ambar szerintem akkor valoszinuleg rosszul valasztottal PIC-et. Ime egy elkepzeles:
Hivasa pedig:
Avagy a pagesel mintájára egy macro -t írni:
A hívása pedig
Bevallom a PAGESEL teljesen kiment a fejembol, de azt is hasznalhatnank akkor mar, nem?
Idézet: „The linker will generate the appropriate page selecting code: For 12-bit instruction width (PIC10F, some PIC12/PIC16) devices, the appropriate bit set/clear instructions on the STATUS register will be generated. For 14-bit instruction width (most PIC12/PIC16) devices, a combination of BSF and BCF commands will be used to adjust bits 3 and 4 of the PCLATH register. For PIC16 extended devices, a movlp instruction is generated to set the page. If the device contains only one page of program memory, no code will be generated.”
A pagesel a PCLATH regiszter 3. és a 4. bitjét állítgatja, itt a 2..0 biteket is be kell állítani.
Ket napja kinlodok egy PIC12F675 mikivel, egyszeru dolgot kene csinalnia 1mp ig szamolja a beerkezo impuzusokat az egyik laban majd elkuldje soros porton.
A gond az hogy nem 8 hanem csak 7 adat bitet kuld habar megadom neki hogy 8 legyen. evice 12F675 Config INTRC_OSC_NOCLKOUT ,WDT_OFF,MCLRE_OFF CMCON = 7 Declare OSC = 4 Declare serial_data 8 DECLARE RSout_PIn Gpio.2 DECLARE RSOUT_MODE True DECLARE SERIAL_BAUD 2401 DECLARE RSOUT_PACE 4200 ALL_digital = true DIM c as byte loop: c= counter Gpio.0, 1000 RSOUT c goto loop ezz lenne a program, es nem tudom mar mit varialja rajta hogy rendesen kuldje az adatokat. (0 helyet 128 kuld)
Sziasztok!
Szeretnék megkérni valaki hozzáértőt, hogy a zip fájlban lévő asm-t átkonvertálja nekem hex-be. Sajnos nekem valamiért nem sikerült. Köszönöm! |
Bejelentkezés
Hirdetés |