Forum: Compiler & IDEs Problem LCD 2x8 Zeichen


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
ich habe ein Problem mit meinem 2x8 Zeichen LCD (EA DIPS082-HNLED),
laut Datenblatt bestückt mit einem KS0066 Kontroller der HD 44780
kompatibel sein soll.

Anschlussbelegung:

ATmega8 @4MHz
PORTC

LCD                µC

 1-GND
 2-+5V
 3-Kontrast
 4-RS------------->PC4
 5-R/W------------>PC5
 6-E-------------->PC6
 7-D0----->GND
 8-D1----->GND
 9-D2----->GND
10-D3----->GND
11-D4------------->PC0
12-D5------------->PC1
13-D6------------->PC2
14-D7------------->PC3

Als Anhang hab ich die lcd.c beigefügt.
Das Display reagiert kein bisschen, nur in der ersten Reihe sind alle
Dots zu sehen.
Wer hat Erfahrung mit dem ATmega8, kann es Probleme geben weil PC6 auch
gleich Reset (liegt auf High) ist?
Wenn ich den PORTB nehme liegt PB6 und PB7 am externen Quarz, kann es
auch da zu Komplikationen kommen?

Hier mein Programm zum Testen des LCD:

#include <avr/io.h>
#include <lcd.h>
#include <lcd.c>
#include <stdint.h>
#include <stdlib.h>
#include <avr/delay.h>



int main(void){

  DDRB = 0xFF;  //Ausgang
  DDRC = 0xFF;  //Ausgang


  lcd_init(LCD_DISP_ON_CURSOR_BLINK);
  lcd_home();
  lcd_puts("Test");
  PORTB |= (1<<PB0);                //Zum test eine LED leuchten lassen
  while(1);
  }

Die LED leuchtet aber das LCD zeigt nichts an! :-(

von Alex (Gast)


Lesenswert?

Nimm die Schaltungsvariante aus dem Tutorial, die ist bewährt.

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Die Schaltungsvariante aus dem Toturial bringt mir auch nicht viel, ist
ja so gut wie die selbe.
Ich denke irgendwas mit der lcd.h stimmt nicht. Was bedeutet eigentlich
'LCD_LINE_LENGTH'?
Die DDRAM Adressen der zwei Zeilen hab ich überprüft und müssten
stimmen. (siehe Anhang)

von Steffen (Gast)


Lesenswert?

Komisch,
als ich eben meine Schaltung wieder in Betrieb nehmen wollte (Seit
gestern nichts mehr gemacht), musste ich feststellen dass die LED nicht
mehr leuchtet! Ich habe nichts verändert. Daraufhin habe ich das
Programm noch etwas verkürtzt:

int main(void){

  DDRB = 0xFF;  //Ausgang
  DDRC = 0xFF;  //Ausgang


  lcd_init(LCD_DISP_ON_CURSOR_BLINK);

  //lcd_home();
  //lcd_puts("Test");
  PORTB |= (1<<PB0);
  while(1);
  }

Das Resultat war das selbe, die LED leuchtet nicht mehr! Logisch
gesehen muss das Programm davor hhängen bleiben! Aber wieso?
Hab ich irgendwas übersehen?

von Steffen (Gast)


Lesenswert?

So etwas verhextes, das mit der LED war wohl ein Kontakt Problem. Jetzt
geht sie wieder an aber das LCD reagiert immer noch nicht!
:-((

von Hubert.G (Gast)


Lesenswert?

Wenn du PC6 verwenden willst must du Reset disablen, dann kannst du aber
nicht mehr ISP sondern nur mehr High-Voltage programmieren.
PB 6 und 7 kannst du verwenden wenn du den internen Oszillator nimmst,
dann sind das normale I/O.

von Steffen (Gast)


Lesenswert?

Hmm,
der interne Oszillator soll doch nicht so genau sein, oder irre ich
mich?
Irgendwie ist der ATmega8 vom Pinout nicht so toll geplant.
Kennst du dich etwas mit LCD's und der Library von Peter Fleury aus?

von Steffen (Gast)


Lesenswert?

Juhu ich hab den Fehler gefunden! Es liegt tatsächlich an den Ports und
deren doppelte Belegung. Ich habe das Display mal an PortD
angeschlossen und die lcd.h auf PORTD umgeschrieben. Damit funktioniert
es einwandfrei.
So kann ich es nicht belassen, ich muss die Ansteuerung wahrscheinlich
auf zwei Ports aufteilen. Aber wie genau muss ich das in der lcd.h
eintragen?

von Alex (Gast)


Lesenswert?

Garnicht! Da kannst du die halbe Bibliothek umschreiben oder gleich nen
größeren Controller verwenden. Alternativ einen Portexpander verwenden,
wird aber noch aufwendiger.

von Peter Fleury (Gast)


Lesenswert?

Falsch Alex !

Meine Lib kann sehr wohl auf so konfiguriert werden, dass die LCD
Leitungen auf verschiedene Ports aufgeteilt werden.

Steht doch in der Beschreibung meiner LCD lib:
http://homepage.sunrise.ch/mysunrise/peterfleury/group__pfleury__lcd.html

Bitte akutelle Version meiner Lib verwenden, oben angefügtes lcd.h ist
veraltet !

von Hubert.G (Gast)


Lesenswert?

Nach der lcd.h ist das kein Problem. Steht über den #define
Anweisungen.
Jedem Pin den entsprechenden Port zuweisen.

von Alex (Gast)


Lesenswert?

@Peter

Sorry, muss wohl mal wieder ein Update durchführen. Benutze wohl
aktuell nur ältere Versionen der Library.

von Steffen (Gast)


Lesenswert?

Also würde das ganze z.B. so aussehen!?

#define LCD_PORT         PORTB        /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    0            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    1            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    2            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    3            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       4            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       5            /**< pin  for RW line         */
#define LCD_E_PORT       PORTD     /**< port for Enable line     */
#define LCD_E_PIN        7         /**< pin  for Enable line     */

von Nicole (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe eine Problem bei meinem LCD EA DIPS082-HNLED 2x8 Zeichen.

Ich möchte gerne die Hintergrundbeleuchtung extern mit einem Poti 
steuern. Wie muss ich dies machen? Im Datenblatt ist dies beschrieben 
jedoch weiss ich nicht genau wie. Im Datenblatt LED-Beleuchtung steht 
von einem Vorwiderstand RLED doch auf der Rückseite des LCD steht nur R1 
bis R5 und Rosc. Welchen Widerstand muss ich jetzt auslöten?

von Karl H. (kbuchegg)


Lesenswert?

Nicole wrote:
> Ich habe eine Problem bei meinem LCD EA DIPS082-HNLED 2x8 Zeichen.
>

Bitte hijacke keinen so alten Thread.
Das Thema dieses Originalthreads hat ausser der Display-Bezeichnung
mit deinem Problem nicht das Geringste zu tun.

> Ich möchte gerne die Hintergrundbeleuchtung extern mit einem Poti
> steuern. Wie muss ich dies machen? Im Datenblatt ist dies beschrieben
> jedoch weiss ich nicht genau wie.

Mit einem Poti.
Den Abgreifer des Potis legst du auf + der Displaybeleuchtung.
Die anderen beiden Poti Pins kommen nach + und nach -
Das ist die Minimalvariante. Nicht besonders sicher, wenn du
das Poti an den + Endausschlag stellst, kann es sein, dass
Rauchwölkchen aufsteigen. Also zwischen Abgreifer und dem
+ der Displaybeleuchtung noch einen Widerstand einfügen.


   o------------+
                |
               ---
          Poti | |    +-----+
             <--------|     |-----o  + Displaybeleuchtung
               | |    +-----+
               ---       R
                |
   o------------+-----------------o  - Displaybeleuchtung

> Im Datenblatt LED-Beleuchtung steht
> von einem Vorwiderstand RLED doch auf der Rückseite des LCD steht nur R1
> bis R5 und Rosc. Welchen Widerstand muss ich jetzt auslöten?

Meist muss man gar keinen Widerstand auslöten.

Für das Poti nimmst du probehalber mal 200 Ohm (ist im
Datenblatt was angegeben, welchen Strom die Beleuchtung
maximal verträgt? Wenn ja, dann rechnest du dir darüber
den Poti Wert aus). Für den zusätzlichen Widerstand
würde ich auch mal mit so um die 100 Ohm beginnen und
ev. kleiner gehen, solange bis das Display schön hell,
aber nicht zu hell leuchtet.

Ich weiss nicht warum Andreas seinen Beitrag zurückgezogen
hat. Aber er hat schon recht: Ein per Software dimmbare
LCD Hintergrundbeleuchtung hat schon was. Dazu braucht
man lediglich eine PWM, einen Transistor und einen Widerstand
und natürlich einen freien Pin am Prozessor.
Aber dann kann man die Helligkeit per Programm einstellen.
Macht man das ganze dann noch interaktiv, mit 2 Tastern die
man sowieso für sein Bedienteil braucht, dann sieht das schon
richtig gut aus und ist obendrein noch simpler im Gehäusebau.

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.