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







Zitieren

Lesezeichen