Hier mal das ganze Programm:
Man sieht, der Timer ist auf 1MHz eingestellt, also Messeinheit 1µs. Schafft der µC das?
Grüße, BjörnCode:'##################################################### $regfile = "m8def.dat" 'ATmega8 mit externem 16 MHz Quarz $crystal = 16000000 $baud = 9600 '############ Variablen ############################## Dim Mikrosekunden As Long Dim Sekunden As Single Dim Geschwindigkeit As Single Dim Strecke As Single Dim Ausgabe As String * 5 Strecke = 0.1 'Länge der Messstrecke in Metern '############ Interrupts & Timer konfigurieren ####### Config Int0 = Falling 'Beide Male bei fallender Flanke reagieren Config Int1 = Falling Enable Interrupts Enable Int0 'Die Erste Schranke aktivieren, die zweite noch sperren On Int0 Isr_schranke1 On Int1 Isr_schranke2 Config Timer1 = Timer , Prescale = 1 On Timer1 Timer_irq Const Timervorgabe = 65520 '############ Ein- und Ausgänge ###################### Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Output Portd.2 = 1 'Interne Pull-Up Widerstände aktivieren Portd.3 = 1 '############ LCD Display ############################ Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , _ Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 1 Cls Cursor Off Noblink '############ Bezeichnungen ########################## Schranke1 Alias Pind.2 Schranke2 Alias Pind.3 Led1 Alias Portd.6 Led2 Alias Portd.7 Lcdlicht Alias Portb.0 '############ Hauptschleife ########################## Do If Schranke1 = 0 Then Led1 = 0 Else Led1 = 1 If Schranke2 = 0 Then Led2 = 0 Else Led2 = 1 Loop End '############ Interrupt-Routinen ##################### Isr_schranke1: Disable Int1 Enable Timer1 Return Isr_schranke2: Disable Timer1 Sekunden = Mikrosekunden / 1000000 Geschwindigkeit = Strecke / Sekunden Geschwindigkeit = Geschwindigkeit * 3.6 Ausgabe = Fusing(geschwindigkeit , "#.#") Cls Lcd Ausgabe Mikrosekunden = 0 Enable Int0 Return Timer_irq: Timer1 = Timervorgabe Incr Mikrosekunden Return







Zitieren

Lesezeichen