Forum: Mikrocontroller und Digitale Elektronik PIC 18f4420 LCD ansteuerung in C


von Flo (sandiegoo)


Lesenswert?

Guten Morgen

Ich versuche seit mittlerweile 3 Tagen mein LCD an einem PIC 18F4420 zum 
laufen zu bringen. Allerdings ohne Erfolg. Ich habe auch schon die 
Routine von Microchip ausprobiert -> Leider auch kein Erfolg.

Das Display ist an PORT B angeschlossen
Enable: RB3
RS: RB2
RW: RB1
D4-D7 = RB4-RB7

TRISB = 0x00

Display: 16x2
http://docs-europe.electrocomponents.com/webdocs/06dd/0900766b806dda16.pdf

Takt kommt von einem Quarz: 14,31818 MHz

Die Funktionen werden aus der main.c aufgerufen mit: lcd_init();
Allerdings erscheint auf dem Display nur der übliche obere Balken. Wie 
bei einem Display das nicht initialisiert ist.

Könnt ihr bitte mal über den Code schauen:

Hier mein Code ( sind bestimmt einige Fehler drin ;) )
1
#include <p18cxxx.h>
2
#include <delays.h>
3
4
5
void lcd_init(void);
6
void OutLcdControl(unsigned char Daten);
7
void OutLcdDaten(unsigned char Daten);
8
void DelayFor18TCY(void);
9
void Delay_30m(void);
10
void Delay_5m(void);
11
void Delay_100u(void);
12
void Delay_1m(void);
13
void Delay_50m(void);
14
15
16
#define enable     LATBbits.LATB3
17
#define rs      LATBbits.LATB2
18
#define rw      LATBbits.LATB1
19
20
21
void lcd_init (void)
22
{
23
  Delay_50m();      //laaaange Warten
24
  Delay_50m();
25
  Delay_50m();
26
  Delay_50m();
27
  Delay_50m();
28
  Delay_50m();
29
  Delay_50m();
30
  Delay_50m();
31
  Delay_50m();
32
  Delay_50m();
33
34
  LATB = 0b00110000;    //1
35
  enable = 1;
36
  DelayFor18TCY();
37
  enable = 0;
38
39
  Delay_5m();
40
41
  LATB = 0b00110000;    //2
42
  enable = 1;
43
  DelayFor18TCY();
44
  enable = 0;
45
46
  Delay_5m();
47
48
  LATB = 0b00110000;    //3
49
  enable = 1;
50
  DelayFor18TCY();
51
  enable = 0;
52
53
  Delay_5m();
54
55
  LATB = 0b00100000;    //4
56
  enable = 1;
57
  DelayFor18TCY();
58
  enable = 0;
59
60
  Delay_5m();
61
62
  OutLcdControl(0b00000001);   //löschen und cusor home
63
  Delay_5m();
64
  OutLcdControl(0b00101000);  //5 function set, 4-bit  2-zeilig,  5x7
65
  Delay_5m();
66
  OutLcdControl(0b00001000);  //6 display off
67
  Delay_5m();
68
  OutLcdControl(0b00000110);  //7 entry mode, increment, disable display-shift
69
  Delay_5m();
70
  OutLcdControl(0b00000011);  //8 cursor home, cursor home
71
  Delay_5m();
72
  OutLcdControl(0b00001111);  //9 display on
73
  Delay_5m();
74
75
  return;
76
77
//  OutLcdDaten('A');
78
  
79
}
80
81
void OutLcdControl(unsigned char Daten)
82
{
83
  Delay_5m();    //warten bis Display bereit ist
84
  LATB = Daten & 0xF0;
85
86
  enable = 1;  //Daten senden
87
  Delay_1m();  //DelayFor18TCY();
88
  enable = 0;
89
90
  Delay_1m();  //DelayFor18TCY();  //warten
91
  
92
  Daten = Daten << 4;  //untere Daten an Position schiebebn
93
94
  LATB = Daten & 0xF0;
95
96
  enable = 1;  // Daten senden
97
  Delay_1m();    //DelayFor18TCY()
98
  enable = 0;
99
100
  Delay_1m();    //DelayFor18TCY();    //warten
101
            //fertig
102
}
103
//====================================================================
104
void OutLcdDaten(unsigned char Daten)
105
{
106
  DelayFor18TCY();    //warten bis Display bereit ist
107
  LATB = Daten & 0xF0;
108
  rs = 1;  //Daten senden
109
110
  enable = 1;  //Daten senden
111
  DelayFor18TCY();
112
  enable = 0;
113
114
  Delay_5m();    //warten
115
  
116
  Daten = Daten << 4;  //untere Daten an Position schiebebn
117
118
  LATB = Daten & 0xF0;
119
  rs = 1;  //Daten senden
120
121
  enable = 1;  // Daten senden
122
  DelayFor18TCY();
123
  enable = 0;
124
125
  Delay_5m();    //warten
126
            //fertig
127
}
128
//====================================================================
129
130
131
132
133
134
void DelayFor18TCY(void)
135
{
136
  Nop();
137
  Nop();
138
  Nop();
139
  Nop();
140
    Nop();
141
  Nop();
142
  Nop();
143
  Nop();
144
    Nop();
145
  Nop();
146
  Nop();
147
  Nop();
148
    Nop();
149
  Nop();
150
}
151
152
void Delay_30m(void)
153
{
154
  Delay1KTCYx(56);  //Delay of 15ms
155
  return;
156
}
157
void Delay_5m(void)
158
{
159
  Delay1KTCYx(28);  //Delay 5ms
160
  return;
161
}
162
void Delay_100u(void)
163
{
164
  Delay100TCYx(36);  //100µs
165
}
166
void Delay_1m(void)
167
{
168
  Delay1KTCYx(36);    //1ms
169
}
170
void Delay_50m(void)
171
{
172
  Delay1KTCYx(180);  //Delay of 50ms
173
  return;
174
}

so ich hoffe ich habe alle nötigen Infos reingeschrieben :/

Gruß
Flo

von Florian (Gast)


Lesenswert?

Oder hat irgendjemand einen Testcode wo definitiv läuft das ich die 
Hardware testen kann?

von Vincent H. (vinci)


Lesenswert?

Ich hab leider grad keine Zeit mir den Code anzusehen, verwende jedoch 
seit einem Jahr die Routinen von einem gewissen "Isaac Marino 
Bavaresco".

http://www.piclist.com/techref/member/IMB-yahoo-J86/HD44780-tty.htm

Relativ umfangreich, jedoch extrem komfortabel übers Headerfile zu 
konfigurieren. Funktionieren in mittlerweile 4 Projekten (1x PIC16F, 2x 
PIC18F und 1x dsPIC33) tadellos.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Versuch das Programm im Anhang mal.
Hab den µC nicht sollte aber laufen.
Mit den Anschlüßen, wie du sie hast.

von Ingo (Gast)


Lesenswert?

Fehlt nicht die Main, wo die einzelnen Funktionen, zumindest aber de 
lcd_init aufgerufen wird?


Ingo

von Flo (sandiegoo)


Lesenswert?

Die Hardware funktioniert! DANKE Stefan

@Ingo Ich rufe die Init aus der main.c auf. Siehe erster Beitrag!

von Flo (sandiegoo)


Lesenswert?

@Vicent

Welchen Compiler verwendest du denn? Er erkennt bei mir die PIC.h. Ich 
habe jetzt schon die p18cxxx.h eingefügt allerdings funktioniert es mit 
dieser nicht.

Ich verwende MPLAB IDE v8.63 mit Student C compiler von Microchip v3.42

von Flo (sandiegoo)


Lesenswert?

Ich bekomme mit dem HI TECH compiler den gleichen Fehler:

Build C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\Multimeter for 
device 18F4420
Using driver C:\Programme\HI-TECH Software\PICC-18\9.80\bin\picc18.exe

Make: The target "C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.p1" is 
out of date.
Executing: "C:\Programme\HI-TECH Software\PICC-18\9.80\bin\picc18.exe" 
--pass1 "C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c" -q 
--chip=18F4420 -P --runtime=default --opt=default -D__DEBUG=1 -g 
--asmlist "--errformat=Error   [%n] %f; %l.%c %s" 
"--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
155.15 variable "RB2" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3959)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
160.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
164.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
172.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
176.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
627.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
637.11 variable "RB2" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3959)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
660.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
664.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
672.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
676.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
684.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Warning [1385] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c; 
688.11 variable "RB3" is deprecated (declared at C:\Programme\HI-TECH 
Software\PICC-18\9.80\include\pic18f4420.h:3961)
Make: The target "C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\main.p1" is up 
to date.
Executing: "C:\Programme\HI-TECH Software\PICC-18\9.80\bin\picc18.exe" 
-oMultimeter.cof -mMultimeter.map --summary=default --output=default 
LCD-lite.p1 main.p1 --chip=18F4420 -P --runtime=default --opt=default 
-D__DEBUG=1 -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" 
"--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC18 MCUs (Lite Mode)  V9.80
Copyright (C) 2011 Microchip Technology Inc.
Advisory[1233] Employing 18F4420 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers
Error   [1098] C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\main.c; 34. 
conflicting declarations for variable "_LCDInit" (C:\Dokumente und 
Einstellungen\Administrator\Eigene 
Dateien\Azubi\Florian\Pic_Programme\Multimeter\ganz_neu\LCD-lite.c:623)

********** Build failed! **********

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.