Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1195 / 1319
(#) zilahi válasza matheattila hozzászólására (») Júl 23, 2015 /
 
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?
(#) zilahi válasza proba hozzászólására (») Júl 23, 2015 /
 
Erre tudsz egy példát hozni? (a visszaindukált feszültségre)
C-ben programozok.
(#) proba válasza zilahi hozzászólására (») Júl 23, 2015 /
 
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.
(#) vicsys válasza zilahi hozzászólására (») Júl 23, 2015 /
 
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...
(#) ktamas66 válasza zilahi hozzászólására (») Júl 23, 2015 /
 
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).
(#) Hp41C válasza zilahi hozzászólására (») Júl 23, 2015 /
 
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.
(#) zilahi hozzászólása Júl 23, 2015 /
 
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
(#) ktamas66 válasza zilahi hozzászólására (») Júl 23, 2015 /
 
Esetleg ezt olvasd át.
(#) zilahi hozzászólása Júl 24, 2015 /
 
Köszönöm, hasznos volt.
(#) ktamas66 hozzászólása Júl 24, 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.
(#) usane hozzászólása Júl 24, 2015 /
 
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..
(#) ktamas66 válasza usane hozzászólására (») Júl 24, 2015 /
 
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.
(#) kissattila88 hozzászólása Júl 24, 2015 /
 
PIC egyszer vagy többször Írható?
(#) nedudgi válasza kissattila88 hozzászólására (») Júl 24, 2015 /
 
Van egyszer írható, és van többször írható. Utóbbiból sokkal több készül mostanában.
(#) zenetom válasza kissattila88 hozzászólására (») Júl 25, 2015 /
 
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ó.
(#) zilahi válasza Hp41C hozzászólására (») Júl 26, 2015 /
 
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.
(#) potyo válasza zilahi hozzászólására (») Júl 26, 2015 /
 
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.
(#) Hp41C válasza zenetom hozzászólására (») Júl 26, 2015 / 1
 
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ó.
(#) zenetom válasza Hp41C hozzászólására (») Júl 26, 2015 /
 
Na ezekre nem is gondoltam, köszi a pontosítást!
(#) edison14 hozzászólása Júl 26, 2015 /
 
Sziasztok!

Ismer valaki ingyenes C fordítót PIC24 picekhez?
(#) Hp41C válasza edison14 hozzászólására (») Júl 26, 2015 /
 
XC16 vagy a régebbi, a C30.
A hozzászólás módosítva: Júl 26, 2015
(#) edison14 válasza Hp41C hozzászólására (») Júl 26, 2015 /
 
Szia!

Úgy tudom hogy a free verziók korlátozva vannak optimalizálásban.
(#) Hp41C válasza edison14 hozzászólására (») Júl 26, 2015 /
 
Jól tudod. A fizetős verzió (jobban) optimalizál.
(#) edison14 válasza Hp41C hozzászólására (») Júl 26, 2015 /
 
Tehát nincs olyan ami jól is optimalizál és ingyenes is.
Köszönöm.
(#) dinokal válasza edison14 hozzászólására (») Júl 26, 2015 /
 
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
(#) gaspar_zsolt hozzászólása Júl 27, 2015 /
 
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?

  1. org     0x0500
  2.  
  3. LCD_CHAR1
  4.         MOVF    COUNTER,W
  5.         addwf   PCL,f
  6.         dt              "szöveg",AD_RES_L,AD_RES_H,"szöveg"
A hozzászólás módosítva: Júl 27, 2015
(#) gaspar_zsolt válasza gaspar_zsolt hozzászólására (») 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.

(#) zilahi hozzászólása Júl 27, 2015 /
 
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?
(#) kissi válasza zilahi hozzászólására (») Júl 27, 2015 /
 
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!
(#) zilahi válasza kissi hozzászólására (») Júl 27, 2015 /
 
Értem, köszi!
Következő: »»   1195 / 1319
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