PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DisplayTexte im Eprom ablegen


SN

andy75
14.06.2011, 06:26
Hallo,

ich bin als Bascom Neuling nit einer eigentlich einfachen Funktion anscheinend überfordert. Hoffentlich kann mir jemand helfen.
Bisher habe ich in Pascal Programmiert.

Ich möchte mehrere Displaytexte im Eprom ablegen um Speicher zu sparen.
Mein Mega 88 ist so ziemlich voll und da passen die Texte vom Menü einfach nicht mehr rein.
Bei Pascal gibt es dafür eine einfache Funktion:

structconst ENGRXTimeOut : String =' Connection Break ';

Wie aber funktioniert das bei Bascom?

Habe es schon mit :

Dim Text(20) As ERAM String * 20
versucht.
Die Daten wollte ich mit:

Text(1) = " Connection Break "
in den Speicherplatz schreiben.

Da sollte es eigentlich möglich sein 20 Texte mit je 20 Zeichen zu speichern.
Aber es wird keine Eprom Datei erzeugt!

Wie kann ich das machen.

MagicWhiteSmoke
14.06.2011, 07:31
Dim Text(20) As ERAM String * 20
Das legt nur eine les- und beschreibbare EEProm-Variable an.


Text(1) = " Connection Break "
Macht keinen Sinn, weil der Text zuerst im Flash landet, um dann in's EEProm geschrieben werden.

Aber es wird keine Eprom Datei erzeugt!
Schlüssel dafür ist $EEPROM.

andy75
14.06.2011, 08:09
Schlüssel dafür ist $EEPROM.

Habe ich in der Hilfe auch schon mal gelesen.

Laut der Hilfe hann mann dort aber nur Zahlen reinschreiben.
Also 45, 32, 1, 5, usw.
Wie kann ich jetzt aber die Medetexte (am besten im Klartext) da ablegen?

In anderen Beispielen habe ich schon mal gesehen, das die Variable $EEPROM am Ende des Programms liegt und dann wieder auf $Data zurückgeschaltet wird, obwol keine Daten enthalten waren. Muss das so sein?

Galahat
14.06.2011, 08:20
Moin zusammen

andy75, sieh mal in der Hilfe unter Data nach.

Gruß
Galahat

MagicWhiteSmoke
14.06.2011, 08:33
Laut der Hilfe hann mann dort aber nur Zahlen reinschreiben.
Also 45, 32, 1, 5, usw.
Nenn' doch mal die Stelle, wo das stehen soll.

Schon mal das Beispiel EEPROM2.bas im Bascom\Samples-Ordner angesehen ?

In anderen Beispielen habe ich schon mal gesehen, das die Variable $EEPROM am Ende des Programms liegt und dann wieder auf $Data zurückgeschaltet wird, obwol keine Daten enthalten waren. Muss das so sein?
Nicht alles was da geschrieben wird, macht auch Sinn. Wenn Dir die Funktion von $EEPROM und $DATA klar ist, kannst Du Dir diese Frage jederzeit selbst beantworten.

andy75
14.06.2011, 09:22
Hm, naja habe ich wohl nicht richtig verstanden.

Habe jetzt mal flogendes versucht:

Lcd_clear 'LCD löschen
Restore Text1
Read Text_buffer
Lcd_pos 1 , 1
Lcd_text Text_buffer
Restore Text2
Read Text_buffer
Lcd_pos 1 , 2
Lcd_text Text_buffer
Restore Text3
Read Text_buffer
Lcd_pos 1 , 3
Lcd_text Text_buffer
Restore Text4
Read Text_buffer
Lcd_pos 1 , 4
Lcd_text Text_buffer

Und definiert habe ich das so:

$eeprom
Text1:
Data " Blabla1 "
Text2:
Data " Blabla2 "
Text3:
Data " Blabla3 "
Text4:
Data " Blabla4 "

Es wird nun auch eine Datei mit *.eep erstellt.
Nur mit dem AVR-Studio bekomme ich die Datei nicht in den Chip geladen.
Es kommt folgende Fehlermeldung:

The specified file is not a valid Intel HEX file

Was nun ?
In der Hilfe habe ich gelesen, "$eepromhex" soll nun eine Intel-Hex Datei bilden. Wenn ich das aber so mache wird keine Datei erstellt! Warscheinlich weil der Dateninhalt falsch ist.
:-[ Ich bin irgendwie am verzweifeln! :-[

MagicWhiteSmoke
14.06.2011, 09:37
Was Du da machst funktioniert nicht, warum glaubst Du weise ich Dich auf das Beispiel EEPROM2 hin ?

In der Hilfe habe ich gelesen, "$eepromhex" soll nun eine Intel-Hex Datei bilden. Wenn ich das aber so mache wird keine Datei erstellt!
Dein Fehler, Du ignorierst was ich Dir sage und was die Hilfe sagt:

$EEPROMHEX must be used together with $EEPROM.

andy75
14.06.2011, 10:01
Joh, jetzt ist nichts mehr klar!

Ich habe sicherlich das Beispiel Eeprom2 gesehen.
Dort werden aber keine Texte im Eram gespeichert sondern nur Zahlen.

Nun habe ich mal die Routine zum Zurücklesen der Daten geändert:

Readeeprom Text_buffer = Text1
Lcd_pos 1 , 1
Lcd_text Text_buffer

da kommen aber 3 Fehlermeldungen:

Error 31 Invalid Datatype
Error 93 Variable not dinen.. und Error 339 Bytes to reed may not be 0
Eigentlich habe ich doch alles so gemacht wie im Beispiel auch.
Das der Datentyp aus dem Eprom und der Variable gleich sein müssen ist schon klar, sind sie aber irgendwie nicht.

Den String habe ich wie folgt Dimensioniert:

Dim Text_buffer As String * 20

Hier nochmal der inhalt des EEproms:

$eeprom
$eepromhex

Text1:
Data " Blabla1 "
Text2:
Data " Blabla2 "
Text3:
Data " Blabla3 "
Text4:
Data " Blabla4 "

$data

Irgendwie stehe ich da auf dem Code. :(

MagicWhiteSmoke
14.06.2011, 10:11
Dort werden aber keine Texte im Eram gespeichert sondern nur Zahlen.
Macht doch nix. Steht aber nicht geschrieben, daß nur Zahlen möglich sind.


Nun habe ich mal die Routine zum Zurücklesen der Daten geändert:

Readeeprom Text_buffer = Text1
Lcd_pos 1 , 1
Lcd_text Text_buffer
da kommen aber 3 Fehlermeldungen:

Klar, ist ja auch 'ne falsche Syntax. Wo steht im besagten Beispiel bei Readeeprom ein "=" ?

Eigentlich habe ich doch alles so gemacht wie im Beispiel auch.
Nö.

Das der Datentyp aus dem Eprom und der Variable gleich sein müssen ist schon klar, sind sie aber irgendwie nicht.
???

Hier nochmal der inhalt des EEproms:

$eeprom
$eepromhex
...
Damit wird eine eep-Datei im Intel-Hex-Format erzeugt, die Daten hast Du damit, nur der Zugriff muss jetzt noch richtig werden.

andy75
14.06.2011, 10:26
Na is ja toll.

Ein "KOMMA" statt eines "=". :'( Is ja Ärgerlich.

Jetzt geht es. Danke!