PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EEPROM schreiben in BASCOM zu langsam



slavezero
09.05.2007, 12:47
Hallo,
ich weiß nicht ob ich mit meiner Frage hier richtig bin - ich versuche es mal:
in meinem Programm ( in BASCOM geschrieben ) speichere ich bei einem Interrupt 3 Variable im EEPROM:

writeeeprom A , &H10
writeeeprom B , &H20
writeeeprom C , &H30

Nun habe ich timing Probleme – es dauert zu lange!
Ich weiß nicht wie BASCOM den Befehl writeeeprom übersetzt, könnte mir aber vorstellen, das es direkt in Assembler geschrieben schneller geht.
Ich habe aber gar keine Ahnung von Assembler.

Könnt ihr mir helfen?

Ob die Variablen auf &H10, 20 und 30 stehen, oder wo anders im EEPROM ist völlig egal.
Die begrenzte „Lebensdauer“ des EEPROM’s ist für mich kein Problem
Die Variablen lese ich folgender maßen vom EEPROM:

readeeprom A ,&H10
readeeprom B ,&H20
readeeprom C ,&H30

A ist ein Byte, B ein Word und C ist Long:

Dim A as byte
Dim B as word
Dim C as long

ich will ja nicht unverschämt sein, wenn die Lösung aber so aussehen könnte, das ich sie ohne Probleme in mein Bascom einbinden kann, das währe nicht schlecht ;-)

Tschüß SZ

Vitis
09.05.2007, 14:26
eeprom ist per Definition schon recht langsam.
Wenn ich mich erinnere glaube ich irgendwo im Datenblatt
hab ich mal was von Wartezyklen im Millisekundenbereich gelesen
zu haben. Mit ASM wirste also diese Hürde auch nicht überspringen
können. Für dauerhafte und schnelle Datenspeicherung bietet
sich Flash oder F-RAM an.

Ach so, eins noch, ne eeprom-Variable kann man auch einfach
per DIM belegen,
also

Dim a as eram byte
dim b as eram word
dim c as eram long

so kannst Du dann direkt auf die einzelne Variable zugreifen,
einfach a=5 z.B.

slavezero
09.05.2007, 15:49
das ist mir schon klar, und was der m2561 macht auch:

der AVR hat intern eine "Brennroutine" für das interne EEPROM diese dauert 3,4 ms
plus
- lade Adressregister High EEARH,
- lade Adressregister Low EEARL,
- lade Datenregister EEDR
und
- Steuerregister EECR 5 x !!! setzen ( es können tatsächlich die 5 Bits NICHT auf einmal gesetzt werden )
danach 4 Takte warten und erst dann kann das nächste Byte geschrieben werden - echt krass !!!!!!!!!

Ich stehe einfach vor der Aufgabe 7 Byte ( 1 Byte, 1 Word und 1 Long ) zu retten. Das macht man am einfachsten mit dem internen EEPROM. Bis jetzt hat das auch bei mir prima funktioniert. Nur komm ich bei meiner jetzigen Anwendung in Zeitnot und könnte mir vorstellen, das die Byte ins EEPROM schreiben in Assembler programiert schneller läuft.
Deshalb meine Frage nach einer Assemblerlösung.
Ich bin halt nur ein BASCOM BASIC "Programierer" und habe keine Ahnung von Assembler.

tschüß SZ

Vitis
09.05.2007, 19:42
push r16
weprom:
sbic EECR,EEWE <- hier liegt der Knackpunkt
rjmp weprom
out Adresse Highbyte,ZH
out Adresse Lowbyte,ZL
out EEDR,r16
sbi EECR,EEMWE
sbi EECR,EEWE
pop r16