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   58 / 1210
(#) zenetom válasza zenetom hozzászólására (») Márc 25, 2010 /
 
  1. MOVF D1,W
  2. MOVWF LATB


Így meg már működik, előbb nem ment, vagy csak kezdek megbolondulni... a MOVLW csak literális értéket mozgathat , de a változó is literális nem? Ezek szerint itt nem jó.
szerk.: a literális nem lehet változó most nézem, remélem ez volt a hiba
Ha igen, elnézést a bakimért, de hát ezért van a fórum
Köszönöm mindenkinek az eddigi segítséget!
(#) icserny válasza zenetom hozzászólására (») Márc 25, 2010 /
 
Kicsit hosszúra fog nyúlni a topik, ha mind a 85 utasításnál külön el kell mondani, hogy a http://esca.atomki.hu/PIC18/intro.html címen mintapéldákkal együtt le van írva, hogy melyik utasítás mire való.
(#) vilmosd válasza zenetom hozzászólására (») Márc 25, 2010 /
 
Hali
Talalsz mintakat minden processzorra kulon a C:\Proramfiles\Microchip\MPASM Suite\Template\code alkonyvtarban. Probald meg ertelmezni a 18F1320temp.asm filet. Valahogy igy kell felepiteni a te altalad irt ASM filet. Persze nem minden szukseges neked. Segitseget kaphatsz az ASM parancsok mukodeserol a MPLAB ASM helpjeben, vagy az eszkoz doksijaban. Termeszetesen kulfoldiul van leirva, de szotarral eleg konnyu boldogulni. Nagyon fontos az eszkoz reszletes megismerese is. Bizony elsore egy kicsit bonyolult onerobol tanulni, de itt ezen a forumon mindig vannak segitokesz emberkek. Ha sokat foglalkozol vele hamarosan belejossz mint kiskutya az ugatasba. Nem art elsore valami egyszeru peldaval kezdeni, mert ott rogton megismered a MPLAB-ot, Az ASM nyelv rejtelmeit, az utasitaszkeszletet, valamint magat az altalad kivalasztott eszkozt is. Probalj meg felhajtani a neten mintapeldakat. Lehetoleg ne valami uberbonyolult dologba kezdjel eloszor, hanem a legegyszerubb peldat keressed. Ott latni fogod az ASM programok rejtelmeit, felepiteset, esetleges trukkoket, es ezutan mar mindig konnyebb lesz magasabb szintu programokat megoldani. A doksikban levo mintapeldak (mint a Te esetedben) felteteleznek egy alap ASM ismeretet. Pont ezert egy kicsit nehez kezdoknek alkalmazni ezeket. De gondolom idovel neked is megadatik majd ez az alap, es utana johet a "nuklearis eromu vezerles megoldasa 16F84-re" Bocs ez csak vicc volt, de altalaban mindenki igy indult el.
Udv Vili
(#) zenetom válasza icserny hozzászólására (») Márc 25, 2010 /
 
Egyébként innen szoktam "puskázni"
De ráfogom arra hogy figyelmetlen voltam, ez a napi 5 órás alvás lehet nem elég...
vilmosd: igyekezek :yes:

Mégegyszer köszi a segítségeket!
(#) icserny válasza zenetom hozzászólására (») Márc 25, 2010 /
 
Az adatlap memóriatérképét is nézegesd, mert a CBLOCK 0x20 sem stimmel (az PIC12F, PIC16F esetén kell, ahol elől vannak a speciális funkciójú regiszterek).

PIC18 esetén az egyszerű programoknál az Access RAM területet érdemes használni (nem kell bankváltás).
(#) zenetom válasza icserny hozzászólására (») Márc 25, 2010 /
 
A CBLOCK 0x20 helyett mehet a 0x00?
(#) zenetom válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Jó hát
Sikerült a timer interrupt, viszont nemértem hogy a megszakítási frekvenciát hogyan állítom be (milyen gyakran hatjsa végre az interruptban lévő szubrutint, ami itt az RTCisr).
(#) vilmosd válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Hali
Meg egy tanacs. Nem fontos megfogadni, de lehet hasznos is. Ajanlanam induloba egy 20 labas probapanel megepiteset (nem dugdosos panel). A 16F asamblere csak 35 utasirasbol al, tehat hamarabb megismered az utasitaskeszletet. A 20 labas probapanelbe bele lehet tenni a 8 , 14 es 20 labas PICeket. a 12F683, 16F694 es a 16F690 egyforma bekotesu a tap (1. lab) felol. Ezek az eszkozok olcsok, de igen sok interface van beleintegralva. ASM tanulasra alkalmasabbak, mint a 18F sorozat (csak 35 utasitas). Raadasul ezekre sokkal tobb pelda talalhato a neten. Sot sok a magyar nyelvu irodalom is. Viszont az ASM szintaxisa, directivak egyebek megegyezik a nagyokeval. Gondolom nem csak egy projektot akarsz megcsinalni. tehat az erre koltott energia (penz, ido, agysejtek) nem vesz karba. Amikor mar elegge begyakoroltad a kicsiken a jatekot, at lehet terni a nagyobb testverekre. Utana mar nem kell mindennap feltenned 20-30 kerdest mert Te is elertel a "kezdo" szinvonalra, es tudni fogod az alapveto trukkoket az ASM vilagaban. Amennyiben erdekel egy ilyen penel dokumentacioja, szivesen segitek. Most, ha jol emlekszem nincsen csak sima 20 labas panel tervem, de rovidesen, (ha lesz ra ido) elkeszul a ICSP-vel ellatott panel is. Egy kis befektetessel gyorsabban tudsz eredmenyt elerni.
Udv Vili
Ps : szoktam aludni, de most nalam 17:43 van.
(#) vilmosd válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Hogy all a mostani ASM listad? Lathatnam?
(#) icserny válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Idézet:
„A CBLOCK 0x20 helyett mehet a 0x00?”

Igen. Ha jól látom az adatlapban, akkor 0x00-tól 0x7F-ig terjedő RAM területet használhatod adattárolásra a bankregiszter használata nélkül.
(#) zenetom válasza vilmosd hozzászólására (») Márc 26, 2010 /
 
Bemásolom az egészet...
  1. LIST P=18F1320
  2.  #INCLUDE "P18F1320.INC"
  3.  CONFIG OSC=XT,  WDT=OFF,
  4. LVP=OFF, MCLRE = OFF, BOR=OFF,
  5.  DEBUG=OFF, PWRT=off   
  6.  config EBTRB=off,EBTR1=off,EBTR0=off,
  7. WRTD=off,WRTB=off,WRTC=off,WRT1=off,
  8. WRT0=off,CP0=off,CP1=off,CPB=off,CPD=off
  9.  ;kódvédelmek kikapcsolása
  10. ;4MHz-es kristállyal egy utasítást (amit 4 órajel periódus alatt csinál meg) 0,000001 sec alatt csinál meg.
  11.  
  12.         CBLOCK  0x00                    ;A 0x00 egy szabad memória rész kezdő címe
  13.         hours
  14.         mins
  15.         secs
  16.         D2
  17.         D3
  18.         ENDC
  19.  
  20.         CBLOCK 0x080
  21.         STATUS_TEMP
  22.         WREG_TEMP
  23.         BSR_TEMP
  24.         ENDC
  25.  
  26.         ORG     0x0000
  27.         GOTO START
  28.  
  29.         ORG     0x0008
  30.         BRA RTCisr
  31.  
  32.         ORG 0x0018
  33.         MOVFF   STATUS,STATUS_TEMP ;save STATUS register
  34.         MOVFF   WREG,WREG_TEMP          ;save working register
  35.         MOVFF  BSR,BSR_TEMP              ;save BSR register
  36.  
  37.         ;       *** low priority interrupt code goes here ***
  38.        
  39.         MOVFF   BSR_TEMP,BSR              ;restore BSR register
  40.         MOVFF   WREG_TEMP,WREG          ;restore working register
  41.         MOVFF   STATUS_TEMP,STATUS ;restore STATUS register
  42.         RETFIE
  43.  
  44. START  
  45.         CLRF PORTB
  46.         CLRF LATB      
  47.         MOVLW b'01111111'
  48.         MOVWF ADCON1
  49.         MOVLW b'00000000'
  50.         MOVWF TRISB
  51.         MOVWF TRISA
  52.         CLRF LATB
  53.         CLRF LATA
  54.         CALL RTCinit
  55.         MOVLW b'11000000'
  56.         MOVWF INTCON
  57.  
  58. JELEZ
  59.         MOVF secs,W
  60.         MOVWF LATB
  61.         GOTO JELEZ
  62.  
  63. RTCinit
  64.         MOVLW 0x80 ; Preload TMR1 register pair
  65.         MOVWF TMR1H
  66.         CLRF TMR1L
  67.         MOVLW b'01001101' ; 4-5. bit az osztó
  68.         MOVWF T1CON ;
  69.         CLRF secs ; Initialize timekeeping registers
  70.         CLRF mins ;
  71.         MOVLW .12
  72.         MOVWF hours
  73.         BSF PIE1, TMR1IE ; Enable Timer1 interrupt
  74.         RETURN
  75.  
  76. RTCisr
  77.         BSF TMR1H, 7
  78.         BCF PIR1, TMR1IF ; Clear interrupt flag
  79.         INCF secs, F ; Increment seconds
  80.         MOVLW .59 ; 60 seconds elapsed?
  81.         CPFSGT secs
  82.         RETFIE ; No, done
  83.         CLRF secs ; Clear seconds
  84.         INCF mins, F ; Increment minutes
  85.         MOVLW .59 ; 60 minutes elapsed?
  86.         CPFSGT mins
  87.         RETFIE ; No, done
  88.         CLRF mins ; clear minutes
  89.         INCF hours, F ; Increment hours
  90.         MOVLW .23 ; 24 hours elapsed?
  91.         CPFSGT hours
  92.         RETFIE ; No, done
  93.         MOVLW .01 ; Reset hours to 1
  94.         MOVWF hours
  95.         RETFIE FAST; Done
  96.  
  97.  
  98.         END

A secs meg is jelenik az RB-n, viszont kb 15Hz-el...
(#) Hp41C válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Szia!

A timer1 ebben a beállításban a belső órát (4MHz negyedét) 1 előosztással 32768-cal osztja... Nem a T1 oszcillátoráét...
A 65. sorban az 1. bitet is állítsd 1-re: külső órajel.

A megszakítási rutinban egy kijárat legyen. Most több helyen tér vissza és még a visszatérés módja is különböző: 80, 85, 90. sor befault, 93. sorban a regiszterek visszaállításával...

Szia
(#) icserny válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Az RTC programok általában a Timer1 saját oszcillátorának használatát feltételezik, ami 32768 Hz-es órakvarccal megy. Ha TMR1H-t 0x80-nal inicializálod (lásd RTCinit első két utasítása, és RTCisr első utasítása), akkor 1 másodpercenként csordul túl Timer1.

Ha az utasításciklusokat számoltatod, akkor az említett két helyen kell más értéket betölteni, és a nagy frekvencia miatt szükség lesz egy szoftveres számlálóra, ami a másodperceknél kisebb időegységeket számlálja. Csak a kettő hatványai szerinti osztást lesz nehéz összeegyeztetni a kettőtől különböző törzstényezőkből álló órajelfrekvenciával...
(#) vilmosd válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Hali
Szoval a listadat nem igy kellene megcsinalni. Latom nem erted meg teljesen az interrupt kezelest . Majd kesobb irok a Te programodrol. Most mellekelek egy szajbaragos ASM doksit. Addig is tanulmanyozzad.
Udv Vili

pic18asm.PDF
    
(#) zenetom válasza vilmosd hozzászólására (») Márc 26, 2010 /
 
Közben egy LCD-vel is szórakozok...
(#) icserny válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Bölcsebb volna előbb az alapokat lerakni.
(#) zenetom válasza icserny hozzászólására (») Márc 26, 2010 /
 
Csak byte-okat küldözgetek ki LATB-be, (egyébként LPT-re már írtam komplett LCD kezelő programot, mert az LCDSmartie nem tud mit kezdeni a 4bites kijelzőkkel, ráadásul az enyém 24 oszlopos) tehát egy nibble, enable, második nibble, aztán enable --> ez egy betű.
A Hello Wo-ig eljutottam, viszont az 'r' betűt nem akarja kiíni, de más karaktereket meg igen. Gondoltam az LCD.vel van a baj, de LPT-n ugyanúgy (másik programommal) nibbléket küldtem kifele. De ott meg kiírja. Szóval a PIC szúr el valamit. Pedig dettó ugyanazt csináltam meg LPT-ről is. Nem tetszik nekem ez... Már vagy 3 órája csak azon agyalok miért nem 'r' betűt ír oda...
Egyébként csak nálam vannak ilyen idióta esetek?
(#) icserny válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Idézet:
„Szóval a PIC szúr el valamit.”
Ezt nem tarto valószínűnek!
(#) zenetom válasza icserny hozzászólására (») Márc 26, 2010 /
 
Mármint a program, amit én csináltam asm-ben
De 3 órája nézek 5 sort és jónak tűnik szóval nem tudom hol lehet a hiba :wilting:
(#) potyo válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Nemegyszer volt már, hogy fél napig néztem valamit, hogy miért nem jó...
(#) zenetom válasza potyo hozzászólására (») Márc 26, 2010 /
 
Legalább egyszerű volt a program?
(#) zenetom válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Egyre rosszabb, már a kijelző se akar működni.
Feladtam.
(#) Hp41C válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Szia!

Töltsd fel (féjl mellékletként) a programot.... Az MpLab -ban van még sok lehetőség: pl. a Simulator Logic Analyzer... A B portra kíadott adatok időzítését is láhatod vele...

Szia
(#) vilmosd válasza zenetom hozzászólására (») Márc 26, 2010 / 1
 
Hali
Amint latom meg sok hianyossag van az ASM tudasodban. Eloszor is meg kellene ertened a programok strukturajat. Nem nehez, de eloszor is minden programban az elejen ugye megadjuk a PIC tipusat, majd a configot (ez megvolt). Utana beirjok a kezdocimre (0x00) hogy mit fogunk csinalni itt. Mivel keves memoria van a IT cimekig ezert elugrunk a foprogram kezdocimere (szabadon valaszthato, vagy csak egy cimke es GO) Ezutan, ha hasznaljuk az IT-t, a IT vektorokra is beirjuk a IT rutin kezdetere mutato ugrast. Mostmar az elejevel keszen is lennenk. Most kezdodik a munka. A foprogram eleje az inicializals. Itt meg kell adni az altalunk hasznalt egysegek alaphelyzetbe allitasat, es az altalunk kivant funkciokat be kell allitani (adatlap vonatkozo fejezeteinek tanulmanyozasa). Ha megcsinaltuk ezeket, akkor johet a fo programhurok. Jelen esetben csak kiirunk egy szamlalot a portb-re. De van egy IT-nk ami barmely pillanatban beuthet. Mi tortenik ilyenkor? A PIC megszakitja a jelen programfutast es elugrik az IT vektorra. Ez idaig rendben is volnna, de az IT vegrehajtasban is hasznaljuk a W, a STATUS, es mas kozos regisztereket. Tehat ha azt akarjuk, hogy a visszatereskor a fo hurok azonos allapotba keruljon, az IT kezdeten el kell menteni a kivant regisztereket, majd a visszateres elott helyre kell allitani azokat. gondolj bele, ha peldaul a fo hurokban csinalsz epp egy bit vizsgalatot es a CARRY bit allapotatol fuggoen fogod a programot folytatni, mi fog tortenni ha beut az IT? Mivel ott is hasznalod a STATUS-t, meg fog valtozni pl a CARRY bit. Visszateres utan nem tudjuk milyen allapotban van, tehat az elozo vizsgalat erdmenye nem biztos hogy megfelelo iranyba tereli a programunkat. Erre szolgal az IT szubrutin elejen, es a vegen a 3-3 sor. Igy mar nyugodtan jatszhatunk az IT rutinban a kozos regiszterekkel, de a vegen mindent visszaalitottunk az eredeti allapotba. Igy kell korulbelul a programokat szervezni, es ha koveted ezeket a tanacsokat kevesebb problemad lesz a kesobbiekben. Ha lehet ilyen egyszeru programokkal kezd el az ismerkedest. Nem jo otlet az LCD kezelessel kezdeni. Probalj minel egyszerubb programokat irn, majd ha mar megismerted az alapokat, az interrupt kezelest, es a periferiak kezeleset, el lehet kezdeni valami egigero projekt tervezeset. De addig meg sok viz le fog folyni a Dunan. Ajanlom figyelmedbe a DS33014K.pdf dokumentet a MC honlapjan. Sokmindent leir az ASM programozas rejtelmeirol. MPASM user guide. Mellekelem a komplett projektet. Nezd at a valtoztatasokat, es igy probald meg folytatni a programot.
Udv Vili

18f1320.zip
    
(#) Hp41C válasza vilmosd hozzászólására (») Márc 26, 2010 /
 
Sziasztok!

Bocsánat, de még mindig az 1MHz -t számolja, a TMR1 megszakítás 30,5175813 ms -onként for beérkezni 1 s helyett. A megszakítási rutinban megvalósított időszámlálás csak akkor lesz jó, ha a TMR1 oszcillátor bemenetére egy 32.768 kHz-es kristály kerül két 22pF kondenzátorral, és a TMR1 a külső órajelet számolja.....

Sziasztok
(#) vilmosd válasza Hp41C hozzászólására (») Márc 26, 2010 /
 
Hali
En nem valtoztattam a kollega programjan, csak megprobaltam elmagyarazni neki a programiras mikentjet. Termeszetesen ha kulso oszcit akar hasznalni at kell irni a TMR1 inicializalast, de igy le tudja szimulalni az MPLAB-ban Ha elesben megcsinalja az mar mas. Ott at kell allitani a TMR1 orajel forrast.
  1. MOVLW b'01001111'                               ; External clock
  2.         MOVWF T1CON ;

Udv Vili
(#) vilmosd válasza vilmosd hozzászólására (») Márc 26, 2010 /
 
Bocs
  1. #
  2.         MOVLW b'00001111'                                 ; External clock
  3.         MOVWF T1CON ;[/b]
(#) zenetom válasza Hp41C hozzászólására (») Márc 26, 2010 /
 
Ha már ennyien segítetek, csak nem adom fel
vilmosd: csak azért akarom rámadzagolni az LCD-t a PIC-re hogy lássam mennyi idő telik el az infrán vett jelek között. Na meg persze lehet vele több dolgot is csinálni
(#) zenetom válasza Hp41C hozzászólására (») Márc 26, 2010 /
 
Csatoltam a programot, (a Hello-t kéne csak kiírnia) közben sikerült visszahozni, egy delay rutin nem volt jó, de a Hello helyett csak a Hell-t írja ki
Amit tudni kell a kijelzőről, hogy ugye alapból csak 4 adatbit kivezetése van (tehát az inicializálásban elég a "Kijelző és kurzor alaphelyzetbe" parancsot kiadni [0000 0010] ). A bekötése benne van az asm-ben.
(#) icserny válasza zenetom hozzászólására (») Márc 26, 2010 /
 
Idézet:
„a Hello helyett csak a Hell-t írja ki”

Próbálj a karakterek küldése között hosszabb szünetet tartani!
Következő: »»   58 / 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