Ismerje meg, hogyan hozhat létre egy eszközt mikrokontroller
Akkumulátor töltöttség kijelző
Az egyik barátom volt szüksége a 12 V-os akkumulátor töltöttség jelző. Felajánlottam neki valamit választani kész áramköri megoldások, a javára sok közülük. De nem tetszik.
Tehát volt egy kis probléma előttem:
1. konstrukció egyszerűsége;
2. olcsó alkatrészek;
3. Az alacsony áramfelvétel;
4. intuitív jelzése Az akkumulátor töltöttségi szintjét;
5. Hogyan tudok több ellenőrzési szintek (nem csak - „feltöltött”, „normális” és „üres”);
6. Az a projekt ezt a cikket.
Mutatóként eszköz vizuálisan nyomon a töltöttségi szint úgy döntött, hogy az RGB LED (három LED egy házban), és a töltöttségi szint úgy döntött, hogy jelezze a LED fény színét. Szükség alacsony áramfelvétel, úgy döntött, hogy a LED egyszer két másodperc.
Most színes kijelzővel, elfogadja:
1. LED ki (teljes feltöltés);
2. Fehér;
3. A kék-zöld (türkiz);
4. Blue;
5. Zöld;
6. A kék és piros (lila);
7. vörös-zöld (narancs);
8. Red (sürgős szükség töltésre).
Mivel a vezérlő egység ki egy olcsó Attiny13A, az ő „tábla” egy tíz bites ADC. Mégis, ki kell számolnunk a feszültségosztó, mert figyelemmel kell kísérni a feszültség 14.7V csúcs, és a maximális feszültség a ADC bemenet 5V Attiny13A. Számítás a képlet, (1. ábra):
Én az azoktól felekezetek, amelyek az én jelenlétemben. Megtalálható a saját, de ne feledje, hogy a készülék kell fogyasztani a lehető legkisebb áram. Megvan 12kOm és 6.2kOm.
A könnyű NYÁK tervezés, megteheti: ADC bemenet (ADC), található az egyik oldalon a chip (vyv.2); kimenet LED - másrészt (vyv.5,6,7), a kikötő B0 (zöld), B1 (KÉK), B2 (RED), ill.
Nos, akkor a papíron, vagy bárhol máshol, hogy felvázolja az igazi áramkört. Régebben egy egyszerű program „Rusplan” (3. ábra).
HL3 - zöld; HL2 - Blue; HL1 - Red.
Hozzáadott lánc: D1, D2, R6 - törés ellenállás, egy diódát és egy Zener-dióda elleni védelemre polaritás megfordítása, és a felesleges bemeneti feszültség. Tehát azt mondani, "just in case".
Most töltse ki a modell a „Proteus”. Csatlakoztassa a mikrokontroller portok, illetve port B0, B1, B2 a megfelelő LED-ek és a port B3 (konfigurálja azt ADC) a termelés a feszültségosztó.
Itt az ideje, hogy átvegye az irányítást a program. De mielőtt ezt szóban leírni az algoritmus a mutató.
1. Meg kell szakítani a tartomány (10,0 V - 14.7V) 8 részre:
4.7 / 8 = 0,59. fogadja 0.6V lépés.
2. Mi írjuk a megfelelő színű - Feszültség:
KI - 14,7 (14,7 - 0,6) = 14,1;
WHITE - 14,1-13,5;
CIÁNKÉK - 13,5-12,9;
BLUE - 12,9-12,3;
GREEN - 12,3-11,7;
PURPLE - 11,7-11,1;
ORANGE - 11,1-10,5, akkor válassza ki az első figyelmeztetés töltés (nem kötelező villog);
RED - 10,5 - ...... kiválaszthat egy utolsó figyelmeztetés a töltöttségi állapot (kiegészítő villogó).
3. Nézzük számítani a feszültségosztó után (az ADC bemenet).
A képlet ismerős számunkra, de ahelyett, hogy U1 teszi ki az értékeinket, megkapjuk:
OFF - 5,00-4,80;
WHITE - 4,80-4,60;
CIÁNKÉK - 4,60-4,40;
KÉK - 4,40-4,19;
GREEN - 4,19-3,99;
PURPLE - 3,99-3,78;
ORANGE - 3,78-3,58, akkor válassza ki az első figyelmeztetés töltés (nem kötelező villog);
RED - 3,58-0,00 kiválaszthat egy utolsó figyelmeztetés a töltöttségi állapot (kiegészítő villogó).
Nos, minden, ami szükséges, már van. Fuss Flowcode AVR. Hadd emlékeztessem önöket, hogy mentse a projekt fájl (például: „jelző”) kell elhelyezni a gyökérkönyvtáraiban meghajtó egy mappát, amelynek neve csak betűket, és a fájl nevét kell használni, csak betűket.
Azonnal véget végtelenített vezérlő, ami nem fejezzük be a programot, és ne felejtsük el, hogy nem később. Konfigurálható bemenet, válassza ki a „bemenet», «ADC» és nézni, mint ott krutilki panel (5. ábra, 6).
Válassza ki a „Tulajdonságok” „krutilki” Én személy szerint, mint a nagy krutilki, úgyhogy válasszon egy maximális méretet. Válassza ki a „kapcsolat”, rámutatott: arra a következtetésre jutottunk, a „2”, ez ADC3, válassza ki azt (ris.7,8).
Állítsa kimenetek (mi LED), piros - B2 port kék - B1 port, zöld - port B0. Ehhez válasszuk ki az „out», «LED». És ennek megfelelően a kiterjesztett tulajdonságait, válassza ki a színes LED és a polaritás. Az előző cikkben azt értjük, LED-ek közös katód, térjünk be a közös anód, majd válassza: „polaritás”, „alacsony”. Vegyület, a tulajdonságok jelzik a megfelelő portok mindegyik (ábra. 9-17).
Továbbá meg kell olvasni az adatokat a ADC (ADC). Túl a „makro komponens”, „vagyon”, válassza a „ADC0”. A jobb oldali oszlopban látjuk a feliratot - «ReadAsByte, ReadAsInt, ReadAsVoltage, ReadAsString». Az a tény, hogy a feszültséget az ADC bemeneti olvasható különböző módon. A "Flaukode" változók, mint: INT (-32768 ...... 0,32767), BYTE (0 ...... 255), STRING, lebegőpontos (lebegőpontos). A Attiny13 tízjegyű ADC, az azt jelenti, hogy a legnagyobb érték olvasható a ADC kód megegyezik 1023. Ez azt jelenti, az ADC van feszültség 0 és 5V, és a kimenet a kódot 0 1023. Ahhoz, hogy a legpontosabb feszültség mérése akkor kell használni egy INT változó, ha nem kell több pontosságot, akkor a típus byte, akkor rendre: bemenet 0 ... .5v és a változó értékeket vehetnek 0 ... 0,255. Nézzük használja mind a tíz számjegy (0 ... 0,1023), és újratervezi a feszültség (5.o.) kódokat az ADC.
1. OFF - 5.0V ... .4.8V
1023 ... 0,982.
2. WHITE - 4,8V ... ..4.6V
982 ... ..941.
3. türkiz - 4.60V ... .4.40V
941 ... 0,900.
4. KÉK - 4.40V ... .4.19V
900 ... 0,857.
5. GREEN - 4.19V ... .3.99V
857 ... 0,816.
6. PURPLE - 3.99V ... .3.78V
816 ... 0,773.
7. ORANGE - 3.78V ... .3.58V
773 ... 0,733.
8. RED - 3.58V ... .0.00V
733 ... 0,0.
Mi továbbra is. A jobb oldali oszlopban látjuk a feliratot - «ReadAsByte, ReadAsInt, ReadAsVoltage, ReadAsString». Természetesen válassza «ReadAsInt», mi kattintson a további változók «». meg kell határozni azokat a változó (ris.19,20,21).
Most ADC-kód minden mérés után tároljuk típusú változó néven «u_input» (22. ábra).
Ha olvassuk a ADC kód kisebb vagy egyenlő, mint 982 (4.8V), fehérre (mindhárom LED). Az általunk használt «döntés», az ág operátor. Drag és annak tulajdonságait összehasonlítva értékek feltüntetjük változó «u_input», a szám 982 (ris.24,25).
Továbbá, ha a «u_input» kevesebb vagy egyenlő 941, a szín, amit türkiz rendre tartalmazzák kék és zöld LED (26. ábra).
Ez az, amit megvan (27. ábra).
Most nézzük felidézni az utolsó két pont a mi algoritmus. Ha az akkumulátor feszültsége 11.1V alább. Jó ötlet többletforrásokat villogó megfelelő színű LED figyelmeztet, hogy az akkumulátort fel kell tölteni.
Mivel a „Flash” LED? Akkor gyere fel magukat. Nos, készítettem három rövid narancssárgán villog (piros, zöld) és öt rövid pirosan villog. Az utolsó cikk, ez volt: húzza túl a hurok, megkérdőjelezik a ciklusok számát, stb (Ábra28).
Ezután ellenőriznünk kell, hogy mi van. Futunk a szimulációt.
Aki nem dolgozik, ne aggódj. Mechanikus hibákat senki sem immunis. Good hibakeresés, akkor lépés a programon keresztül, és figyelje az eseményeket és változókat. Biztos vagyok benne, hogy tudja kezelni! A 29. ábra egy folyamatábra teljesen.
Ábra. 29 (algoritmus)
Folytassuk összeállításához a projekt. Egybeesik a szünet időtartama meghatározott tervezet, szükséges, hogy ki az azonos órajel frekvencia, mint a „Proteus” és „flaukode” használja belső oszcillátor frekvencia 9.6Mgts (ris.30,31).
Ezután fordítsd a projekt (ris.32.33).
Kaptunk HEX kódot. Az úgynevezett firmware. Program „SI” mappában a fájlokat a cikket.
Most fut a szimuláció a „Proteus”.
PCB lehet fejleszteni a saját, az szükséges lakhatás, az alkatrész mérete, stb Én is egy jól ismert program «Sprint layout5.1». Saját díj (LUT 34. ábra).
mikrokontroller firmware
A programozó már összegyűjtött e rendszer alapján, van még néhány, de szeretem ezt a (35. ábra).
Szoftver villog.
Ön is használja egy másik, még ennél is fontosabb, hogy képes legyen használni.
Fizikailag Fyuz bitek elrendezése egy speciális négy bájt:
- Lock Bit Byte - Lock bit szoftver másolásvédelem;
- Biztosíték Extended Byte - extra byte - speciális funkció;
- Biztosíték Nagy Byte - magas byte;
- Biztosíték Low Byte - low byte.
Történelmileg, ha Fyuz jelentése:
0 - eszközt programozott / villant / aktív
1 - Tehát nem volt programozva / ne kérdezd / Nem aktív.
CKSEL - kiválasztása az óra a mikrokontroller.
Működtetni a mikrokontroller (mint bármely processzor) óra szükséges. A forrás az órajel lehet:
- a belső RC oszcillátor. Nincs szükség további komponensek nem szükségesek. Kényelmesen, de van egy kis RC oszcillátor pontossága (akár 10% hiba), és továbbá, „lebeg” a hőmérséklettől. A nem kritikus alkalmazások, itt az ideje, hogy megfeleljen.
- egy külső kristály (vagy kerámia lapka) rezonátort. Szükség rezonátor is, plusz két kondenzátor 15-30pF. Ennek megfelelően a két lába a mikrokontroller lesz elfoglalva - XLAT1 és XLAT2. Használt ahol szükséges a pontos időt, valamint a mérések gyakoriságát működését a mikrokontroller magasabb adhat a belső RC oszcillátor.
- továbbra is órajele külső mikrokontroller órajel forrás. Ez lehet egy másik mikrokontroller (szinkronizálására működés), vagy egy külső áramkör, amely a kívánt jel. Az órajel jut a láb XLAT1.
WDTON - tartalmazza a Watch Dog Timer.
A kritikus alkalmazásokhoz, ahol elfogadhatatlan bontja (akár egy program hiba vagy rosszindulatú beavatkozás), használt Watch Dog Timer. Ez egy belső mikrokontroller időmérő, dolgozó független generátor. Abban a túlfolyó időzítő nullázódik és a mikrokontroller megkezdi a program futtatására az elejétől. A programozónak kell tesztelni a programot (általában a fő hurok) egy speciális parancs visszaállítja ezt a timer (WDR). A csapat végzett rendszeresen, és törli az időzítőt, így megakadályozza tele. Ha a mikrokontroller „lógott” már nem tart vissza a parancsokat, időzítő túlcsordul, és visszaállítja a mikrokontroller.
WDTON = 1 - Watch Dog Timer - off (lehetnek szoftverek);
WDTON = 0 - Watch Dog Timer - engedélyezett (nem lehet kikapcsolni programozott).
nem szükséges a normál alkalmazásoknak.
SCKDIV8 - osztás óra 8.
Minden egyszerű:
SCKDIV8 = 1 - a mikrokontroller frekvencián működik a master oszcillátor;
SCKDIV8 = 0 - mikrokontroller órajele egy 8-szor alacsonyabb, mint a mester oszcillátor frekvenciáját.
SIT - mikrokontroller állítja indítási sebesség.
Miután eltávolította a „reset” (vagy szolgáltatás) a program rögzíti a mikrokontroller, kezd nem azonnali. A mikrokontroller vár egy ideig, annak érdekében, hogy megfelelően indul el az órát, meg a tápfeszültség, stb A várakozási idő a program elindításához és kérjen SUT1 bitek 0 .... Sokszor nem tudjuk elindítani a kritikus sebesség, így azt tanácsolom, hogy tegye a maximum.
RSTDISBL -razreshaet használja reset lábát, mint egy másik input-output port. Néha egy szükséges dolog, de tudnod kell, hogy a programozás után RSTDISBL mikrokontroller már nem lehet a soros flash programozó! Ezért szükségtelenül ne érintse meg.
RSTDISBL = 1 - RESET láb működik, mint egy alaphelyzetbe;
RSTDISBL = 0 - reset láb működik, mint egy input-output port, soros programozás tiltva.
SPIEN - konzisztens programozás.
Az alapértelmezett van programozva (0) - megengedett szekvenciális programozás.
SPIEN = 0 - megengedett szekvenciális programozás;
SPIEN = 1 - tilos szekvenciális programozás.
BODLEVEL és Boden - ellenőrzés a mikrokontroller tápegység (Brown-out Detector).
Ha a mikrokontroller kikapcsolás a minimális, vagy kissé az alatt, a munka mikrokontrollerabudet instabil. Lehetséges tévedések, az adatvesztés, a véletlen törlés EEPROM. A mikrokontroller képes követni a szinten az élelmiszer (Boden = 0), és amikor eléri azt a szintet, amely meghatározott bitek BODLEVEL, reset és tartott törölhető, amíg a szint emelkedik az üzemi szinten. A nem kritikus alkalmazások, akkor nem használhatja.
SELFPRGEN - bit lehetővé teszi a program számára, hogy írjon a program memória. (AVR mikrokontrollerek lehet változtatni a tartalmát a program működése során, azaz a program is).
SELFPRGEN = 1 - Change terület tiltott programok;
SELFPRGEN = 0 - változtathat programokat.
EESAVE - EEPROM védelme.
Amikor parancsolt teljesen törlő mikrokontroller (általában végezni az egyes programozási kristály), és törlik EEPROM. Ha azt szeretnénk, hogy EEPROM érintetlen maradt - aktiválja ezt Fyuz. Ez akkor igaz, ha a tárolt fontos adatokat az EEPROM-ban.
EESAVE = 1 - törlése EEPROM Flash;
EESAVE = 0 - elhagyja az EEPROM tisztításakor ép.
Ez a részlet a ATtiny13 adatlap. Nézd meg azt a fájlt, hogy a cikket, és kívánatos, hogy tanulmányozza.
Mi ki Fyuz e (különösen) esetben kivonatokkal adatlap és képek az egyértelműség és a megértés.
Először van top CKSEL1, CKSEL0. Az 5 kapcsolat, ezt olvassuk: «Az alapértelmezett beállítás CKSEL1..0 eredmények belső RC oszcillátor @ 9,6 MHz. Lásd: Táblázat 18-3 118. oldalon a részletekért »alapértelmezés szerint ezek a bitek vannak beállítva, hogy a belső RC oszcillátor frekvencia 9.6MGts. És a beállítás részletek megtalálhatók a 118. oldalon adatlapja, táblázat 18-3. Alacsonyabb (ris.38-41) mutatja az összes lehetőséget CKSEL1 beállítások CKSEL0.
Itt látható a CKSEL beállítás dolgozni a belső oszcillátor frekvencia 9.6MGts a chipblastere (balra) és Proteus (jobbra) (Fig.42).
Következő Fyuz SUT0, SUT1. Az alapértelmezett érték SUT1..0 eredmények maximális indítási ideje az alapértelmezett órajel forrás. Lásd: Táblázat 18-3 118. oldalon talál.
Úgy döntünk, hogy legfeljebb 64ms. (Fig.43, 44).
A fennmaradó Fyuz:
CKDIV8 - osztja az órajel 8 nem kell, akkor ne érintse;
WDTON - watchdog nem kell, akkor ne érintse;
EESAVE - védi EEPROM törölhetnek minket is, hogy semmit, hagyja, ahogy van;
RSTDSBL - nem használjuk port 1 mikrokontroller egy input-output port, és ha nem akarjuk, hogy nélkül maradt mikrokontroller, ez nem érinti;
BODLEVEL - a hatalom lesz egy stabil (az akkumulátor), ez Fyuz mi is, nem kell, hagyja, ahogy van;
SPMEN - átnevezi SELFPRGEN, a programból, akkor nem mászik fel a program memória, így ez is, ne érintse meg.
Itt van, amit kaptam, az átlátszó esetben lezárt forró olvadék (ris.47,48), remélem, hogy jobb!