LCD mit 18F4550 ansteuern - Code läuft nicht Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
LCD mit 18F4550 ansteuern - Code läuft nicht Suche nach: lcd (4707) |
|
|
|
|
BID = 444517
GoTo Neu hier

Beiträge: 25
|
|
Hi,
ich habe ein Problem ein LCD mit einem 18F4550 anzusteuern. Ich arbeite erst seit kurzem mit den 18ern. Compilieren tue ich mit C18. Hier mal der fürs LCD relevante Code:
| Code : |
//Überprüfe LCDStatus
void waitForLCD(void)
{
//Steuerleitungen einstellen
LATE |= 0b00000010; //RW
LATE &= 0b11111011; //RS
//RD4..7 Inputs
LATD &= 0b00001111;
TRISD = 0xFF;
//Busyschleife
cBusy = 0x80;
do
{
LATE |= 0b00000001;
Delay1TCY();
cBusy = PORTD;
LATE &= 0b11111110;
Delay1TCY();
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
}while((cBusy & 0b10000000) != 0x00);
//Leitungen zurücksetzen
LATE &= 0b11111001; //RW, RS
TRISD = 0x0F;
LATD &= 0b00001111;
return;
}
//Übertrage Steuerdaten an LCD
void sendCWToLCD(char cWord)
{
//Busy-Check
waitForLCD();
//Steuerleitungen einstellen
LATE &= 0b11111000;
//Übertragen der Bits 4..7
LATD &= 0b00001111;
LATD |= cWord & 0b11110000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
//Übertragen der Bits 0..3
LATD &= 0b00001111;
LATD |= (cWord & 0b00001111) << 4;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
}
//Übertrage Daten an LCD
void sendDWToLCD(char cWord)
{
//Busy-Check
waitForLCD();
//Steuerleitungen einstellen
LATE &= 0b11111100; //RW
LATE |= 0b00000100; //RS
//Übertragen der Bits 4..7
LATD &= 0b00001111;
LATD |= cWord & 0b11110000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
//Übertragen der Bits 0..3
LATD &= 0b00001111;
LATD |= (cWord & 0b00001111) << 4;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
LATE &= 0b11111011; //RS
}
//Initialisierung des LCD
void initLCD(void)
{
//15ms Warten
Delay10KTCYx(10);
//Sende Init-Byte (1)
LATD &= 0b00001111;
LATD |= 0b00110000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
//5ms Warten
Delay10KTCYx(5);
//Sende Init-Byte (2)
LATD &= 0b00001111;
LATD |= 0b00110000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
//100us Warten
Delay100TCYx(10);
//Sende Init-Byte (3)
LATD &= 0b00001111;
LATD |= 0b00110000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
Delay100TCYx(10);
//4-bit
LATD &= 0b00001111;
LATD |= 0b00100000;
LATE |= 0b00000001;
Delay1TCY();
LATE &= 0b11111110;
Delay100TCYx(10);
//Display löschen
sendCWToLCD(0b00000001);
//4-bit Interface und 5x8 Matrix
sendCWToLCD(0b00101000);
//Display aus
sendCWToLCD(0b00001000);
//Cursorrichtung rechts, Shift aus
sendCWToLCD(0b00000010);
//Display ein
sendCWToLCD(0b00001100);
}
|
|
Pinbelegung:
D4..7 -> RD4..7
E -> RE0
RW -> RE1
RS -> RE2
Nur damit ihr euch nicht wundert: An RD0..3 sind Eingänge für ne Tastermatrix.
Wenn ich das Programm laufen lasse passiert nix. Das Display zeigt nix bzw. bei runtergedrehter Kontrastspannung schwarze Kästen an, als wäre es nicht initialisiert.
mfg GoTo |
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 16 Beiträge im Durchschnitt pro Tag heute wurden bisher 5 Beiträge verfasst © x sparkkelsputz Besucher : 186829205 Heute : 26849 Gestern : 47700 Online : 223 26.11.2025 14:32 7 Besucher in den letzten 60 Sekunden alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0668039321899
|