Fórum témák
» Több friss téma |
Köszönöm a hasznos linket, értelmezem, és bízok benne hogy elég lesz a 12f683.
Üdv!
Most kezdek ismerkedni a pic16f84A mikrokontrollerrel nagyon alapszinten.C programozási nyelvet már tanultam , és utána néztem néhány parancsnak , amik alapján csináltam egy led villogtató programot:
Ezt a programot szimuláltam a proteus nevű programmal és ott valóban működött , és az RB1 lábpm valóban villogott a led.Az lenne a kérdésem , hogy , hogy kell bekötni a pic-et , hogy jól működjön?Itt olyanokra gondolok , hogy pl az mclr lábra kapcsoljak egyest ? , vagy nem kell rá semmit kötni?Ezt a programot mikro C nevű programban írtam , és elindítottam a project varázslót , és ott kikellett választani , hogy melyik tipusú picet akarom programozni illetve azt , hogy hány mhz-s órajelen akarom üzemeltetni.Nekem az a furcsa , hogy a programomba nem rakott bele semmilyen header fájlt , illetve nem rakott belealapbeállításokat , mint ahogy azt láttam nagyon sok pic-es programban,de a proteusban mégis működött a szimuláció.Gyakorlatban is helyt állna ez a program? Idézet: Nem valószínű.„Gyakorlatban is helyt állna ez a program?” 1. MCLR lábat fel kell húzni egy 10 kOhmos ellenállással a tápfeszültségre. 2. VDD és VSS lábak közé egy 100 nF-os kondenzátor kell 3. VDD-re stabilizált tápfeszültség kell (5 V, vagy annyi, amennyit az adatlap ír) 4. OSC1 és OSC2 lábak közé 4 MHz kvarcot kell kötni, a föld felé pedig egy-egy 22 pF kondenzátort. Bővebben: Link
Sziasztok!
Gondom támadt PIC égetéssel. Thowra időzítőjét megépítettem és beégettem az ő hex-ét. Nem volt tökéletes és kaqk fórumtárs ajánlotta az ő időzítőjének a hex-ét. Gondoltam próba szerencse kipróbálom. Töröltem egyet majd beégettem az övét. Az ellenőrzésnél a következő hibaüzenet fogadott: Programming failed at Program Memory address 0x000001 Próbálgattam törölni és égetni de nem megy. A Blank checkre meg ezt írja ki: Program Memory is not blank starting at address 0x000000 Mit lehet ilyenkor tenni? Ilyesmi égetésnél még nem fordult elő.
A programozó felismeri jól, hogy milyen PIC van benne?
Sikerült. Bezártam a programot és újraindítottam és működik sikerült az égetés.
Nagyon láma kérdésem lenne, de nem tudok 1-ről a 2-re jutni. Szóval, mérném egy poti pozícióját és figyelem a változást. Ha van, a program máshova ugrik. Sima pollingozás, nem interrupt.
A gond az, hogy már levettem az AD-t 8bitesre, de még mindig ugrál 1-2 értéket. Átlagolni nem akarok a szofttal, mert a polling miatt, így is ki van élezve. Csatolok egy rajzot, hogy miként próbáltam szűrni a bejövő jelet. Külső referenciát nem használok.
Hasonló alapon csináltam hangerőszabályzó viszajelzést és nem fogsz tudni vele mit kezdeni bármilyen referenciát is használnál. Mindenképpen átlagolni kell.
A francba! Rossz hír. Vajon egy 10 átlag elég lehet?
Az A/D -ből kiolvasott érték felső n bitjét használd: Ha a felső 3 bit elég, már 8 féle helyre tudsz ugrani. Figyeld, merről ment a tartományba, a maszkolt A/D értékhez egy kis értéket (1/2 lsb) adj hozzá vagy vonj le hiszterézisként.
Idézet: Számolj gördülő átlagot, vagy egyszerűen vedd a korábbi átlag és az új mérés súlyozott átlagát (damping)! Így lekérdezésenként csak egy mérés kell, mégsem ugrál az eredmény össze-vissza. „Átlagolni nem akarok a szofttal, mert a polling miatt, így is ki van élezve.”
Egy kis segítséget kérnék ismét.
Inicializáltam a portok a 16f684-en, de az RA3-on kint van a tápfesz hiába input. Mit ronthattam el? Az mplabba ha szimulálom, nem lehet 1-re állítani a kimenetét, tehát nem output. Egy másik érdekes észrevétel. Próbálgattam a programomat 2 napja legalább 20x fel is programoztam a picet, majd egyszer csak semmi. Nem vezérli az lcd-t, előveszek egy másikat ugyanazzal a programmal működik, az előző nem. Gondoltam meghalt, bár a portjain ott vannak az utolsó kiadott utasításnak megfelelő jelszintek. Ma előveszem a rossznak véltet felprogramozom és megint működik. Ez mi a fene? Van valami korlát, hogy rövid időn belül hányszor lehet felprogramozni vagy mi? És nem ez az első eset ennél a típusnál.
Lehet hülyeséget írok. Előre is bocsánat
Miért kell a mért áramkörbe a kondenzátor? Nem az okozza a mérés ugrálását?
Milyen programozót használsz? Sorosportival nekem is volt hasonló problémám.
A 16F684 -en a kérdéses láb megnevezése RA3/MCLR/VPP. A MCLR láb csak bemenet lehet.
Jó, hogy csak bemenet lehet, de akkor miért csücsül kint rajta az 5V? Vagy sikerült valahogy aktiválni a felhúzó ellenállást?
Amúgy pickit2 klónt használok.
Talán a panelen van egy ellenállás, ami Vdd -re húzza vagy a PICkit2 ad ki neki magas szintet.
Az MCLR funkciót a CONFIG beállításoknál lehet kikapcsolni, az MCLR automatikusan fel van húzva Vcc-re, szoftverből nem állítható (Leírás: 4.2.1 WEAK PULL-UPS).
Nem ezzel kapcsolom ki? Vagy kihagytam még valamit?
BSF OPTION_REG,7 ;PULL-UP OFF Egyébként próbapanelen van, ellenállás nem zavarna be, valószínűleg mégiscsak én hibáztam megint.
Nem, elől a CONFIG sorhoz kell még hozzáadni a _MCLRE_OFF kapcsolót.
Nem kérdeztél hülyeséget, teljesen logikus. Alapállapotban természetesen nem kell kondi egy szimpla ellenállásos feszültség osztóhoz. Igaz is lenne, ha az áramkör nem szedne össze brummot vagy zavaró jel tüskéket, amik a mérést is zavarják. Ez a kis RC tag, ezt hivatott söntölni, csökkenteni. Először, én is szűrés nélkül próbáltam és probléma megjelenése után próbáltam szűrni.
A 100n-t az 1k után szokták rakni, hogy az legyen az RC tag, de szerintem ez nem oldja meg a problémádat. Ha kis változást is érzékelni akarsz átlagolni kell.
Majdnem jól látod, csak elkapkodtad. Amivel jól működött (egy másik kapcsolásom) annál:
Soros 1k-100nF a testre-soros 1K. Tehát előtte és utána is van egy ellenállás. Itt az előtte, maga a poti.
Az AD bemenetére kötött RC tag egy aluláteresztő szűrő, amit méretezni lehet a mérendő jel frekvenciájához. Az 1k-100n páros az kb.1,6kHz-nél vág (utána már nem szoktak soros ellenállást tenni). A te kondid inkább "hidegítő", bár az is aluláteresztő, de változó vágási frekivel, de nem is ez az alapvető feladta, ezért rakhatsz oda nagyobbat is, ami még tűrhetően követi a poti változási sebességét.
A második ellenállás azért kell, hogy tudjam tartani az AD ajánlott forrásellenállását.
Csatlakozom...
Lehet, hogy én is hülyeséget írok, de: próbáltam két potit beolvasni a PortA-ról, 16F873-al és én is tettem mindkét potira kondenzátort, szűrés gyanánt... Ha a PA1-en lévő potit tekertem, a másikról (PA0) beolvasott érték is változott... miután kitéptem a hajam felét, kiforrasztottam a kondikat és megjavult... 22 mikrós elkók voltak... Úgyhogy első körben kivenném a kondit...
Mint azt már írtam fentebb, kondi nélkül kezdtem... Egyébként nálam nem volt ilyen "áthallás" jelenség.
Idézet: „Sziasztok! Gondom támadt PIC égetéssel. Thowra időzítőjét megépítettem és beégettem az ő hex-ét. Nem volt tökéletes és kaqk fórumtárs ajánlotta az ő időzítőjének a hex-ét. Gondoltam próba szerencse kipróbálom. Töröltem egyet majd beégettem az övét. Az ellenőrzésnél a következő hibaüzenet fogadott: Programming failed at Program Memory address 0x000001 Próbálgattam törölni és égetni de nem megy. A Blank checkre meg ezt írja ki: Program Memory is not blank starting at address 0x000000 Mit lehet ilyenkor tenni? Ilyesmi égetésnél még nem fordult elő.” Újra ugyanez a hiba. Nem emlékszem tegnap hogyan csináltam de ma a szintén ugyanezt csinálja. A pic ugyanaz csak a kapcsolás más és a program is. A hozzászólás módosítva: Jan 9, 2014
|
Bejelentkezés
Hirdetés |