Hallo Community,
ich habe hier ein DOGM204 (4 Zeilen à 20 Zeichen) Display von Electronic
Assembly von Reichelt.
Ich habe es momentan im 8-Bit Modus an einem ATxMega64A3U. Der µC rennt
auf 32 MHz (16 Mhz Quarz, 2-fach PLL)
Ich kriege das Display scheinbar einfach nicht initialisiert. Habe es
bereits mit der Routine aus dem Datenblatt von EA sowie das Beispiel aus
dem Datenblatt von dem Controller (SSD1803A) probiert.
Der Booster scheint zu starten, ich habe bei VOUT ca. 12,2 V anliegen.
Außerdem habe ich die Routine leicht abgeändert, ich habe das Blinken
aktiviert.
Eigentlich habe ich angenommen, das Display würde nun einen blinkenden
Cursor anzeigen. Leider sehe ich aber rein gar nichts.
Hat jemand schon einmal das Display erfolgreich angesteuert und einen
funktionierenden Code für mich ? Von mir aus auch gerne über SPI.
Ich finde auch, dass das Anzeigen von Zeichen in den Datenblättern
schlecht / gar nicht dokumentiert ist. Aber da komme ich eventuell noch
selbst drauf, sobald ich das Display richtig aktiviert bekommen habe.
LG
Nico
Hi
>Ich finde auch, dass das Anzeigen von Zeichen in den Datenblättern>schlecht / gar nicht dokumentiert ist. Aber da komme ich eventuell noch>selbst drauf, sobald ich das Display richtig aktiviert bekommen habe.
Was soll in Punkt
9.20 Write Data to RAM
vom Datenblatt noch drin stehen? Poste mal den Code von deiner
Initialisierung.
MfG Spess
Hallo Spess und danke für die schnelle Antwort.
Wie gesagt, mit dem CGRAM/DDRAM/SEGRAM habe ich mich noch nicht befasst.
Falls dazu noch Fragen sind, kommen die später. Aber danke für den
Hinweis.
Mein Code sieht so aus:
1
DATA_PORT.OUTCLR=0xFF;
2
DATA_PORT.DIRSET=0xFF;
3
4
REG_PORT.DIRSET=RESET|RS_PIN|RW_PIN|E_PIN;
5
6
_delay_ms(10);
7
SPI_PORT.OUTCLR=RESET;
8
_delay_ms(50);
9
SPI_PORT.OUTSET=RESET;
10
_delay_ms(20);
11
12
LCD_Write_IS(0x3A);// Function Set (4-Line, Normal Height, RE = 1, IS = 0)
13
LCD_Write_IS(0x09);// Extended Function Set (4-Line, no inverting, B/W invert)
14
LCD_Write_IS(0x06);// Bottom View
15
LCD_Write_IS(0x3C);// Function Set (RE = 0, IS = 1)
16
LCD_Write_IS(0x39);// Function Set
17
LCD_Write_IS(0x6C);// Follower Control
18
LCD_Write_IS(0x57);// Booster on, Set Value
19
LCD_Write_IS(0x7B);// Set Contrast
20
LCD_Write_IS(0x38);// Function Set (RE = 0, IS = 0)
21
LCD_Write_IS(0x0F);// Display On
22
LCD_Write_IS(0x01);// Clear Display
die Schreib-Routine:
1
voidLCD_Write_IS(uint8_tinstruction)
2
{
3
REG_PORT.DIRSET=0xFF;
4
5
REG_PORT.OUTCLR=RW_PIN;//Write Enable
6
REG_PORT.OUTCLR=RS_PIN;//RS-Pin Low: Instruction
7
8
//_delay_us(1);
9
10
REG_PORT.OUTSET=E_PIN;//Enable Instruction
11
DATA_PORT.OUT=instruction;//Write Data
12
//_delay_us(1);
13
14
REG_PORT.OUTCLR=E_PIN;//Disable for new Instruction/Data
15
16
while(LCD_Read_ST()&0x80);
17
_delay_us(10);
18
}
REG_PORT ist PORTE, wobei Reset Pin0, RS_PIN, RW_PIN und E_PIN die Pins
5-7 sind.
Der DATA_PORT ist PORTC.
LCD_Read_ST() ist so aufgebaut wie LCD_Write_IS(), nur RW_PIN wird
gesetzt und der DATA_PORT wird am Anfang auf Eingang gesetzt und
zwischen Enable ausgelesen. Soll an der Stelle nur prüfen, ob das
Busy-Bit gesetzt ist.
Wie gesagt, das ist zum Großteil die Routine aus dem EA Datenblatt, nur
habe ich beim Function-Set den Blink-Cursor aktiviert (denke ich) und am
Ende das Display aktiviert.
LG
Nico
Bin nun von selbst drauf gekommen.
Man musste etwas die Einstellungen für Follower und Kontrast justieren
und dann klappt die Ansteuerung endlich!
Die Bytereihenfolge zur richtigen Ansteuerung (FSTN Display):
0x3A, 0x0B, 0x06, 0x3D, 0x6E, 0x54, 0x7C, 0x38, 0x0F, 0x01
Die Ansteuerung geht nun über SPI und funktioniert einwandfrei.
Danke trotzdem ;)
LG
Nico
Hallo Nico,
bisher hab ich mit dem DOGM163 gearbeitet, das wurde mir aber zu klein
und ich hab mir das 204er gegönnt.
jetzt hänge ich etwas an der SPI Schreibroutine...
Könntest du hier mal deine Schreibroutine posten?
Grüße Thorsten
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.