XMC4500 Display Ansteuerung

Gast #6176713
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren