www.mikrocontroller.net

Forum: Compiler & IDEs Problem LCD 2x8 Zeichen


Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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! :-(

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm die Schaltungsvariante aus dem Tutorial, die ist bewährt.

Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
:-((

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alex (Gast)
Datum:

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

Autor: Peter Fleury (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/g...

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

Autor: Hubert.G (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter

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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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     */

Autor: Nicole (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.