Danke schonmal für die Hilfe! Ich habe jetzt die erwähnten 100 Ohm vors
Poti gelegt und die Helligkeit ist ganz ok. Der Festspannungsregler vom
Olimex liefert die 5V.
Aber leider gehts jetzt trotzdem nicht:
Aus VOUT (V-5V) vom LCD kommen ja normalerweise -5 Volt raus, allerdings
sind es manchmal -3 V und manchmal auch 0 V. Als am Anfang -8 V
rauskamen habe ich mit den Potis den benötigten Widerstand zwischen V0
und VOUT bestimmen können: 500kOHM! (Datenblatt VDD-V0 8.5V) Dann
stimmte das ganze auch kurzzeitig. Aber der Festspannungsregler vom
AVRBoard wird echt heiß.
Außerdem wollten die zwei Shiftregister SN74AHC595N nicht mehr: Sie
haben teilweise undefinierte Pegel wie 1.3 oder 3.4 und das obwohl OE
auf Masse und SRCLR an VCC liegen. Die Spannung an ihnen beträgt auch
saubere 5V, aber irgendwie scheint das Display die zu ärgern. Ich habe
sogar den Code mitgeschickt, das ist aber nur eine von tausend Versionen
die alle funktioneren müsste (die Level am Chip stimmen auch).
Hoff ihr könnt den Fehler ausmachen, denke das Display müsste anders
beschalten werden!
Danke nochmal!
MfG
Bastian
1 | //in init Methode:
|
2 | DDRDISP |= SRCLKD | SERD | RCLKD | ENABD | RESETD;
|
3 |
|
4 | //in header-file:
|
5 | #define DDRDISP DDRC
|
6 | #define PORTDISP PORTC
|
7 | #define SRCLKD _BV(7)
|
8 | #define SERD _BV(6)
|
9 | #define RCLKD _BV(5)
|
10 | #define ENABD _BV(4)
|
11 | #define RESETD _BV(3)
|
12 |
|
13 |
|
14 | void writeShiftReg(unsigned int data){
|
15 | unsigned int counter, bitPos = 4096;
|
16 | PORTDISP &= ~SRCLKD; //Set CLK low so first value can be taken with first rising clock
|
17 | PORTDISP &= ~RCLKD;
|
18 | for(counter=0; counter<12; counter++)
|
19 | {
|
20 | if(data & bitPos)
|
21 | PORTDISP |= SERD; //if bit is set, set DATA high
|
22 | else
|
23 | PORTDISP &= ~SERD;
|
24 | PORTDISP |= SRCLKD; //rise CLK
|
25 | bitPos>>=1;
|
26 | PORTDISP &= ~SRCLKD; //drop CLK
|
27 | }
|
28 | PORTDISP |= RCLKD;
|
29 | }
|