Forum: Mikrocontroller und Digitale Elektronik Daten aus Flash lesen


von Martin Jansen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche ein programm zu schreiben, dass beliebige bitfolgen aus
dem flash liest und diese dann einfach ausgibt.
dazu habe  ich mir das tutorial auf dieser seite durchgelesen und ein
programm danach geschrieben, aber es funzt zum verrecken nicht.
zwischendurch werden irgendwelche bitfolgen ausgegeben, aber nicht das
was ich haben will.
das ganze soll mal ein lichtspiel werden, die anordnung der leds kann
man in der angehängten datei sehen.
eigentlich dürfte es ja kein prob sein, die daten abwechselnd auf port
b bzw c auszugeben. (bei nem AT90S4433)
es soll jetzt so sein, dass ich ein paar bytes in den flash schreibe,
die dann in einer endlosschleife ausgegeben werden, therotisch kein
ding, aber praktisch.... g
wenn sich jetzt vielleicht mal jemand das prog anschauen könnte und mir
sagen könnte wo da die fehler sind, wär das schon sehr praktisch!
ich danke jetzt schonmal für jeden hinweis!
gruß
martin

von crazy horse (Gast)


Lesenswert?

du testest zwar auf ein Ende-Zeichen (0), aber das kommt in der
Datentabelle gar nicht vor. Also läuft es immer munter weiter, wenn der
flash-Bereich zu Ende ist, gehts wieder auf Adresse 0 mit dem
Programmcode als Daten weiter. Unprogrammierte Zellen haben den Wert
0xff, insofern ist deine Datentabelle nicht terminiert. Schreib ganz
hinten noch ein .db 0 ran, dann sollte es funktionieren.

von Martin Jansen (Gast)


Lesenswert?

danke!
jetzt tut's zumindest besser als vorher, aber eigentlich müsste die
prozedur einen eintrag nach dem andren abarbeiten, tut sie aber nicht,
sonder er gibt kurz 0xff aus, und nach nem bestimmten abstand wieder.
wie kann das sein?

von Ano Nymus (Gast)


Lesenswert?

.db 0bxxxxxxxx
.db 0byyyyyyyy

macht im Speicher 11111111 xxxxxxxx 11111111 yyyyyyyy
Der Speicher ist doch 16-bittig!

also besser

.dw 0byyyyyyyyxxxxxxxx

von Martin Jansen (Gast)


Lesenswert?

ok, angenommen wir haben ein programmabschnitt

   daten:
     .db 0byyyyyyyyxxxxxxxx

wenn ich jetzt sage

   ldi ZL, LOW(daten*2)
   ldi ZH, HIGH(daten*2)
   lpm

was ist dann in r0 ?

und wenn ich jetzt sage

   adiw ZL,1
   lpm

was kommt dann?

kanns sein, dass erst ein byte aus der adresse gelesen wird (xxxxxxxx),
und dann nach "adiw ZL,1" das andere (yyyyyyyy) ?
aber in welcher reihenfolge?

von crazy horse (Gast)


Lesenswert?

ja, an der ganzen Sache mit den 16bit ist was dran, lange nichts mehr in
Assembler gemacht :-)
Aber so wirds was:

.db 0b11110110, 0b11110110
.db 0b11101101, 0b11101101
.db 0b11011011, 0b11011011

von Martin Jansen (Gast)


Lesenswert?

danke euch, ich werds versuchen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.