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   670 / 1210
(#) kissi válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Nem néztem át, de a sor 11,12,13 mit csinál ?
(#) Pali79 válasza kissi hozzászólására (») Máj 20, 2015 /
 
A 11,12 semmit, mert van előtte ; A 13 digitális I/O-ra állítja a lábakat.
így talán jobb:
  1. Setup
  2.         bcf             STATUS,5                ;Bank 0
  3.         clrf    GPIO
  4.         movlw   b'00000111'
  5.         movwf   CMCON                   ;komparátor kikapcsolva
  6.         bsf             STATUS,5                ;Bank 1
  7.         clrf    ANSEL
  8.         clrf    TRISIO
  9.         bcf             STATUS,RP0              ;Bank 0
  10.        
  11.         movlw   b'11111111'
  12.         movwf   GPIO
  13.         call    Kesleltet100
  14.         clrf    GPIO
  15.         call    Kesleltet100
  16.         goto    $-4
A hozzászólás módosítva: Máj 20, 2015
(#) kissi válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Idézet:
„A 11,12 semmit, mert van előtte”
pontosabban utána van a clrf, ezért írtam !

A végén a goto $-4 szerinted hova megy (próbáld ki a szimulátorral! ), egyébként jobban járnál cimkékkel !
Utána --> Konfigurációs bitek ?
(#) Pali79 válasza kissi hozzászólására (») Máj 20, 2015 /
 
Aham! Annak $-5-nek kéne lennie! Ez így jó is. Már csak azt kéne kideríteni, hogy a GP3 miért nem megy.
(#) kissi válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Nézd meg a GP3 leírását(kapcsolását!) és rájössz !
szerk.: a megszakítást ne írd bele, amíg nem használod ( ennek nincs köze a GP3-hoz!)!!
A hozzászólás módosítva: Máj 20, 2015
(#) killbill válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Idézet:
„Annak $-5-nek kéne lennie!”
Miert nem cimket hasznalsz?
(#) kissi válasza killbill hozzászólására (») Máj 20, 2015 /
 
ezt írtam neki én is
(#) Pali79 válasza killbill hozzászólására (») Máj 20, 2015 /
 
Mert nem vagyok elég kreatív ahhoz, hogy ennyi értelmes címkét kitaláljak!
(#) Pali79 válasza kissi hozzászólására (») Máj 20, 2015 /
 
Basszus! Csak bemenet lehet...

Szerk:
A hozzászólás módosítva: Máj 20, 2015
(#) kissi válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Nem lesz értelmetlenebb cimke000 - cimke999, mint a $-30 !
Viccet félretéve: 1, esetleg 2 sorra jó, tovább nem !
(#) kissi válasza Pali79 hozzászólására (») Máj 20, 2015 /
 
Gondolkozz...gondolkozz !!!
(#) kissi válasza kissi hozzászólására (») Máj 20, 2015 /
 
Ja, a szerkesztés után jó lett !
(#) Pali79 hozzászólása Máj 21, 2015 /
 
Nem értem! Ha a megszakításokat engedélyezem akkor nem csinál semmit.
  1. Setup
  2.         bcf             STATUS,5                ;Bank 0
  3.         clrf    GPIO
  4.         movlw   b'00000111'
  5.         movwf   CMCON                   ;komparátor kikapcsolva
  6.         bsf             ADCON0,7
  7.         movlw   b'11010000'
  8.         movwf   INTCON                  ;megszakítások engedélyezve
  9.         movlw   b'00111100'
  10.         movwf   T1CON                   ;TMR1 1:8, Fosc/4, Stop
  11.         bsf             STATUS,5                ;Bank 1
  12.         movlw   b'00010011'
  13.         movwf   ANSEL                   ;AN0, AN1 analóg bemenet, Fosc/8
  14. ;       clrf    ANSEL
  15.         movlw   b'00101111'
  16.         movwf   TRISIO                  ;GP4 kimenet, a többi bemenet
  17. ;       movlw   b'11000000'            
  18. ;       movwf   OPTION_REG              ;INT megszakítás engedélyezés
  19. ;       movlw   b'00000001'
  20. ;       movwf   PIE1                    ;TMR1 megszakítás engedélyezés
  21. ;       clrf    TRISIO
  22.         bcf             STATUS,RP0              ;Bank 0
  23.         movlw   0xff
  24.  
  25. villog
  26. ;       movlw   b'00011111'
  27. ;       movwf   GPIO
  28.         bsf             GPIO,4
  29.     call    K0
  30.     bcf         GPIO,4
  31.     call    K0
  32.     goto    $-5
  33.        
  34. km_konverzio
  35.         bsf             ADCON0,0                ;A/D bekapcsolása, AN0 konverzió
  36.         bsf             ADCON0,1                ;konverzió indítása
  37.         btfsc   ADCON0,1                ;konverzió kész?
  38.         goto    $-1
  39.         movf    ADRESH,W
  40.         movwf   count1
  41.         goto    villog
  42. ;       call    Kesleltet5
(#) kissi válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Hol a megszakítás kiszolgálása, jelzőbit törlése?!
(#) Pali79 válasza kissi hozzászólására (») Máj 21, 2015 /
 
Azt a részt nem másoltam be, de elvileg nem mehet megszakításba, csak engedélyezve van.
  1. org     4
  2.        
  3.         movwf   w_temp
  4.         movf    STATUS,w
  5.         movwf   status_temp
  6.        
  7.         btfsc   INTCON,1                ;INT megszakítás?
  8.         goto    km_szamlal
  9.         btfsc   PIR1,0                  ;TMR1 megszakítás?
  10.         goto    Ido_szamlal
  11.        
  12. km_szamlal
  13.         incf    km_szamlalo_L   ;növeljük a számlálót
  14.         movlw   0x20
  15.         subwf   km_szamlalo_L,w ;elérte a 32 értéket?
  16.         btfss   STATUS,Z               
  17.         goto    Kilep                   ;ha nem, kilép
  18.         clrf    km_szamlalo_L   ;ha igen, nullázuk
  19.         incf    km_szamlalo_H   ;és növeljük a számlálót
  20.         movlw   0xFF
  21.         subwf   km_szamlalo_H,w ;elérte a 255 értéket?
  22.         btfss   STATUS,Z
  23.         goto    Kilep                   ;ha nem, kilép
  24.         clrf    km_szamlalo_H   ;ha igen, nullázzuk
  25.        
  26. Ido_szamlal
  27.         incf    ido                             ;léptetjük az időt
  28.         bcf             PIR1,0
  29.        
  30.        
  31. Kilep
  32.         bcf             INTCON,1
  33.         movf    status_temp,w
  34.         movwf   STATUS
  35.         swapf   w_temp,f
  36.         swapf   w_temp,w
  37.         retfie
(#) Pali79 válasza kissi hozzászólására (») Máj 21, 2015 /
 
Azon gondolkodtam, hogy az lehet esetleg attól, hogy az áramkör breadboad-on van összerakva és az INT láb lebeg?
(#) sonajkniz válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Pali!
Ha esetleg leírnád, mit is akarsz csiálni, mi lenne a dolga ennek a PIC-nek, nagyobb eséllyel tudnának segíteni! Lehet, hogy a választott PIC nem is alkalmas a feladatra.
(#) Pali79 válasza sonajkniz hozzászólására (») Máj 21, 2015 /
 
A lényeg, hogy van két potméterrel beállított analóg értékem. Az INT lábon számolom a külső forrásból jövő impulzusokat. Az egyik beállított értéket és a megszámolt impulzusokat hasonlítom össze. Ha egyezik az érték, magas szintre húzza az egyik kimenetet és indítja Timer1-et. A kimenet addig van magas szinten amíg a Timer1 túlcsordulások száma eléri a másik beállított analóg értéket.

Leegyszerűsítve a feladat az, hogy egy beállítható impulzusszám után legyen egy magas szintű jel egy beállítható időtartamig.

Szerintem ez nem bonyolult feladat és a PIC12F675 pont elég is hozzá.
(#) sonajkniz válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Tehát nem a bejövő jel frekvenciája érdekel téged, csak az inpulzusszám?
Akkor minek a megszakítással bíbelődni?
Ha jól értelmezem a feladatot, akkor én ezt a következő módon oldanám meg:
Beolvasom 1-es poti értékét, és letárolom.
Pl. ADRESL >> 0x20 ADRESH >> 0x21
Ezután beolvasom 2-es poti értékét, és letárolom.
ADRESL >> 0x22 ADESH >> 0x23
Ezután várok a bejövő jelre. Ha adott bemenet magas szintre kerül, 1-et levonok 0x20-ból DECFSZ utasítással. DECFSZ alatti GOTO utasítás egy bejövőjel figyelésre ugrik, és addig ott marad, amíg a bejövő jel alacsonyra nem vált. Onnan visszaugrik várni a bejövő jelet.
Ha 0x20 lenullázódik, átugorja GOTO-t, és ugyancsak DECFSZ-el 1-et levon 0x21-ből.
Az alatta lévő GOTO az előzővel megegyező helyre ugraszt. Ha a második GOTO-t is átugorja, jöhet a kimenet bekapcsolása, és az időzítő.
Az időzítőnél sem kell megszakítás. egyszerűen a tulcsordulás bitet figyeled. Ha túlcsordult az előzővel egyező módon csökkented 0x22 és 0x23 értékét, majd újraindítod az időzítőt.
Ha lejárt, kikapcsolod a kimenetet, és újra indítod a progit a potibeolvasással.
(#) Pali79 válasza sonajkniz hozzászólására (») Máj 21, 2015 /
 
Nagyjából most is ezt csinálja a program csak megszakítással. Este majd megnézem, hogy ha így átrendezem a progit akkor mit csinál.
Hozzáteszem, a szimulátorban tökéletesen működik így is, csak a breadboard-on nem.
A hozzászólás módosítva: Máj 21, 2015
(#) Pali79 válasza sonajkniz hozzászólására (») Máj 21, 2015 /
 
Közben rájöttem, hogy ez a módszer azért nem jó ebben a formában, mert az AD 10 bites értéke kevés. Egy 16 bites értékhez kell tudnom hasonlítani, vagy azt csökkenteni, a 10 bit sajnos kevés.
(#) sonajkniz válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Ezt értem, de ha az AD csk 10 bites, hogy lessz neked a potival beállított jeled 16 bit?
Ráadásul nincs az a helipoti, amivel 65000 külömböző álapotot fel tudnál vetetni.
(#) kissi válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Ha nem húztad fel ( vagy le ) egy ellenállással, akkor persze, mert a zajok miatt beléphet folyton megszakításba és nincs ideje mással foglalkozni !
A program egy-egy helyére rakj be egy LED bekapcsolást és akkor látod, hogy meddig jut el ( ha nem megy, akkor szakaszolni kell !!) !

Konfigurációs biteket jól állítottad be ( szimulációban az nem biztos, hogy előjön!) !
(#) Pali79 válasza kissi hozzászólására (») Máj 21, 2015 /
 
Sikerült kiszűrnöm, hogy a T1CON beállítása után nem működik. Sajnos az angolom még elég gyatra, nem egészen értem a 3. és 6. bit mit is csinál pontosan. Lehet ott van a blöki elásva.
(#) kissi válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
Igen, lehet, hogy gondot okoz, ha belső oszcillátort használsz órajel kimenet nélkül, ezért kértem a config biteket is !
(#) ktamas66 válasza Pali79 hozzászólására (») Máj 21, 2015 /
 
A T1CON 6. bitje engedélyezi, hogy a T1G lábon levő jel engedélyezze a TMR1-et, a 3. bit az alacsony frekis oszcillátort engedélyezi (általában egy 32kHz körüli órakvarc az OSC lábakon). Úgy látom te a belső órát szeretnéd használni, akkor '00110000' kellene, de csak a TMRON bebillentésével indul el az egész, de előtte illik beállítani a TMR1L-H értékeket.
A megszakítás beállításánál a GIE bitet már csak akkor billentsd be, ha mindent beállítottál. A megszakításban az INT megszakítást akkor is törlöd, ha TMR megszakítás volt, így veszíthetsz impulzust (ami a megszakítás alatt jött), ellenben, ha a km számlálód eljut a 24. sorig automatikusan lépteti az időt is.
(#) Pali79 válasza kissi hozzászólására (») Máj 22, 2015 /
 
Itt a config:
  1. __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
(#) Pali79 válasza ktamas66 hozzászólására (») Máj 22, 2015 /
 
Idézet:
„előtte illik beállítani a TMR1L-H értékeket.”

Ezt nem egészen értem. Alapból 0-ról indul, nem?
Végül is a T1CON okozta a galibát, '00110000'-val jó lett!
Idézet:
„A megszakításban az INT megszakítást akkor is törlöd, ha TMR megszakítás volt, így veszíthetsz impulzust (ami a megszakítás alatt jött), ellenben, ha a km számlálód eljut a 24. sorig automatikusan lépteti az időt is.”

Ezeket is köszönöm! Igen értékes észrevételek!

Most úgy működik, ahogy én szeretném, bár még csak alap beállításokkal, de már tudom tesztelni legalább.

Hétvégére elutazom, folyt. köv. hétfő este.

Nagyon köszönöm kissi-nek és sonajkniz-nek is a segítséget.
(#) kissi válasza Pali79 hozzászólására (») Máj 22, 2015 /
 
Idézet:
„_INTRC_OSC_NOCLKOUT”

Ha ez nincs, akkor nem okozott volna gondot a T1CON ( így bekapcsoltad az alacsonyfrekvenciás osc. lehetőséget... !
A ktamas66 által jelzett programhibának a szimulátorban is ki kellett volna jönni, figyelj a tesztelésnél!
További jó munkát !
(#) ktamas66 válasza Pali79 hozzászólására (») Máj 22, 2015 /
 
Miért pont 0-ról indulna ? Az alapértelmezett értékeket az 5-1 táblázat tartalmazza, ott láthatod, hogy bekapcsoláskor ismeretlen, reset után az előző érték marad benne.
Következő: »»   670 / 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