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:
Durch den Timer verlangsamt sich die Ausgabe auf dem Display extrem....könnte man da was machen?$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
Findet ihr einen Fehler bzw einen Verbesserungsvorschlag?
Wieso stimmt die Ausgabe auf dem Display nicht?
Vielen Dank im vorraus!
Gruß
D35troy3r
Lesezeichen