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   657 / 1207
(#) cross51 hozzászólása Ápr 3, 2015 /
 
Sziasztok!

A PIC161718-nál a PORTB alsó felére okozhat problémát, hogy ott van egy komparátor modul?
Ha igen mit csináljak vele?
(#) Pali79 válasza cross51 hozzászólására (») Ápr 3, 2015 /
 
Szia!
Az attól függ, mire szeretnéd használni az adott lábakat. Az egész komparátort ki lehet kapcsolni, a z egész PORTB-t lehet használni sima I/O-ként, csak tudni kell pontosan mi a feladat.
(#) mark.budai hozzászólása Ápr 3, 2015 /
 
Sziasztok! Megint segítségre szorulok.
Szeretném egy ADC bemeneten egy poti állását figyelni.
CCS C a fordítóm.
A projekt varázslónál 0-1023-at állítottam be értéknek. Megírtam a programot, de nem működik az adc, állandóan 150-160 közti értéket vesz fel, akárhova állítom a potmétert.
Ezek a programrészek tartoznak az ADC beállításához:
  1. void main()
  2. {
  3. unsigned long adc_val;  //ADC érték változó
  4. ...
  5. setup_adc_ports(sAN3); //AN3 (RA4) analóg bemenet
  6. setup_adc(ADC_CLOCK_INTERNAL);
  7. ...
  8. while(TRUE)
  9. {
  10. adc_val=read_adc(); //potméter állás figyelése, 0-1023

Utána egy másik változóval hasonlítom össze az adc_val változót, de mindig a fent leírt értéket adja, akárhova tekerem a potit, aminek a két vége a Vdd-n és a Vss-en van, a csúszkája meg a bemeneten. A poti 10k-s.
Mit csinálok rosszul? Kihagytam valamit?
(#) usane válasza lastewer hozzászólására (») Ápr 3, 2015 /
 
Azért mert nem tudja mit akarsz.
Ha a 877a-ra vonatkozik ott VDTE és nem VDTEN az "őrkutya" konfigja.
(#) lastewer válasza usane hozzászólására (») Ápr 3, 2015 /
 
PIC16F877A , adatlap:

Idézet:
„bit 3
PWRTEN
: Power-up Timer Enable bit
1
= PWRT disabled
0
= PWRT enabled
bit 2
WDTEN
: Watchdog Timer Enable bit
1
= WDT enabled
0
= WDT disabled”


De
  1. # pragma config WDTE = 0
-ra is ugyan azt írja ki.
A hozzászólás módosítva: Ápr 3, 2015
(#) cross51 válasza Pali79 hozzászólására (») Ápr 3, 2015 /
 
Sima I/O ként van rá szükségem csak nem tudom, hogy itt ennél a típusnál számít-e.
Mert sokszor láttam, hogy régebbi 16F-es típusoknál sok programba ott van, hogy kikapcsolják a komparátort. Mert az alsó nibble nem azt az értéket adja vissza amit kéne ezért gondoltam, hogy ez lehet a hiba.
(#) usane válasza lastewer hozzászólására (») Ápr 3, 2015 /
 
Oppsz. Most nézem, hogy mikroC-t használsz. Akkor miért nem olvastad el a linket mit Hp41C kolléga adott? MikroC-ben tudtommal nem lehet a kódba konfigot írni csak a szoftverben lehet beállítani.
Idézet:
„Attention!
The access to the configuration registers is enabled only during configuration of the microcontroller. Any attempt to access the configuration registers in terms of the programming code will result in the microcontroller reset.”


szerk.
Úgy látom történt egy kis update, ha nem a legrégebbi mikroC-t használod akkor a 0 helyett ON-t próbálj. De ha elolvastad volna akkor te is rájönnél.
Tehát így: #pragma config WDTE = ON
A hozzászólás módosítva: Ápr 3, 2015
(#) usane hozzászólása Ápr 3, 2015 /
 
Na még egyszer.
Szóval : WDTEN=ON
(#) Pali79 válasza cross51 hozzászólására (») Ápr 3, 2015 /
 
Mivel ez egy bővített architeturájú pic, itt több mindent is be kell állítani. Ha sima I/o-ként akarod akkor az az első lépés, hogy ki kell kapcsolni a komparátort. Gondolom a TRIS és társai regisztereket nem kell említeni. Ha biztosra akarsz menni akkor az összes I/O-val kapcsolatos regisztert megnézed az adatlapban és beállítod a neked megfelelőre. Ha rászánod az a pár percet ás azt a pár parancsot nem lesz több gondod vele.
(#) lastewer válasza usane hozzászólására (») Ápr 3, 2015 /
 
Köszi , egyébként elolvastam , de akkor lehet azért nem működik mert 6.0 - ás verzióm van, ezt a kikötést nem láttam.Köszönöm még egyszer.
(#) don_peter válasza mark.budai hozzászólására (») Ápr 3, 2015 /
 
Milyen PIC-ed van?
A teljes problémás programod esetleg?
Eléggé kicsípted ezt a részletet ebből sok minden nem derül ki, hogy miért nem jó.
Pár hiba:
Regiszterek hibás beállításai, hardverhiba,... kevés az infó.
(#) cross51 válasza Pali79 hozzászólására (») Ápr 3, 2015 /
 
Köszi Pali a segítséget, de egy kontakthiba okozta a problémát az LCD hibás adatott adott vissza és mindig pont egy értékkel eltolva.
(#) Pali79 válasza cross51 hozzászólására (») Ápr 3, 2015 /
 
Hát igen... Van, hogy nem a szoftver a hibás, hanem a hardver... Örülök, hogy jó lett!
(#) sonajkniz hozzászólása Ápr 4, 2015 /
 
Sziasztok!
Tudna valaki segíteni , hogy a PIC18F26K20-as microkontrollert hogy kell kötni aPICKIT2-es programozóhoz?
(#) kissi válasza sonajkniz hozzászólására (») Ápr 4, 2015 /
 
Szia!

PK2 lábkiosztását tudod !?

PIC: MCLR 1.láb, GND 19.láb, Vdd 20.láb, PGC 27.láb, PGD 28.láb ( adatlap 4.oldal!) !
(#) sonajkniz válasza kissi hozzászólására (») Ápr 4, 2015 /
 
Szia!
Nem tudom PK2 lábkiosztását, de így már hogy leírtad, mire kell figyelnem, az eddig használt PIC adatlapjával összevetve már ki tudom silabizálni.
Köszönöm!
(#) Pali79 válasza sonajkniz hozzászólására (») Ápr 4, 2015 /
 
Pickit2 lábkiosztás: 1: MCLR, 2: Vdd, 3:Vss, 4: PGD, 5: PGC
A hozzászólás módosítva: Ápr 4, 2015
(#) sonajkniz válasza Pali79 hozzászólására (») Ápr 4, 2015 /
 
Köszi!
(#) Rick06 hozzászólása Ápr 4, 2015 /
 
Sziasztok!

Egy kis segítséget szeretnék kérni PIC témakörben!

Egy 16F84A tip. PIC-et programozok asm-ben kezdő szinten.
A csatolt ASM programot beégettem és működik is.
Villogtatja is az RB1-es lábon lévő LED-et.
A gond a megszakítással van. Az RB3-as porton lévő lábra hívódik meg az ISR rutin.
Viszont csak akkor fut le ,ha a "villogtató" szubrutin a végéhez ért ,azaz a delay rutin visszatért.
Emiatt nem reagál az RB4-es lábon lévő LED azonnal az RB3 láb input változására.
Úgy tudom a megszakítás azonnal meg kell ,hogy hívódjon?

led1.asm
    
(#) Bell válasza Rick06 hozzászólására (») Ápr 5, 2015 /
 
Egyrészt ne legyen return a végén! Ott meg kell állítani a programot, vagy ciklusba tenni amit futtatni szeretnél.
Másrészt a status és a w regisztereket biztonságba kell helyezni a megszakítás időtartamára.
  1. PUSH MOVWF W_TEMP ; Copy W to TEMP register,
  2. SWAPF STATUS, W ; Swap status to be saved into W
  3. MOVWF STATUS_TEMP ; Save status to STATUS_TEMP register
  4. ISR : :
  5. : ; Interrupt Service Routine
  6. : ; should configure Bank as required
  7. : ;
  8. POP SWAPF STATUS_TEMP,W ; Swap nibbles in STATUS_TEMP register
  9. ; and place result into W
  10. MOVWF STATUS ; Move W into STATUS register
  11. ; (sets bank to original state)
  12. SWAPF W_TEMP, F ; Swap nibbles in W_TEMP and place result in W_TEMP
  13. SWAPF W_TEMP, W ; Swap nibbles in W_TEMP and place result into W
(#) Hp41C válasza Rick06 hozzászólására (») Ápr 5, 2015 /
 
A megszakítási rutinban TILOS az INCON GIE bitjének 1 -re állítása. A retfie utasításra kell bízni. A GIE bit 0 -ra állítását a kontroller automatikusan elvégzi a megszakítási rutinba való belépéskor.
A 16F84A RB3 lába nem használható megszakítás kérésére. Az RB0 a külső megszakítás. Az RB7..4 lábakon változásfigyeléssel lehet megszakítást kérni.
Ha az RB4 -en változás figyelhető meg, akkor valahogy jel kerül az RB0 lábra.

Egy regiszter bitenkénti állítgatása helyett ajánlom a két utasítássan megvalósítható byte -os beírást

movlw 0xED
MOVWF TRISB


A megszakítási rutinban illik elmenteni és a végén visszaállítani a W és a STATUS regiszter tertelmát. Jelen esetben a megszakítási rutin nem rontja el az értéküket, így nem kell megvalósítani a mentést.

Ajánlom az MpLab szimulátorát...
A hozzászólás módosítva: Ápr 5, 2015
(#) csaby93 hozzászólása Ápr 5, 2015 /
 
Sziasztok!

Egy kis ideje foglalkozok PIC-ekkel de csak hobbi szinten.
Ma felakartam éleszteni a 18f458-as picem TIMER0 modulját illetve ezzel szépen interruptot generálva felhasználni.
Röviden: a főfüggvényben egy végtelen ciklusban 1 ms-os multiplexeléssel 4 db 7 szegmenses kijelzőre írattam ki számokat, a B porton 8 db led volt és amikor a timer szépen túlcsordult akkor ezen a 8 leden egyesével lépegető futófényt valósítottam meg. Ez szépen sikerült is... de ha az időmultiplexelt 7 szegmenses kijelző idejét állítottam akkor ritkábban történt interrupt. Illetve ha a végtelen ciklus törzse teljesen üres volt akkor egyáltalán nem is történt interrupt:S A kódot mikroC-ben írtam illetve az időzítéshez a saját delay_ms() függvényt használtam. Valaki találkozott már ilyesmivel, vagy mit ronthattam el?
ui: Rendesen ha kétszer annyira állítottam az időzítést akkor fele olyan ritkán történt interrupt...

Előre is köszönöm a válaszokat.
Üdv: A. Csaba
A hozzászólás módosítva: Ápr 5, 2015
(#) cross51 válasza csaby93 hozzászólására (») Ápr 5, 2015 /
 
Megszakításban az INTCON TMR0IF bitjét törölted, mert ez szoftveresen törlendő megszakítás jelző bit.
(#) csaby93 válasza cross51 hozzászólására (») Ápr 5, 2015 /
 
Természetesen töröltem.
(#) cross51 válasza csaby93 hozzászólására (») Ápr 5, 2015 /
 
Nem tudom, hogy 8 vagy 16 bites üzemmódba megy de ha 16 bitesben megy akkor próbáld me g8 bitessel, de nem hiszem, hogy ez probléma lenne mert a doksiban ez áll:
Idézet:
„Interrupt-on-overflow from FFh to 00h in 8-bit
mode and FFFFh to 0000h in 16-bit mode”
(#) csaby93 válasza cross51 hozzászólására (») Ápr 5, 2015 /
 
8 bites üzemmódban működött...
(#) Bell válasza csaby93 hozzászólására (») Ápr 5, 2015 /
 
Ha az interrupt megfelelően van konfigurálva, akkor az működik.
Ha mégsem, akkor elrontottál valamit.
Hogy mit?
A leírtak alapján ezt nem fogja senki kitalálni.
(#) csaby93 válasza Bell hozzászólására (») Ápr 5, 2015 /
 
Sikerült. Azt rontottam el hogy a konfignál a az egyes regiszterek értékét bitenként állítottam be... nem pedig bájtosan... ezvolt a baja.. valószínűleg a regiszterek nem tudták olyan gyorsan beleírni majd kiolvasni az egyes biteket...
(#) Bell válasza csaby93 hozzászólására (») Ápr 5, 2015 /
 
A bitenkénti beállítás lehet jó, ha a sorrend megfelelő.
De ha pl. előbb engedélyezed a megszakítást, mielőtt a szükséges beállítások megtörténnek, akkor lehet gond.
(#) csaby93 válasza Bell hozzászólására (») Ápr 5, 2015 /
 
Értem, valószínűleg úgy történt... most már jól működik az a lényeg, jöhetnek az értelmes felhasználások timer interruptra is. Köszönöm szépen azért a segítséget.

Üdv: A. Csaba
Következő: »»   657 / 1207
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