PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rundenzähler und Stoppuhr



grillfisch
22.01.2009, 13: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

grillfisch
22.01.2009, 13:30
Was aufjedenfall noch nicht stimmt ist die Speed anzeige. Die Berechnung ist noch nicht richtig.

grillfisch
22.01.2009, 16:48
ich habe mir noch mal gedanken darüber gemacht, die Top speed anzeige ist unwichtig.

und die stoppuhr habe ich jetzt noch mit Millisekunden ausgestattet.
Quellcode folgt in kürze

grillfisch
22.01.2009, 22:05
Aktueller Stand, Led Blinkt nach 10 Runden und die Gesamt Zeit wird angezeigt.




'Einstellungen für Lcd Display
'-------------------------
Cls

Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1
Portd.3 = 1
Config Portd.2 = 0
Config Portd.3 = 0
'----------
Config Portc.5 = Output
Config Portc.5 = 1
portc.5 = 1

Dim Millisekunden As Byte
Dim Minuten As Byte
Dim Sekunden As Byte
Dim Runden As Byte
Dim Flag As Integer


Config Timer1 = Timer , Prescale = 64
Const Timervorgabe = 40536
On Timer1 Timer_irq
Enable Interrupts


Millisekunden = 00
Minuten = 0
Sekunden = 0
Runden = 0
Flag = 0

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
Debounce Pind.3 , 0 , Reset1 , Sub


If Runden = 10 Then
disable timer1 : toggle Portc.5
End If

Locate 1 , 5
Lcd " Runden" ; Runden

Locate 2 , 2
Lcd "Zeit: " ; Minuten ; ":" ; Sekunden ; ":" ; Millisekunden ; " "

Locate 1 , 1
Lcd Flag

Loop
'---------------------------------------------
Start1:
Enable Timer1

Return
'-----------------------------------------
Stop1:

Runden = Runden + 1
return
'------------------------------

Reset1:
Reset Timer1
disable timer1

Locate 1 , 1
Lcd "Reset"
Wait 1
Cls
Sekunden = 0
Minuten = 0
Runden = 0
Millisekunden = 0
Flag = 0

Return

'--------------------------------------------
Timer_irq:
Timer1 = Timervorgabe
Incr Millisekunden
If Millisekunden = 10 Then
Incr Sekunden
Millisekunden = 00
End If
'End If
If Sekunden = 60 Then
Incr Minuten
Sekunden = 00
End If

Incr Flag

Return