www.mikrocontroller.net

Forum: Compiler & IDEs LCD-Ansteuerung


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin noch Anfänger auf dem gebiet, bin gerade beim hineinschnuppern. 
Habe ein Problem mit der LCD-Ansteuerung unter GCC.

Habe mir die LCD-Lib von Peter Fleury 
(http://www.mysunrise.ch/users/pfleury/) runtergeladen.
Mein Display habe ich an PORTC vom 4433 gehängt (im 4-Bit-Modus).
Allerdings, wie beim AVR-Tutorial habe ich den RW-Pin des LCDs auf GND 
und nicht an einen PortPin.
In der Lib habe ich den Port geändert, brauche ich ich den RW vom LCD??
denn das Display macht keinen Mux, nur zwei schw. Balken. In dem 
Beispiel vom Tutorial in ASM gehts ohne Probleme....

Kann mir jemand weiterhelfen,
vielen Dank im Voraus...

Gruß Jens

P.S.: Habe den Versuchsaufbau vom Tutorial deshalb geändert (LCD von 
PortD auf PortC, weil ich RS232-Daten auf meinem LCD ausgeben möchte.

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

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich bin zwar auch immer noch ein blutiger anfänger in diesem gebiet 
jedoch habe ich es hingekriegt mein 2x16-lcddisplay anzusteuern.
es ist wie folgt angeschlossen:

PB0 --> D4
PB1 --> D3
PB2 --> D2
PB3 --> D1
PB4 --> RS
PB5 --> RW
PB6 --> EN

es funktioniert zwar noch nicht alles z.b. mit dem positionieren auf der 
ten zeile gibt es noch probleme abr zum initialisieren und zum text 
ausgeben geht's

gruss fab

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,

den RW brauchst Du nicht unbedingt. Es ist dann nur wichtig, lange genug 
zwischen zwei Kommandos zu warten, damit der LCD-Controller sich an den 
Anweisungen nicht verschluckt.

Da es in Assembler geht, wird der Kontrast wohl noch richtig eingestellt 
sein, oder?

Wenn nur zwei schwarze Balken zu sehen sind, liegt der Fehler vermutlich 
in der Routine zur Initialisierung des LCD. Vergleiche doch mal die 
beiden Init-Folgen in ASM und GCC.
Wenn's nicht klappt, bitte nochmal melden, dann such ich meinen 
GCC-Quellcode heraus.

Gruß
Frank

Autor: Axel Schindler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens!

Ich denke auch, dass es an der Initfolge liegt. Hatte am Anfang das 
selbe Problem. Bei mir war die erste Zeile komplett an und die zweite 
aus.
Habe dann einen Zahlenverdreher in der Initfolge festgestellt.

Axel

Autor: Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe seit langen auch das gleiche problem.

Zuerst mit meinem HMPEG, dann über PC und jetzt auch direkt über
den ATMEL. Bis jetzt habe ich 3 verschiedene LCD probiert und keines hat
gefunzt.

Bitte melden wenn ihr das Problem gelöt habt.

PS: ich hätte gerne eure Version die SICHER funktioniert hat.

Danke

DUDE

Autor: Ronald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe für solche Sachen mir mal ein Datenblatt von Conrad gekauft, das 
beinhaltet u.a. folgenden Ablauf:

1. power on
2. warten >15ms
3. Funktionset (der wert hierfür ist bei 4 Bit 0x30)
4. warten > 4.1ms
5. Funktionset (der wert hierfür ist bei 4 Bit 0x30)
6. warten > 100 µs
7. Funktionset (der wert hierfür ist bei 4 Bit 0x30
8. warten > 4.1ms

die befehlsfolge muß !!! 3 mal erfolgen, eineigen LCD reicht eimal auch 
schon aus.

9. Funktionset (der Wert: 0x38 für 2 zeilen und 0x37 für eine Zeile )
10. Display an (der Wert: 0x3C ; 0x3D für blinkenden Cursor)
11. Display löschen (der Wert:0x01)
12. Entry mode set (der Wert:0x05)

Das enable Signal sollte mind. 1ms lang sein, und die Pausen sollten 
eigehalten werden...

Autor: Ronald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das gestern nochmal verifiziert, folgende Ansteuerung sollte 
funktionieren:

LCD               ATMEL
1                   --                 GND
2                   --                 VCC
3                   --                 POTI (1:gnd 2:zum LCD 3:VCC)
4                   PD1              RS    Daten/Befehl
5                   PD2              RW   Lesen/Schrieben
6                   PD3              E      Enable
7                   NC
8                   NC
9                   NC
10                 NC
11                 PB0
12                 PB1
13                 PB2
14                 PB3


Initroutine:

outp(0xff,DDRD);outp(0x00,PORTD);
outp(0xff,DDRB);outp(0x00,PORTB);

cbi(PORTD,PD2); cbi(PORTD,PD2);
outp(0x03,PORTB);enLCD();delay(15);
outp(0x03,PORTB);enLCD();delay(4);
outp(0x03,PORTB);enLCD();delay(1);
outp(0x02,PORTB);enLCD();
outp(0x02,PORTB);enLCD();outp(0x08,PORTB);enLCD();
outp(0x00,PORTB);enLCD();outp(0x0d,PORTB);enLCD();
outp(0x00,PORTB);enLCD();outp(0x01,PORTB);enLCD();


die Enable Routine:
------------------------

void enlcd(void)
{delay(1);sbi(PORTD, PD3);delay(2);cbi(PORTD, PD3);delay(2);}


die Delayroutine:
---------------------

void delay (unsigned short count)
{for(; count !=0 ; 
count--){timer0_stop();timer0_source(CK1024);timer0_start();while( 
inp(TCNT0) < 9 ){}}timer0_stop();}


für das Delay muß "timer.h" eingebunden werden.
Atmel: AT90S8515
LCD:   Displaytech 204 A von Reichelt Elektronik (4*20)

Autor: Ronald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kleine Korrektur

void enLCD (void)

Gross / Kleinschreibung!!!!!!!!

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.