PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu EEPROM nutzung



molleonair
19.02.2006, 09:25
Hallo

ich habe soeben versucht den eeprom beispiel code aus dem bascom-buch
in meinen code zu integrieren
leider bekomme ich beim compilen die fehlermeldungen:
ungültiger datentyp und variable nicht dimensioniert

Woran liegt das ?

Weiterhin wollte ich die entstandene eep ins eeprom schreiben bekam aber die Meldung vom avrprog das es keine gültige intel hex datei sei.
muß ich dann die $eepromhex anweisung nutzen ?
es folgt der code für mega 16



$crystal = 8000000
$regfile = "m16def.dat"

Dim Eepromlesen As Byte
Dim Zeichen As Byte
Declare Sub Zumdisplay(byval Zeichen As Byte) 'funktion zum senden an das display

Db4dis Alias Portc.6
Db5dis Alias Portc.7
Db6dis Alias Porta.7
Db7dis Alias Porta.6
Rsdis Alias Portc.4
Enabledis Alias Portc.5


Config Lcdpin = Pin , Db4 = Db4dis , Db5 = Db5dis , Db6 = Db6dis , Db7 = Db7dis , E = Enabledis , Rs = Rsdis

Initlcd
Call Zumdisplay(&B00101100) 'aufruf zum initialisieren
Waitms 5 'des display controllers
Call Zumdisplay(&B00001001)
Waitms 5
Call Zumdisplay(&B00101000)
Waitms 5
Call Zumdisplay(&B00000110)
Waitms 5
Call Zumdisplay(&B00001100)
Waitms 5
Config Lcd = 20 * 4a 'display als 20 zeichen mal 4 zeilen
Cls

Readeeprom Eepromlesen , Label1
Locate 1 , 1
Lcd Eepromlesen
Readeeprom Eepromlesen
Locate 1 , 10
Print Eepromlesen
Locate 2 , 1
Readeeprom Eepromlesen , Label2
Print Eepromlesen
Locate 2 , 10
Readeeprom Eepromlesen
Print Eepromlesen

End


$eeprom
Label1:
Data 1 , 2 , 3 , 4 , 5
Label2:
Data 10 , 20 , 30 , 40 , 50
$data


Sub Zumdisplay(byval Zeichen As Byte)

' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Set Db4dis Else Reset Db4dis
If Zeichen.5 = 1 Then Set Db5dis Else Reset Db5dis
If Zeichen.6 = 1 Then Set Db6dis Else Reset Db6dis
If Zeichen.7 = 1 Then Set Db7dis Else Reset Db7dis

' höherwertiges nibble übertragen
Set Enabledis
Waitms 5
Reset Enabledis
Waitms 5

' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Set Db4dis Else Reset Db4dis
If Zeichen.1 = 1 Then Set Db5dis Else Reset Db5dis
If Zeichen.2 = 1 Then Set Db6dis Else Reset Db6dis
If Zeichen.3 = 1 Then Set Db7dis Else Reset Db7dis

' Niederwertiges Nibble übertragen
Set Enabledis
Waitms 5
Reset Enabledis
Waitms 5

End Sub


Danke für eure Mühe gruß danie

molleonair
19.02.2006, 15:47
also ich hab die lösung gefunden wer auch das problem hat einfach:

&eeprom
&eepromhex
data ...
data ..
&date

und dann läßt sich die eep ins eeprom schreiben

darwin.nuernberg
19.02.2006, 16:12
Das im AVR integrierte EEPROm hat jedoch den Nachteil dass es nur eine begrenzte Lebensdauer hat (100000 Schreib/lesezyklen)

Also das interne EEPROM nicht in Schleifen oder loops einlesen oder hineinschreiben, sondern wirklich nur dann, wenn es unbedingt sein muss.

Besser wäer ein externes EEPROM anzuschließen, aber damit habe ich (noch) keine Erfahrung, geschweige denn eine adäquate Lösung....

MAxK
21.05.2006, 00:49
welche möglichkeiten gäbe es denn dann noch daten(bei mir ein zeichensatz für ein lcd) im programm abzulegen.
das problem ist, das ich schnell darauf zugreifen muss, da sonst die Anzeige des Displays zu langsam ist

Windi
21.05.2006, 20:50
Das im AVR integrierte EEPROm hat jedoch den Nachteil dass es nur eine begrenzte Lebensdauer hat (100000 Schreib/lesezyklen)
Also laut Datenblatt handelt es sich um 100.000 write/erase cycles.
Also Schreib-/Lösch- zugriffe.
Lesezugriffe scheinen nicht auf die Lebensdauer zu gehen.

Vitis
21.05.2006, 23:35
richtig, lesen kannste das eeprom bis zum Abwinken