Hallo!

Bin gerade dabei eine Geschwindigkeitsmessung für Luftgewehre etc aufzubauen. Soweit so gut, ich habe nun 2 Lichtschranken im Abstand von 6cm aufgebaut. Der Mikrocontroller (Atmega8 ) soll die Zeit in us messen und die Geschwindigkeit in m/s auf einem Display wiedergeben.
Mein Aufbau funktioniert ganz gut, nur bei der Programmierung sitzt warscheinlich ein Fehler...
Denn bei einem ersten richtigen Test wo die Projektilgeschwindigkeit knappe 20m/s betrug zeigt er mir etwa 150m/s an .

Zur Funktion:
Das Projektil passiert Lichtschranke 1 und setzt Variable X = 1. Bei jedem Interrupt des Timers wird Y erhöht, solange bis Lichtschranke 2 unterbrochen und X auf 0 gesetzt wurde. Folglich wird die Geschwindigkeit ausgerechnet und auf dem Display für 30ms angezeigt. Durch den Timer ist es aber wesentlich länger als 30ms...
Die ADC-Werte von Licht1, Licht2, Licht3 und Licht4 werden verglichen damit X erst ab einem Wert unter 1022 verändert wird.

Das ganze wurde mit Bascom programmiert:

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Config Timer1 = Timer , Prescale = 8
Enable Timer1
On Timer1 Takt
Enable Interrupts
Timer1 = 65534

Dim Licht1 As Integer
Dim Licht2 As Integer
Dim Licht3 As Integer
Dim Licht4 As Integer

Dim X As Bit
Dim Y As Word
Config Single = Scientific , Digits = 4
Dim Geschwindigkeit As Single

Licht3 = Getadc(4)
Licht4 = Getadc(5)

Cls

Do
Licht1 = Getadc(4) + 2
If Licht1 < Licht3 Then X = 0

Licht2 = Getadc(5) + 2
If Licht2 < Licht4 Then X = 1

If X = 0 And Y > 0 Then
Geschwindigkeit = 60000 / Y
Locate 2 , 2
Lcd Geschwindigkeit ; "m/S"
Y = 0
Waitms 30
Cls
End If
Loop
End

Takt:
Timer1 = 65534
If X = 1 Then Incr Y
Return
Durch den Timer verlangsamt sich die Ausgabe auf dem Display extrem....könnte man da was machen?
Findet ihr einen Fehler bzw einen Verbesserungsvorschlag?
Wieso stimmt die Ausgabe auf dem Display nicht?

Vielen Dank im vorraus!
Gruß

D35troy3r