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   69 / 1210
(#) zenetom válasza icserny hozzászólására (») Júl 22, 2010 /
 
Mint ha korábban is elkövettem volna ezt a hibát :hide:
Mostmár minden világos, köszi!
(#) zenetom válasza zenetom hozzászólására (») Júl 22, 2010 /
 
A terhelhetőségről hol találok adatot a pdf-ben? Régebben olvastam hogy kb. 20mA-ig lehet terhelni egy kimenetet, vagyis LED meghajtásra elég (mármint nem eloxidál, hanem nem lesz baj belőle ).
(#) potyo válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Meglepő módon az electrical specifications fejezetben.
(#) zenetom válasza potyo hozzászólására (») Júl 22, 2010 /
 
Közbe meg lett... az ELECTRICAL CHARACTERISTICS-ben volt
(#) Hp41C válasza zenetom hozzászólására (») Júl 22, 2010 /
 
Szia!
  1. movf SZIMB1, SZIMB2

Az a legnagyobb baj, hogy a fordító nem jelez hibát és nem ad figyelmeztetést sem. A második szimblólum értéke páros, akkor a W -be tölti az első szimbólum értékének megfelelő címről olvasott adatot. Ha a második szimblólum értéke páratlan, akkor a STATUS bitjeit állítja be az első szimbólum értékének megfelelő címen levő adat szerint.

Hasonló jelenség figyelhető meg a 18F fordítónál, ha kifelejtjük a w/f részt (ekkor sem kapunk figyelmeztetést):
  1. iorwf  SZIMB1,A

vagy
  1. xorwf  SZIMB1,BANKED

Ugyan a rendeltetés default értéke f azaz 1, de az ACCESS RAM kiválasztása 0 -val történik (A = 0), így az A megadása a WREG -ben képzteti az eredményt, a BANKED megadása pedig a memóriában.

Ezen a két helyen kerülendő minden más szimbólum használata, csak a W - F, illetve A - BANKED szimbólumokat használjuk...
(#) zenetom válasza Hp41C hozzászólására (») Júl 22, 2010 /
 
Nos igen, nem jelzett hibát az MPLAB, amikor változóból akartam változóba másolni a MOVF-el.
(#) zenetom hozzászólása Júl 23, 2010 /
 
ASM-ben (MPLAB-ban) a " goto $+2 " utasítás a következő sor utánira ugrik (tehát kihagy egy sort és az azutánit hajtja végre) ?
szerk.: és ha így van, meddig lehet növelni az ugrást (vagyis itt a 2-t) ?
(#) zenetom válasza zenetom hozzászólására (») Júl 23, 2010 /
 
De buta vagyok, most nézem:
Idézet:
„Előre ugrásnál ne felegdük, hogy a GOTO utasítás két utasításszót (4 bájtot) foglal le, ezért a rákövetkező utasítás $+4 címen kezdődik.”

Mostmár értem.
(#) Hp41C válasza zenetom hozzászólására (») Júl 23, 2010 /
 
Szia!

Nem tanácsos a $ szimbólumot így használni, mert eltérések vannak a családok között:
- 16F -en a következő utasítás az akutális utasítás címe +1 -en van
- 18F -en a következő utasítás az akutális utasítás címe +2 -en van, ha az aktuális utasítás egyszavas, és a +4 en, ha a ha az aktuális utasítás kétszavas...

Szerintem egy címke kiírása nem lehet nagy gond...

Célszerűbb a bra utasítás alkalmazása, az csak 1 szó...
(#) zenetom válasza Hp41C hozzászólására (») Júl 23, 2010 /
 
Címkéknél BRA utasítást használok, nem tudom hogy ennél az ugrásnál hogy viselkedik a BRA.
Idézet:
„18F -en a következő utasítás az akutális utasítás címe +2 -en van, ha az aktuális utasítás egyszavas, és a +4 en, ha a ha az aktuális utasítás kétszavas...”

Itt az aktuális utasítás alatt a soron következő utasítást érted?
szerk.: azért lenne jó ez az ugrás, mert amúgy meg 14 címke kéne plusszba (vagy átírom a motort)
(#) zenetom válasza zenetom hozzászólására (») Júl 23, 2010 /
 
Azt hiszem inkább átírom akkor a motort. Már kész van, így kevesebb memóriát foglal
(#) trudnai válasza zenetom hozzászólására (») Júl 23, 2010 /
 
Idézet:
„Itt az aktuális utasítás alatt a soron következő utasítást érted?”


Aktualis utasitas amit epp vegrehajt a PIC. Tehat ha "BRA $+2" -t irsz, akkor az aktualis a 'BRA'. De ha 'GOTO $+4' -et, akkor a 'GOTO' az aktualis, ami mar 2 szavas... Mindketto pelda csupan annyit csinal, hogy kozvetlenul a BRA ill. GOTO mogott allo utasitasra 'ugrik', amit amugy is megtenne a PIC, tehat legfeljebb idozitesi feladatot lat el mintsem logikait.
(#) zenetom válasza trudnai hozzászólására (») Júl 23, 2010 /
 
Még jó hogy átírtam
(#) zenetom hozzászólása Júl 24, 2010 /
 
A veremtárban mennyire gyakran szoktak adatot tárolni? Mert találtam itt a topicban egy asm kódot, ahol a veremben(?) tárolódik vagy 160 byte-nyi információ. Vagy az nem a verem? Csak mert RETLW-vel tér vissza...

A vége fele van egy ilyen rész:
  1. ; 1/16 Step DAC A Table
  2. STEP_TABLE_A
  3.   addwf         PCL, 1                          ;Deg                    DAC A
  4.   retlw         B'01000000'                     ;0        0.00    0             ---
  5.   retlw         B'00000001'                     ;5        0.10    1
  6.   retlw         B'00000010'                     ;11       0.20    2
...

Itt forráskód:
Bővebben: Link

Azt se értem hogy a "addwf PCL, 1" hova mutat.
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 24, 2010 /
 
A literális (konstans) adatokat általában a programmemória egy részében szokás eltárolni. Itt is ez a helyzet, tehát ez nem stack, hanem a programmemória. Ezt úgy kell elképzelni, hogy van egy kezdőcímed, jelen esetben a címke (vagyis az addwf PCL,1) sor. Ehhez a címhez egy eltolást adunk hozzá úgy, hogy a programszámláló alsó bytejához adjuk hozzá a W- ben tárolt eltolás értékét, majd a konstans adattal visszatérünk a szubrutinból. Ezt az eljárást az angol szakirodalomban look-up table- nek nevezik. Egy kis olvasni való
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 24, 2010 /
 
Tehát ha ezt tömbnek nézzük, akkor az "addwf PCL,1"-nél ami a workben van (ami hozzáadódik a PCL-hez) az az index, ami mutatna a tömb elemére, ami belekerül a workbe? Ez egyszerűbb mint gondoltam, a pdf-et átnyálazom, köszi szépen! :yes:
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 24, 2010 /
 
Igen, nagyjából ez a helyzet. Addig viszonylag egyszerű a dolog, amíg 256 byte- nál kevesebb adatot tárolunk, attól felfelé már állítani kell a PCH-t is, ami már nagyobb odafigyelést igényel. Ezek a linkelt pdf- ben szépen le vannak írva, tanulmányozgasd csak!
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 24, 2010 /
 
Próbáltam értelmezni a pdf-t, bár angol tudásom nem biztos hogy elegendő , de lehet hogy a 18F szériáknál máshogy van? A pdf csak utalást tesz róla hogy más mikrovezérlőknél nézzük meg az adatlapot, de alig értem miről is van szó.
Erről a Table dologról sem ír szinte semmit, vagy csak én nem értem.
De az általam használt kód nem akar működni:

  1. MOVLW d'2'
  2.         CALL PROGRAM_ADAT
  3.         MOVWF PAINT_C
  4.  
  5. TOMB_HASZNALATA_PROBA
  6.         MOVLW b'11100011'
  7.         RCALL S_DATA_KULDES
  8.         DECFSZ PAINT_C
  9.         BRA TOMB_HASZNALATA_PROBA
  10.  
  11.  
  12.         RCALL DELAY
  13.         BSF LATB,1                      ; jelet kap a CS, letilt a kijelző (nem fogad adatokat)
  14. VEGE2
  15.         NOP
  16.         BRA VEGE2
  17.  
  18.  
  19. PROGRAM_ADAT
  20.         ADDWF PCL,1
  21.         RETLW d'3'
  22.         RETLW d'6'
  23.         RETLW d'9'
  24.         RETLW d'12'


Szóval ebben az egyszerű részben csak annyit szeretnék csinálni hogy annyiszor menjen végig a ciklus, amennyivel visszatér a RETLW. Viszont ha ezt berakom a PIC-be akkor összevissza megy végtelen ciklusban.
szerk.: szóval elvileg 6x kéne lefutnia a ciklusnak nem?
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 24, 2010 /
 
Ha 18F szériát használsz, akkor célszerű a táblaműveleteket támogató utasításokat használni, hiszen éppen erre találták ki őket. A PICCOLO project is tartalmaz erről némi ismertetőt. Bővebben: Link
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 24, 2010 /
 
Szóval 18F szériánál nem használható a RETLW?
Ez a táblaműveletes dolog nekem még nagyon magas
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 24, 2010 /
 
Használható ez is, csak nem szokták, mert van rá megfelelőbb utasításcsoport.
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 24, 2010 /
 
Pláne hogy nálam nem működik. Megpróbálom értelmezni ezt a táblás eljárást.
(#) El_Pinyo válasza zenetom hozzászólására (») Júl 24, 2010 /
 
  1. #include "p18f4550.inc"
  2.  
  3.         CBLOCK 0x000
  4.         PAINT_C
  5.         SEGED
  6.         ENDC
  7.  
  8.         org 0
  9.         goto Init
  10.  
  11.         org 0x0200
  12. Init
  13.         MOVLW upper PROGRAM_ADAT
  14.         MOVWF TBLPTRU
  15.         MOVLW high PROGRAM_ADAT
  16.         MOVWF TBLPTRH
  17.         MOVLW low PROGRAM_ADAT
  18.         MOVWF TBLPTRL
  19.  
  20. Main   
  21.         MOVLW d'0'              ;ide kell megadni a "tömb indexet"
  22.         CALL Szamol
  23.        
  24.         GOTO Main
  25.  
  26. Szamol
  27.         MOVWF SEGED,0
  28.         MOVLW low PROGRAM_ADAT
  29.         MOVWF TBLPTRL
  30.         MOVF SEGED,W
  31.         ADDWF TBLPTRL,F,0
  32.         TBLRD*
  33.         MOVFF TABLAT,PAINT_C
  34.         RETURN
  35.  
  36.         org 0x1000
  37. PROGRAM_ADAT
  38.         DB d'3', d'6', d'9', d'12'
  39.  
  40.         END


Próbáld ki a fenti kódot. Mielőtt meghívjuk a Szamol nevű szubrutint, a W- be kell helyezni az index értékét. Lehetne még rajta pofozni, de a célnak szerintem megfelel. Igyekeztem univerzálisra csinálni, pl. nem muszáj az 1000- es címtől lenni az adatoknak, lehetnek máshol is. Amire oda kell figyelni, hogy ha egyéb adatokat is akarsz tárolni, akkor egy DB sorban páros számú adatot kell megadni, mert így lesz folytonos az indexelés.

Szerk: Azt elfelejtettem írni, hogy célszerű 0xnnnn00 címre helyezni a táblát, mert ekkor lehet a fenti kóddal a maximális számú (256) adatot eltárolni.
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 24, 2010 /
 
Nagyon szépen köszönöm!
Közben sikerült az EEPROM memóriát is kezelni, az egyszerűbbnek tűnik, de így ezzel együtt már van fél megám
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 25, 2010 /
 
Közbe felmerült az igény hogy nagyobb memória kéne.
Kevés még ez a 256 bájt is. Nem lehetne valahogy többet tárolni?
(#) Hp41C válasza zenetom hozzászólására (») Júl 25, 2010 /
 
Szia!

- A pic18F -es családban van olyan kontroller, aminek 1K adat EEProm -ja van (18F2620),
- A program memória (egy tartományát) is lehet írni / olvasni sokféle pic kontrollerrel,
- Külső soros EEProm memória kezelése SPI vagy I2C felületen (24FC512 - 64Kbyte, 24FC1025 - 128Kbyte / 25F4096 - 512Kbyte....).
(#) potyo válasza zenetom hozzászólására (») Júl 25, 2010 /
 
Tárolni könnyű, csak odaírod a többi után. Kiolvasni lesz bonyolultabb. De ha érted El_Pinyo kódját, akkor ezt egyszerűen ki tudod terjeszteni 16 bites címzésre. Annyi a lényeg, hogy a Szamol meghívásakor pl. SEGEDL és SEGEDH változókban legyen a kívánt bájt címe, és akkor
  1. MOVLW low PROGRAM_ADAT
  2. ADDWF SEGEDL, W
  3. MOVWF TBLPTRL, ACCESS
  4. MOVLW high PROGRAM_ADAT
  5. ADDWFC SEGEDH, W
  6. MOVWF TBLPTRH, ACCESS
  7. TBLRD*
  8. MOVFF TABLAT, PAINT_C
  9. RETURN
(#) zenetom válasza potyo hozzászólására (») Júl 25, 2010 /
 
Köszi, mindjárt ki is próbálom.
(#) potyo válasza zenetom hozzászólására (») Júl 25, 2010 /
 
Azért szimulátorban is ellenőrizd le, mert ezt csak úgy fejből írtam. Meg az ADDWF utasításoknál még a végéről lemaradt a BANKED paraméter, tehát ADDWF SEGEDL, W, BANKED és ugyanígy a SEGEDH-nál is. Valószínűleg a fordító jól fordítja enélkül is, de biztos, ami biztos.
(#) zenetom válasza El_Pinyo hozzászólására (») Júl 26, 2010 /
 
No még csak most jutottam el, hogy ki próbáljam ezt a kódot. Annyit nem értek hogy az Init rész miért a 0x0200-as címen van? No meg akkor a főpromram is innen kezdődik, illetve ugye ahol vége van az Init-nek.
Következő: »»   69 / 1210
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