Fórum témák
» Több friss téma |
Ha van szabad lábad a PIC en és a szoftveres mókolás mehet, Én megpróbálnék egy olyat, hogy egy külső 1kHZ ellenőrzött órajelet adnék neki. Szoftveresen pedig ehhez kalibrálhatná magát.
Bocs! Most látom, hogy elkéstem ezzel az ötlettel. A hozzászólás módosítva: Szept 11, 2023
Sajnos a PWM jelet az eszközöm adja ki fixen és a másik fél amplimodulál. Tehát összességében csak rángatja a feszültséget. Analóg porton pedig figyelem a feszültséget és ebből számolom ki, hogy mit pofázik vissza a másik fél. Potit én is "rossznak" találom, főleg a páratartalom miatt is, bár lehet kapni egész jó precíziós trimereket is.
Jobb lenne egy automatikus offsetelés. Agyalok rajta még.
Az hogy folytonos relatív. Idővel szerintem csökken, de mondhatni lineárisan.
Sajnos nincs szabad portom, mind telítve van, talán ha valamit kiiktatok, akkor talán. (pl. az egyik LED-et) Ez a digitális jel még működhet, egy másik kütyü beépítésével. Adna egy fix jelet, azt mérni és mivel tudjuk mit kellene mérnie a különbözetből lehetne kiszámítani a kompenzációt. Ez jó ötlet. A kivitelezés már egyel körülményesebb, de ha szoftvert kell cserélni, az sem lenne kevésbé körülményes szóval...
De jó ötlet, igen picit megelőztek, de ettől még teljesen korrekt..
Ha az a láb, amit felszabadítasz véletlenül azt OSX1 láb, akkor EC módban külő órajelről is járhatna a PIC. Az OSC2 továbbra is lehet I/O.
Igen pont ez a láb az.. Egy LED-et vezérlek róla, csak egy sima üzemjelző LED van a lábon, erre gondoltam, hogy fel lehetne használni. Köszi az ötletet.
Üdv mindenkinek.
Még kezdő vagyok a témában.Van egy PICKIT2 programozóm és szeretnék egy led karórát építeni.Az lenne az első kérdésem hogy van e olyan pic amiben már benne van az RTC hogy ne keljen külön csipet használni hozzá,elképzelésem szerint 12 kimenet, 2 bemenet 2 táp, 2 kvarc lenne szükség vagyis egy 18 lábú elég is lenne.Mit ajánlanátok a feladatra?
Mit kell kijeleznie az órának?
Ha csak az időt, akkor a legtöbb PIC ezt külön RTC nélkül is könnyedén megoldja ezt a feladatot egy 32,768KHz-s kvarccal. A külön RTC-nek az az igazi haszna, hogy a PIC altatható folyamatosan, csak akkor ébred, ha meg akarod nézni az időt. Ezáltal az áramkör jóval kevesebbet fogyaszt. Ha ez annyira nem szempont, akkor a PIC18F14K22-est ajánlanám. Mindössze 20 lábú, és elég stabil. Azt nem tudom, miben akarod programozni, de ha assemblyben, akkor pláne jó választás, mert nem kell a bankváltásokkal bajlódni.
Igen csak óra perc kijelzés lenne és az is csak addig amíg a gombot megnyomom.
A fogyasztás az fontos lenne mert ha megoldható akkor egy cr2032 elemet szeretnék használni ami 3v bár lehet ez már kevés lesz a pic nek.
Ez a PIC 1,8-5,5V-ig dolgozik.
A PIC fogyasztása nagyban csökkenthető, ha alapvetően alszik, és csak 2 másodpercenként ébred timer1 által vezérelve. Ilyenkor pár villámgyors számítás, és megy vissza szunyálni, hacsak nem érzékel gombnyomást. Ha igen, kapcsolja a ledeket. A gomb elengedése után törölni kell az összes kimenetet, (még kisebb belső fogyasztás érhető el, ha altatás előtt a kimeneteket átkapcsoljuk bemenetté) majd mehet újra aludni. Persze így se számíts többéves működésre, de 6-8 hónapig azért elmegy egy 2032-essel.
Ez az óra ugyancsak 2032-es elemmel csaknem 1 évet működött, bár a végén már csak sötétben lehetett látni.
Szerintem maga a CPU altatható külső RTC nélkül is, csak az oszcillátor kell hogy működjön, meg a timer. A timer overflow (pontosan két másodpercenként), és a gombokra rakott pin change interrupt ébresztheti a CPU-t.
fotomen32-nek: Egy ATMEGA328p-t egyszer méregettem, hogy mennyit fogyaszt alvó módokban. A legfontosabb, hogy egyik láb se maradjon lebegve! Ha lebeg a láb, akkor esetleg belül változást tud indítani, és akkor fogyaszt a csip. Nem kell feltétlen külső le/felhúzó ellenállás, de a belsőt be kell álllítani a nem használt lábakra. Alapból ezek a csipek úgy működnek, hogy állapotváltozás nélkül a tranzisztorokon nem folyik áram, és nincs fogyasztásuk. A kivétel az oszcillátor és a számláló lesz, ennek menni kell. Ha a külső RTC oszcillátora hatékonyabb, mint maga a PIC, akkor lehet csak javítani azzal a hatékonyságot. Az ADC nagy zabáló, az mindenképpen legyen lekapcsolva! Illetve minden láb legyen megfelelően bekötve és beállítva úgy, hogy statikus legyen a működés! Az ATMEGÁs mérésemnél először például elkövettem azt a hibát, hogy a VREF lábra nem kötöttem semmit és lebegni hagytam: többszörös lett a mért áram, mint az adatlapi! Ezzel azt akarom mondani, hogy akármilyen csipet is használsz, az adatlap szerint kell huzalozni ahhoz, hogy elérd a specifikáció szerinti fogyasztást. A sonajkniz által javasolt csip adatlapjából: "Extreme Low-Power Management PIC18LF1XK22 with XLP Technology • Sleep mode: 34 nA • Watchdog Timer: 460 nA • Timer1 Oscillator: 650 nA @ 32 kHz" Tehát eszerint a 684nA fogyasztást el lehet érni alvás közben, a példa is pont a kvarcórák tipikus 32kHz oszcillátorával számol. Ezt az értéket összehasonlíthatod azzal, hogy a külső RTC mit ígér, illetve ebből tudod becsülni, hogy mennyi időt fog bírni elemről. A hozzászólás módosítva: Okt 4, 2023
Egy oldal szerint (Bővebben: Link) a DS3231 több, mint 8 évig elmegy egy CR2032-es elemről. Ha a kontroller egyik szabad lába adja neki a tápfeszültséget amikor kell a dátum/idő, akkor egy elemmel évekig elvan a rendszer, cserébe meg lehet spórólni a számolásokat (perc, óra, nap hónap, év, szököév stb. pörgetést) és az 1-2 másodpercenkénti ébresztést.
Ugyanarról az elemről mehet az RTC és a kontroller is.
DS3231 adatlap szerint (Hestore-on néztem meg) a "Timekeeping Battery Current" 0,84 uA, ami nagyságrendileg ugyanaz, mint amit a PIC ígér, sőt még kicsit több is. A low power PIC-ek és ATMEGÁk is úgy vannak megtervezve, hogy alkalmasak gombelemes működtetésű órának önmagukban.
Világos, csak a DS3231 önmagában is elvan. Nem kell ébresztgetni, a kontroller addig aludhat, amíg nem kell az idő.
De gyaníthatóan ez egy hosszabb projekt lesz a kérdezőnek, szerintem egy LED villogtatással kell majd indítani.
Srácok, van egy kis logikai bukfencem, amelyen agyalok erősen, hogy miképpen érdemes és lehet jól megvalósítani.
Adott egy dsPIC33-as MCU, amelyen a hálózat 3 fázisát optón keresztül figyelem. Change Notificationt használom. Felfutó és lefutó éleknél jön egy jel, majd az alapból felhúzott bemenetek a megszakítás hatására, vagy is az optó jelzésére nullára állnak. (függően attól melyik bement kap jelet a háromból) Szeretném detektálni, hogy melyik bemeneten jött megszakítás és, hogy az felfutó vagy lefutó élre történt. Hogy tudom ezt szépen megoldani? Megszakításban akarom közvetlen kezelni. Köszi előre is.
Ezt keresed: Bővebben: Link (Interrupt-on-Change)? Fel- és lefutó élnél is kapsz megszakítást (ha mindkét irányt engedélyezed), a port állapotát kell kiolvasni ahhoz hogy megtudd, fel- vagy lefutó él futott-e be.
Sajnos a választott PIC azon lábai amit használok, csak Change notification-t tudnak. Minden változásra jeleznek. Nincs külön flag register. A bebillenést követően vizsgálom a portot és az előző elmentett állapotot megnézem és a kettő közti változásból következtetek a megszakítást kiváltó eseményre. Nos ezen logika mentén gondolkodom és haladok.
Nem értem!
Minek kéne flag register? Minek kell az előző állapot? Jön a megszakítás, megnézed hogy magas, vagy alacsony szint van-e. Ha magas felfotó él volt, ha alacsony lefutó! A hozzászólás módosítva: Okt 17, 2023
Három fázist kezel, ezért kell az előző állapot, hogy ki tudja találni, hogy melyiken történt a változás.
Én úgy csinálnám, hogy az input port egyetlen bájtját tárolnám el a megszakításban (illetve az interrupt inicializálása előtt közvetlenük, hogy már az első interrupt is helyesen működjön). A kurrens és az előző port érték XOR-ja megmondja, hogy melyiken volt változás. A 3 bitre 3 if, hogy melyik van beállítva, melyik változott. Az if-en belül pedig a kurrens érték megadja, hogy fel, vagy le él történt-e. Ennyi tesztelgetés és elágazás még simán bele kell hogy férjen az interruptba. Amire érdemes figyelni pin change interrupt használata esetén: * ha prell-nek esélye van, akkor amikor megkaptuk az interruptot, akkor le kell tiltani arra a pin-re egy időre. Erre időzítőt lehet használni például. 50Hz-t akarunk mérni, úgyhogy mikrokontroller mércével jó hosszan is le lehet tiltani. Enélkül egyrészt az élkereső logika többször lenne triggerelve (ezt persze szűrhetnénk), de még nagyobb baj, hogy a CPU-t kiéheztetheti az IRQ folyamatos újrahívása. * egy IRQ-ban egyszer olvassuk ki a bemenetet, és ezt a tárolt értéket tároljuk el előzőnek az IRQ végén! Ha kétszer olvassuk ki, akkor ha a két kiolvasás között történik átmenet, akkor eltévedhet a program. Ha csak egyszer olvasod ki valahol az IRQ elején, akkor ha belegondolsz, akkor nem tud hibázni a program (amennyiben a jel nem gyorsabb, mint az IRQ végrehajtás ideje). Ha mérni akarod, hogy mikor történt a változás, akkor az óra leolvasása legyen a legelső művelet az IRQ-ban, így lesz a legpontosabb a leolvasás. Input capture-rel lehet ennél is pontosabb a mérés. Ki lehet számolni a végrehajtási időkből és az IRQ-ba lépés idejéből, hogy mennyi lesz a reakcióidő és a hiba, azt tippelném, hogy a legtöbb alkalmazáshoz kellően pontos lesz.
Azért nem érted mert nem olvastad el a bejegyzéseimet. 3 fázist egyszerre, de külön bemeneten kell nézni. 3 megszakítás érkezik és ki kell deríteni melyik fázis okozta és, hogy fel vagy lefutóra..
ok közben olvasom, hogy asch megválaszolta.. A hozzászólás módosítva: Okt 18, 2023
Köszi, pont így csinálom én is. Az időt egyelőre nem mérem, de a többi stimmel.
Idézet: „A 3 bitre 3 if, hogy melyik van beállítva, melyik változott” Ezt a logikát te hogy oldanád meg? Köszi előre is.
Rajzolj idővonalat a három fázis időbeni futásával, ahhoz párosítsd az optocsatolók kimenetén lévő jeleket és látni fogod a mintát. Nem írtad, melyik pillanatban kapcsolnak az optók, van-e átfedés két optó aktív kimenete közt, illetve a szinuszhullám mindkét félperiódusára kapcsolnak-e vagy csak az egyikre.
Közben úgy oldottam meg, hogy egy feltétellel vizsgálom, hogy van e változás illetve hogy melyiknél aztán, azt egy belső if-el, hogy le, vagy felfutó.
Csak most meg más hiba van, aztán azt keresem.
Pszeudó kóddal így csinálnám: (Csak turista vagyok a PIC fórumon, mert más vezérlőket programozok, de ez mindegyiken ugyanígy működik. A bemeneti port nevét AVR-ből kölcsönöztem, le kell cserélni arra ahogy a PIC-en hívják.)
Nekem is dsPIC33FJ-m van, nekem van felfutó és lefutó éldetektálás. No mindegy is, de amit eddig értek:
A dsPIC-nek 1 db int0 external interrupt pinje van, hajól emlékszem. Azon jön be a change esemény, de 3 input lábad van pl. a portB-n. Mondjuk az alsó 3 biten. Jól gondolom?
RB15 = 1. fázis
RB14 = 2. fázis RB13 = 3. fázis Erre élesítettem be CN-t. Mindenre jelez és majd kikövetkeztetem, hogy az felfutó vagy lefutó.
Szia!
Én két enkóder 4 jelének értékelésére írtam egy rutint tavaly. Szerintem te pont ilyesmit szeretnél, úgyhogy átírtam a 3 fázisra.
|
Bejelentkezés
Hirdetés |