PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer 1 funzt nicht so richtig, wieso?



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]

07.11.2004, 12:45
Funktioniert jetzt, hab einfach den Int0 nach dem timer konfiguriert, und seitdem geht es +wunder...