Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Pontosabban az első kérdésemnél az a bajom, hogy pl.: ha a programba azt írom, hogy várjon fél másodpercet, akkor addig nem hajt végre más műveletet. ( Lehet hogy rosszul gondolom?)
(a PWM-től, ADC-től és hasonlóktól tekintsünk el) Mert az kéne, hogy ha pl. vár is akár 5 másodpercet, addig is figyeljen egy kimenetet, vagy szoftveresen villogtasson ledet vagy stb. Vagy ehez egy pic nem elég?
Erre tudsz egy példát hozni? (a visszaindukált feszültségre)
C-ben programozok.
PIC-es példát nem, a régi videoton magnómotor analóg szabályzója figyelte a motorban indukálódott feszültséget. Ami eszembe jutott még példa keresési lehetőségnek, digitális modellvasút mozdony dekódere, azoknak a programjai között vannak nyilvánosak, ott is fontos a motor pontos szabályzása.
Szerintem neked eljött az idő, hogy beleásd magad a megszakítások részbe. A led villogtatás egy timer elvégzi neked és közben babrálhatsz a PWM-mel meg akármivel...
Egy led villogtatására halom sw megoldás van, de a CCP modul output toggle módja még programot sem igényel (csak beállítást).
A motorok szabályozásánál jó lenne tudni milyen motorra gondoltál. A floppy motoroknál az a cakkos vonal a nyákon gyakorlatilag egy tekercs, amivel mérni lehet a fordulatszámot, de vannak rajta hall elemek is. BLDC motoroknál pl. a harmadik tekercsen indukálódott feszültséget lehet figyelni (AN857). Idézet: „ha a programba azt írom, hogy várjon fél másodpercet” Ne ezt írd, hanem azt, hogy fél másodperc múlva változtassunk a LED állapotán. Határozz meg egy olyan kis időszeletet, aminek minden időzítés többszöröse pl: 100us, 200us, 500us, 1ms, 10 ms... Állítsd be a timer2 megszakítását erre az időre. Minden tevékenységhez vegyél fel számlálót és egy jelzőbitet (ha a bit 1, a hozzá tartozó feladatot el kell végezni, a bitet törölni kell, ha 0 nem kell a feladattal foglalkozni). Állítsd be a számálók jelzőbitek kiindulási és a kimenetek értékét. Engedélyezd a timer2 megszakítást. Legyen az alap idő pl. 10 ms. Ekkor a led mádodpercenkénti villogását és az A/D mérés 100ms -enkénti elvégzését az alábbiakkal el lehet végezni: Indulási értékek beállítása: - A/D és a port beállítása, timer2 felprogramozása. - LED kimenet kikapcsolva, számláló 50, jelzőbit 0. - A/D mérés: számláló 10, jelzőbit 0. - Megszakítás engedélyezése. Timer2 megszakítás: - Ha a LED számlálója nagyobb, mint 0, csökkenti 1 -gyel, ha így 0 -ra ért, beállítja a LED feladat jelzőbitjét. - Ha az A/D számlálója nagyobb, mint 0, csökkenti 1 -gyel, ha így 0 -ra ért, beállítja a A/D feladat jelzőbitjét. Főprogram, ami egy végtelen ciklus: - Ha a LED feladat jelzőbitje 1, a LED kimeneti szintjének váltása, LED számláló 50, a LED feladat jelzőbit törlése. - Ha az A/D feladat jelzőbitje 1, az A/D mérés eredményének kiolvasása, feldolgozása, új mérés indítása. A/D számláló 10. Az A/D feladat jelzőbit törlése. Persze pl. az A/D mérés eredménye modjuk változtathatja a LED villogási idejét, ekkor a főprogram az előző mérés alapján kiszámított értékkel tölti fel a LED számlálóját. Ha nem kell a villogás, a LED számlálót 0 értéken hagyja.
Köszönöm a sok segítséget!
Először is a villanymotor egy szervó motorja (tehát dc motorra gondoltam). A terhelés szabályzást úgy tűnik sikerült megoldanom, mert találtam rá egy példát. Idézet: „eljött az idő, hogy beleásd magad a megszakítások részbe” Ez pontosan mit takar? (már hallottam róla, de nem tudom mire jó, programban hogy néz ki) Hp41C írását is köszönöm, viszont a timer2 megszakítását hogyan kell beállítani? (Gondolom Hp41C és vicsys is ugyanarra gondolt.) A hozzászólás módosítva: Júl 23, 2015
Sziasztok!
Nem tudom találkozott-e valaki hasonló problémával: Motorvezérlést próbálgatok, ahol az áramot egy söntön figyelem. Ezt a picben levő OPA-val erősíteném (16F1788, OPA1) sima erősítőként, a kimenete a pickes komparátoron keresztül modulálja a PWM jelet. Most egy potival tudom szabályozni a PWM kitöltését, így az áramot. Minden szépen működik, amíg a potit le nem tekerem nullára (ekkor a motor megáll), ha elkezdem felfelé tekerni, az áram elkezd nőni, a motor elindul, de az OPA kimenete "beragad" 0-án, de ha eléggé megnövelem az áramot egyszer csak elindul. Most kb. 300mA a korlát, és kb 500mA-nál elindul szépen leveszi 300-ra és minden jól működik. Jelenleg nincsenek túl magas jelszintek, 50mOhm a sönt, az OPA négyszereset erősít.
Hello!
12f1572 PWM-el játszok. Adatlap 191. oldalán standard pwm időzítéssel kapcsolatban kellene egy kis felvilágosítás. Ha a PWMxDC regisztert kisebbre állítom mint a periódus regisztert akkor ugye nem lesz 100% kitöltésem soha. Jól értelmezem? Mire is jó ez nekem? Egyébként egy RGB vezérléssel ütyködök, és szeretnék hozzáadni egy összevont fényerő szabályozást. A katódók vannak meghajtva pwm-el és a közös anódnak már nincs pwm csatorna. A színkeverés és a fényerő USARTon jön két külön bájtként. Ne kérdezzétek hogy fér egy byte-ba a 3 szín nem teljes keverés, csak a főbb keverékek. Azon agyaltam hogyan integráljam be a fényerőt a pwm regiszterekbe a lehető legegyszerűbben, hogy ne kelljen itt osztogatni, meg egyéb műveleteket végezni..
Igen, jól értelmezed. Alap PWM-nél (a PH regiszter=0 ) a DC regiszter adja a kitöltési tényezőt. Különben a PH a felfutó élet állítja, a DC a lefutót.
PIC egyszer vagy többször Írható?
Van egyszer írható, és van többször írható. Utóbbiból sokkal több készül mostanában.
Az egyszer írhatóknál "C" betű van, a többször írhatóknál "F" betű.
Pl: 12C671 = egyszer írható 12F675 = többször írható.
Próbálkoztam a megszakításokkal és a timer-ekkel kissebb, nagyobb sikerrel.
A timer beállítása ment, de miután elindul a timer megszakítás nem lép ki belőle. Mi lehet a gond? (nincs végtelen ciklus) Idézet: „a hozzá tartozó feladatot el kell végezni” Ez konkrétan annyi, hogy be vagy kikapcsolja pl.: a LED-et? A jelzőbit törlése annyit tesz, hogy 1-rő 0-ra állítom vagy van rá parancs? Egy konkrét példát tudnátok erre hozni? Egy kimenet állapotának hogyan lehet a reverzét venni? Előre is köszönöm.
Mutass kódot, mivel próbálkozol. Amúgy szerintem nem törlöd a timer megszakításjelző bitjét a megszakítási rutinban.
Azonban:
16C83 és 16C84 többször írható. A 16Cxx, 18Cxxx ablakos kerámia tokban eprom törlővel törölhető és aztán megint írható.
Na ezekre nem is gondoltam, köszi a pontosítást!
XC16 vagy a régebbi, a C30.
A hozzászólás módosítva: Júl 26, 2015
Szia!
Úgy tudom hogy a free verziók korlátozva vannak optimalizálásban.
Jól tudod. A fizetős verzió (jobban) optimalizál.
Tehát nincs olyan ami jól is optimalizál és ingyenes is.
Köszönöm.
Mindkettő Csak triál verziók, ha lejár az idejük nem optimalizálnak. Illetve nem veszik ki azt a szemetet a kódból amivel előzőleg telepakolták Erre jó a virtuálgép. Ha lejár a triál újratelepíted és kész
Sziasztok,
LCD-re szeretnék kiírni adatokat. Ami megy, hogy a DT ""-be beírt adatok megjelennek rendesen, ahogy kell. Ami nem megy, hogy a karakterláncba egy-két változót is ki szeretnék kiíratni. DT "xxxxx",változó1, változó2, "xxx". Konkértan az AD átalakítás eredményét HEX-ában ellenőrzés végett. (ez egy közbenső állomás) Az alábbi programsor a két változó hexa értékét írja ki a képernyőre, azaz 0x7c, 0x7d, ahol a memóriában vannak és nem a tartalmát. Mit néztem el, kérlek segítsetek?
A hozzászólás módosítva: Júl 27, 2015
Megoldva!
A változókhoz ki kell ugrani egy külön címkére és ott kell: movf változó,w return parancsot adni.
Sziasztok!
Olyan kérdésem lenne, hogy hogyan oldjam meg azt, hogy ha a pic egy bemenetére jel érkezik, akkor villogtasson egy ledet 3 másodpercig 1 másodperces villogásokkal. Megszakítással és timer2-vel szeretném megoldani, mert egy időben több dolgot is el kell végeznie a picnek. (Pl.: bemenet figyelés, PWM változtatása, A/D átalakítás) Másik kérdésem az lenne, hogy digitális bemenetnél, hogyan tudja eldönteni a pic, hogy a bemeneti jel Pl.: 60 Hz-es vagy 200kHz-es-e?
Szia!
Csinálsz egy megszakítást pl.10 ms-ra, a megszakításban csökkented a DELAY változó értékét, ha nem nulla és ha nulla lett, akkor bekapcsolsz egy jelzőbitet. A főprogramban, ha bejött a bemenetre a jel, akkor DELAY-t feltöltöd 100-ra, bekapcsolod a LED-et. Ha a jelzőbit 1-es lett, akkor LED kikapcs, jelzőbit töröl és DELAY újra feltöltés... Ezt annyiszor csinálod, ahányszor akarod a villogást! A lényeg, hogy a megszakítás csak JELEZZEN, hogy eltelt az idő, a következő fázis következik, így sok folyamat mehet látszólag egyszerre! Azt, hogy egy jel 60 Hz vagy 200 kHz, azt a jel periódusidejének a mérésével lehet eldönteni... Szerintem ezek a kérdések még nem a PIC haladó topicba illenek, elég lett volna a kezdő kérdésekhez berakni! |
Bejelentkezés
Hirdetés |