Hallo zusammen,
ich will mit DAVE4 und dem XMC4500 RelaxKit ein LCD-Display (Dot-Matrix
4x20) ansteuern. Die Pins mit denen ich das LCD ansteuern kann, sind
fest vorgegeben:
Enable <-> P5.0
RS <-> P3.2
DB4 <-> P1.2
DB5 <-> P1.0
DB6 <-> P1.8
DB7 <-> P1.9
(RW auf GND gelegt)
Die Pin-Konfiguration in DAVE ist in einem Bild im Anhang dargestellt.
Für die Ansteuerung des LCDs will ich die beigefügte C-Bibliothek
verwenden, die aber ursprünglich für eine andere Pin-Belegung vorgesehen
war. Mein Problem ist, dass wenn ich in der Bibliothek nur die PORT-Pins
anpasse das Display nur Blödsinn bzw. manchmal auch nichts ausgibt
(LCD_Ausgabe.jpg).
Als Beispiel (Zeile 40 in lcd.c) die folgende Funktion mit der ich die
Daten-Bits in 'data'
( data = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 ) in die richtige Positionen
des OUT-Registers von PORT1 schreiben will ( P1.OUT = ... P1.11 P1.10
DB7 DB6 ... P1.3 DB4 P1.1 DB5 ):
1 | void lcd_out(uint8_t data)
|
2 | {
|
3 | data &= 0xF0; // DB0-3 zu Null setzen, nur DB4-7 gleich lassen
|
4 | data = ( (data&(1<<4))>>2) | ((data&(1<<5))>>5) | ((data&(1<<6))<<2) | ((data&(1<<7))<<2 ); // von innen nach außen: Daten DB4-7 aus data maskieren, dann in neue Position schieben und zusammenfügen
|
5 | PORT1->OUT &= ~((uint16_t)(0xFAFA)); // vorherige Ausgabe-Bits DB4-DB7 zu Null setzen
|
6 | PORT1->OUT |= data;
|
7 | lcd_enable();
|
8 | }
|
In der main werden dann auch nur zwei Bibliotheksfunktion aufgerufen:
1 | #include <DAVE.h> //Declarations from DAVE Code Generation (includes SFR declaration)
|
2 | #include <LCD.h> // Ansteuerung 4x20 LCD-Display mit 4 Bits und RW auf GND
|
3 | #include <stdio.h>
|
4 | #include <stdlib.h>
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | DAVE_STATUS_t status;
|
9 | status = DAVE_Init();
|
10 |
|
11 | if(status != DAVE_STATUS_SUCCESS)
|
12 | {
|
13 | XMC_DEBUG("DAVE APPs initialization failed\n");
|
14 | }
|
15 |
|
16 | lcd_init();
|
17 | while(1U)
|
18 | {
|
19 | lcd_string_oLines("Hallo Welt", 0, 1);
|
20 | }
|
21 | }
|
Ich finde in lcd.c/h einfach keinen Grund wieso das nicht funktioniert,
mit der vorherigen Pin-Belegung hat es beim gleichen Aufbau (VDD=5V;
V0=1.3V;AK=5V) tadellos geklappt, kann es sein, dass ich mich bei den
Bit-Manipulationen vertan habe oder die PORT-Register so nicht
funktionieren wie ich mir das vorstelle?
Ich wäre euch über Hinweise, und Tipps sehr dankbar.
Beste Grüße,
semmel9