Forum: Compiler & IDEs Mega8, Lcd, Fleury


von A. M. (bacarni) Benutzerseite


Lesenswert?

Hallo,
ich habe mir ein Lcd an den ATMega8 angeschlossen und benutze zur 
Ansteuerung die Lib von Fleury. Allerdings wird leider nichts angezeigt. 
Habe schon im Forum alle möglichen Beiträge zu den Lcds durchgelesen und 
einige Tipps bekommen. Leider hat keiner etwas genutzt. Ich weiß einfach 
nicht mehr weiter und hoffe, dass jmd den Fehler findet.

Das Lcd ist ein Display der Firma Displaytech. Das Modell ist ein 204A. 
Das Datenblatt [1] habe ich auch gefunden und dadurch die Lib von Fleury 
angepasst. Der Mega8 wird extern von einem Quartz (3,8684 MHz) getaktet. 
Auch dies habe ich in der Lib angepasst. Alles leider ohne Erffolg. Habe 
auch ein bisschen probiert, indem ich genau den Takt und zwischen 
HD44780 und KS0073 gewechslte habe. Alles hat leider nichts gebracht. 
Habe die lcd.h mal angehängt zum nachschauen.

Das Lcd ist wie folgt an den ATMega8 angeschlossen:
LCD         ATMega8
  1               GND
  2               5V
  3               Kontrast
  4               PortD(5)
  5               PortD(6)
  6               PortD(7)
 11              PortB(0)
 12              PortB(1)
 13              PortB(2)
 14              PortB(3)

Beim Einschalten des Lcds wird die 1. und 3. Linie dunkel. Lade ich ich 
das Programm in den Mega8, so werden alle 4 Zeilen "angezeigt". 
Allerdings bekomme ich keinen Text auf das Lcd. Ich denke also, dass die 
Initialisierung funktioniert, aber die Daten kommen nicht richtig rüber.



---
[1] http://displaytech.com.hk/pdf/char/204a%20series-v12.PDF

von A. M. (bacarni) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hab ich die lcd.h vergessen anzuhängen und unter bearbeiten will er es 
nicht. Dann halt so.

von Hoschi (Gast)


Lesenswert?

Hihi,

ich hatte ähnliche Probleme. Prüfe Deine HW nochmal durch, ist alles 
richtig angeschlossen?
Ich habe zwei Wochen unbewusst meine RESET-Funktion getestet, und sie 
hat zumindest so gut funktioniert dass das Display (bis auf die beiden 
schwarzen Balken) tot war....
Die Contrast-Spg muss auf ca 1.24V stehen, wenn dieser zu hoch 
eingestellt ist sieht man auch nur die schwarzen Balken...

Hoffe geholfen zu haben...

Hoschi

von A. M. (bacarni) Benutzerseite


Lesenswert?

Das komische ist halt nur, dass das Programm das Display aktiviert. Dass 
also die Balken verschwinden. Am Kontrast habe ich ein Poti sitzen, 
wodurch ich den Kontrast regeln kann. Werde nochmal die HW durchschauen.

von holm (Gast)


Lesenswert?

Das bewußte LCD hat mit Peters Lib bei mir funktioniert, allerdings
hatte es beim Reset irgendwelche Timingprobleme, machmal gins richtig,
manchmal nicht. Das Ding leif an einem ATMEGA16 mit 16MHz, liegt 
momentan
aus Zeitgründen in der Ecke...bin noch nicht fertig damit.

Gruß,

Holm

von A. M. (bacarni) Benutzerseite


Lesenswert?

Bei dir hat es ja wenigstens ein bisschen was gemacht. Zumindest 
manchmal ;) Aber leider scheinst du auch noch keine richtige Lösung 
parat zu haben.

Wenn es wirklich Timingprobleme sind, dann könnte es doch helfen ein 
bisschen mit den Selbigen ein bisschen zu probieren. Ich werd das mal 
versuchen. Mal sehen, was bei rauskommt. Schließlich lief es ja früher 
unter Linux mit lcd4linux.

von Karl H. (kbuchegg)


Lesenswert?

Bei einem meiner Displays ist es so, dass ich noch
dem Reset eine etwas längere Wartezeit einlegen muss,
bevor die Init-Sequenz des Displays losgeht. Anscheinend
braucht der LCD-Controller etwas länger für seinen Reset.

von A. M. (bacarni) Benutzerseite


Lesenswert?

Wie könnte ich diese Wartezeit denn realisieren? Ist diese Wartezeit nur 
beim ersten Start notwendig oder öfters?

von Karl H. (kbuchegg)


Lesenswert?

Meist ist es ja so, dass als erstes im Program
irgendwelche Initialisierungen gemacht werden (Ports,
Timer, etc). Das zieh ich dann vor und mach erst zum
Schluss die LCD Initialisierung. Wenn das nicht reichen
sollte kannst du ja mit _delay_ms noch eine Zeitlang warten.

> Ist diese Wartezeit nur
> beim ersten Start notwendig oder öfters?

Bei mir wars nur nach dem ersten einschalten. Ich sagte
doch: Der Controller scheint nach einem Reset eine zeitlang
zu brauchen, bis er voll da ist.

von Stefan (Gast)


Lesenswert?

> Ich sagte doch: Der Controller scheint nach einem Reset eine zeitlang
> zu brauchen, bis er voll da ist.

Korrekt. Laut Datenblatt Display Seite 6 sind es 15 ms nachdem VDD 4,5 V 
erreicht hat. Laut Datenblatt Controller KS0066U Seite 27 (*) sind es 
sogar 30 ms.

Eine Besonderheit im Datenblatt: Es ist nur ein Flussdiagramm für die 
Initialisierung mit 8-Bit-Interface angegeben. Arnulf hat das LCD 
hardwaremässig so angeschlossen, wie es einem 4-Bit-Interface 
entspricht. Es ist z.B. durch Suche ähnlicher Projekte mit diesem LCD 
bzw. dessen Controller (KS0066U (*) or equiv. NICHT HD44780/KS0073) 
nachzusehen, ob 4-Bit-Interface mit diesem LCD überhaupt funktioniert.

(*) http://www.pacificdisplay.com/ics_app%20notes/samsung/KS0066U.pdf

von Michael U. (Gast)


Lesenswert?

Hallo,

das Datenblatt spricht nicht dagegen, Beispiel ist ja drin.
Allerdings weicht Init merklich vom Verhalten der HD44780 ab.

Gruß aus Berlin
Michael

von A. M. (bacarni) Benutzerseite


Lesenswert?

Michael U. wrote:
> Allerdings weicht Init merklich vom Verhalten der HD44780 ab.

Wie meinst du das? Ich habe mir ein Datenblatt zum HD44780 [1] angesehen 
und speziell den Init-Prozess. Der stimmt überein mit dem im Datenbaltt 
vom 204A. Trotzdem habe ich versucht die Verzögerungszeiten zu ändern. 
Alle raufgesetzt. Leider nicht geholfen. Jetzt weiß ich abolut nicht 
mehr weiter... Laut Datenblatt ist der Init-Prozeß gleich. Also kann das 
Timing doch nicht mehr das Problem sein. Oder schaue ich an der flaschen 
Stelle Michael?

---
[1] http://web.mit.edu/6.115/www/datasheets/44780.pdf

von Michael U. (Gast)


Lesenswert?

Hallo,

ich habe mich nur auf den Post von Stefan bezogen, daß es einen KS0066U 
drauf hat...

In dessen Datenblatt wird für 4 Bit direkt 2x 0x20 gesendet, dann sofort 
die Anzahl Zeilen, dann 39µs warten.

Ein HD44870 besteht dagegen auf seine 0x30 mit Pausen bevor auf 4Bit 
umgeschaltet werden kann.

Die Init-Wartezeit ist beim KS0066U auch mit 30ms doppelt so lang 
angegeben.
Weiter habe ich nicht verglichen, habe keins mit KS0066U zur Hand.

Gruß aus Berlin
Michael

von A. M. (bacarni) Benutzerseite


Lesenswert?

Hmm.... ich sehe schon. Das Datenblatt vom Hersteller des Displays 
weicht vom Datenblatt des Chipherstellers ab.

Dann werd ich mir wohl eine eigene Routine schreiben müssen, um den 
KS0066U in Betrieb nehmen zu können. Ohje, dass kann ja was werden.

von Stefan (Gast)


Lesenswert?

Bevor du dir die Arbeit machst: Kannst du auf der Rückseite vom Display 
erkennen, welcher Controller drauf ist? Oder ist da - wie so oft - ein 
dicker schwarzer Klecks Pampe auf dem IC?

von A. M. (bacarni) Benutzerseite


Lesenswert?

Ein dicker schwarzer Klecks Pampe :(
Drei um genau zu sein.

von Hoschi (Gast)


Lesenswert?

...also ich hab das Display 204B mit nem KS0066U µC von Reichlt und 
benutze die lcd.c und die lcd.h von Fleury ohne Probleme...
Allerdings verwende ich den ATMEGA32...
Fakt ist aber dass das Display ohne eigene Routinen vollständig 
läuft....

von Hoschi (Gast)


Lesenswert?

...hier ist mein Programm...

/*****************************************************************
*Programm zur Ansteuerung der ADC-PORTS PA0-PA7 über einen Poti. *
*Analogwert soll in einen Digitalwert gewandelt. Die Ausgabe des *
*Wertes erfolgt über ein LCD-Display.

#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"
#include <stdio.h>




int main(void)
{
    lcd_init(LCD_DISP_ON);        /*Display einschalten*/
    int result;
    char buffer[6];

  ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2);
                                   /*AD-Wnadler initialisieren mit "|" 
->
                                     "oder-Operator"und die einzelnen 
Bits
                                      zu setzen - die _BV() ist als
                                      Funktion deffiniert*/
  ADMUX = _BV(REFS1) | _BV(REFS0); 
/*AD-Wandler Multiplexregister
                                        initialisieren*/

    for (;;)
    {
      ADCSRA |= _BV(ADSC);
                                     /*AD-Wandler neu
                                       "anstoßem*/

      while (ADCSRA & _BV(ADSC) ) 
/*warten bis die AD-Wandlung fertig
                                       ist*/
      {
      }//end while

      result = ADC; 
/*AD-Wandlungsergebnis aus dem ADC-
                                        Register abholen*/
      itoa(result,buffer,10); 
/*10Bit anpassung des ADC Wertes als
                                        Integer Wert*/
      lcd_gotoxy(0,0); 
/*Cursor auf Display 1. Zeile*/
      lcd_puts("ADC:"); 
/*ADC schreiben*/
      lcd_gotoxy(0,1); 
/*Cursor aus Display 2. Zeile*/
      lcd_puts(buffer); 
/*Wert ausgeben*/
    }//end for
}//end main



Zur Ansteuerung des ADCßs hab ich zum probieren einfach nen Potit 
zwischen VCC und GND geschaltet. Der Abgriff geht dann ohne weiter 
Beschaltung auf PAx.
Wie gesagt, mit dem ATMEGA32 funtzt das Programm.....

Hoschi

von A. M. (bacarni) Benutzerseite


Lesenswert?

Könntest du auch noch die lcd.h anhängen das wäre sehr nett. Dann könnte 
ich die mit meiner vergleichen und anpassen. Vllt. Läuft es dann ja 
wirklich.

Was mir noch eingefallen ist: Es ist doch kein Problem, dass ich Data 
und Control pins an zwei verschiednen Ports habe, oder? In der lcd.h 
habe ich sie richtig eingestellt und in der lcd.c ist ja auch eine if 
Abfrage, wenn Data und Control an verschiedenen Ports liegen.

von Hoschi (Gast)


Angehängte Dateien:

Lesenswert?

...zunächst mal hier die lcd.h.
Prinzipiell ist es kein Problem die pins und ports frei einzustellen, 
wobei der PORTD hier etwas riskant ist. Ich wollte die komplette 
Anteuerung vom Display über PORTD realisieren, leider ging dass nicht. 
Warum allerdings weis ich bis heute noch nicht. Jedenfalls hats mit 
PORTB und den selben Einstellungen (natürlich hab ich den PORT in der 
lcd.h verändert) wunderbar funktioniert....

Hoschi

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.