Fórum témák
» Több friss téma |
Sziasztok!
Egy 12F683 PIC-hez írtam egy PWM vezérlő programot szervo vezérléshez. Két gombot használok, egy a programozást és egy az üzemszerű szervo mozgást vezérli. Kettő potméter állásáról veszi a kezdeti és végállások értékeit, a harmadik a végállások közötti állítás sebességet vezérli. DE! Indítás után a szervo kitér az egyik állásba, és ott zümmög. Ez a klasszikus esete, amikor nincs PWM jel. Aztán egyszer csak gondol egyet és elkezd rendesen menni, a program szerint. ![]() Gondoltam a motor meghúzza a PIC tápját, de ezzel eddig nem volt ilyen gondom. Próbáltam a WDT-vel megoldani, de az újraindítgatja a PIC-et, így a program nem tud lefutni, mert újra indul. Milyen irányba kezdjek el keresgélni, mi okoz ilyen program indítási hibát? Tettem be az inicializáló részbe egy "warm up delay" késleltetést, kb 2 sec időtartamút. De látszólag ez sem segített...
Hello!
Szeretnék elkezdeni foglalkozni PIC programozással. A PICKIT-2DE mellet tettem le a voksomat. Van hozzá indító lemez PIC16F887 mikrokontrollerrel. Ez annyit jelent, hogy egy panelra szerelt 16F887 mikrokontrolleren lehet tesztelgetni a megírt programokat és Ledeken vizuálisan lekövetni mi hogy működik? Azaz ez kiadja a próbapanel szerepét, már kivannak alakitva rajta a külső áramkörök amik szükségesek mikrokontroller üzemképes működéséhez?
Szia!
Esetleg ha tennél fel valami kódot, mert ugye a világ végéről nem látunk bele, mit is csináltál. üdv. Foxi
Igen. Vásárlás előtt célszerű elolvasni a részletes leírását, úgy könnyebb eldönteni, hogy erre vágysz-e, vagy sem.
Erről a honlapról legfőképpen a 44-Pin Demo Board User's Guide és a PICkit 2 Debug Express Product Overview dokumentumokat ajánlom.
Kösz a segítséget, bár nemigazán tudok dönteni a PICKIT-2DE és PICKIT-2SK között.
Melyiket lenne érdemesebb megvásárolni egy abszolút kezdőnek?
Egy szempontot említek, a Debug Express készletben kapott panellel a DIP foglalatban többféle kontrollert lehet használni.
A hozzászólás módosítva: Dec 9, 2013
Idézet: Fordítva van: a Starter Kit-ben van DIP foglalat (cserélhető a PIC), a Debug Express-ben pedig fixen beforrasztott PIC található.„a Debug Express készletben kapott panellel a DIP foglalatban” További szempontok a kiválasztáshoz: a Debug Express mikrovezérlője alkalmas a hardveres nyomkövetésre (ezért Debug Express a kártya neve), a Starter Kit mikrovezérlője nem.
Elnézést, köszönöm a pontosítást.
Tudom, hogy kinek a pap, kinek a lánya, de én hardveres nyomkövetés nélkül elprogramozgatok pár éve. A hozzászólás módosítva: Dec 10, 2013
Szevasztok. Lenne egy viszonylag egyszerű progi
Módosítani kellene rajta, viszont csak HEX van. A módosítás csak annyiból állna, hogy a kimenetet az IC egyik külön lábáról is lehessen kapcsolni, ne csak távvezérléssel. Nekem elég egykanálos kapcsolás is, így még annyi módosítás kellene rajta, hogy betanításkor ne kérjen két kódot két kanálra, hanem csak egyet. Így felszabadulna egy láb, ami lehet a bemeneti kapcsoló. Lehetséges ez? Természetesen valakit megkérnék ezzel, aki meg tudná csinálni.
Szia Foxi,
ebben teljesen igazad van. A kezdő beállításokat megoszthatom. A GP3 az MCLR láb és a GP5 L szintre kapcsolnak, 10k-val fel vannak húzva 5V-ra. Íme a részlet:
A hozzászólás módosítva: Dec 10, 2013
Ebben a részletben én nem látom hol állítod a CCPR1L regisztert és mikor állítod a TMR2ON-t.
Sziasztok!
Az első PIC kapcsolásomat szeretném megépíteni, viszont égetőm még nincsen, de nem is akarok még egy komoly égetőbe belevágni. A kérdés az lenne, hogy egy PIC12F675 mikrokontrollert fel lehet programozni egy LPT portos vagy JDM programozóval?
Hát ez az! Pont az a bajom, hogy még nem jut el a PWM kapcsolásáig sem és máris megy a motor az egyik végállásig.
Ugyanakkor a programozó állásba sem tudom kapcsolni, mert a MAIN nem fut le. Viszont többszöri újraindításra egyszer csak beindul a program és működik tökéletesen onnantól kezdve!
Ettől kezdve olvasom ki az AD átalakítókból a potméterek értékeit, tárolom és azt adom meg a PWM végállásainak.
Majd vissza a MAIN rutinba. A hozzászólás módosítva: Dec 10, 2013
Szia!
Nézd meg watt fórumtárs oldalát Bővebben: Link !
Itt a leírás milyen sorrendben kell inicializálni. Ha nem akarod, hogy egyből elinduljon adj neki 0% kitöltést.
19.4.3 SETUP FOR PWM OPERATION To configure the CCP module for PWM operation, using CCP4 as an example: 1. Set the PWM period by writing to the PR2 register. 2. Set the PWM duty cycle by writing to the CCPR4L register and CCP4CON<5:4> bits. 3. Make the CCP4 pin an output by clearing the appropriate TRIS bit. 4. Set the TMR2 prescale value, then enable Timer2 by writing to T2CON. 5. Configure the CCP4 module for PWM operation.
Ez túl egyszerű lenne!
A bajom az, hogy nincs még bekapcsolva a PWM modul és a motor mégis zümmög. Ha bekapcsol, akkor a motort nem lehet kitéríteni az adott pozícióból, de itt nem ez van. Érzésem szerint itt egy olyan hiba lehet, ami tápfesz gond. Előfordul, hogy a PICKIT3-ról elindul simán, aztán máskor meg nem. És ugyanezt megcsinálja a saját tápjával is. Szóval teljesen világtalan vagyok. Ha a sorrendem nem lenne jó, akkor nem működne egyáltalán. Bánatos vagyok. ![]()
Idézet: „A bajom az, hogy nincs még bekapcsolva a PWM modul és a motor mégis zümmög.” Nem vagyok járatos a témában, de nem lehet, hogy azért, mert konfigurálás hiányában csak összevissza zümmög?
A PWM modult a CCP1CON kapcsolja be, nem a TMR2 elindítása. Ha előtte nem állítod be a megfelelő regisztereket(pl. CCPR1L), lehet az okozza a problémádat. A leírásban is az van. hogy előbb el kell indítani a TMR2-őt, majd a PWM-et. Te pont fordítva csinálod először elindítod a PWM-et, majd utána bekonfigurálod.
Ezt az oldalt megtaláltam, viszont z volt vele a problémám, hogy az égető programok nem támogatták a korábban említett mikrokontrollert, vagy ez nem feltétlenül jelent problémát?
No igen, ezért keresek PWM-ben jártas embert én is!
![]()
Én meg úgy tudom, hogy a CCP1CON a PWM funkcióra definiálja a kimeneteket.
A PWM indítását pedig a T2CON 2.bit a TMRON indítja. Addig csak be van konfigolva! A hozzászólás módosítva: Dec 11, 2013
Nem jól tudod. Ezért megy el a motorod. A CCP1CON azonnal indítja a kimenetet, a TMR2 túlcsordulása fogja majd megállítani. Aztán a TMR2 újabb túlcsordulása indítja el megint a duty beállítása szerint.
Ha előbb kapcsolod be a CCP1CON-al a PWM kimenetét és csak valamikor később birizgálod a TMR2-t, pont az fog történni, ami történt is. Elindul a motor és az első PWM ciklus ideje a TMR2+a késlekedésed. Ktamas66 már megoldotta a problémádat. Nyugodtan hidd el neki.
Ha megnézed a Bővebben: Link
ennek a lapnak az alján a PIC12F675 tesztelés alatt van ( 2011! )! Szerintem, ha gond lett volna vele, akkor már javítva lenne, de akár watt-nak is írhatsz ![]()
Ez a program a Microchip tutorial PWM része:
A PWM konfigurálása ebben a programban szerinted úgy történik, ahogy írtátok? Mert szerintem nem. És ez működik, ennek mintájára írtam meg a saját programom, ami szintén működik, de nem minden indulásnál...És ezt nem értem miért! A hozzászólás módosítva: Dec 12, 2013
Az a lényeg, hogy elindítja a TMR2-t, ha azt szeretnéd, hogy a motor meg se moccanjon megfordítod a parancsokat. A CCPR1L=0 meg kell adni mivel ez reset után nem feltétlenül nulla, és csak akkor nem kezd a PWM felfutó éllel ha ez 0 (PIC12F683 8.3.1 fejezet). A CCPR1L állítása az AD alapján csak a következő ciklusban lép életbe (csak a ciklus elején másolja az értékét a CCP1H regiszterbe). Amíg nem fut a TMR2 az első ciklus soha nem ér véget (aztán valami kibillenti innen, és akkor már rendesen működik). Tehát TMR2-t inicializáláskor el kell indítani.
A hozzászólás módosítva: Dec 12, 2013
Azért trehánykodhatott a Microchip programozója, mert a PWM indítás után villámgyorsan futtatja az A/D konverziót és gyakorlatilag a második PWM ciklusnál már van korrekt duty beállítása.
Vagyis elvileg 0%-os duty-val indít, így ráér a TMR2-t akkor belökni, amikor akarja, mert pár cikluson belül nincs jelentősége. Utána egy gyors A/D-vel feltölti a CCPR-t. Nálad az lehet a gond, hogy elindítod a PWM-et, utána belefuthatsz valami delay-be. Mivel a CCPR regiszterek teljesen véletlenszerű állapotot tudnak felvenni induláskor, nem 0% lesz a duty, hanem akármi. Ha kicsi az érték, nem indul magától a motor, ha nagyobb, akkor igen. Korábban írtad, hogy a Main-be se talált bele a program. Annak semmi köze nincs a PWM-hez, viszont eredményezheti a leírt hibát. Ugyanis elindítod véletlenszerű adatokkal a PWM-et, közben beragad a program, a motor meg pörög. A legjobban akkor jársz, ha előbb csinálsz egy előzetes A/D konverziót, beállítod pontosan a duty-t és utána indítod a PWM-et. Ilyenkor mindegy lesz, hogy előbb írod a CCP1CON-t és utána a TMR2-t (ahogy jobban szeretnéd ![]() De azért elsőnek nézz utána, hogy mi az a késleltetés, vagy beakadási pont, ami megállítja a programot. Ha meg nem hiszed el, amit írunk, azon nem tudunk segíteni. A hit már teológiai kérdés lenne és azt nem tolerálnák a moderátorok. ![]()
Köszönöm, átnézem a beállításokat és kipróbálom ezt a CCPR1L=0-ás indítást is.
A hozzászólás módosítva: Dec 12, 2013
Idézet: „Ha meg nem hiszed el, amit írunk, azon nem tudunk segíteni. A hit már teológiai kérdés lenne és azt nem tolerálnák a moderátorok.” Idézet: „Azért trehánykodhatott a Microchip programozója, mert a PWM indítás után villámgyorsan futtatja az A/D konverziót és gyakorlatilag a második PWM ciklusnál már van korrekt duty beállítása.” Látod, hogy ezért vagyok szkeptikus, nem a ti tudásotokban nem bízok. Kipróbálok szépen lassan minden megoldást. Egyébként átírtam az inicializálást és arra jutottam én is kísérletezve, hogy jobb egy fix értékkel indulni, és aztán lekapcsolni a PWM-et a TMR2ON-nal, mert aztán újra bekapcsolva már stabil! Neked is köszönöm a segítséged!
És akkor a folytatás egy EEPROM írás-olvasási gondommal.
Megpróbáltam az AD által mért értékeket beírni, hogy a következő indulásnál egy CALL EEPROM_READ után az egyszer mért és beállított értékeket ne kelljen feltétlenül még egyszer mérni, csak behívni és megadni a PWM-nek az adatokat. De nem írja be a program az EEPROM-ba, és az olvasással sem vagyok biztos, hogy helyes eredményt ad. Ezek is a MC adatlapról, illetve a T-és-T oldalról származó leírásokból vannak. Itt mit gondoltok, mi a differencia? Vagy mit értettem félre? Ez sem tartom kizártnak a PWM után! ![]()
Ez egy klasszikus hiba, amit szerintem mindannyian elkövettünk már kezdő korunkban. Átmentél a Bank1-be, hogy megírd az eprom regisztereit, de a változóid a Bank0-ban vannak.
Olvasásnál is van egy hiba. Azelőtt akarod kiolvasni az EEDATA-t, hogy lefutott volna az RD ellenőrző ciklus. Annak pont az a lényege, hogy jelezze neked, hogy kész az eprom olvasás, viheted az adatodat. Tehát a MOVWF POT_START_POZ sort a GOTO alá kell tenni, és előtte vissza kell menni Bank0-ba.
Írásnál meg így:
Megvan ennek is a logikája, amit ritkán írnak le az adatlapban, mert úgy vélik, ezt mindenkinek tudnia kell, mielőtt belefog. |
Bejelentkezés
Hirdetés |