LCD Modul Problem

OP #1502098
Hallo Zusammen,

ich habe ein Problem mit einem LCD DOTMATRIXDISPLAY (EA E162-BNLW). 
Angeschlossen habe ich es nach Datenblatt P1:GND P2:5V P3:GND P5: GND 
(R/W) und die Datenleitungen, Enable und RS sind mit dem Mikrokontroller 
verbunden.
Als ich beim ersten Versuch das LCD Modul anzusteuern gesehen habe das 
nur die unterste Zeile des Displays leuchten (Alle Dots sind zu sehen), 
habe ich mal die Pins nachgemessen. Dabei habe ich festgestellt das die 
LCD Datenpins auf Dauer 1 sind. Wenn ich an das Display nur die 
Spannungsverorgung anlege und an R/W GND, sind alle Display Datenpins 
high.
Meine Frage nun ist das LCD kaputt oder sind die LCD Datenpins auf 
Output geschalten!?

Danke für eure Hilfe

fisi
OP #1502170
OK, klingt logisch!
Wenn ich das LCD komplett an den Mikrocontroller beschaltet habe (davor 
die Mikrcontoller Pins nachgemessen ob sie richtig geschaltet sind) und 
dann zwischen LOW und High den jeweiligen Pin umschalte, habe ich am LCD 
Eingang immer ein high Signal.
#1502172
Christian F. schrieb:
> OK, klingt logisch!
> Wenn ich das LCD komplett an den Mikrocontroller beschaltet habe (davor
> die Mikrcontoller Pins nachgemessen ob sie richtig geschaltet sind) und
> dann zwischen LOW und High den jeweiligen Pin umschalte, habe ich am LCD
> Eingang immer ein high Signal.

Dann hast du wahrscheinlich den µC-Ausgang nicht als Ausgang geschaltet.
OP #1502179
Karl heinz Buchegger schrieb:
> Christian F. schrieb:
>> OK, klingt logisch!
>> Wenn ich das LCD komplett an den Mikrocontroller beschaltet habe (davor
>> die Mikrcontoller Pins nachgemessen ob sie richtig geschaltet sind) und
>> dann zwischen LOW und High den jeweiligen Pin umschalte, habe ich am LCD
>> Eingang immer ein high Signal.
>
> Dann hast du wahrscheinlich den µC-Ausgang nicht als Ausgang geschaltet.

Die µC-Ausgänge für das LCD sind alle auf OUTPUT!!
Gast #1502195
>Die µC-Ausgänge für das LCD sind alle auf OUTPUT!!

Behaupten kann man viel;) Kannst du es auch beweisen?
Ein falscher Befehl im Programm und es sind alles
wieder Eingänge.
OP #1502306
Hier der Beweis:
1
#define INPUT     0
2
#define OUTPUT    1
3

4
// IN / OUT definitions
5

6
#define    DDR_PORTA_PIN1  OUTPUT      /* Extension 2: datapin 5 - bit 2 for display              */
7
#define    DDR_PORTA_PIN2  OUTPUT      /* Extension 2: datapin 8 - bit 5 for display old:Drum digital input (frequency measurement)   */
8
#define    DDR_PORTA_PIN5  OUTPUT      /* Extension 2: datapin 9 - bit 6 for display               */
9
#define    DDR_PORTA_PIN6  OUTPUT      /* Extension 2: datapin 10 - bit 7 for display               */
10
#define    DDR_PORTA_PIN7  OUTPUT      /* Extension 2: datapin 7 - bit 4 for display              */
11
#define    DDR_PORTA_MASK  (DDR_PORTA_PIN0) | (DDR_PORTA_PIN1 << 1) | (DDR_PORTA_PIN2 << 2) | (DDR_PORTA_PIN3 << 3) | (DDR_PORTA_PIN4 << 4) | (DDR_PORTA_PIN5 << 5) | (DDR_PORTA_PIN6 << 6) | (DDR_PORTA_PIN7 << 7)
12

13
#define    DDR_PORTB_PIN2  OUTPUT      /* Extension 2: datapin 4 - bit 1 for display               */
14
#define    DDR_PORTB_PIN3  OUTPUT      /* Extension 2: datapin 6 - bit 3 for display            */
15
#define    DDR_PORTB_MASK  (DDR_PORTB_PIN0) | (DDR_PORTB_PIN1 << 1) | (DDR_PORTB_PIN2 << 2) | (DDR_PORTB_PIN3 << 3) | (DDR_PORTB_PIN4 << 4) | (DDR_PORTB_PIN5 << 5) | (DDR_PORTB_PIN6 << 6) | (DDR_PORTB_PIN7 << 7)
16

17
#define   DDR_PORTC_PIN0  OUTPUT      /* Extension 1: datapin 8 - Enable for display               */
18

19
#define    DDR_PORTC_MASK  (DDR_PORTC_PIN0) | (DDR_PORTC_PIN1 << 1) | (DDR_PORTC_PIN2 << 2) | (DDR_PORTC_PIN3 << 3) | (DDR_PORTC_PIN4 << 4) | (DDR_PORTC_PIN5 << 5) | (DDR_PORTC_PIN6 << 6) | (DDR_PORTC_PIN7 << 7)
20

21

22
#define    DDR_PORTD_PIN4  OUTPUT      /* Extension 1: datapin 4 - R/W for display             */
23
#define    DDR_PORTD_PIN6  OUTPUT      /* Extension 1: datapin 3 - RS for display   old:Trigger    digital in - Tigger right    */
24
#define    DDR_PORTD_PIN7  OUTPUT      /* Extension 1: datapin 6 - bit 0 for display old: Trigger    digital in - Tigger left    */
25
#define    DDR_PORTD_MASK  (DDR_PORTD_PIN0) | (DDR_PORTD_PIN1 << 1) | (DDR_PORTD_PIN2 << 2) | (DDR_PORTD_PIN3 << 3) | (DDR_PORTD_PIN4 << 4) | (DDR_PORTD_PIN5 << 5) | (DDR_PORTD_PIN6 << 6) | (DDR_PORTD_PIN7 << 7)
OP #1502363
Das ist für die defines die dazugehörige iopins.c
Alle Funktionen benutzen nun nur noch die Funktionen IOPINS_PinHigh und 
PinLow!
1
void IOPINS_initIOs(void)
2
{
3
  //set the data-direction-registers
4
  DDRA = DDR_PORTA_MASK;
5
  DDRB = DDR_PORTB_MASK;
6
  DDRC = DDR_PORTC_MASK;
7
  DDRD = DDR_PORTD_MASK;
8

9
  PORTA = 0x00;
10
  PORTB = 0x00;
11
  PORTC = 0x00;
12
  PORTD = 0x00;
13
  
14
}
15

16
uint8 IOPINS_PinHigh(enum IoPorts Port, uint8 Pin)
17
{
18
  uint8 ret_code = IL_OK;
19
  
20
  //Pins are from 0 to 7
21
  if (Pin >= 8)
22
  {
23
    return (RET_ERROR);
24
  }
25
  
26
  //write to appropriate Port
27
  switch (Port)
28
  {
29
    case A:
30
      SB(PORTA,Pin);
31
      break;
32
    case B:
33
      SB(PORTB,Pin);
34
      break;
35
    case C:
36
      SB(PORTC,Pin);
37
      break;
38
    case D:
39
      SB(PORTD,Pin);
40
      break;
41
    default:
42
      ret_code = RET_ERROR;
43
  }
44
  
45
  return (ret_code);  
46
}
47
uint8 IOPINS_PinLow(enum IoPorts Port, uint8 Pin)
48
{
49
  uint8 ret_code = IL_OK;
50
  
51
  //Pins are from 0 to 7
52
  if (Pin >= 8)
53
  {
54
    return (RET_ERROR);
55
  }
56
  
57
  //write to appropriate port
58
  switch (Port)
59
  {
60
    case A:
61
      CB(PORTA,Pin);
62
      break;
63
    case B:
64
      CB(PORTB,Pin);
65
      break;
66
    case C:
67
      CB(PORTC,Pin);
68
      break;
69
    case D:
70
      CB(PORTD,Pin);
71
      break;
72
    default:
73
      ret_code = RET_ERROR;
74
  }
75
  
76
  return (ret_code);  
77
}
Gast #1502371
Jetzt sehe ich Code, aber nicht wie der aufgerufen wird.

>uint8 IOPINS_PinLow(enum IoPorts Port, uint8 Pin)

Was ist denn das für ein Unsinn mit enum?
Naja, vieleicht erklärt einer der C-Profis hier
das ja mal;)
OP #1502382
Kleiner Auszug aus der Display INIT.

Das Enum ist einfach dazu da, dass man die Ports als Buchstabe hat und 
nicht als Zahl!
1
enum IoPorts
2
{
3
  A = 0,
4
  B = 1,
5
  C = 2,
6
  D = 3
7
};
8

9
void displayInit() {
10
   
11
  
12
   /*Function Set 8-Bit, 2 zeiliges Display,*/
13
  IOPINS_PinHigh(C, 0); /* Enable - PC0 - 1*/
14
  
15
   IOPINS_PinLow(D, 6); /*RS  - PD5  - 0*/
16
   IOPINS_PinLow(D, 4); /*R/W - PD4  - 0*/
17
   IOPINS_PinLow(A, 6); /*DB7 - PA6  - 0*/
18
   IOPINS_PinLow(A, 5); /*DB6 - PA5  - 0*/
19
   IOPINS_PinHigh(A, 2); /*DB5 - PA2 - 1*/
20
   IOPINS_PinHigh(A, 7); /*DB4 - PA7 - 1*/
21
   IOPINS_PinLow(B, 3); /*DB3 - PB3  - 0*/
22
   IOPINS_PinLow(A, 1); /*DB2 - PA1  - 0*/
23
   IOPINS_PinLow(B, 2); /*DB1 - PB2  - 0*/
24
   IOPINS_PinLow(D, 7); /*DB0 - PD7 - 0*/
25
   
26
  IOPINS_PinLow(C, 0); /* Enable - PC0 - 0*/
Gast #1502458
>   IOPINS_PinLow(A, 6); /*DB7 - PA6  - 0*/
>   IOPINS_PinLow(A, 5); /*DB6 - PA5  - 0*/
>   IOPINS_PinHigh(A, 2); /*DB5 - PA2 - 1*/
>   IOPINS_PinHigh(A, 7); /*DB4 - PA7 - 1*/
>   IOPINS_PinLow(B, 3); /*DB3 - PB3  - 0*/
>   IOPINS_PinLow(A, 1); /*DB2 - PA1  - 0*/
>   IOPINS_PinLow(B, 2); /*DB1 - PB2  - 0*/
>   IOPINS_PinLow(D, 7); /*DB0 - PD7 - 0*/

8 Bit Modus auf drei Ports verteilt!
Sag mal gehts noch? Noch nie was vom 4Bit Modus gehört?

>Wenn ich die Init und das schreiben ohne LCD im Debug modenachmesse kann
>ich die richtigen Pegel messen. Sobald ich das Display angeschlossen
>habe, ist alles nur noch auf High

Dann check deine Schaltung.
#1502779
Auch wenn ich bis jetzt immer noch nicht daran glaube, dass das LCD 
defekt ist, könntest du folgendes probieren.

Nimm einen Widerstand, ich würde mal 1k vorschlagen, und schalte den von 
deinem LCD-Pin nach Masse. Wenn mit dem LCD alles in Ordnung ist, dann 
schafft es der Widerstand leicht den Pin nach Masse zu ziehen. OK, exakt 
0V werdens wahrscheinlich nicht werden, aber nahe genug.

Damit kannst du dich davon überzeugen, ob dir das LCD oder der µC die 
Pegel versaut.

Weiters:
Du verwendest den Port A. Aus der Porgrammierung sieht man, dass es sich 
offenbar um einen AVR handelt. Welcher µC ist das. Bei einigen liegt am 
Port A der ADC und es gibt dann einen Pin AVcc. Hast du an AVcc 
Versorgungsspannung angeschlossen?

> Das Enum ist einfach dazu da, dass man die Ports als Buchstabe
> hat und nicht als Zahl!

Wieso Zahl.
Was ist falsch daran gleich direkt PORTA, PORTB etc zu verwenden?
Gast #1502783
> void displayInit()

Wenn das alles ist was zur Initialisierung deines LCD nötig ist dann ist 
es völlig daneben würde ich sagen.

Hast Du das Datenblatt nicht richtig gelesen?

Solltest vllt. mal das Toturial durchlesen.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.