Ahoj všem, mám problém s časovačem na ATMega32. Potřeboval bych něco spustit jednou za pět minut, taktuji MCU interně na 8 000 000 Hz. Používám Céčko (winavr). Můžete mne někdo nakopnout, jak to udělat? Chtěl bych na to použít 16ti bitový časovač a obsluhu v přerušení, bloková idea je tato:
Při inicializaci nastavit časovač a spustit jej
Inkrementovat při každém přetečení časovače proměnnou
Nejsem si jist, zda v obsluze přerušení dát na začátku cli() a na konci sei()
V hlavní smyčce kontrolovat, zda hodnota proměnné nedosáhla požadovano hodnoty. Pokud ano, cli(), provést obsluhu, vynulovat proměnnou a cli()
Je tato myšlenka správná? Měl by někdo nějaký kód? Právě pro ATM32… Děkuji předem.
administrator: přejmenováno z "časovač pro ATMega32"
Postup je správný, jen ta cli a sei v přerušení jsou zbytečná. Ostatní přerušení se blokují při vstupu do jiného automaticky.
Pokud bude obsluha v mainu trvat dlouho a budeš chtít počítat 5min až od jejího ukončení (tedy né mít pevný interval 5 min), tak tam cli a sei být mohou. Jesli chceš ovšem interval 5mit bez ohledu na délku obsluhy, tak ani v mainu cli a sei neoužívej (mimo první aktivaci přerušení).
Jakou potřebuješ přesnost? Dá se to naprogramovat přesně (pak bude záležet na přesnosti hodi), nebo jednodušeji ale jen přibližně. Rozdíl je pouze v nastavení timeru a potřebné velikosti počítací proměnné.
Pro jistotu je tam i blikátko (každých přibližně 8s změní stav diody na PD7.
Na začátku ještě chybělo “#include <avr/interrupt.h>”
Nechápu, jak mi to mohlo původně projít překladem . Tobě to šlo přeložit bez varování?
Pak ještě ve “void timer1Init(void)” chybělo “void”, ale to už je jen detail.
Taky nebyl úplný vnitřek podmínky v nekonečný smyčce (jakmile jednou uplnul čas, funkce se volala stále dokola bez dalšího čekání na 5 min interval.
Přišel jsem na to teď, když jsem si v tom programu zkoušel něco jinýho a tentokrát to přeložit nešlo. Nechápu .
jasne, to jsou drobnosti, ktere jsem mel pokryte (include) nebo pokryl jako jasnou upravo drobneho nedostatku. slo mi hlavne o ten postup a ukazku,. jak to udelat. doladeni uz bylo snadne (za to nakopnuti fakt velky dik, moc jsi mi obecne zde na foru pomohl)