Witajcie. Mam problem z ustawieniem odliczania czasu przez Attiny2313.
Według moich obliczeń mikrokontroler powinien co 1s wyświetlać na LCD kolejne sekundy (program jest przykładowy żeby dobrze ustawić czas zliczania bo docelowo chce zrobić pomiar częstotliwość a przez to w dalszej części pomiar indukcyjność).
Więc obliczyłem to sobie tak.
Kwarc 12MHz dziele w preskalerze przez 64 czyli mam częstotliwość 187500. Całość będzie zliczał Timer1. Ustawia wiec mu wartość początkową 46706 przez co timer będzie miał do zliczenia 18750 cykli po czym się przepełni. W programie obsługi przerwania zliczam takie przepełnienia i jeżeli będzie ich 10 zostanie zwiększona zmienna i wyświetlona na wyświetlaczu która będzie pokazywała ilość sekund.
Sęk w tym że z niewiadomych powodów na wyświetlaczu liczby zmieniają się co 20s. Dodam ze fusy na pewno mam dobrze ustawione bo po odłączeniu kwarcu tiny nie staruje tak samo jak podłącze inny kwarc np 6MHz.
Dla formalności fusy mam ustawione tak że:
CKSEL=1111 SUT11 czyli w AVRDude Lower Fuse:7F a High Fuse:D9
Poniżej zamieszczam listing programu.
Będę wdzięczny za pomoc bo mnie już szlak trafia.
Według moich obliczeń mikrokontroler powinien co 1s wyświetlać na LCD kolejne sekundy (program jest przykładowy żeby dobrze ustawić czas zliczania bo docelowo chce zrobić pomiar częstotliwość a przez to w dalszej części pomiar indukcyjność).
Więc obliczyłem to sobie tak.
Kwarc 12MHz dziele w preskalerze przez 64 czyli mam częstotliwość 187500. Całość będzie zliczał Timer1. Ustawia wiec mu wartość początkową 46706 przez co timer będzie miał do zliczenia 18750 cykli po czym się przepełni. W programie obsługi przerwania zliczam takie przepełnienia i jeżeli będzie ich 10 zostanie zwiększona zmienna i wyświetlona na wyświetlaczu która będzie pokazywała ilość sekund.
Sęk w tym że z niewiadomych powodów na wyświetlaczu liczby zmieniają się co 20s. Dodam ze fusy na pewno mam dobrze ustawione bo po odłączeniu kwarcu tiny nie staruje tak samo jak podłącze inny kwarc np 6MHz.
Dla formalności fusy mam ustawione tak że:
CKSEL=1111 SUT11 czyli w AVRDude Lower Fuse:7F a High Fuse:D9
Poniżej zamieszczam listing programu.
$regfile = "attiny2313.dat"
$crystal = 12000000
Config Timer1 = Timer , Prescale = 64
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.6 , Rs = Portd.4
On Timer1 Przepelnienie_timera
Dim B As Integer
Dim A As Integer
Load Timer1 = 46706
Enable Interrupts
Enable Timer1
Stop Timer1
Cls
B = 1
A = 0
Start Timer1
Przepelnienie_timera:
Stop Timer1
If B = 10 Then
Incr A
Lowerline
Lcd A
B = 0
End If
Incr B
Load Timer1 = 46706
Start Timer1
Return
Będę wdzięczny za pomoc bo mnie już szlak trafia.
