Fórum témák
» Több friss téma |
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?
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.
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:
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?
Azért mert nem tudja mit akarsz.
Ha a 877a-ra vonatkozik ott VDTE és nem VDTEN az "őrkutya" konfigja.
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
A hozzászólás módosítva: Á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.
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
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.
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.
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ó.
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.
Hát igen... Van, hogy nem a szoftver a hibás, hanem a hardver... Örülök, hogy jó lett!
![]()
Sziasztok!
Tudna valaki segíteni , hogy a PIC18F26K20-as microkontrollert hogy kell kötni aPICKIT2-es programozóhoz?
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!) !
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!
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
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?
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.
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
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
Megszakításban az INTCON TMR0IF bitjét törölted, mert ez szoftveresen törlendő megszakítás jelző bit.
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”
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.
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...
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.
É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 |
Bejelentkezés
Hirdetés |