Witam.
Próbuję zrobić prosty obrotomierz do samochodu na Attiny2313.
Do testów z jednego Attiny2313 zrobiłem prosty "generator" 100Hz
Kod:
Sygnał z "generatora" podawany jest na drugi Attiny2313.
Timer1 wykorzystany jest do odliczania czasu 1 sekundy a timer0 zlicza impulsy z "generatora". Na wyświetlaczu pokazuje się wynik 100 (czasami 99) co jest prawidłowe.
Problem jest taki, że czasami zamiast wyniku nie pokazuje nic, czasem układ się resetuje, innym razem na wyświetlaczu pokazują się "krzaki". Po czym znowu pokazuje prawidłową wartość.
Program wygląda tak:
Całość jest złożona na płytce uniwersalnej. Gdy załaduję program do mrugania diodą i zwiększającej się liczby na wyświetlaczu to całość działa stabilnie, więc podejrzewam, że z tym mają coś wspólnego timery.
Pin RESET podłączony do masy przez kondensator 100n i do +5V przez rezystor 4,7k.
I jeszcze ustawienia fusebitów
Co mogę zrobić, żeby wynik był stabilny?
Próbuję zrobić prosty obrotomierz do samochodu na Attiny2313.
Do testów z jednego Attiny2313 zrobiłem prosty "generator" 100Hz
Kod:
$regfile = "attiny2313.dat"
$crystal = 4000000
Config Pinb.0 = Output
Config Timer1 = Timer , Prescale = 1
Timer1 = 45536
On Timer1 Czas
Enable Timer1
Start Timer1
Enable Interrupts
Portb.0 = 0
Do
Loop
Czas:
Toggle Portb.0
Timer1 = 45536
ReturnSygnał z "generatora" podawany jest na drugi Attiny2313.
Timer1 wykorzystany jest do odliczania czasu 1 sekundy a timer0 zlicza impulsy z "generatora". Na wyświetlaczu pokazuje się wynik 100 (czasami 99) co jest prawidłowe.
Problem jest taki, że czasami zamiast wyniku nie pokazuje nic, czasem układ się resetuje, innym razem na wyświetlaczu pokazują się "krzaki". Po czym znowu pokazuje prawidłową wartość.
Program wygląda tak:
$regfile = "attiny2313.dat"
$crystal = 12000000
Config Timer1 = Timer , Prescale = 256
Config Timer0 = Counter , Edge = Falling
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2
Cursor Off
Cls
Timer0 = 0
Start Timer0
Timer1 = 18661
Enable Timer1
Start Timer1
Start Timer0
Enable Interrupts
On Timer1 Licz_imp
Dim Wynik As Word
Dim Flaga As Bit
Reset Flaga
Wynik = 1
Locate 1 , 8
Lcd "obr/min"
Do
If Flaga = 1 Then
Locate 1 , 3
Lcd Wynik ; " "
End If
Reset Flaga
Loop
Licz_imp:
Stop Timer0
Wynik = Timer0
' Load Timer1 , 46875
Timer1 = 18661
Timer0 = 0
Start Timer1
Start Timer0
Set Flaga
ReturnCałość jest złożona na płytce uniwersalnej. Gdy załaduję program do mrugania diodą i zwiększającej się liczby na wyświetlaczu to całość działa stabilnie, więc podejrzewam, że z tym mają coś wspólnego timery.
Pin RESET podłączony do masy przez kondensator 100n i do +5V przez rezystor 4,7k.
I jeszcze ustawienia fusebitów
Co mogę zrobić, żeby wynik był stabilny?
