AVR LCD lib für HD47780 (z.B. Pollin C0802-04)

OP #2287568
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
Angehängte Dateien:
OP
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.
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
OP
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
Gast
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
Angehängte Dateien:
OP
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
Angehängte Dateien:
Gast
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
Gast
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
Angehängte Dateien:
Gast
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
Gast
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?
OP
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
Gast
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...
OP
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
Gast
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?
Gast
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
Gast
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!
Gast
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
Angehängte Dateien:
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
}
Angehängte Dateien:
Persönliche Seite
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 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.