www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Display "abhören"


Autor: Malte Ibs (maltomat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte das LCD Display eines (bereits vorhandenen) Gerätes mit
einem ATMega "abhören", also die gerade dargestellten Zeichen
auslesen und über die serielle Schnittstelle weiterleiten. Ich kann
alle Anschlüsse des Displays (Hitachi, 20 Zeichen, eine Zeile, also
Standard) anzapfen. Die Datenleitungen kommen natürlich an einen Port,
aber was ist mit den Anschlüssen Enable, R/W und RS, wie ist da das
Timing? Kann man sowas in der Art sagen wie: wenn RS runter geht liegt
gerade ein gültiges Zeichen am Datenbus an?
Sorry für die Frage, ich könnte das auch durch ausprobieren oder
studieren der entsprechenden Unterlagen rauskriegen. Wenn einer aber
eine schnelle Antwort weiss, würde mir das viel Arbeit ersparen.

Danke schon mal!

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze RS durch Enable und "runter geht" durch "high ist" und dann
dürfte deine Aussage bei den meisten LCDs stimmen (Daten werden meist
gelesen, sobald Enable von high auf low geht). Sicherheit verschafft
hier das Datenblatt zu dem LCD-Controller.

Autor: Malte Ibs (maltomat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, also jedesmal wen Enable high liegt am Datenbus gerade ein neues
Zeichen an? Werde ich mal ausprobieren.
Danke!

Autor: Malte Ibs (maltomat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht leider nicht. Ich habe Enable auf INT1 gelegt, dann werden Daten
eingetaktet, allerdings nur Müll. Habe sowohl auf steigende und
fallende Flanke versucht zu triggern, verschiedene Delays eingebaut
aber immer kommen nur wirre Zeichen. Hat jemand ne Idee???

Autor: Andreas Watterott (andreasw) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das LCD vielleicht im 4-Bit-Modus verwendet?

Autor: Malte Ibs (maltomat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gerade auch schon dran gedacht. Aber dann müssten sich
wenigstens irgendwelche Regelmässigkeiten erkennen lassen. Am Display
wird zB. die Zeit angezeigt und jede Sekunde aktualisiert. Dabei ändert
sich meistens ja nur eine Stelle (die Sekunde), die anderen bleiben
gleich. Die ausgelesenen Daten ändern sich aber immer komplett (beide
Nibbles aller Zeichen).

Hier die entscheidenen Code Fragmente. Ist das alles richtig so?


PORTC=0x00; DDRC=0x00;
GIMSK |= (1 << 7);      //enable INT1
MCUCR |= (1 << 3);  //fallende
MCUCR |= (1 << 2);  //Flanke
sei ();

ISR (INT1_vect)  //Display
{
  data[cnt] = PINC;
  cnt++;
}

main: wenn cnt>15 sende data über UART, cnt=0

Autor: RAM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise ist die Reaktionszeit einfach zu langsam. Wenn Deine
Interruptroutine aufgerufen wird, sind die mit der steigenden Flanke
von E angelegten Daten schon längst wieder ungültig ...

Das 6800-Interface sieht E als Taktsignal mit einer Frequenz von
üblicherweise 1 MHz. Alle Busaktivitäten geschehen innerhalb eines
Taktzyklus, sowohl ein Schreib-, als auch ein Lesezugriff. Die
eigentliche Datenübertragungsphase geschieht in der Halbperiode des
E-Taktes, wenn E high ist.

Dein AVR müsste es demnach schaffen, innerhalb von weniger als 500 ns
nach der steigenden Flanke von E den Datenbus abzufragen.
Das mag möglich sein, wenn Du die Interruptroutine in Assembler
codierst, aber bei einer in C geschriebenen Routine bezweifle ich
dies.

Obendrein liegen nicht mit jeder Flanke von E gültige Daten an (wenn es
eine echte Implementierung des 6800-Busses ist), das ist, wie eingangs
schon erwähnt ein durchlaufender Takt.
Als Triggererignis solltest Du eine Verknüpfung aus E und /CS
verwenden.

Autor: Malte Ibs (maltomat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@RAM

Das hört sich interessant an. Bei dem gleichen Gerät zapfe ich nämlich
an anderer Stelle einen anderen Bus an, was zunächst auch nicht
funktionierte. Ich habe dort dann 74HC374 verwendet, um die Daten
hardwareseitig "zwischenzuspeichern", erfolgreich. Fälschlicherweise
dachte ich, dass dies bei nem ollen Display nicht nötig wäre...

Kannst du mir bitte noch erklären, wie ich das mit der Verknüpfung aus
E und C/S machen kann. C/S gibts bei mir nicht. Danke.


PS: im Kommentar zum Code muss en natürlich heissen: steigende Flanke

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.