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   569 / 1210
(#) Pali79 hozzászólása Szept 19, 2014 /
 
Sziasztok! 3 db ceruzaelemről hajtanék egy 16F877A-t. Szeretném jelezni az elem lemerülését. Szerintetek mi lenne erre a legjobb módszer? Gondolkodtam az A/D-n, de ha a Vdd-t veszem referenciának akkor az is csökken az elem kapocsfeszültségével együtt ezért ez nem tűnik jó megoldásnak.
(#) usane válasza Pali79 hozzászólására (») Szept 19, 2014 /
 
Google ad rá megoldást, de ha AD-t akarsz akkor például tegyél be egy zenert és annak a feszültségét vedd referenciának. Ez a legegyszerűbb megoldás.
(#) nedudgi válasza Pali79 hozzászólására (») Szept 19, 2014 /
 
Használhatsz külső referenciát, ha van elég szabad láb. MCP1525 2,5V referenciának jó, elég alacsony a fogyasztása. Ehhez viszonyíthatod a tápfeszültséget, ellenállásosztóval felezve. Az is jó lehet, ha a tápfeszültség a referencia, és ezt a fix 2,5V feszültséget méred.
Más megoldás, ha csak digitális láb szabad, egy CPU felügyeleti áramkör, például az MCP1xx, ez egyszerűbb, olcsóbb megoldás, bár ilyenkor csak annyi információd lesz, hogy a tápfeszültség egy adott szint alá csökkent.
A hozzászólás módosítva: Szept 19, 2014
(#) Pali79 válasza nedudgi hozzászólására (») Szept 19, 2014 /
 
Köszönöm mindkettőtöknek! Igazából nem erőltetem az AD-t csak azt már alkalmaztam korábban is, azzal biztosan boldogulnék. Viszont ez a felügyeleti áramkör tetszik. Ha jól értem ha a tápfesz az ic-re jellemző érték alatt van akkor az egyik lábán logikai 0 lesz, ha felette van akkor logikai 1 (MCP 101). Talán ez a legegyszerűbb megoldás. Igazából nem számít az érték csak az, hogy tudjam, a vége felé közeledik az elem élete.
(#) kissi válasza Pali79 hozzászólására (») Szept 19, 2014 /
 
Szia!
A PIC16F877-ben van komparátor, az szerintem jó erre a célra egy stabil referenciával !
(#) don_peter válasza don_peter hozzászólására (») Szept 20, 2014 /
 
Javítás:
Aki használja a bootloadert is annak a belinkelt kódban a "rom" elé még be kell szúrni a "const" kifejezést.
Kicsit engem is meg szívatott a dolog...
(#) matheattila válasza don_peter hozzászólására (») Szept 20, 2014 /
 
Szerintem ez nem csak bootloader esetén kell
(#) norbiv8 hozzászólása Szept 20, 2014 /
 
Sziasztok!

pic12f752: komparátor egyik bemenete a belső referencia, a másikra most éppen egy potméter van kötve debug célból. A komparálási szint közelében 8MHz-es oszcilláció keletkezik, pedig bekapcsoltam a hiszterézist és a Zero Latency Filtert is (ami elvileg ezt hivatott megakadályozni). Van valamilyen ötlet, hogyan lehetne ezt megszüntetni?

Köszönöm.
(#) norbiv8 válasza norbiv8 hozzászólására (») Szept 20, 2014 /
 
Még egy kis bővítés az előző hozzászólásomhoz: mi akadályozza meg a PWM modult (komparátorral osztoznak egy és ugyanazon a lábon), hogy ne írjon a kimenetre miközben az a komparátor kimenete?
(#) foxi63 válasza norbiv8 hozzászólására (») Szept 20, 2014 /
 
Szia!
A komparátor modul kimenetét letiltod, ettől még használható, mert generálhat megszakítást is. A PWM modult, pedig használod ahogy akarod.
Üdv.:foxi
(#) norbiv8 válasza foxi63 hozzászólására (») Szept 20, 2014 /
 
A komparátor nem lesz kivezetve, csak most arra az időre vezettem ki, amíg kitalálom, hogy miért oszcillál be. A PWM modult sem szeretném kivezetni, ami zavar, hogy nincs kimenet engedélyező bitje, csak az adott lábat kell kimenetre állítani és már kint is van a PWM jel. Viszont én azon a lábon majd a COG modult szeretném használni és ennek kapcsán jutott eszembe, hogy mi fog ott történni. Megszakítást nem akartam használni, mert hardverből kellene mennie az egésznek.
(#) frecskagabor hozzászólása Szept 20, 2014 /
 
Sziasztok szeretnék elkezdeni pic programozással foglalkozni de csak hobbi célból. De megmondjam őszintén teljesen amatör vagyok ebben a témában, nem tudom hogy is kezdjek neki. Milyen ezközöket kell beszereznem és hogy milyen oktató anyagokat keressek és hol?
(#) Pali79 válasza frecskagabor hozzászólására (») Szept 20, 2014 / 1
 
Mondjuk kezd itt, nullától a robotokig című cikkel.
(#) kissi válasza frecskagabor hozzászólására (») Szept 20, 2014 / 1
 
Szia!
Szerintem próbáld olvasgatni icserny kolléga leírásait Bővebben: Link, sok sikert !
(#) vilmosd válasza frecskagabor hozzászólására (») Szept 21, 2014 /
 
SZoval ha ezt a topikot elkezded silabizalni, egy par percen belul talalsz sok segitseget (csak 576 oldal). De a szokasos t es t, aholis alapoktol indul a 16Fxxx ismertetes. Szetnezhetsz a gyujtemenyemben, ahol talalsz demo paneleket, mintaprogikat, leirasokat a PIC alapok temahoz. Egy tanacs: ne probalj meg induloban atomreaktor, vagy urraketa vezerlest csinalni. Elegedj meg a LED villogtatas, kapcsolo beolvasas, es egyeb egyszeru dolgok megvalositasaval. Ja es induloban ASM. Itt mindig talasz segitseget.
A hozzászólás módosítva: Szept 21, 2014
(#) gaspar_zsolt hozzászólása Szept 21, 2014 /
 
Sziasztok!

Egy elektromágnes meghúzását szeretném paraméterezni úgy, hogy egy változóban eltárolok egy számot, amit a TIMER1 számlálóba töltök. (TMR1H)
A programot megírtam 12F629-be, és azt tapasztaltam, hogy ha 128-nál nagyobb számot írok, akkor a kimenetre kötött teszt LED kétszer villan fel. Minél nagyobb a beírt szám, annál rövidebb ideig világít, de annál látványosabb a felvillanás.

Beírtam a programot egy 16F1826-osba is, ott hibátlanul lefut, minél nagyobb a szám, annál rövidebb ideig világít a teszt LED.

Kerestem errata-ban, hátha le van írva a hiba, de nincs.

Mi okozhatja ezt a problémát.

INIT és MainLoop beszúrva:

  1. INIT:
  2.                 clrf    GPIO
  3.                 movlw   0x07
  4.                 movwf   CMCON                   ; set GP2:0 to digital I/O
  5.                 bsf             STATUS,RP0              ; bank 1
  6.                 movlw   0x0C
  7.                 movwf   TRISIO
  8.                 call    0x3FF                   ; get OSCCAL value
  9.                 movwf   OSCCAL
  10.                 movlw   0x88            ; Option register: no pull-up, falling GP2, no prescaler, wdt 1:1
  11.                 movwf   OPTION_REG
  12.                
  13.                 movlw   0x90
  14.                 movwf   INTCON
  15.  
  16.                 bcf             STATUS,RP0              ; bank 0
  17.                 clrf    PIR1
  18.                 movlw   0x30                    ; Timer 1 off, 1:8 prescaler
  19.                 movwf   T1CON
  20.  
  21. ; ----------------------------------------------------------------------
  22. MainLoop:
  23.                 btfsc   NEW_PACKET              ; új csomag?
  24.                 call    Decode                  ; dekódolás, ha új csomag érkezett
  25.  
  26.                 btfss   PIR1,TMR1IF             ; számláló flag-et figyeljük
  27.                 goto    MainLoop
  28.                 bcf             PIR1,TMR1IF
  29.                 BCF             T1CON,TMR1ON
  30.                 BCF             COIL1A                  ; kimenetek törlése, ha lejárt a számláló
  31.                 BCF             COIL1B
  32.                 goto    MainLoop
  33. ;-----------------------------------------------------------------------------------------------
  34. Decode
  35.                 bsf             COIL1A
  36.                 bsf             COIL1B
  37.                 movlw  (ide jön be a változó)
  38.                 movwf   TMR1H          
  39.                 clrf    TMR1L                   ; start timer
  40.                 bcf             PIR1,TMR1IF    
  41.                 BSF             T1CON,TMR1ON
  42.                return
A hozzászólás módosítva: Szept 21, 2014
(#) don_peter hozzászólása Szept 21, 2014 /
 
Srácok!
Egy (#define) definícióban van korlát a megadható adatméretre vonatkozólag?
Tehát helyes mind kettő?
  1. #define kicsi    0xFF
  2. //és
  3. #define nagy    0xFFFF

Vagy nagyobb érték megadásánál?
(#) profikam válasza don_peter hozzászólására (») Szept 21, 2014 / 1
 
A #define macro tulajdonkeppen egyszeru szovegbehelyettesitest jelent, szoval amit megadsz, a "nagy" macro ertkekenek, az csak be fog helyettesitodni a kododban mindenhol ahol a 'nagy' macrora hivatkozol. Igy barmit megadhatsz ami ervenyes ott ahol hivatkozol ra. Ld. pl. itt.
(#) Hp41C válasza don_peter hozzászólására (») Szept 22, 2014 / 1
 
Nincs megkötés a hosszra. Ha az érték műveletet is tartalmaz, ajánlott szárójelbe tenni.
  1. #define rossz a+b
  2. #define jo (a+b)

  1. pelda = rossz * 4; // kifejtve pelda = a+b*4 azaz a+4*b
  2. pelda = jo * 4; // kifejtve pelda = (a+b)*4 azaz 4*a+4*b
(#) giskard hozzászólása Szept 22, 2014 /
 
PIC AD átalakító. 5V referencia esetén a felbontás: 5/1024. Azokon a PIC-eken ahol állítható a referencia a felső referenciával mennyire közelíthetjük meg a testet ? És test közelében (pl 1 mV) mennyi lehet a hiba ?
(#) don_peter hozzászólása Szept 22, 2014 /
 
Köszi srácok.
Van itt egy másik gondom.
Csatoltam a karaktertáblát.
Egy 240x64-es LCD-t próbálok beizzítani, de valamiért nem jön össze a karakterek kiíratása.
Van egy ilyen kiírató függvény:
  1. void glcd_putc(char c){
  2.         glcd_WriteCmd1(c + 0x20, 0xc0); // Eredeti kivonással volt
  3. }

Ha ezt elküldöm ezzel:
  1. glcd_putc("H");

Akkor az eredmény ez: "J"
Gondolom itt az ansi szabvány fog belépni, de nem tudom mennyit kell hozzáadjak, hogy kijöjjön a kellő karakter.
Eredeti teljes kód: Bővebben: Link

ui: az lemaradt, ha pl. így adom meg:
  1. void glcd_putc(char c){
  2.         glcd_WriteCmd1(c, 0xc0);
  3. }
  4. glcd_putc(0x38);

Akkor jó az eredmény vagy is kiírja, hogy: "H"
A hozzászólás módosítva: Szept 22, 2014
(#) don_peter válasza don_peter hozzászólására (») Szept 22, 2014 /
 
Közben meglett, hogy a macskaköröm szívatott meg.
Így jó:
  1. void glcd_putc(char c){
  2.             glcd_WriteCmd1(c - 0x20, 0xc0); // Eredeti kivonással volt
  3.     }
  4. glcd_putc('H');
(#) foxi63 válasza giskard hozzászólására (») Szept 22, 2014 /
 
Szia! A minimum 2,5-2,0V de ezt az adott típus PDF fájljából ki tudod olvasni!
üdv. Foxi
(#) petike199600 válasza vilmosd hozzászólására (») Szept 22, 2014 /
 
Köszönöm a példát, de nekem nem működik. A nálad lévő 7. sorral van baja.
Tehát a bsf status, rp0 sorral
Mit tegyek?
(#) usane válasza petike199600 hozzászólására (») Szept 22, 2014 /
 
Idézet:
„A pelda PIC16Fxxx-re irodott, de termeszetesen kis atalakitassal a PIC18Fxxx sorozaton is mukodik.”


A 18_K más a memória szervezése( a bankokat nem a status register kezeli, hanem van bsr regisztere) ezenkívül bővített utasításkészlettel is rendelkezik van rá külön utasítás. A bankváltást movlb utasítással vagy ha az mplabot használod akkor a banksel utasítást is alkalmazhatod.

Esetedben a 7. sor: movlb 0x01.

Ám ellenőrizd a portokaat is, LED és gomb ott van-e ahol szeretéd.
A hozzászólás módosítva: Szept 22, 2014
(#) petike199600 válasza usane hozzászólására (») Szept 22, 2014 /
 
Köszönöm a választ.
Átírtam így már elfogadja, de rátöltöm és nem csinál semmit hiába nyomogatom a gombot.
Itt a program:
list p=pic18f14k22 ; lista megadása
include <p18f14k22.inc> ; includde fájlok megadása
radix hex ; alapértelmezet számrendszer megadása
;------------------------------------------------------------
CONFIG FOSC = IRC ; belsõ oszcillátor
CONFIG WDTEN = OFF ; watchdog kikapcsolása
CONFIG LVP = OFF ; alacsony feszültségû programozás kikapcsolva

#define LED_Z LATA, 5 ; szövegrész behelyetesítés
#define GOMB_1 PORTA, 2 ; amivel a program olvashatobbá válik
#define GOMB_2 PORTA, 4

num equ 0x0020
org 0x0000

start clrf num
MOVLB 0x01
movwf TRISA
repeat call pressck ;look for incr/decr button press
goto repeat
pressck btfss GOMB_1 ;decrease button pressed?
goto decnum ;yes, decrement num
btfss GOMB_2 ;increase button pressed?
goto incnum ;yes, increment num
return
incnum movf num,w ;get num into W
sublw 0xff ;num=0xff?
MOVLB 0x00
return ;press check done
incf num,f ;increment num
bsf LED_Z ;LED ON
return ;press check done
decnum movf num,w ;get num into W
sublw 0x0000 ;num=0?
MOVLB 0x00
goto ledoff
decf num,f ;decrement num
return ;press check done
ledoff bcf LED_Z ;LED OFF
return ;press check done
;------------------------------------------------------------
INICIALIZALAS
CLRF LATA ; kimeneti portok törlése
CLRF LATB ;
CLRF LATC ;
MOVLW B'00000011' ; analóg / digitális bemenetek
MOVWF ANSEL ;
MOVLW B'00011111' ; A port
MOVWF TRISA
MOVLW B'00000011' ; B port kimenet
MOVWF TRISB
MOVLW B'00000000' ; C port kimenet
MOVWF TRISC
MOVLW B'01110010' ; oszcillátor frekvenciája <4:6>
MOVWF OSCCON ; 111 = 16 MHz, 001 = 250 kHz, 000 = 31 kHz (kb óra kvarc)
RETURN
end
A hozzászólás módosítva: Szept 22, 2014
(#) usane válasza petike199600 hozzászólására (») Szept 22, 2014 /
 
Használd a kód gombot mert ez így átláthatatlan.
Másik dolog, min teszteled? Össze van rakva, vagy szimulátoron, proteuson? Az, hogy nem csinál semmit kevés info. Mi nem csinál semmit?
Ha azt a próbapanelt raktad össze amit belinkeltál, jó hogy nem csinál semmit, nem ott vannak a LED-ek meg a gombok ahol a programban. Mondtam, hogy ellenőrizni kell azt is.
A hozzászólás módosítva: Szept 22, 2014
(#) ktamas66 válasza petike199600 hozzászólására (») Szept 22, 2014 /
 
Hol hívod meg az INICIALIZALAS-t?
(#) petike199600 válasza usane hozzászólására (») Szept 22, 2014 /
 
  1. list    p=pic18f14k22                           ; lista megadása
  2.         include <p18f14k22.inc>                         ; includde fájlok megadása
  3.         radix   hex                                             ; alapértelmezet számrendszer megadása
  4. ;------------------------------------------------------------
  5.         CONFIG  FOSC = IRC                                      ; belsõ oszcillátor
  6.         CONFIG  WDTEN = OFF                                     ; watchdog kikapcsolása
  7.         CONFIG  LVP = OFF                                       ; alacsony feszültségû programozás kikapcsolva
  8.  
  9. #define         LED_Z           LATB,  4                ; szövegrész behelyetesítés
  10. #define         GOMB_1          PORTA, 2                ; amivel a program olvashatobbá válik
  11. #define         GOMB_2          PORTA, 4
  12.  
  13. num     equ     0x0020
  14.         org     0x0000
  15.  
  16. start   clrf    num
  17.         MOVLB   0x01
  18.         movwf   TRISA
  19. repeat  call    pressck       ;look for incr/decr button press
  20.         goto    repeat
  21. pressck         btfsc   GOMB_1 ;decrease button pressed?
  22.                 goto    decnum      ;yes, decrement num
  23.                 btfsc   GOMB_2    ;increase button pressed?
  24.                 goto    incnum      ;yes, increment num
  25.                 return
  26. incnum          movf     num,w        ;get num into W
  27.                 sublw   0xff       ;num=0xff?
  28.                   movlb 0x0
  29.                 return      ;press check done
  30.                 incf    num,f       ;increment num
  31.                 bsf     LED_Z ;LED ON
  32.                 return      ;press check done
  33. decnum          movf      num,w ;get num into W
  34.                 sublw   0x0000       ;num=0?
  35.                  movlb 0x01
  36.                 goto    ledoff
  37.                 decf    num,f       ;decrement num
  38.                 return      ;press check done
  39. ledoff          bcf     LED_Z ;LED OFF
  40.                 return      ;press check done
  41. ;------------------------------------------------------------
  42. INICIALIZALAS
  43.         CLRF    LATA                                            ; kimeneti portok törlése
  44.         CLRF    LATB                                            ;
  45.         CLRF    LATC                                            ;
  46.         MOVLW   B'00000011'                                     ; analóg / digitális bemenetek
  47.         MOVWF   ANSEL                                           ;
  48.         MOVLW   B'00011111'                                     ; A port
  49.         MOVWF   TRISA
  50.         MOVLW   B'00000011'                                     ; B port kimenet
  51.         MOVWF   TRISB
  52.         MOVLW   B'00000000'                                     ; C port kimenet
  53.         MOVWF   TRISC
  54.         MOVLW   B'01110010'                                     ; oszcillátor frekvenciája <4:6>
  55.         MOVWF   OSCCON                                          ; 111 = 16 MHz, 001 = 250 kHz, 000 = 31 kHz (kb óra kvarc)
  56.         RETURN
  57. end

Azon a próbapanelen tesztelem amről tettem fel rajzot
(#) frecskagabor válasza vilmosd hozzászólására (») Szept 22, 2014 /
 
Köszönöm a segitséget.
Következő: »»   569 / 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