Grafik-LCD Display von Siemens/BENQ an AVR (L2F50...)
Superkranz-Site existiert nicht mehr!!!
Aus der BENQ-Konkursmasse sind große Mengen von Displays für die Handys Siemens/BENQ S65, M65, CX65 und SK65 (und weitere) erhältlich. Diese Displays haben bei einer Auflösung von 132x176 16 Bit Farbtiefe. Backlight ist vorhanden. Ein paar Hundert Hobby-Forscher bei www.mikrocontroller.net haben seit etwa 2004 diese unterschiedlichen Displays reengineered und an AVRs angeschlossen.
Unter SUPERKRANZ kann man alle notwendigen Infos und Code beschaffen. Da ich einen rudimentären MP3-Player mit SD/MMC-Karte und VS1011-Decoder-Chip zusammengebastelt hat, wollte ich dieses Display an meinen MP3-Player anschließen.
Hardware
An das Display (zumindest das L2F50xx) kann ein 10-adriges Flachbandkabel vorsichtig angelötet werden. Achtung, die ganze Controller-Folienplatine ist nicht sonderlich fest am Display befestigt und löst sich schnell ab. Das andere Ende des Kabels habe ich an eine IC-Fassung gelötet. Mein Kabel ist 15cm+25cm lang, es gibt bei 16Mhz keine Probleme mit dieser Länge.
Das Display sollte für meinen rudimentären MP3-Player dienen, der aus einem ATMega 32, einem VS1011-Chip und einer SD-Karte besteht. Mit dem Host-Computer hängen dann schon vier Geräte am SPI-Bus, funktioniert aber trotzdem ganz gut.
Das Display sollte mit 2,9V betrieben werden. Bei mir hat es bei Werten zwischen 2,6V und 3,6V funktioniert. Ich habe es der Einfachheit halber an den vorhandenen 3,3V-Regler gehängt.
Aus dem Schaltbild ergab sich bei mir folgende Pinbelegung:
Display Pin | Bedeutung | AVR Pin (AtMega32) | AVR Pin-Nr. (ATMega32) | Pollin-Bord J4 Nr. | Beschaltung am AVR als … |
---|---|---|---|---|---|
RS | ? (R/W?) | beliebiger Pin, z.B. PB2 | 11 | out | |
RESET | Display Reset | beliebiger Pin, z.B. PB1 | 10 | out | |
CS | Chip Select | beliebiger Pin, z.B. PB3 | 12 | out | |
CLK | Clock | SCK (PB4) | 16 | out | |
DAT | Daten | MOSI (PB5) | 14 | out | |
2V9 | Vcc | - | - | - | - |
GND | GND | - | 39 | - | |
1V8 | Vcc, mit 2V9 verbinden | - | - | - | - |
LED+ | Vcc für LED, ~10V | - | - | - | - |
LED_GND | GND | - | 39 | - |
BILD HIER HW TODO
Software
Mit der bei Christianz Kranz erhältlichen Software kann das Display pixelweise angesteuert werden. Eine Fonttabelle ist schon beim Code dabei, so dass man direkt Text ausgeben kann. Komplexere Graphik-Sachen wie gefüllte Kreise etc. muss man zumindest beim L2F…-Display selbst programmieren, wenn man das braucht. Für andere Display-Typen existiert weitergehende Software.
Ich wollte das Display quer betreiben, also um 90° gedreht. Dies kann erreicht werden, indem die Ausgaberoutine für Buchstaben angepasst wird:
void put_char_90(uint8_t x, uint8_t y, char c) {
uint8_t h,ch,p,mask,he;
y = DISP_H -y;
PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(SD_CSET);
lcd_dat0(0x08+y); // start is 8, not 0
lcd_dat0(0x01);
lcd_dat0(0x08+y+CHAR_H-1); // end is 00x8B = 0x83+8
lcd_dat0(0x01);
lcd_cmd(SD_PSET);
lcd_dat0(x);
if (x < DISP_W-CHAR_W) {
he=CHAR_W;
lcd_dat0(x+CHAR_W-1);
} else {
he=DISP_W-x;
lcd_dat0(DISP_W-1);
}
lcd_cmd(RAMWR);
mask=0x80;
for (h=0; h<he; h++){
//for (p=0; p<CHAR_H; p++){
for (p=CHAR_H; p>0; p--) {
ch=pgm_read_byte(&ascii_tab\[ c-32 \]\[p\]);
if (ch&mask){
lcd_dat16(textcolor);
} else {
lcd_dat16(backcolor);
}
}
mask=mask>>1;
}
PORTB |= _BV(LCD_CS); // deselect display }
Hier das Display im Betrieb an einem experimentellen MP3-Player. Die Hintergrundbeleuchtung ist abgeschaltet.
Weiterführende Links
- Die Website von Christianz
Kranz http://www.mikrocontroller.net/topic/31403
- Riesiger Thread mit vielen Infos