Hi,
hab mir aus der Bucht das hier gekauft:
http://www.ebay.de/itm/380630838372?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Wie üblich bei Artikeln aus Fernost ohne Datenblatt.
Habe mich jedoch an folgende beiden Links gehalten und konnte es mit
Leichtigkeit innerhalb weniger Minuten ansteuern. (Hab einen Teensy++
2.0 genutzt)
http://www.mikrocontroller.net/attachment/64073/lcd.pdf
http://www.geocities.com/dinceraydin/lcd/custom.htm
Nun wollte ich noch schnell die 8 benutzerdefinierten Zeichen
programmieren und kam dabei auf einen Nebeneffekt.
Ich brauchte einen ansteigenden Balken zur Visualisierung verschiedener
Datensätze.
Folgendes habe ich probiert:
1 | void define_lcd_bars()
|
2 | {
|
3 | lcd_sendcmd(0b01000000);//An die Speicheradresse 64 springen (UserDef)
|
4 | lcd_sendchar(0b00000000);//oberste Matrixzeile schreiben
|
5 | lcd_sendchar(0b00000000);
|
6 | lcd_sendchar(0b00000000);
|
7 | lcd_sendchar(0b00000000);
|
8 | lcd_sendchar(0b00000000);
|
9 | lcd_sendchar(0b00000000);
|
10 | lcd_sendchar(0b00000000);
|
11 | lcd_sendchar(0b00011111);//unterste Matrixzeile schreiben
|
12 | lcd_sendcmd(0b10000000);//An die Adresse 128 springen (normale Ausgabe)
|
13 | ...
|
14 | }
|
Scheint soweit auch zu funktionieren, da ich mit "lcd_sendchar(0);" dann
ein Zeichen erhalte, welches genau wie das definierte ausschaut.
Nun habe ich den Code erweitert:
1 | void define_lcd_bars()
|
2 | {
|
3 | lcd_sendcmd(0b01000000);//An die Speicheradresse 64 springen (UserDef)
|
4 | lcd_sendchar(0b00000000);//oberste Matrixzeile schreiben
|
5 | lcd_sendchar(0b00000000);
|
6 | lcd_sendchar(0b00000000);
|
7 | lcd_sendchar(0b00000000);
|
8 | lcd_sendchar(0b00000000);
|
9 | lcd_sendchar(0b00000000);
|
10 | lcd_sendchar(0b00000000);
|
11 | lcd_sendchar(0b00011111);//unterste Matrixzeile schreiben
|
12 | lcd_sendcmd(0b10000000);//An die Adresse 128 springen (normale Ausgabe)
|
13 | lcd_sendcmd(0b01001000);//An die Speicheradresse 72 springen (UserDef)
|
14 | lcd_sendchar(0b00000000);//oberste Matrixzeile schreiben
|
15 | lcd_sendchar(0b00000000);
|
16 | lcd_sendchar(0b00000000);
|
17 | lcd_sendchar(0b00000000);
|
18 | lcd_sendchar(0b00000000);
|
19 | lcd_sendchar(0b00000000);
|
20 | lcd_sendchar(0b00011111);
|
21 | lcd_sendchar(0b00011111);//unterste Matrixzeile schreiben
|
22 | lcd_sendcmd(0b10000000);//An die Adresse 128 springen (normale Ausgabe)
|
23 | ...usw.
|
24 | }
|
und bekomme mit:
1 | lcd_sendchar(0);
|
2 | lcd_sendchar(1);
|
3 | lcd_sendchar(2);
|
4 | lcd_sendchar(3);
|
5 | lcd_sendchar(4);
|
6 | lcd_sendchar(5);
|
7 | lcd_sendchar(6);
|
8 | lcd_sendchar(7);
|
Wie erwartet die richtigen Zeichen.
So weit alles gut. Nun habe ich beim Testen versehenlich mal nicht binär
incrementiert sondern decimal. (Also das 2. Zeichen in Adresse
0b01000001 statt 0b01001000 geschrieben; 65 statt 72 usw.)
Das führte dazu, dass die erste Zeile von meinen 2x16 Zeichen Display
"weiß hinterlegt" war. Also nicht weiß überschrieben, wie es der Curser
macht, sondern so als ob ich den Kontrast nur für die erste Zeile
einzelnd einstellen könnte und dieser verstellt wäre.
Nun zur eigentlichen Frage:
Was habe ich dort verstellt und gibt es eine Tabelle mit den Parametern
für die Adressen 65-126 (ohne 72; 80, 88, 96; 104; 112; 120)
Grüße Oekel