Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   212 / 1211
(#) Hp41C válasza c27 hozzászólására (») Feb 19, 2012 /
 
... meg kimaradt egy utasítás a Vissza címke után:
  1. VISSZA
  2.   bcf  STATUS,C
  3.   RLF  EL,f
(#) icserny válasza Pepebá hozzászólására (») Feb 19, 2012 /
 
Idézet:
„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.”
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?
Idézet:
„van esetleg valami javaslatod?”
Természetesen nincs, hiszen nem tudom, hogy mit csinálsz és mi okozza a hibát.
(#) Pepebá válasza icserny hozzászólására (») Feb 19, 2012 /
 
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.>
(#) icserny válasza Pepebá hozzászólására (») Feb 19, 2012 / 1
 
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.
(#) c27 válasza Hp41C hozzászólására (») Feb 19, 2012 /
 
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.
(#) Hp41C válasza c27 hozzászólására (») Feb 19, 2012 /
 
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...

sz.asm
    
(#) c27 válasza Hp41C hozzászólására (») Feb 19, 2012 /
 
Helló.
Kösz a segítséget. A táblázatosat inkább csak e-mailbe úgy jó?
(#) Pepebá válasza icserny hozzászólására (») Feb 19, 2012 /
 
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.
(#) Hp41C válasza c27 hozzászólására (») Feb 19, 2012 /
 
Küldjed...
(#) icserny válasza Pepebá hozzászólására (») Feb 19, 2012 / 1
 
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...
(#) Pepebá válasza icserny hozzászólására (») Feb 19, 2012 /
 
Köszi. Igaz nem érzem magam valakinek de már nézegetem és próbálkozom.
(#) Black King válasza Hp41C hozzászólására (») Feb 19, 2012 /
 
Szia!
inkább megmutatom mit írt ki mert full kezdő vagyok ilyen téren és köszi a gyors választ.
(#) Hp41C válasza Black King hozzászólására (») Feb 19, 2012 /
 
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:
(#) c27 válasza Hp41C hozzászólására (») Feb 19, 2012 /
 
Majd holnap átküldöm. Kösz.
(#) Black King válasza Hp41C hozzászólására (») Feb 19, 2012 /
 
Hát ez tényleg nagyon gyors volt köszi!
(#) locked hozzászólása Feb 19, 2012 /
 
Ü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.
(#) trudnai válasza c27 hozzászólására (») Feb 19, 2012 /
 
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...
(#) c27 válasza trudnai hozzászólására (») Feb 20, 2012 /
 
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.
(#) c27 válasza c27 hozzászólására (») Feb 20, 2012 /
 
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?
(#) Hp41C válasza c27 hozzászólására (») Feb 20, 2012 /
 
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...
(#) c27 válasza Hp41C hozzászólására (») Feb 20, 2012 /
 
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.)
(#) trudnai válasza c27 hozzászólására (») Feb 20, 2012 /
 
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:

  1. org    0x700
  2. Tablacskam
  3.     DT   "Kiirando Szoveg"
  4.     retlw  0


Akkor a
  1. MOVLW 0x07

helyett celszerubb
  1. MOVLW high ( Tablacskam )

-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:

  1. ; W-ben varjuk az indexet
  2. tablacimzes
  3.     ; W tartalmat hozza adjuk a PCL-hez, de az eredmenyt a W-ben taroljuk!
  4.     ADDLW   low ( tablazat )
  5.     MOVWF   PCLATH ; trukk: eloszor a PCLATH-ba tesszuk az offsetet
  6.  
  7.     ; kicsereljuk a PCLATH-ot a tablazat magas helyiertekevel
  8.     XORLW   high ( tablazat )
  9.     XORWF   PCLATH,F
  10.     XORLW   high ( tablazat )
  11.  
  12.     ; XOR ugye nem valtoztatja a C-t, tehat itt is
  13.     ; le tudjuk kezelni a tulcsordulast...
  14.     ; ...ha tulcsordulas volt akkor noveljuk a PCLATH-ot
  15.     BTFSC   STATUS,C
  16.     INCF    PCLATH
  17.  
  18.     ; tabla offsetjet batultjuk a PCL-be, ezzel az ugras megtortenik
  19.     MOVWF   PCL
  20.  
  21. tablazat
  22.     retlw   0x01  ; elso elem
  23.     retlw   0x02  ; masodik elem
  24.     retlw   0x03  ; harmadik elem
  25.     ...
  26.     retlw 0x0n  ; n. elem


Hivasa pedig:
  1. MOVF   index1,W
  2.     CALL    tablacimzes
  3.     ...
  4.     MOVF   index2,W
  5.     CALL    tablacimzes
(#) Hp41C válasza trudnai hozzászólására (») Feb 20, 2012 /
 
Avagy a pagesel mintájára egy macro -t írni:
  1. setpch macro address
  2.   if (high(address) & 0x10)
  3.     bsf PCLATH,4
  4.   else
  5.     bcf PCLATH,4
  6.   endif
  7.   if (high(address) & 0x08)
  8.     bsf PCLATH,3
  9.   else
  10.     bcf PCLATH,3
  11.   endif
  12.   if (high(address) & 0x04)
  13.     bsf PCLATH,2
  14.   else
  15.     bcf PCLATH,2
  16.   endif
  17.   if (high(address) & 0x02)
  18.     bsf PCLATH,1
  19.   else
  20.     bcf PCLATH,1
  21.   endif
  22.   if (high(address) & 0x01)
  23.     bsf PCLATH,0
  24.   else
  25.     bcf PCLATH,0
  26.   endif
  27.  endm


A hívása pedig
  1. setpch  Tablacskam
  2.   addwf PCL,f
(#) trudnai válasza Hp41C hozzászólására (») Feb 20, 2012 /
 
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.”
(#) Hp41C válasza trudnai hozzászólására (») Feb 20, 2012 /
 
A pagesel a PCLATH regiszter 3. és a 4. bitjét állítgatja, itt a 2..0 biteket is be kell állítani.
(#) brobert hozzászólása Feb 20, 2012 /
 
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)
(#) trudnai válasza Hp41C hozzászólására (») Feb 20, 2012 /
 
Teljesen jogos!
(#) baloghvl hozzászólása Feb 21, 2012 /
 
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!

0700.zip
    
(#) brato válasza baloghvl hozzászólására (») Feb 21, 2012 /
 
A hex is fenn van a neten
(#) baloghvl válasza brato hozzászólására (») Feb 21, 2012 /
 
Merrefelé?
Következő: »»   212 / 1211
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