Hallo,
vorab:
- Ich benutzte Atmel Studio 7.0.1931
- ein "normales" GCC C++ Projekt mit einem ATMEGA328P
Was mache ich:
ASCII-Zeichen via 2D-Bitmap Byte-Weise auslesen und über SPI auf eine
Dot-Matrix ausgeben.
Problem:
In einer for-Schleife werden eine bestimmte Anzahl an Zeichen ausgelesen
und in das Display geschrieben. Lese ich ein Zeichen ungespiegelt aus,
starte also mit index = 0, erscheint das Zeichen fehlerhaft auf dem
Display. Lese ich ein Zeichen allerdings "rückwärts"/"gespiegelt" aus,
also index = 7 (ein Zeichen = 8x8 pixel), wird es richtig dargstellt.
Das ist sehr merkwürdig und diesem Problem bin ich bisher noch nie
begegnet.
Zuerst dachte ich, vielleicht hat der Compiler ein Problem mit den
Index-Variablen, und "volatile" benutzt, das hat nicht geholfen. Auch
die Compiler-Optimierung "-O0 (none)" hat nichts gebracht.
Weiß jemand, warum das "vorwärts"-Auslesen probleme macht, das
"rückwärts"-Auslesen aber nicht?
MfG
Hier der Code für "vorwärts":
oooooohhh meine Güte wie peinlich...meine Augen brauchen wohl Pause.
Sry für die Frage.
Auf den Bildern ist mir aufgefallen, dass "rückwärts" auch falsch ist.
Das Problem ist, dass if ((i % 8 == 0) && (i != 0)) am Ende der
for-Schleife steht. Es müsste am Anfang stehen. Noch besser ist das if
wegzulassen und in
if (segmentPtr == 8) mit rein zupacken.
richtiger Code:
1
intcharPtr=0x40;// start at '@'
2
intsegmentPtr=0;
3
for(inti=0;i<(128*2);i++)// 128 x 64 dot-matrix - print two lines