-         

Ergebnis 1 bis 4 von 4

Thema: Rundenzähler und Stoppuhr

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2009
    Beiträge
    6

    Rundenzähler und Stoppuhr

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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.



    Code:
     $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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2009
    Beiträge
    6
    Was aufjedenfall noch nicht stimmt ist die Speed anzeige. Die Berechnung ist noch nicht richtig.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2009
    Beiträge
    6
    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

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.01.2009
    Beiträge
    6
    Aktueller Stand, Led Blinkt nach 10 Runden und die Gesamt Zeit wird angezeigt.
    Code:
      
    
    
    '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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •