- LiFePO4 Speicher Test         
Ergebnis 1 bis 2 von 2

Thema: source zu stoppuhr, brauche hilfe!

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.02.2006
    Beiträge
    221

    source zu stoppuhr, brauche hilfe!

    Anzeige

    E-Bike
    hallo, ich möchte eine stoppuhr programmieren, die von 0 bis wenige minuten zählen kann. während der zählung will ich per taster zeitwerte ins eeprom im word - format speichern. diese möchte ich dann wieder auslesen können (zwischenzeiten).
    hier mein source, der leider nicht klappt:
    Code:
    Declare Function Read_eeprom(byval Dev As Byte , Byref Address As Word)as Byte
    Declare Function Read_eeprom_word(byref Address As Word)as Word
    
    Declare Sub Write_eeprom(byval Dev As Byte , Byref Address As Word , Byval Wert_
    As Byte)
    Declare Sub Write_eeprom_word(byref Address As Word , Byref Value As Word)
    
    Dim Address_low As Byte                                     'Address ist hier überlappend
    Dim Address_high As Byte                                    'dimensioniert, um High- und Low-
    Dim Address As Word At Address_low Overlay                  'Byte einfach ansprechen zu können.
    
    Dim Value_low As Byte                                       'Dito mit Value
    Dim Value_high As Byte
    Dim Value As Word At Value_low Overlay
    
    Dim Wert As Byte
    Dim Temp_w As Word
    Dim I As Word
    Dim Z As Word
    
    Dim Zeit As String * 10
    '-------------------------------timer---------------------------------------
    'Hier wird der Timer und der Teiler festgelegt
    Config Timer1 = Timer , Prescale = 64
    
    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer1 Timer_irq
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 64285
    
    Dim Hundertstelsekunden As Word
    
    'Hier werden die Timer aktiviert
    
    
    '------------------------------ Programm ----------------------------------
    Cls
    Lcd " zum Auslesen:"
    Locate 2 , 1
    Lcd "  hold pin 5"
    Wait 5
    If Pind.5 = 0 Then
    Goto Auslesen
    End If
    
    
    Cls
    Lcd "for eeprom reset:"
    Locate 2 , 1
    Lcd "hold 5 + 6"
    Wait 3
    Cls
    
    '-----------------------------eeprom löschen------------------------------------
    If Pind.5 = 0 And Pind.6 = 0 Then
    
    Lcd "<-eeprom reset->"
    For Address = 0 To 8190
    Value = 0
    Call Write_eeprom_word(address , Value)
    Next
    End If
    '----------------------1. freien eepromplatz ermitteln--------------------------
    
    Address = 0
    
    '--------------------Stoppuhr ----------------------------
    Cls
    Lcd "Stoppuhrstart "
    Locate 2 , 1
    Lcd "mit Taste 6"
    
    Hundertstelsekunden = 0
    
    If Pind.6 = 1 Then                                          'weiter mit 6
    Do
    Loop Until Pind.6 = 0
    End If
    
    Enable Timer1
    Enable Interrupts
    Timer1 = Timervorgabe
    
    Waitms 500
    Cls
    Lcd "Stop:5  Lesen:6"
    
    
    Stoppuhr:
    Do
    If Pind.5 = 0 Then
    Goto Speichern
    End If
    If Pind.6 = 0 Then
    Goto Auslesen
    End If                                                      'Hier könnte Ihr Hauptprogramm stehen
    
    
    Zeit = Str(hundertstelsekunden)
    Zeit = Format(zeit , "+0.00")
    
    Cls
    Lcd "Stop:5 " ; "Lesen: 6"
    Locate 2 , 1
    Lcd "Zeit " ; Zeit
    Waitms 10
    Loop
    
    
    Timer_irq:
      Timer1 = Timervorgabe
    
      Incr Hundertstelsekunden
      Print Hundertstelsekunden
    Return
    
    
    Speichern:
    Value = Hundertstelsekunden
        Call Write_eeprom_word(address , Value)                 'value  ins EEprom schreiben.
       Address = Address + 1
    Waitms 500
    Goto Stoppuhr
    
    
    
    
    
    '-----------------------------Speicher auslesen------------------------------------
    
    Auslesen:
    Cls
    Lcd " LESE"
    If Pind.5 = 1 Then                                          'Anhalten
    Do
    Loop Until Pind.5 = 0
    End If
    Waitms 500
    For Address = 1 To 8190                                     'die Werte wieder auslesen
      Temp_w = Read_eeprom_word(address)
      Cls
      Locate 2 , 1
      Lcd "A: " ; Address ; " " ; "W: " ; Temp_w ; "   "
      Waitms 10
    
    If Pind.5 = 1 Then
    Do
    Loop Until Pind.5 = 0
    Waitms 200
    End If
    
    Next
    
    
    '------------------------ Ende Demodurchlauf -----------------------------------
    End
    
    
    
    '------------------------ Funktionen und Subs ----------------------------------
    
    '-------------------------------------------------------------------------------
    '- Word (value) auf 2 aufeinander folgende EEprom Adressen schreiben
    
    Sub Write_eeprom_word(byref Address As Word , Byref Value As Word)
    Call Write_eeprom(eeprom1 , Address , Value_low)
    Incr Address
    Call Write_eeprom(eeprom1 , Address , Value_high)
    End Sub
    '-------------------------------------------------------------------------------
    '- Word von 2 aufeinanderfolgenden EEprom Adressen lesen
    '- Der gelesene Wert ist der Rückgabewert der Funktion
    
    Function Read_eeprom_word(byref Address As Word)as Word
    Value_low = Read_eeprom(eeprom1 , Address)
    Incr Address
    Value_high = Read_eeprom(eeprom1 , Address)
    Read_eeprom_word = Value
    End Function
    
    '-------------------------------------------------------------------------------
    '- Byte (wert) auf EEprom Adresse (address) speichern
    
    Sub Write_eeprom(byval Dev As Byte , Byref Address As Word , Byval Wert As Byte)
    
    I2cstart
    I2cwbyte Dev
    I2cwbyte Address_high
    I2cwbyte Address_low
    I2cwbyte Wert
    I2cstop
    Waitms 10
    
    End Sub
    '--------------------------------------------------------
    '- Byte von EEprom Adresse (address) lesen
    '- Der gelesene Wert ist der Rückgabewert der Funktion
    
    Function Read_eeprom(byval Dev As Byte , Byref Address As Word)
    Dim Devread As Byte
    Devread = Dev + 1
    
    I2cstart
    I2cwbyte Dev
    I2cwbyte Address_high
    I2cwbyte Address_low
    I2cstop
    I2cstart
    I2cwbyte Devread
    I2crbyte Read_eeprom , Nack
    I2cstop
    
    End Function

    Die Speicherung von word-daten ins eeprom habe ich von rage empire überommen. das klapp auch bei meinem anderen programm doch hier irgendwie nicht.
    beim auslesen erscheinen nichtmal die adressen in 2erstufen aufwärts im display sondern wild ducheinander. auch die ausgelsenen werte sind nicht richtig.
    was ist da falsch?
    vielleicht kanns ja einer von euch mal ausprobieren...

    holger

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.02.2006
    Beiträge
    221
    also es klappt nun.
    hab einiges verändert und nun funtioniert mein programm.

    schöne grüße
    holger

Berechtigungen

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

Labornetzteil AliExpress