PIC 18f4420 LCD ansteuerung in C

OP #2768486
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
#2769653
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.
OP #2769977
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! **********

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