Hallo,
Ich versuche gerade eine LCD-Display mit einem ATMega16 anzusteuern. Das
Display ist ein DOGM131 mit einem ST7565R-Controller. Das funktionert
soweit auch gut.
Nun hab ich versucht, Text auf dem Display auszugeben.
Dafür habe ich eine Header Datei font.h, in welcher die einzelnen
Buchstaben in einem zweidimensionalen Array gespeichert sind (Das ganze
hab ich glaube ich irgendwo hier aus dem Forum). Die erste "Dimension"
gibt an welcher Buchstabe gemeint ist (Reihenfolge ist wie
dezimal-Ascii) und in der zweiten sind die Spalten-Bytes für das Display
gespeichert. das ganze sieht dann so aus:
1
constcharfont[256][6]={
2
{0x00,0x00,0x00,0x00,0x00,0x00},//0x00
3
//...
4
//...
5
{0x00,0x7E,0x11,0x11,0x11,0x7E},// 0x41 = 'A'
6
{0x00,0x7F,0x49,0x49,0x49,0x36},// 0x42 = 'B'
7
{0x00,0x3E,0x41,0x41,0x41,0x22},// 0x43 = 'C'
8
//.. usw.
9
}
Im Programm definiere ich nun einen char-Array und versuche diesen über
die Funktion "PrintMessage" auf dem Display ausgeben zu lassen, was
nicht klappt. Hier ist einmal der Code, Fehlerbeschreibung kommt danach
;)
1
#include<stdint.h>
2
#include<avr/io.h>
3
#include<util/delay.h>
4
#include<string.h>
5
6
#include"font.h"
7
8
// *Data->Pointer auf Char-Array, Page -> Welche DisplayZeile, Flip-> Zeichenumbruch ja/nein
//Array bis zur Terminierung durchlaufen und ausgeben
48
while((0==Error)&&('\0'!=*Data))
49
{
50
//Testfall, wenn 'A' gefunden ausgeben-> funktioninert immer
51
if(65==*Data)//auch mit if ('A' == *Data)
52
{
53
//SendByte sendet ein Byte per SPI an Display
54
SendByte(font[65][0]);
55
SendByte(font[65][1]);
56
SendByte(font[65][2]);
57
SendByte(font[65][3]);
58
SendByte(font[65][4]);
59
SendByte(font[65][5]);
60
61
}
62
63
// alle sechs Spalten für einen Buchstaben ausgeben
64
// Das funktioniert nur für Zeichen > 'V'
65
for(i=0;i<6;i++)
66
{
67
SendByte(font[*Data][i]);
68
}
69
70
// Pointer weitersetzen
71
Data++;
72
}
73
74
returnError;
75
}
Die Anzeige funktioniert für alle Buchstaben und Zeichen die größer
ascii-Zeichen 'V' (bzw dezimal 86) sind . Für alle Zeichen darunter
wird nur Datenmüll angezeigt. Ich kann sie aber richtig anzeigen, wenn
ich die einzelnen Zeichen explizit mit SendByte(font[Zahl][Zahl])
angebe. Mir scheint also irgendetwas mit den Indizes falsch zu laufen.
Ich hab im Quelltext noch ein paar Variationen mit Fehlerbild eingefügt.
Außerdem funktionieren die Zuordnungen
1
Message[]="foo bar";
2
Message[8]="foo bar";
nicht, was in C doch eigentlich funktionieren sollte, oder?
Wäre schön, wenn mir jemand auf die Sprünge helfen kann, was ich
verkehrt mache....ich hab so das Gefühl, das ist was ganz fundamentales
und ich sehe es vor lauter Probieren nur nicht mehr.
Gruß, Matthias