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   427 / 1210
(#) Hp41C válasza Hilo hozzászólására (») Jún 27, 2013 /
 
Elég sokszor. A MCLR az újabb típusokon lehet digitális bemenet is. Lesz még néhány furcsaság: A T0CKI kimenet néha (16F628) bekötetlen nyelőelektródás (open drain).
(#) Hilo válasza Hp41C hozzászólására (») Jún 27, 2013 /
 
Először is Köszönöm,
Az MpLap státus sorában a STATUS bitjeit nekem nem mutatja, a W-t és a bankot igen.
Ismét tanultam egy új hasznos dolgot.
Ha jól értettem amit olvastam a "banksel"-ről, akkor ez nem assembly utasítás hanem az MpLab-ban lévő fordítóé? A "banksel nev" syntaxból az MpLab automata lefordítja a megfelelő bankba való átlépést!?
Azon kívül hogy ha "manuálisan" állítom a Status bitjeit és ezzel váltok Bank-ot, könnyebb elrontani, miért jobb ha még most az elején a banksel-t szokom meg?
(#) nedudgi válasza Hilo hozzászólására (») Jún 28, 2013 /
 
Igen.
A legfontosabb érv a banksel makró használata mellett az, hogy ha a változó egy másik bankba kerül valami miatt, akkor is helyesen fog működni a programod.
(#) Hilo válasza nedudgi hozzászólására (») Jún 28, 2013 /
 
A "másik bankba kerül" alatt azt érted hogy más PIC en bizonyos változó más Bankban van, vagy hogy később más PIC-eknél egy PIC en belül is változhat? (program vagy beállítás függően?)
(#) nedudgi válasza Hilo hozzászólására (») Jún 28, 2013 /
 
Ha a programot módosítod, új változókat definiálsz, akkor már más címre, másik bankba kerülhet egy korábban definiált változó. Az SFR regiszterek, amik a perifériákat kezelik, másik típusnál másik bankba kerülhetnek.
A hozzászólás módosítva: Jún 28, 2013
(#) Hp41C válasza Hilo hozzászólására (») Jún 28, 2013 /
 
Szia!
- A W értéke és az Órajel között a zdcc betüsorozat utal a STATUS bitjeire: Z - zero, dc - digit carry, c carry. Ha nagybetüt látsz, a flag értéke 1, ha kisbetüt, akkor 0.
- A banksel egy macro. A fordító a megadott kifejezés 8. és 7. bitje szerint beállítja az RP1 ill. RP0 iteket egy normál midrange kontrolleren. Egy advanced midrange vagy 18F típuson a BSR gerisztert tölti fel a megfelelő értékkel (movlb utasítás használja). Lényeg az, hogy a forrásban nem kell rögzíteni at értéket, a fordító szamolja ki (jól). Ha egy programot átírsz más típusra (pl 16F628 -ról 16F88 -re, mert kinőtte a memóriát), automatikusan számítja a Bank értéket a regiszterekhez (pl. EEprom kezelése).
A hozzászólás módosítva: Jún 28, 2013

ZDcC.JPG
    
(#) Hilo válasza Hp41C hozzászólására (») Jún 28, 2013 /
 
Köszönöm,
Ha a banksel macro-t használom mondjuk minden "beírás" előtt, akkor ha úgy jön ki hogy nem kell bankot váltanom mert előzőleg is már abban a bankban voltam amit használni akarok, akkor ilyen esetben a fordító ezt tudja/figyelembe veszi és nem piszkítja be fordítást?
Nyugodtan használhatom akár folyamatosan?
(#) Norgi hozzászólása Jún 28, 2013 /
 
Sziasztok!

Próbálkozom néhány teszt áramkör megépítésével, de gondjaim akadtak az égetésnél. Olvasni sikerült, de írni nem igazán. Viszont, lehet, hogy kinyírtam a PIC-et próba közben. Honna lehet tudni, hogy működőképes-e még? Igazából, a labortápról eddig 5v-ot vett fel, most meg 2 ampert, és esett a feszültség is...

N
(#) bbalazs_ válasza Norgi hozzászólására (») Jún 28, 2013 /
 
Az aramfelvetel A-ben van megadva, nem voltban. De ez valoban nagyon magas ertek. A PIC onmaga veszi fel ezt? Mert akkor mar izzana a tok, hacsak a leesett feszultseg nem par tizedvolt...
Hogy jo-e azt igy nem tudod megmondani, kieghetett port, kimehetett modul. De ha nem tudod olvasni (tobb olvasoval, torles utan sem), akkor biztosan rossz. A maximalis aramfelvetele ugy 100mA lehet, kb. 5V fesz mellett. A pontosabb erteket az adatlapban talalsz.

Esetleg nem lehet, hogy a tapfesz elcsuszott egy labbal? (GND helyere kerult volna?)
(#) Norgi hozzászólása Jún 28, 2013 /
 
Igen, igazad van, azt próbáltam meg leírni, hogy egy ideig ugyanabban a kapcsolásban tudtam olvasni, de írni nem igazán, azután valameddig lefutott az írás, 8 ledből négy elkezdett világítani, majd a labortápon már nem az 5v ot olvastam, hanem 1,2-1,3 V-ot, és nagy áramerősséget.

Szóval próbáljam meg olvasni, az adott kapcsoláson kívűl, ha nem sikerül, akkor kuka...

Nagyon szépen köszönöm a segítséget!

N
(#) Hp41C válasza Hilo hozzászólására (») Jún 28, 2013 / 1
 
Sajnos a fordító mindig befordítja a bank beállító utasitás(ok)at. Ha az egymásután beállítandó regiszterek azonos bankban vannak, elég az első előtt beállítani a bankot. Ha többfajta kontrollert is megcélzol, akkor az előbbi mondet úgy igaz, hogy minden típusnál azonos bankbeliek előtt elég állítani.
(#) jonatani01 hozzászólása Jún 28, 2013 /
 
Makrókat hogyan tudok elmenteni, és hova kell menteni hogy utána egy include-dal beépíthessem a programba?
(#) szaffo555 hozzászólása Jún 28, 2013 /
 
I2C vel kapcsolatosan kérdeznék.
A PIC master adási üzemmódjában mikor megkapja az ACK -t a slave -től miért elég így írni a programot az ACK figyelésére? (A kód több helyen is hasonlóan szerepel, ezt például a melléklet Microchipes I2C leírás 64. oldaláról vettem)

  1. BANKSEL SSPCON2
  2. btfsc SSPCON2,ACKSTAT ; Check ACK Status bit
  3. goto I2CFail ; failed, skipped if successful


A gondom az vele, hogy az ACKSTAT bitnek elvileg nem lesz ideje beállni, mert a PIC órajelével átrohan az utasításon, jóval előbb míg a slave ACK -t tudna küldeni mondjuk a 100KHz -es órajelével. . Ha én csinálnám valami várakozást beépítenék ide, de hogy mennyit az nem is lenne elsőre egyszerű kérdés.

A fenti kérdésemet a mellékelt leírásból kiszedett alábbi kódrészlettel sem tudom magyarázni, mert itt ugyan van várakozás a kiküldés után, de csak a 8 bites adat kiléptetésének idejére az SSPIF el. Ez nem vár az ACK ra.

  1. call Send_I2C_Byte ; Send Byte
  2. call WaitMSSP ; Wait for I2C operation
  3. BANKSEL SSPCON2
  4. btfsc SSPCON2,ACKSTAT ; Check ACK Status bit
  5. goto I2CFail ; failed, skipped if successful
  6.  
  7. WaitMSSP
  8. BANKSEL PIR1 ; BANK 0
  9. btfss PIR1,SSPIF ; Check if I2C operation done
  10. goto $-1 ; I2C module is not ready yet
  11. bcf PIR1,SSPIF ; I2C ready, clear flag
  12. retlw 0 ; Done, Return 0


Ti ezt hogy értelmezitek?
A hozzászólás módosítva: Jún 28, 2013

i2c.pdf
    
(#) Hilo hozzászólása Jún 28, 2013 /
 
Sziasztok, csak egy gyors kérdésem lenne: PIC en ha nem használok egy lábat, mit kell/érdemes csinálni vele? Van mód kikapcsolni mondjuk, vagy mire állítsam? konkrétan most 12f683-ról van szó, de a kérdés a későbbiekben más PIC-ekre is vonatkozik.
(#) Hp41C válasza szaffo555 hozzászólására (») Jún 28, 2013 /
 
Szia!
Maga a szinkron soros illesztő megvárja, az ACK pulcust. Ha a slave nincs kész az adat fogadásával, alacsony szintetn tartja a SCL vonalat az ACK kiadása előtt. Ha elkészül alacsonyra húzza a SDA -t és "elengedi" az CSL -t. Ha a SCL magasra vált, a master beolvassa az ACK értékét a ACKSTAT bitbe. Ha alacsony, akkor vette a megcímzett slave, ha magas, nem volt slave, aki vette volna az adatot.
(#) Hp41C válasza Hilo hozzászólására (») Jún 28, 2013 /
 
Ha beállítható kimenetnek, akkor kimenetre állítás és alacsony szintet kiadni rá. Ha csak bemenet lehet, akkor le- vagy felhúzó ellenállást kell alkalmazni.
(#) Hp41C válasza jonatani01 hozzászólására (») Jún 28, 2013 /
 
A macrokat ugyan úgy kell írni, mint a forrást.
  1. select_w        macro
  2. sel_last        set 0                     ;setup variable only
  3.                 endm
  4. case            macro   val
  5.                 xorlw   val ^ sel_last
  6.                         btfsc   STATUS,Z
  7. sel_last set val
  8.                 endm

Egy másik .asm -be is meg lehet adni és
  1. #include macros.asm

formában használni. Az első hivatkozás előtt be kell "include" -olni.
(#) jonatani01 válasza Hp41C hozzászólására (») Jún 28, 2013 /
 
És ha megírom a makrót, akkor azt hova kell elmenteni?
(#) nedudgi válasza jonatani01 hozzászólására (») Jún 28, 2013 /
 
Célszerű a projekt könyvtárába menteni. Ha másik könyvtárat választasz, csak kínlódni fogsz...
(#) jonatani01 hozzászólása Jún 28, 2013 /
 
Köszi.
Gondolom a fejlesztőkörnyezettel kell megírni a makrókat és csak egy sima "save as"-el elmenteni, ugye?
(#) nedudgi válasza jonatani01 hozzászólására (») Jún 28, 2013 /
 
Úgy is lehet. De használhatod a Jegyzettömböt is.
(#) jonatani01 hozzászólása Jún 28, 2013 /
 
Király.
Köszi mindenkinek
(#) Hp41C válasza jonatani01 hozzászólására (») Jún 28, 2013 /
 
Idézet:
„És ha megírom a makrót, akkor azt hova kell elmenteni?”

A makro lehet a forrás állományban is, ekkor külön nem is kell elmenteni.
(#) jonatani01 hozzászólása Jún 28, 2013 /
 
Első "komolyabb" programom. egy DIP kapcsolóval két "program" közül választhatok.
Igaz elég gagyin, mert a másodikat csak akkor lehet kiválasztani, ha az első számú program fut.
És még arra sem voltam tekintettel hogy az 1-es lábnál a 2-es program indul és fordítva
Meg ha az egyes program kapcsolóját lekapcsolom akkor még kétszer-háromszor végigmegy a futófény..
Na mindegy, gondoltam kirakom ide, hátha valakinek van türelme értelmezni, és figyelmeztetni hogyha valami olyat csináltam a programban ami nem tesz jót a uC-nek, valamint adni pár jó tanácsot továbbiakhoz.
Meg ha lenne pár linketek, mint például 7-szegmenses LED kijelző használata, programozása, az is jó lenne.
(Biztos nem nehéz megoldani a kapcsolókérdést hogy ne keljen egyszerre bekapcsolni a kettőt hogy fusson a kettes, de nem volt hozzá kedvem már gondolkodni rajta Ja és a kapcsolóhoz fogalmam sem volt hogy hogyan működik, de gondoltam hogy próba cseresznye, és láss csodát, sikerült )
Ha valakinek netán volt ideje erre, akkor jó lenne ha PM-et küldene, köszi előre is!


  1. #include <p16F690.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
  3.  
  4.      cblock     0x20
  5.      delay1
  6.      delay2
  7.      delay3
  8.      addition
  9.      endc
  10.  
  11.      org        0
  12.  
  13. Start:
  14.      banksel    ANSEL                           ;Settings
  15.      clrf       ANSEL
  16.      clrf       ANSELH
  17.      banksel    TRISC
  18.      clrf       TRISC
  19.      banksel    WPUA
  20.      bsf        WPUA,2                          ;A1,A2 bemenet, DIP-kapcsoló vezérel
  21.      bsf        WPUA,1                          ;Weak Pull-ups
  22.      banksel    PORTC
  23.      clrf       PORTC
  24.      banksel    PORTA
  25.      bcf        PORTA,2
  26.      bcf        PORTA,1
  27.      call       Continue                        ;Kapcsolókezelő szubrutin
  28.      banksel    PORTC
  29.      movlw      b'00000000'                     ;Futófény
  30.      call       Initialize
  31.      movlw      b'00000001'
  32.      call       Initialize
  33.      movlw      b'00000011'
  34.      call       Initialize
  35.      movlw      b'00000111'
  36.      call       Initialize
  37.      movlw      b'00001111'
  38.      call       Initialize
  39.      movlw      b'00011110'
  40.      call       Initialize
  41.      movlw      b'00111100'
  42.      call       Initialize
  43.      movlw      b'01111000'
  44.      call       Initialize
  45.      movlw      b'11110000'
  46.      call       Initialize
  47.      movlw      b'11100000'
  48.      call       Initialize
  49.      movlw      b'11000000'
  50.      call       Initialize
  51.      movlw      b'10000000'
  52.      call       Initialize
  53.      movlw      b'00000000'
  54.      call       Initialize2
  55.      goto       Start                           ;Futófény vége
  56.  
  57.  
  58. ;__________________________________________Waiting
  59.  
  60. Initialize:
  61.      movwf      PORTC
  62.      movlw      0x4f
  63.      movwf      delay1
  64.      movwf      delay2
  65.      movlw      0x01
  66.      movwf      delay3
  67.      goto       Loop
  68.  
  69. Loop:
  70.      decfsz     delay1,f
  71.      goto       Loop
  72.      movlw      0xff
  73.      movwf      delay1
  74.      decfsz     delay2,f
  75.      goto       Loop
  76.      movwf      delay2
  77.      decfsz     delay3,f
  78.      goto       Loop
  79.      return
  80.  
  81. ;______________________________________________ Longer Waiting
  82.  
  83. Initialize2:
  84.      movwf      PORTC
  85.      movlw      0xff
  86.      movwf      delay1
  87.      movwf      delay2
  88.      movlw      0x04
  89.      movwf      delay3
  90.      goto       Loop2
  91.  
  92. Loop2:
  93.      decfsz     delay1,f
  94.      goto       Loop2
  95.      movlw      0xff
  96.      movwf      delay1
  97.      decfsz     delay2,f
  98.      goto       Loop2
  99.      movwf      delay2
  100.      decfsz     delay3,f
  101.      goto       Loop2
  102.      return
  103.  
  104. ;_________________________________________________
  105.  
  106. Continue:                               ;A kapcsolókezelés
  107.      btfss      PORTA,2
  108.      goto       Continue
  109.      btfss      PORTA,1
  110.      return
  111.      goto       Main
  112.  
  113. ;__________________________________________________________
  114.  
  115. Main:                                   ;Számoló program, ahol tart azt kijelzi a 8 leden.
  116.      bcf        STATUS,C
  117.      movlw      b'00000001'
  118.      movwf      addition
  119.      goto       Initialize3
  120.  
  121. ;_________
  122.  
  123. Initialize3:
  124.      movlw      0xff
  125.      movwf      delay1
  126.      movwf      delay2
  127.      movlw      0x01
  128.      movwf      delay3
  129.      goto       Loop3
  130.  
  131. Loop3:
  132.      decfsz     delay1,f
  133.      goto       Loop3
  134.      movlw      0xff
  135.      movwf      delay1
  136.      decfsz     delay2,f
  137.      goto       Loop3
  138.      movwf      delay2
  139.      btfss      PORTA,1                         ;Közben be is olvassa a kapcsolók állapotát.
  140.      goto       Start
  141.      btfss      PORTA,2
  142.      goto       Start
  143.      decfsz     delay3,f
  144.      goto       Loop3
  145.      goto       Turn
  146.  
  147. ;__________
  148.  
  149. Turn:
  150.      incf       addition,1                      ;Maga a számolás
  151.      movlw      0x00
  152.      addwf      addition,0
  153.      movwf      PORTC
  154.      goto       Initialize3
  155.  
  156. end
A hozzászólás módosítva: Jún 28, 2013
(#) szaffo555 válasza Hp41C hozzászólására (») Jún 28, 2013 /
 
Köszi I2C ACK ról a kimerítő választ.
(#) Hilo hozzászólása Jún 29, 2013 /
 
Jó reggelt! Olvasgattam, az oszcillátorokról, de még mindig homály pár dolgok, úgyhogy inkább kérdezek.
Lehet külső illetve belső oszcillátor használni ha jól értettem?
Minek mi az előnye/hátránya? (külső/belső oszcillátor)
Minden PIC nek van belső oszcillátorra?
Belső oszcillátor esetén mitől függ hogy hány Hz-es?
  1. __CONFIG _XT_OSC

E fenti kóddal pontosan mit állítok be?
Előre is köszönöm!
(#) jonatani01 hozzászólása Jún 29, 2013 / 1
 
Jó reggelt. Ajánlanám neked ezt az oldalt, én itt kezdtem: http://t-es-t.hu/elokep/pic/felhkk.htm
Eltart egy jódarabig mire a végére érsz, de megéri, hidd el
A hozzászólás módosítva: Jún 29, 2013
(#) Hilo hozzászólása Jún 30, 2013 /
 
Sziasztok, Első kódom élesben való kipróbálásakor sajnos problémába ütköztem. 12f683 két lábára kötött lednek kéne világítania, de nem teszi. Szimulátor szerint jó, de csak a beprogramozáskor villan fel az egyik ledem. Tápfeszt rendesen kap azt kimértem, de a lábakon amiken elvileg logikai (magas) értéknek kéne lennie nincs semmi.
  1. LIST P=12f683
  2.         #include <p12f683.inc>
  3.         __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF
  4.  
  5.         org 0
  6.  
  7. START
  8.         banksel GPIO    ;Bank 0
  9.         clrf GPIO       ;GPIO mind 0
  10.  
  11.         movlw b'111'    ;Comparator OFF
  12.         movwf CMCON0    ;Comparator OFF
  13.        
  14.         banksel ANSEL   ;Bank 1
  15.         clrf ANSEL      ;minden port digitálisra
  16.  
  17.         movlw b'000000' ;(0 ki, 1 be)
  18.         movwf TRISIO    ;minden port kimenetre; (kivéve GP3 ami csak bemenet lehet)
  19.  
  20.         banksel GPIO    ;Bank 0
  21.  
  22.         movlw b'000110' ;5,6 láb (GP2, GP1)
  23.         movwf GPIO      ;led be
  24.         goto $
  25.         end

Valamilyen beállítást rontottam el MpLab-ban vagy a kód rossz?
Előre is köszönöm!
(#) Hp41C válasza Hilo hozzászólására (») Jún 30, 2013 /
 
Szia!
Látni kellene a kapcsolást. Oszcillátor kiépítve? MCLR felhúzva a Vdd -re? 100nF tápszűrés közvetlenül a pic táplábainál? A LED -ek hogyan vannak bekötve?
(#) Hilo válasza Hp41C hozzászólására (») Jún 30, 2013 /
 
Lehet hogy rosszul tudom, de 12f683 nak van belső oszcillátora, azt szeretném használni.

MCLR láb ami a 4es láb, földre van kötve. Ez az adatlap szerint csak bemenet lehet, így digitális bemenet lett belőle.

Tápot a PIC a PicKit2-től kap.

Ledek 5, 6 os lábon vannak (GP1, GP2).
láb -> ellenállás -> led -> föld
ellenállás 164 Ohm (2x82), led 3,5 volt nyitó feszültséggel, úgy számoltam hogy ez úgy kb 10mA lábanként. Adatlap szerint 25mA-t bír max lábanként a pic.

Nem tudom ez így elég infó e, ha kell megrajzolom a kapcsolást is, ha gyerkőcöt lefektettem.
Következő: »»   427 / 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