Fórum témák
» Több friss téma |
5x5x5 ledkockámat szeretném pwmezni ugy hogy az összes szint idömultiplexelve van alapból.
A hozzászólás módosítva: Jún 12, 2017
Nem feltétlenül kell PWM, elég ha ledek kikapcsolási idejét növeled, a bekapcsolási idő rovására, hogy a multiplex frekvencia megmaradjon. Ha ez még a 18F46k22 PIC, miért kell szoftveres PWM, mikor tele van hardveressel? Beállítasz 1-2 ECCP modult és a PSTRxCON regiszterrel arra a lábra adod ki, amelyikre kell (multiplex). Így egy (vagy két) regiszterrel a fényerőt egyszerűen lehet szabályozni.
Sajnos fullosan le vannak foglalva a lábak igy nem tudom sajnos megoldani ezért kell sajnos hardveressel megoldanom((
Nem az a probléma, hogy fullosan le vannak foglalva a lábak, hanem az, hogy előtte nem gondoltad át / nem tudtad, hogy melyik lábra mit célszerű tenni! Ha nem tudod áttenni hardveresre ( lábcsere! ), akkor marad a szoftveres, ami prociidőt foglal és további programozást igényel!
Arra az esetre, ha nem sikerül hardveresre áttérni bármi miatt (tényleg az lenne a jobb egyébként), nagy gáz a szoftveressel sincs. Ugyan abból a timer interruptból kezelheted az összes led fényerejét. A timer interruptod nem lesz amiatt gyorsabb, csak több kód kerül majd bele.
Egy animációhoz kellene csak a pwm nem minden animációhoz....
Elég furán tervezted ezt a kockát.
Animációnként ujraprogramozi, most meg még PWM is. Csináld azt amit ktamas javasolt, az a legegyszerűbb. Legkevésbé borítja fel a programot. Már ha megfelelően van megírva az időzítés.
Ha még sosem használtad a pwm-et semmire - gyaníthatóan onnét fúj a szél - az elején picit nyögvenyelős megérteni, de amúgy nem gáz, és megéri hozzászokni.
Semmi nyögvenyelős nincs benne. Ktamás félig el is mondta neki, de guglival is mmegtalálta volna már."T" időalap, "x" bekapcsolt idő, "T-x" kikapcsolt idő, és a felbontás. LED dimmeléshez ennyi bőven elég. Nem láttam a kódot, de nyilván van egy fix időalap, a késleltetést delay-el, vagy NOP-okkal állítja gondolom. Beteszi egy ciklusba az adott effektet, és minden ciklusban változtatja a ki és bekapcsolási idő arányát, nyilván úgy, hogy az összegük állandó maradjon.
Ezeket nyilván nem neked írtam, hanem neki, csak a nyögvenyelős miatt válaszoltam neked A hozzászólás módosítva: Jún 13, 2017
Kijelzésem kódja De elötte feltöltöm a tömböket ami a ledek állapotát fogja tartalmazni.
megjegyzés: Tudom sokat indexelek..... PWM-eztem már nem nagy szám.. Idézet: „Animációnként ujraprogramozi” Nekem ez meglepő volt mert azt hittem ti is újra írjátok amikor változtattok a kódon. Sorosan még nem csináltam ilyet.....
Egyszerűen a 200-at két részre bontod:
Szia!
A szoftveres pwm legegyszerűbb módjához 2 regiszter kell. egyikben tárolod az adott pwm kitöltési tényezőt (0-255). a másik pedig egy maradékot tároló regiszter. Az, hogy milyen sűrűn frissíted az állapotot (frekvencia) az ízlés szerinti, a lényeg: A maradék regiszterhez hozzáadod a pwm regiszter értékét, és ha az túlcsordul (255<maradék)akkor bekapcsolod a ledet, ha nem akkor pedig ki. Belátható, ha a pwm értéke 1 akkor 255 összeadás után lesz 1 egységnyi ideig 1 ujabb 255 idő pedig szünet. A lényeg, hogy nem kell delay(xx) és egyéb hókuszpókusz.
Eddig nem folytam bele ebbe a multiplexeléses szabályzásba, mert nem értek a C-hez.
De ez kezd egyre bonyolultabb lenni. Meg szeretném érdeklődni, hogy C-ben nem lehet lekérdezni a timerek flag bitjeit? Valamint nem lehet törölni a timerek számlálóit? Vagy az nem oldható meg, hogy a program várakozzon a flag bit bebillenésére?
Szia!
Mindent lehet, csak tudni kell, hogy mit akar az ember és azt hogyan kell megadni, de ott van a kezedben a lehetőség !
Akkor nem értem ezt a delay-os variálást. Bőven elég hosszú az a várakozás ahhoz, hogy megérje két timerrel felépíteni a szabályzást. Már csak azért is, mert ha timer2 addja a kitöltési időt, akkor akár potméterrel, akár fotoellenállással, de akár a szintenkénti adatok végére biggyesztett értékkel programból is megadható a PWM mértéke.
Arról nem beszélve, hogy míg timer2 flag bitjére várunk, meghívhatunk valamilyen rutint. Pl analóg jel beolvasását.
Természetesen meg lehet csinálni, arra vannak kitalálva az aszinkron program ciklus design, vagy az interruptok. Annyi velük a probléma, hogy részletesebben kell felépíteni az alkalmazást, és egy egyszerűbb esetben fáj a hócipője mindenkinek vacakolni a részletekkel, ha nem muszáj. Majd vacakol miatta akkor a nép, ha muszáj.
Mindent meg lehet többféleképpen is oldani...A megoldás mikéntje sok mindentől függ: milyen eszközeid vannak, annak mennyire ismered a lehetőségeit, mennyire vagy képzett és alapos, mennyire sürgős, mennyire kell spórolni ( idővel, energiával, pénzzel ), stb. !
Ezek alapján választ mindenki, aztán ezek alapján bírál mindenki !
Én nem bíráltam. Azzal kezdtem, hogy nem értek a C-hez.
Pajti2 válaszából arra következtetek, hogy ez a megoldás C-ben nehézkes. Ez számomra nem volt világos. Lévén, hogy assemblyben ez annyira egyszerű, hogy meg sem fordult még a fejemben, hogy multiplexeléshez mást is lehetne használni a timeren kívűl. Idézet: Nem Rád értettem, általánosságban gondoltam !„Én nem bíráltam.” C-ben se nehéz megoldani, amit assemblyben meg tudsz csinálni ! Itt inkább arról van szó, hogy asm-ben se gondolna erre, mert nem ismeri a módszert, ill. nehéznek tartaná !
Hello
Nekem az lenne a kérdésem,_h Bővebben: Link ezzel a valamivel mondjuk ha jobban bele mélyednék a témába tudnám mondjuk 1korszerübb hűtő digitális részét le ellenőrizni? vagy köze sincs a dolognak hozzá? Ha butaságot írtam bocsánat érte,_kérem akkor valaki magyarázza el,_h mi kell hozzá? A hozzászólás módosítva: Jún 19, 2017
Szia!
Ez egy mikrokontroller programozó, amivel a Microchip cég mikrovezérlői programozhatóak. Ha megtanulsz programozni, akkor esetleg tudsz majd olyan programot írni, amivel a hűtő elektronikája gép nélkül is működtethető ( de ehhez programozni kell, valamint a hűtő működését és áramkörét is nagyon jól kell ismerni ! ) !
Nem, ez egy programozó, PIC mikrokontrollereket lehet programozni vele. Egy hűtő, amiben van digitális rész is, csomó dolgot tartalmazhat, amihez több műszer is elkélhet. Összetettebb a dolog, nem olyan egyszerű, hogy rácsatlakozok és mérek, aztán eldöntöm, hogy jó-e vagy sem.
Külön csak a korszerű hűtő esetére: ha meghibásodik, általában kiírja a hibakódot önként is, amiből ki lehet találni, hogy mi baja - benne lesz a hűtő leírásában.
A linkelt eszköz pedig egy mikrovezérlő programozó, aminek vagy van, vagy nincs köze a kiszemelt hűtőgép elektronikájához. Ha tudsz a hűtő elektronikájáról olyan felvételeket csinálni, amin olvasható az ic-k típusjele, akkor tudunk biztosabbat mondani.
Srácok, ha 5-10db NorFlash memóriát akarok egy cím és egy adatbusszal vezérelni, akkor kell erősítés?
Egyszerre csak 1 memória lenne használva, de az adatbuszon lógna mind az 5-10 memória. PIC bírná a mókát?
Röviden: valószínűleg bírná.
Gondolom nem akarod őket egymással szembe hajtani (a kétirányú jelekre gondolok), és még véletlenül sem nézed el annak az időzítését, hogy mikor kapcsolj irányt. A nor flash memóriáknak az adatlapján ott találod a bemeneti terhelésüket, a mai cuccok kérnek talán 1 uA-t szivárgási áramnak, de a bemeneti kapacitás (pld 40 pf) egy kvázi feltöltendő kondenzátor, amit töltened kell ahhoz, hogy a jelszint érvényes legyen. Ha párhuzamosan kapcsolsz 10-et, akkor a 40 pf-ból már 400 lett. Ugye játszottál már olyan játékot, hogy feltölteni egy elektrolit kondit árammal, és beledobni egy doboznyi vasszögbe? Na úgy képzeld el, hogy azt az energiát kell mindig beletolnod olyankor, amikor ellentétes irányba töltenéd a bemenetüket. Csak azért, mert a chip select jel nem aktív, attól a bemeneti terhelésük még jelen van a vonalon. Ha hosszú vonalat használsz, talán soros ellenállást is védelemnek, plussz még sebességet is akarsz elérni a parazita jelenségekkel szemben, akkor előfordulhat, hogy a pic végül nem fogja bírni. Workaround gyanánt ha lecsökkented a sebességet, az megoldja a problémát. Ha a kicsi sebesség nem opció, használj vonali meghajtókat, azok arra vannak kitalálva.
Csak adat feltöltésig lenne használva, meg néha olvasásra, de csak egyesével.
Pl.: indításnál lekérdezni az összestől egyenként a jelenlétét, majd ha írni kell bele adatot, akkor beírni egyesével. Nem lesznek egymással szemben hajtva.
Sziasztok
RGB ledeket használok mostani projectbe. Minden szinten 8 led van 5db szint van 8*5. Ti hogy szoktátok megoldani azt hogy egy szintent több szin legyen egyszerre . Arra gondolok hogy 4 led piros másik fele 4db mondjuk zöld ezt idömultiplexelve. C be ugy csináltam meg a fügvényt hogy:
Szín helyére írom 1-5 az a piros (1 szint pirosa.....5 szint pirosa) 6-10 az a zöld : 6 1 szint zöldje .....10 5 szint zöldje) stb...... Hogy lehetne megoldani azt hogy egy szinten több színt lehessen kírajzolni??? Egy elméletem van de szerintem nem a legjobb megoldás. A példát használom és a kód:
Ezt a két képet váltakoztattva gyorsan sikerül De szerintem nem igy kellene . A hozzászólás módosítva: Jún 23, 2017
A konkrét kód előtt még elméletileg kellene tisztázni, mid van, és mit hoznál ki belőle? Ha olyan RGB ledjeid vannak, amiknek a GND-je közös, azokra egy időben szokás tápot adni mindhárom színre, és csak sorok / oszlopok / szintek között multiplexelsz opcionálisan, led színek között jellemzően nem. Idő multiplexelhetsz led színek között is, ha annyira meg vagy szorítva a vezetékek számával, de az RGB ledeknél elkezd túl sok lenni a vezeték.
Közös GNDs a ledem de össze rakásnál nem közösítettem csak a + lábakat közösítettem.
Akkor a függvényemet hogy lenne célszerű úgy átalakítani hogy átlátható legyen mert akkor minden egyes lednek külön meg kell adnom a színét. Hát én igy gondoltam ki. |
Bejelentkezés
Hirdetés |