boeseTURBO-CT
07.11.2004, 11:25
Mahlzeit,
Ich hab hier ein Versuchsaufbau... Schickes kleines Rad aus Lego-Technik, dort sitzen 2 Magneten drauf, darunter ein Hallgeber.
Der Hallgeber ist über ein Optokoppler mit dem Atmega128 verbunden (int0). Das Interrupt für int0 funktioniert wunderbar (konfiguriert auf "any change" so das bei steigender und bei fallender Flanke das Interrupt ausgelöst wird (ein Magnet schaltet den Hallgeber auf high, der andere auf low, man hat also eine halbe Umdrehung high und eine halbe Umdrehung low... das funktioniert auch wunderbar))...
Timer1 spuckt allesdings bei recht kleiner Drehzahl nur Müll aus, und es kommt kein Timer-Overflow !!! Im Simulator funktioniert es, nur in der Hardware irgentwie nicht :-k
Hier das Code-Geschnippsel:
$baud = 38400
Config Serialin = Buffered , Size = 10
$crystal = 16000000
$regfile = "m128def.dat"
Config Pind.0 = Input
Mcucr = &B01010101 'int0 = any change
Enable Int0
On Int0 i1
Config Timer1 = Timer , Prescale = 8
Enable Timer1
On Timer1 Zeit1
Enable Interrupts
do
'noch nix drin
loop
i1:
Stop Timer1
Drehzahltimer = Timer1
Timer1 = 0
Start Timer1
Drehzahlwert = 65535 * Drehzahlueberlauf
Drehzahlwert = Drehzahlwert + Drehzahltimer
return
Zeit1:
Incr Drehzahlueberlauf
Print "Überlauf" ; Drehzahlueberlau
return
Software: BASCOM letzte Version 1.11.7.4
Controller: ATMEGA128
Kann da jemand helfen? Weiß nichmehr weiter ](*,)
Gruss
Jan[/code]
Ich hab hier ein Versuchsaufbau... Schickes kleines Rad aus Lego-Technik, dort sitzen 2 Magneten drauf, darunter ein Hallgeber.
Der Hallgeber ist über ein Optokoppler mit dem Atmega128 verbunden (int0). Das Interrupt für int0 funktioniert wunderbar (konfiguriert auf "any change" so das bei steigender und bei fallender Flanke das Interrupt ausgelöst wird (ein Magnet schaltet den Hallgeber auf high, der andere auf low, man hat also eine halbe Umdrehung high und eine halbe Umdrehung low... das funktioniert auch wunderbar))...
Timer1 spuckt allesdings bei recht kleiner Drehzahl nur Müll aus, und es kommt kein Timer-Overflow !!! Im Simulator funktioniert es, nur in der Hardware irgentwie nicht :-k
Hier das Code-Geschnippsel:
$baud = 38400
Config Serialin = Buffered , Size = 10
$crystal = 16000000
$regfile = "m128def.dat"
Config Pind.0 = Input
Mcucr = &B01010101 'int0 = any change
Enable Int0
On Int0 i1
Config Timer1 = Timer , Prescale = 8
Enable Timer1
On Timer1 Zeit1
Enable Interrupts
do
'noch nix drin
loop
i1:
Stop Timer1
Drehzahltimer = Timer1
Timer1 = 0
Start Timer1
Drehzahlwert = 65535 * Drehzahlueberlauf
Drehzahlwert = Drehzahlwert + Drehzahltimer
return
Zeit1:
Incr Drehzahlueberlauf
Print "Überlauf" ; Drehzahlueberlau
return
Software: BASCOM letzte Version 1.11.7.4
Controller: ATMEGA128
Kann da jemand helfen? Weiß nichmehr weiter ](*,)
Gruss
Jan[/code]