PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Data und EEprom



Duesentrieb
17.04.2011, 15:11
Hallo zusammen,

ich möchte mich in die Tabellen und das EEProm Speichern einarbeiten und habe das angehängte Programm geschrieben.

Nun habe ich ein paar Fragen (weils nicht klappt wie ich gedacht habe)

Das Einlesen der Tabelle klappt soweit.
Wieso kommt beim EEprom Lesen statt dem Stringwert immer ein "yyyyyyyyyy12:00:00" raus? Das selbe gilt auch für die Beschreibung!
Wieso werden die beiden Bytewerte immer mit 255 ausgegeben?

Um den Speicher optimal auszunutzen möchte ich gerne wissen welche Bereiche, also Speicheradressen, ich für meine Strings und Bytes vorsehen muss.

Danke für eure Unterstützung!


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40


Dim I As Byte

Dim Zeit(20) As String * 8
Dim Modul(20) As Byte
Dim Befehl(20) As Byte
Dim Beschreibung(20) As String * 20



'Daten aus Data einlesen

Restore Datax
For I = 1 To 4
Read Zeit(i) : Print Zeit(i)
Read Modul(i) : Print Modul(i)
Read Befehl(i) : Print Befehl(i)
Read Beschreibung(i) : Print Beschreibung(i)
Next



'Erste Zeile in EEProm speichern

Writeeeprom Zeit(1) ; &H100
Writeeeprom Modul(1) ; &H110
Writeeeprom Befehl(1) ; &H120
Writeeeprom Beschreibung(1) ; &H130


' Aus EEprom auslesen

Readeeprom Zeit(1) ; &H100
Readeeprom Modul(1) ; &H110
Readeeprom Befehl(1) ; &H120
Readeeprom Beschreibung(1) ; &H130


' EEProm Daten ausgeben

Print "EEprom"

Print Zeit(1)
Print Modul(1)
Print Befehl(1)
Print Beschreibung(1)


End



Datax:

Data "12:00:00" , 130 , 201 , "licht Ein"
Data "12:05:00" , 130 , 202 , "licht Aus"
Data "13:00:00" , 140 , 201 , "steckdose Ein"
Data "15:00:00" , 140 , 202 , "steckdose Aus"

for_ro
17.04.2011, 15:52
Writeeeprom Zeit(1) ; &H100
Readeeprom Zeit(1) ; &H100

Ersetze mal die ";" durch "," und schau mal, was dann passiert. Siehe auch in der Hilfe.
Das was hinter dem Semikolon steht wird ignoriert, sodass alles hintereinander im EEPROM landet. Weil das beim Einlesen auch wieder passiert, schaut es so aus, als wäre es in Ordnung.

Duesentrieb
17.04.2011, 16:11
Super, da habe ich mich wohl verlesen. Die Speichadressierung habe ich jetzt auch verstanden.

Nun habe ich noch eine Frage!

Ist es möglich eine Staradresse vor zu geben und dann die Daten hinteieinader weg zu schreiben?
Beispiel:
Dim Zeit(20) As String * 8
Dim Modul(20) As Byte
Dim Befehl(20) As Byte
Dim Beschreibung(20) As String * 5

Die Startadresse ist die &H000 für die ersten Daten: Zeit - Modul - Befehl - Beschreibung
Der nächste soll jetzt bei Adresse &H100 landen u.s.w.

Dazu müsste ich die Hex-Adresse aus meinem Beispiel hochzählen

for i = 1 to 20
Writeeeprom Zeit(i) , &H000
Writeeeprom Modul(i) , &H009
Writeeeprom Befehl(i) , &H00A
Writeeeprom Beschreibung(i) , &H00B
next

Wie geht das?

for_ro
17.04.2011, 17:28
Wie geht das?
Z.B. so:

Dim Zeit(20) As String * 8
Dim Modul(20) As Byte
Dim Befehl(20) As Byte
Dim Beschreibung(20) As String * 20
Dim Adresse As Word
Adresse = 1 'Adresse 0 lässt man wegen Überschreibproblemen aus
for i = 1 to 20
Writeeeprom Zeit(i) , Adresse : Adresse = Adresse + 9 '8 + 1 Byte
Writeeeprom Modul(i) , Adresse : Adresse = Adresse + 1 '1 Byte
Writeeeprom Befehl(i) , Adresse : Adresse = Adresse + 1 '1 Byte
Writeeeprom Beschreibung(i) , Adresse : Adresse = Adresse + 21 '20 +1 Byte
Next

Duesentrieb
17.04.2011, 17:33
Danke! Jetzt kann ich gut weiter experimentieren

for_ro
17.04.2011, 17:37
Und denke dran, dass du das EEPROM nur eine begrenzte Anzahl mal beschreiben kannst. In einer falsch programmierten Schleife kann das sehr schnell gehen.
Im Simulator kannst du die Schreib- und Lesevorgänge im EEPROM übrigens auch sehr gut testen.

Duesentrieb
17.04.2011, 17:42
Ja, danke für den Hinweis.
Ich hab noch nicht mit der Hardware begonnen.