Forum: Projekte & Code AVR LCD lib für HD47780 (z.B. Pollin C0802-04)


von Cyblord -. (cyblord)


Angehängte Dateien:

Lesenswert?

Diese lib soll HD47780 Kompatible Displays im 4-Bit Modus ansteuern.
Sie wurde von mir entwickelt um das Pollin C0802-04 LCD anzusteuern. 
Dieses hat eine Besonderheit bei der initalisierung. Deshalb kann dieses 
LCD per #define in der lcd_config.h ausgewählt werden.Ohne diese 
Optionen sollten aber auch alle anderen Displays funktionieren. Auch 
HD44780 kompatible u.a.
In der lcd_config.h können alle Einstellungen vorgenommen werden. Alle 
Leitungen können separat angegeben werden. Lediglich müssen alle 
Datenleitungen auf demselben Port, und alle Control-Leitungen auf 
demselben Port sein. Wo möglich wird das Busy-Flag ausgewertet, statt 
feste Delays zu verwenden.

gruß cyblord

von holger (Gast)


Lesenswert?

>Diese lib soll HD47780 Kompatible Displays im 4-Bit Modus ansteuern.

Kannste knicken den Schrott. Das funktioniert nicht.

von Cyblord -. (cyblord)


Lesenswert?

Ja, wie dumm von mir. Bei mir ist sie im Einsatz und geht perfekt. Mit 
welchem Display hast du Profi es denn versucht? Wie schon geschrieben, 
die lib ist für das Pollin LCD C0802-04. Und damit geht die Perfekt. 
Angegeben ist dieses LCD als Kompatibel zu HD47780. Obs stimmt weiß ich 
nicht.
Für alles andere gibts genug andere libs.

von Dieter W. (detewe)


Lesenswert?

Hallo Julian !

Ich habe Deinen Betrag über die suche nach einer Info zum
LCD Modul von Pollin gefunden , ich möchte dieses Display für meine 
Modellbahn anwenden , nun habe ich ein Problem mit der  Hardware d.h. 
ich habe keine Schaltung die mir eine Inbetriebnahme ermöglicht .
Kannst du mir eine Info zukommen lassen.
 Danke im voraus
 detewe

von Cyblord -. (cyblord)


Lesenswert?

Eine "Schaltung" braucht es für den Betrieb nicht. Das Display besitzt 
4+3 Datenleitungen, welche direkt an die IO Pins eines Microcontrollers 
angeschlossen werden können. Welche Leitung an welchen Pin geht, wird 
über die #defines in der Header Datei angegeben.

gruß cyblord

von smithjnr (Gast)


Angehängte Dateien:

Lesenswert?

Die Frage nach der Schaltung zeigt doch, dass etwas Hilfe benötigt wird. 
Die angehängte Schaltung soll nur das Prinzip darstellen. Wichtig ist, 
wie schon oben erwähnt, dass das LCD nur mit 5V und nicht weniger 
funktioniert. Es kann aber über ein 3Volt-Controller angesteuert werden.
RW und V0 habe ich für Tests auf GND gelegt.

Das LCD hat gegenüber anderen LCDs keine Besonderheiten. Die oben 
erwähnte "Besonderheit" ist keine. Das LCD wird über das #define nur auf 
den 4-Bit_Modus eingestellt. Das wird aber bei anderen LCDs genau so 
gemacht.

Ich betreibe verschieden LCDs parallel oder über I2C mit einer eigenen 
Bibliothek. Das POLLIN LCD hat sofort funktioniert.
Ich verwende sehr gerne das Launchpad von TexasInstuments für unter 5 
Euro.  Das Board enthält eine vollständiger Programmiereinheit und die 
gesamte Entwicklungs-Software ist kostenlos.
http://www.watterott.com/de/MSP430-LaunchPad-MSP-EXP430G2
Weitere, größere MSP430, kann man als kostenlose Muster bei TI 
bestellen. Aktuell setze ich den MSP430G2553 ein.
Grüße smithjnr

von Cyblord -. (cyblord)


Angehängte Dateien:

Lesenswert?

Update und Bugfixes für den LCD Code. Vorallem der Warm-Reset sollte 
damit zuverlässiger funktionieren. Timings verbessert.

> Das LCD hat gegenüber anderen LCDs keine Besonderheiten. Die oben
> erwähnte "Besonderheit" ist keine. Das LCD wird über das #define nur auf
> den 4-Bit_Modus eingestellt. Das wird aber bei anderen LCDs genau so
> gemacht.

JEIN ;-) Eine gute LCD lib funktioniert mit dem Pollin LCD ebenfalls. 
Das ist richtig. Aber es gibt im Netz viele Libs, welche mit "normalen" 
LCDs auch im 4 Bit Modus gut funktionieren, aber beim Pollin LCD 
streiken. Und zwar dann wenn die 4 Bit initialisierung schlampig gemacht 
wird.
Siehe auch den Thread im Forum zum Thema Pollin LCD. Da wird von vielen 
Problemen berichtet.

gruß cyblord

von Peter D. (peda)


Lesenswert?

Warum benutzt Du nicht einfach die standard Initialisierung, wie sie im 
HD47780-Datenblatt steht.
Probleme mit dem LCD haben ausschließlich die, die das nicht tun.


Peter

von Cyblord -. (cyblord)


Lesenswert?

Peter Dannegger schrieb:
> Warum benutzt Du nicht einfach die standard Initialisierung, wie sie im
> HD47780-Datenblatt steht.
Mach ich.

> Probleme mit dem LCD haben ausschließlich die, die das nicht tun.
Hab aber keine Probleme. Danke.

gruß cyblord

von Florentin Deutinger (Gast)


Lesenswert?

Danke für das hochladen, würde das Display auch gern auch mit Atmel uP 
ansteuern (ATTINY2313)
Da ich noch in Asembler Programmiere (AVR Studio5), gibts dafür auch nen 
beispiel Code?
Danke im Vorraus

von ingo (Gast)


Angehängte Dateien:

Lesenswert?

Florentin Deutinger schrieb:
> Danke für das hochladen, würde das Display auch gern auch mit Atmel uP
> ansteuern (ATTINY2313)
> Da ich noch in Asembler Programmiere (AVR Studio5), gibts dafür auch nen
> beispiel Code?
> Danke im Vorraus

Habe das Display in der Anwendung, an einem Mega48, sollte sich 
problemlos an den Tiny anpassen lassen, die 4 Datenleitungen sollten 
zusammenhängen, die Anderen können verteilt sein.
mfG ingo

von Florentin Deutinger (Gast)


Lesenswert?

wird wohl etwas umbauarbeit und einiges vom Speicher benötigen, aber 
danke fürs hochladen. p.s. der Tiny hat eh bei einem Port alle 8 
Datenleitungen rausgeführt

von Peter K. (Gast)


Lesenswert?

Die Lib funktioniert auf anhieb super bei mir, danke!
Nur ein Problem hab ich: etwa bei jedem zweiten reset (nur der µC wird 
resettet, das Display behält seine Spannung) wird nur die obere Zeile 
mit schwarzen blöcken angezeigt. Beim Kaltstart (gerade den Strom 
eingeschaltet) gehts immer sofort.
In den schwarzen blöcken kann man bei genauem hinsehen sogar ganz leicht 
den Text erkennen... woran liegt sowas? hattet ihr das auch mal?

von Cyblord -. (cyblord)


Lesenswert?

Peter K. schrieb:
> Die Lib funktioniert auf anhieb super bei mir, danke!
> Nur ein Problem hab ich: etwa bei jedem zweiten reset (nur der µC wird
> resettet, das Display behält seine Spannung) wird nur die obere Zeile
> mit schwarzen blöcken angezeigt. Beim Kaltstart (gerade den Strom
> eingeschaltet) gehts immer sofort.
> In den schwarzen blöcken kann man bei genauem hinsehen sogar ganz leicht
> den Text erkennen... woran liegt sowas? hattet ihr das auch mal?

Ich habe ein update der lib hochgeladen. Einfach bisschen 
runterscrollen. Hast du das gesehen? Dieses soll genau diese init 
Problem verhindern.

gruß
cyblord

von Peter K. (Gast)


Lesenswert?

Ja, hatte ich gesehen, das ist auch die Version die ich verwendet habe. 
Vielleicht stimmen die Timings bei einem 32Mhz atxmega µC nicht mehr?

von Peter K. (Gast)


Lesenswert?

also, ich habe jetzt schon einiges an den timings gespielt, aber der 
Warmstart funktioniert immernoch nicht richtig. kann es sein dass das 
display kaputt ist? oder dass die pin konfiguration in der config einen 
fehler hat? mir fällt langsam keine andere Lösung mehr ein...

von Cyblord -. (cyblord)


Lesenswert?

Peter K. schrieb:
> also, ich habe jetzt schon einiges an den timings gespielt, aber der
> Warmstart funktioniert immernoch nicht richtig. kann es sein dass das
> display kaputt ist? oder dass die pin konfiguration in der config einen
> fehler hat? mir fällt langsam keine andere Lösung mehr ein...

Schwierig, seit dem Update funktioniert bei mir der Warmstart (µC Reset 
aber Display und restliche Schaltung behalten ihre Spannung) ohne 
Probleme.

Die Timings sollten unabhängig vom Controller sein, stützen sich ja auf 
die delay Funktionen und wenn dort F_CPU korrekt gesetzt ist müsste 
das bei jedem AVR gehen.

gruß cyblord

von Peter K. (Gast)


Lesenswert?

gut, die delay funktion funktioniert korrekt bei mir. Könntest du dir 
vorstellen, das einer der Pins falsch angeschlossen oder konfiguriert 
ist und das ding dann alles macht bis auf den warmstart?
das problem tritt immer auf, wenn ich den reset button drücke oder neu 
flashe.
kann es daran liegen, dass bei mir die display stromversorgung seperat 
läuft und deshalb das display seine versorgungsspannung auch bei einem 
reset behält?

von Soulsurfer (Gast)


Lesenswert?

Moin Moin Peter K.,

ich hatte auch das Problem, dass beim Warmstart (µC Reset) das Display 
nicht sauber initialisiert wurde (nur einzeilig, Schrift auf schwarzem 
Grund).

In anderen HD47780-Libs wird bei der Initialisierung der 8-bit-Mode 3x 
gesendet und dann einmal der 4-bit-Mode. Wenn man das in der "lcd_init" 
Routine von cyblord anpasst, klappt bei mir auch der Warmstart des 
Displays.

...
#ifdef C080204
  sendNibble(0x3); //8-Bit Mode (DL=0)
  _delay_ms(1);
  sendNibble(0x3); //8-Bit Mode (DL=0)
  _delay_ms(1);
  sendNibble(0x3); //8-Bit Mode (DL=0)
  _delay_ms(1);
  sendNibble(0x2); //4-Bit Mode (DL=0)
  _delay_ms(1);
#endif
...


Gruß,
Soulsurfer

von tt2t (Gast)


Lesenswert?

Die Initialiserungsroutine von cyblord ist nicht richtig. Es MUSS dabei 
3x der 8-bit-Modus eingestellt werden werden und danach 1x der 
4-bit-Modus, cyblord initialisiert aber nur 1x den 8-bit-Modus.

Warum 3x ??? Das steht hier: 
Beitrag "Sind LCDs taub und müssen alles dreimal gesagt kriegen?"

von mak (Gast)


Lesenswert?

Hallo,

@smithjnr: Wäre es möglich, Beispiel-Code für den MSP zur Verfügung zu 
stellen? Ich hab ein LauchPad (G2121 u.a.) zur Verfügung und möchte 
genau das LCD-Modul C0802-04 von Pollin ansteuern... Gibt es für die 
MSP-Plattform ev. eine Bibliothek?
Vielen Dank!

von Joachim .. (joachim_01)


Lesenswert?

> Gibt es für die MSP-Plattform ev. eine Bibliothek?
http://www.mathar.com/msp_lcd1.html

von P. Rebesky (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir auch dieses LCD-Display von pollin C0802-04 zugelegt, weil 
es preiswert zu haben war. Um dieses anzusteuern habe ich mir ein paar 
kleine Assemblerfunktionen geschrieben. Und das passt genau in diesen 
Treat.
Diese Bibliothek wird einfach mit eingebunden, fclock und Pins anpassen 
und dann sollte die funktionieren. Bei mir läuft das LCD an einem 
ATtiny2313, welche als Uhr programmiert ist. Das ganze soll eine 
Schaltuhr werden, womit nach Astrozeit (Sonnenauf- und untergang) etwas 
gesteuert wird.
Ein Testbild habe ich mit angehängt.

mfg
Peter

von Lars L. (vertigo)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hier auch das Display und die Lib von cyblord ausprobiert aber 
bei mir spuckt das Display nur seltsame Zeichen aus. Das kleine "o" wird 
halbwegs richtig dargestellt aber der Rest funktioniert garnicht, mit 
der zweiten Zeile ist das selbe Problem.
1
int main() {
2
  _delay_ms(500);
3
  lcd_init();
4
  _delay_ms(500);
5
6
  lcd_print("oooo");
7
  _delay_ms(1000);
8
  lcd_clear();
9
  lcd_print("oooo");
10
  //lcd_goto(2,0);
11
  //lcd_print("welt");
12
  return 0;
13
}

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

smithjnr schrieb:
> Ich betreibe verschieden LCDs parallel oder über I2C mit einer eigenen
> Bibliothek. Das POLLIN LCD hat sofort funktioniert.

Hallo Smith Junior,

Leider habe ich erst eben Deinen Beitrag über die Google-Bildersuche 
gefunden. Mein aktueller Aufbau sieht fast genau so aus, wie auf Deinem 
Foto. ;-)

Ich möchte mir auch eine Bibliothek für verschiedene LCDs für das 
Launchpad (bzw. für den zweiten mitgelieferten MSP430G2452) aufbauen. 
Wenn Du mir Deine geben könntest, muss ich nicht "bei Null" anfangen. 
Aktuell fange ich auch mit dem Pollin-LCD für 0,95€ an. Aber es sollen 
noch Taster, LEDs und evt. ein Dreh-Drück-Knopf dran. Ich habe davon 
noch 'ne Tüte voll rum liegen.

Was mich nun noch beschäftigt ist die Frage, wie sich die Controller 
untereinander auf der ISO/OSI-Schicht 6 unterhalten, siehe
Beitrag "Protokolle zwischen Controllern"

VG Torsten

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.