grillfisch
22.01.2009, 14:20
Hallo, ich arbeite an einem Rundenzähler mit Stoppuhr.
Zur Zeit starte ich alles noch mit zwei Tastern, später werden die dann durch eine Lichtschranken ersetzt.
Mein Ziel ist es, später folgende bereiche zu ermitteln.
-10 Runden runterzuzählen
- die schnellste Rundenzeit anzuzeigen
- top speed
-Ton beim passieren der Lichtschranke
-Akustische Startampel
Momentan bin ich noch lange nicht soweit.
Vielleicht kann mir ja jemand dabei helfen oder mir über die Schulter schaun und mich eventuell auf fehler hinweisen.
hier ist der erste Versuch.
Messstrecke sind 100 cm
Es soll erstmal nur die zeit gemessen werden und dann in km/h angezeigt werden.
Den flag lass ich mir mit absicht anzeigen.
$regfile = "m8def.dat"
$crystal = 16000000
Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.4 , Db7 = Portb.3 , Db6 = Portb.2 , Db5 = Portb.1 , Db4 = Portb.0
Config Lcdbus = 4
Cursor Off
Cls
Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1
Portd.3 = 1
Config Portd.2 = 0
Config Portd.3 = 0
Dim Minuten As Byte
Dim Sekunden As Byte
Dim Flag As Byte
Dim Speed As Integer
Dim Strecke As Single
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 3036
On Timer1 Timer_irq
Enable Interrupts
Minuten = 0
Sekunden = 00
Flag = 0
Speed = 0
Strecke = 100
Declare Sub Start1
Declare Sub Stop1
Declare Sub Reset1
'---------------------------------------------
Do
Debounce Pind.2 , 0 , Start1 , Sub
Debounce Pind.3 , 0 , Stop1 , Sub
Debounce Pind.2 , 0 , Reset1 , Sub And
Debounce Pind.3 , 0 , Reset1 , Sub
Locate 2 , 2
Lcd "Zeit: " ; Minuten ; ":" ; Sekunden ; " "
Locate 1 , 1
Lcd Flag
Locate 1 , 6
Lcd Speed ; "km/h"
Loop
'---------------------------------------------
Start1:
Enable Timer1
Return
Stop1:
Disable Timer1
Speed = Flag * 0.0036
Speed = Strecke / Flag
Flag = 0
Reset Timer1
Sekunden = 0
Return
Reset1:
Reset Timer1
Locate 1 , 1
Lcd "Reset"
Wait 1
Cls
Sekunden = 0
Minuten = 0
Flag = 0
Speed = 0
Return
'--------------------------------------------
Timer_irq:
Timer1 = Timervorgabe
Incr Sekunden
If Sekunden = 60 Then
Incr Minuten
Sekunden = 00
End If
Incr Flag
Return
Zur Zeit starte ich alles noch mit zwei Tastern, später werden die dann durch eine Lichtschranken ersetzt.
Mein Ziel ist es, später folgende bereiche zu ermitteln.
-10 Runden runterzuzählen
- die schnellste Rundenzeit anzuzeigen
- top speed
-Ton beim passieren der Lichtschranke
-Akustische Startampel
Momentan bin ich noch lange nicht soweit.
Vielleicht kann mir ja jemand dabei helfen oder mir über die Schulter schaun und mich eventuell auf fehler hinweisen.
hier ist der erste Versuch.
Messstrecke sind 100 cm
Es soll erstmal nur die zeit gemessen werden und dann in km/h angezeigt werden.
Den flag lass ich mir mit absicht anzeigen.
$regfile = "m8def.dat"
$crystal = 16000000
Config Lcd = 20 * 4
Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.4 , Db7 = Portb.3 , Db6 = Portb.2 , Db5 = Portb.1 , Db4 = Portb.0
Config Lcdbus = 4
Cursor Off
Cls
Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1
Portd.3 = 1
Config Portd.2 = 0
Config Portd.3 = 0
Dim Minuten As Byte
Dim Sekunden As Byte
Dim Flag As Byte
Dim Speed As Integer
Dim Strecke As Single
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 3036
On Timer1 Timer_irq
Enable Interrupts
Minuten = 0
Sekunden = 00
Flag = 0
Speed = 0
Strecke = 100
Declare Sub Start1
Declare Sub Stop1
Declare Sub Reset1
'---------------------------------------------
Do
Debounce Pind.2 , 0 , Start1 , Sub
Debounce Pind.3 , 0 , Stop1 , Sub
Debounce Pind.2 , 0 , Reset1 , Sub And
Debounce Pind.3 , 0 , Reset1 , Sub
Locate 2 , 2
Lcd "Zeit: " ; Minuten ; ":" ; Sekunden ; " "
Locate 1 , 1
Lcd Flag
Locate 1 , 6
Lcd Speed ; "km/h"
Loop
'---------------------------------------------
Start1:
Enable Timer1
Return
Stop1:
Disable Timer1
Speed = Flag * 0.0036
Speed = Strecke / Flag
Flag = 0
Reset Timer1
Sekunden = 0
Return
Reset1:
Reset Timer1
Locate 1 , 1
Lcd "Reset"
Wait 1
Cls
Sekunden = 0
Minuten = 0
Flag = 0
Speed = 0
Return
'--------------------------------------------
Timer_irq:
Timer1 = Timervorgabe
Incr Sekunden
If Sekunden = 60 Then
Incr Minuten
Sekunden = 00
End If
Incr Flag
Return