Példa a telepítést és működés időzítő AVR, mainloop
A AVR mikrokontrollerek rendelkezik ilyen periféria modul, mint egy időzítő számláló. Összhangban a nevét, ott találja az időt. Y jelentése időzítő számláló TCNT nyilvántartás, amelyből el lehet olvasni, hogy mennyi idő telt el azóta, megkezdődik az időzítőt. Az érték ebben a nyilvántartásban nem percben vagy másodpercben, és a „papagájok” - „kullancs” időzítőt. Mi az egyik kullancs - attól függ, hogy az órajel, amelynél a dolgozó avr mikrokontroller és az időzítő beállításait.
Csak időzítő számláló konfigurálható frekvenciaosztóból, amely meghatározza, hogy hány lesz osztva órajel frekvenciája a mikrokontroller előtt tápláljuk időzítő számláló. Időtartam timer tick a kölcsönös a frekvencia hányadosaként kapott.
Például:
Óra frekvencia = 11059200 Hz (11.0592MHz)
Elválasztó = 1024
időzítő számláló jelentése = órajel-frekvencia / Divisor = 11059200/1024 = 10.800 Hz
Időtartamát (tick) = 1/10800 = 92.593 * 10 ^ -6 sec = 92.593 mikroszekundum
Beállításához az osztó által használt CS TCCR regiszter bitek.
Például időzítő 1 használt atmega8 TCCR1B regiszter bitek és CS10, CS11, CS12.
A függőség állapotát bites osztó CS időzítő 1 atmega8
TCCR1B = (1lt; lt; CS12) | (0lt; lt; CS11) | (1lt; lt; CS10); // xtall / 1024
AVR időzítő lehet 8 vagy 16 bit. Bitmélység határozza meg a maximális kullancsok száma, ami számít az időmérőt. 8 bites 256 kullancsok, 16 jelentése 65536.
Ebben az esetben, az egyik tick 92.593 mikroszekundum, illetve maximális érték, amely méri a 16 bites időzítő 92.593 * 65.536 * 10 ^ -6 = 6,068 másodperc, 8-bites - 0,0237 másodperc.
Amikor az időzítő a maximális értéket, túlcsordul, azaz Úgy kezdi a mérést nulla. Ez a helyzet lehet feldolgozni a megszakítás. Erre a célra szükséges, hogy megoldja a túlfolyó megszakítás időzítő és állítsa be a megszakítás engedélyező bit közös.
Mintakódja engedélyt időzítő megszakítás 1 avr atmega8:
TIMSK | = (1lt; lt; TOIE1); // lehetővé túlfolyó megszakítás időzítő számláló sei (); // állítsa a megszakítás engedélyező bit közös
Azt is meg kell határozni egy kezelőt az, hogy megszakítás -, hogy a funkció kerül meghívásra, amikor az időzítő túlcsordul.
Add, hogy ez a funkció kódot megváltoztatja az PB0 lábak, amelyhez a csatlakoztatott LED.
Példa megszakítás kezelő kódot időzítő 1 avr atmega8:
ISR (TIMER1_OVF_vect) A LED állapota megváltozik 6 másodpercenként. A LED állapotot vált egy 10 Hz frekvenciájú, az szükséges, hogy az időzítő számít a kullancsok nem 65536, hanem kevesebb. Mi kiszámítja a szükséges kullancsok száma: Ahhoz, időzítő nem nulla, hanem egy bizonyos értéket, a inicializálás, és minden alkalommal a megszakítás TCNT1 Register rögzíti a számot (65536-1080) = 64456. Felsorolja a végleges programot az időzítő 1 avr atmega8: #include lt; avr / io.hgt; #include lt; avr / interrupt.hgt; ISR (TIMER1_OVF_vect) Ahogy olvasható egyéb cikkek a „mikrokontroller AVR». Archív forrásaival az avr-gcc (WinAvr) letölthető itt. Artem Kolesnikov mondta: Artyom Dvinin mondja: Kösz a tippet. Igen igazad van, akkor ki kell egészíteni a cikket, vagy írjon külön megjegyzés. Köszönöm. Észrevehetően. Van egy kérdésem. Az időzítő akkor kezdődik, amikor az MC. Mit lehet indítható és leállítható manuálisan (például a gomb megnyomásával). Artyom Dvinin mondja: Kérjük :) Helló hogyan lehet a jelet az infravörös vevő (38 kHz) csatlakoztatva annak adatok PB0. Artyom Dvinin mondja: Jó napot! És mi van a mikrokontroller? Segíts kérlek. Most, hogy foglalkozik a UART az AVR Studio4 (mega8) Artyom Dvinin mondja: Tud valaki az összeszerelési fel az időzítő beállítását és villogó fények a LED? Jó napot! Arduin nem hiszem, az idő kevesebb, mint 4 ms, meg kell dolgozni időzítő közvetlenül. De nem tudom, hogy mit és hogyan. Segíts, kérlek! Artyom Dvinin mondja: Nazar, egy jó nap! By the way, hogy milyen eszközt fejleszt? Szia, Artem! Köszönöm a választ! (1 lt; lt; TOIE0); // letiltása Timer 0. TIMSK2 - = Egy másik kérdés: hogyan az időzítő értéke lenne túlcsordulás tovább növekedett, és nem áll vissza, és elölről kezdeni az egészet? Ez, azt szeretnénk, hogy egy időzítő 32-bit. Hogy nem készíti el az egyedi határértékeket a mérés, de csak növeli az idő, hogy a kondenzátor feltöltődik. PS Tudok dobni shemku, ha érdekel. Artyom Dvinin mondja: Jó napot, Nazar! A rendszer minden bizonnyal érdekes, kérjük, küldje el! PS By the way, nekem úgy tűnik, ebben a sorban hiba: míg a ((((ACSR - (1lt; lt; ACO)) == 0)) - (TCNT1 = 14001) Az eset lehet, hogy van egy osztó = 1, azaz időzítő fut át 8MHz. Ugyanolyan gyakorisággal utasítás végrehajtása és a mikrokontroller (1-3 ciklus csapat). Kiderült, hogy ha a megszakítás kezelő kódvégrehajtáskor több mint 256 ciklus után a frekvencia csökken. Próbálja dizasemblirovat firmware és látni, hogy milyen kódot generálunk megszakítás kezelő. azonnali és szükséges értéket a nyilvántartásba rekord OCR1A 16richnom formátum? és hogy biztos, hogy fel az értéket először a senior és junior tehát, hogy mint ez: TCCR0 = (1lt; lt; 0) | (1lt; lt; 1); // Állítsa be a előosztó TIMSK | = (1lt; lt; TOIE0); // // ___________________________________________________ Timer1 TCCR1B = (1lt; lt; CS12) | (0lt; lt; CS11) | (0lt; lt; CS10); // Állítsa be a előosztó 256 TIMSK | = (1lt; lt; TOIE1); // TCNT1 = 0; // ___________________________________________________ TIMER2 // TCCR2 = (1lt; lt; CS12) | (0lt; lt; CS11) | (1lt; lt; CS10); // Állítsa be a előosztó 1024 // TIMSK | = (1lt; lt; TOIE2); // 2 taemerom mindenki számára, hiszen nem működik Artyom Dvinin mondja: Kérem, mondja meg. A ATtiny2313a konfigurált 16-bites időzítő regiszter TCCR1A mint bit: COMnA1: 0. COMnB1: 0, COMnC1: 0. Tól adatlap Azt olvastam, hogy a véletlen az összehasonlító regiszter (összhangban a rögzített értékek e nyilvántartások) meg fogja változtatni a feszültségszint az ellenkezője, hogy utolérje + 5 vagy 0. De nem értem, amikor aktiválja ezt a funkciót, hogy lehetséges-e változtatni az értékeket ezen lábak a programban? Artyom Dvinin mondja: Alexander, helló. Alexander M. szerint: Próbáltam flash programot ATMEGA 128 külső kristály 16MHz, a program valamilyen okból nem működik. Lehet, hogy ez szükséges, javítsa az értéket bitek? Artyom Dvinin mondja: Jó napot, Alexander. #include Segítség a kezdő! ///// void init (void) ISR (TIM0_OVF_vect) // interrupt int main (void) ///////////////////////// 1. A IDE terhelés vázlat Arduino Leonardo, melyben az információk minden második USB kimenet. A konzol, látom a frissítés másodpercenként. A jelentése könnyebb elhelyezni a számlálási regisztrálja nulla azonnal TCNT1 = 0;
Az időzítő elindul frekvenciaosztó nem nulla, illetve, hogy szükséges lenne, hogy állítsa le az időzítő nullázott frekvenciaosztóból például időzítő 1 atmega8 kell állítania bit CS12, CS11, CS10
Nem tudom, hogy hogyan kell beállítani az időzítőt.
kérem, segítsen.
Köszönjük, hogy korábban.
Azt szeretnénk, hogy egy programot. amelyben bemutatjuk hívószámon keresztül terminál. és a LED villog. is, például írtam 10, akkor villog 10 másodpercenként, és így tovább.
Segítség tanácsot kérem
Előre is köszönöm
Itt van a kód
Szükségem van a segítségedre! Nem vagyok programozó, kezdődik egyszerű - Arduino (tudom, rossz rajt, de ez történt). Itt a kód
Sajnos én nem azonnal reagál, nyári szünet ... egy kis szünetet a számítógép :)
Arduino - normál start, miközben a lehetőségek hiánya, valamilyen oknál fogva, hogy nem lehet használni, annál könnyebb, mint írni egy C cél.
Azt lehet mondani, hogyan lehet megoldani a problémát anélkül, könyvtárak Arduino, kizárólag arduinovsku díjat.
Mivel a fordító AVR-gcc vagy WinAvr.
Ha érdekli - írja, továbbra is beszélgetni :)
Ott van a probléma megoldódott, a készülék - a mérési kapacitást 1pF + 0,25 pF 1,5 mF + -2,5nF. Minden működik, de érdekes lenne, hogy mindent nem a Arduino IDE.
Itt van a kód:
Előre is köszönöm!
Timer 16 avr kicsit, hogy megkapja a 32 bit lehet konfigurálni túlfolyó megszakítás, és ez a növekedés megszakad program számláló, nevezzük CNT.
Ezután a mért érték lesz (CNT <<16) + TCNT1;
Ahhoz, hogy a frekvencia nagyobb, mint 8 MHz / 256 akkor megpróbálják újraírni a felvezető assembly vagy használatban Timer1 CTC mód (Clear időzítő összehasonlítása).
Kitett COMnA1 bit: 0. COMnB1: 0, COMnC1: 0 is szerepeltet alternatív kimeneti funkcióval, és megvonhatja tőle a munka, mint egy normál input-output port (azaz, tedd az értéke nem lesz képes programozni). Ugyanakkor nem szabad elfelejteni, hogy hozzanak létre a megfelelő kimenetet a kimenetet.
Először próbálja egy egyszerű program?
Ha villog, az ügy a időzítési beállítást, ha nem, akkor nem működik a LED.
Nem indul az időmérőt Attiny44
#define F_CPU 8000000UL
#include
TCCR0B | = (1<
init (); // inicializálja
sei (); // felbontása minden megszakítás
míg a (1)
ASM ( "NOP");
>
>
Ebben az esetben az időzítő nem is elkezdi számolni!
Mondd, mi a probléma ??
Köszi előre.
2. kötve, hanem a konzol Teraterm \ ttermpro.exe ». Az ablakban látom minden második frissítés.
3. Minden közel van, húzza ki az Arduino USB.
4. csatlakozni Arduino USB. Csatlakoztatom Teraterm \ ttermpro.exe ». Az ablakban látom a frissítés után 8 sekuund.
Összehasonlításképpen regisztráljon annyi ciklust kell számolni, például 500 OCR1A = 500;
És állítsa az időzítő megszakítás véletlen. Ez az egész beállítási kód:
TCCR1A | = (0 <
TCNT1 = 0; // A nulla érték megszámlálható timer regiszter / schotchika1Kapcsolódó cikkek