witam chce odmierzyć 1 s za pomocą timer0 w procku Atmega8, robię to tak:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Timer0 = Timer , Prescale = 256
On Timer0 Sekunda
Enable Interrupts
Enable Timer0
Start Timer0
Dim Sek1 As Word , Sek As Byte
Sek1 = 0
Sek = 0
Do
Lcd Sek
Loop : End
Sekunda:
Incr Sek1
If Sek1 = 31250 Then
Incr Sek
Sek1 = 0
End If
Return
Jeśli mam 8mhz to timer0 z plescalerem 256 przepełni sie 31250razy na sekundę, wiec wtedy w przerwaniu zwiększam zmienna sek1 i jeśli osiągnie ona 31250 to zwiększa sie zmienna sek - odpowiedzialna za liczbę sekund. Po skompilowaniu i wysłaniu do procka okazuje sie ze timer0 liczy wiele wolniej. Co jest nie tak?
Dodano po 1 [godziny] 37 [minuty]:
Odkryłem co jest nie tak, przerwanie jest wywoływane po zliczeniu 256 impulsów przez licznik timer0 wiec liczba po jakiej ma zwiększać zmienna sekund to 8000000/256/256 =122
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Timer0 = Timer , Prescale = 256
On Timer0 Sekunda
Enable Interrupts
Enable Timer0
Start Timer0
Dim Sek1 As Word , Sek As Byte
Sek1 = 0
Sek = 0
Do
Lcd Sek
Loop : End
Sekunda:
Incr Sek1
If Sek1 = 31250 Then
Incr Sek
Sek1 = 0
End If
Return
Jeśli mam 8mhz to timer0 z plescalerem 256 przepełni sie 31250razy na sekundę, wiec wtedy w przerwaniu zwiększam zmienna sek1 i jeśli osiągnie ona 31250 to zwiększa sie zmienna sek - odpowiedzialna za liczbę sekund. Po skompilowaniu i wysłaniu do procka okazuje sie ze timer0 liczy wiele wolniej. Co jest nie tak?
Dodano po 1 [godziny] 37 [minuty]:
Odkryłem co jest nie tak, przerwanie jest wywoływane po zliczeniu 256 impulsów przez licznik timer0 wiec liczba po jakiej ma zwiększać zmienna sekund to 8000000/256/256 =122