mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Zeichen auslesen


Autor: Werner Freytag (frewer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
versuche eine ganze Weile schon mein LCD 161 auszulesen. Und zwar geht 
es darum, Zeichen in das LCD Display zu schreiben und zu einem anderen 
Zeitpunkt wieder auszulesen. Das Ganze soll in Assembler für den AT89S51 
geschrieben sein. Ich habe mir selbst eine kleine Bibliothek für das LCD 
geschrieben und kann prima schreiben, Cursor setzen, etc. aber schon 
beim Auslesen der RAM Adresse mit der Busy-Auslese Routine bekomme ich 
zwar Busy low aber stets die Adresse 00h. Beim Auslesen mittels 
RW=1,RS=1 bekomme ich nur Blödsinn. Ich teste in dem ich in die 1. Zeile 
einen Text schreibe, der Cursor wieder nach Home setze, den 1ten 
Buchstaben "A" versuche zu lesen, dann das RAM auf die 2te Zeile setze 
und den gelesenen Buchstaben wieder schreiben. Das Programm gibt den 
Text aus, und schreibt in die 2te Zeile Blödsinn.
Habe meine LCD-Anzeige-Routine angehängt. Das Hauptprogramm ist 
eigentlich ganz einfach:
Die wesentlichen Zeilen:
  acall  LCD_init  ; Initialisieren
  mov     DPTR,#Text1     ; Text zum Ausgeben
  acall  LCD_prints  ; Ausgabe mit 0-Erkennung
  acall  LCD_busy        ; ACtr abfragen
  acall  LCD_printbd     ; dezimal ausgeben (immer 000)
  mov  a,#80h          ; Home
  acall  LCD_com
  acall  LCD_read_data   ; lese DRAM
  mov  r1,a
  mov  a,#C0           ; 2te Zeile
  acall  LCD_com
  mov     a,r1            ; hole Zeichen nach Acc
  acall  LCD_printc      ; gib Zeichen aus
   #include (LCD_Anzeige.inc)

Kann jemand helfen??

mfG
Werner

Autor: Holger S. (holger_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe ein ähnliches Problem, möchte den ungenutzten DD-RAM oder CG-RAM 
als Puffer nutzen...

Wäre schön, wenn hier jemand was schreiben könnte...

MfG
Holger

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja! Vllt. hilft dir das Weiter

Allerdings in 4-Bit Mode. Die Routine liest erst das Highnibble und 
danach  das Lownibble und wird zum Schluss wieder richtig zu einem 
Datenbyte verknüpft.

Auf Busy hab ich verzichtet, weil es nicht Funktionierte und auch 
Blödsinn raus kam. Deshalb ne Verzögerung von 4ms.

; -------------------------------------------------------------
; LCD_GetChar
; -------------------------------------------------------------
; Beschreibung: Liest ein Zeichen von der aktuellen Cursor Position
;               LCD_buffer enthält empfangens Zeichen
; -------------------------------------------------------------
$Region "Ein Zeichen aus dem LCD auslesen"
LCD_GetChar:

   MOV   LCD_Port,#00111111b
   CALL  LCD_Pause_4ms
   SETB  LCD_EN
   MOV   A,LCD_Port
   SWAP  A
   ANL   A,#0F0h
   CLR   LCD_EN
   MOV   LCD_buffer,A
   NOP
   SETB  LCD_EN
   MOV   A,LCD_Port
   ANL   A,#0Fh
   CLR   LCD_EN
   ORL   LCD_buffer,A
   CLR   LCD_RW
   CLR   LCD_RS
RET


MfG
Klaus

Autor: ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wuerd mir das Lesen sparen. Denn dann muss man das Busy auswerten. 
Viel einfacher ist es nur zu schreiben, und zwar timerbasiert.

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich spar's mir auch, im Gegenteil, ich spendiere dem LCD meist noch 
einen Bildschirmspeicher im AVR-SRAM. Das macht die Printroutinen des 
Programms schneller, da nur ins SRAM geschrieben wird, anstatt für jedes 
Byte auf das LCD zu warten. Der Inhalt des Bildschirmspeichers wird dann 
timersynchronisiert byteweise an das LCD geschaufelt.

Die Nutzung des (unsichtbaren) DD- und CG-RAM als zusätzlichen Speicher 
für den AVR habe ich noch nicht ausprobiert, das wäre mir auch aufgrund 
des relativ langsamen LCD-Zugriffs zu langsam. Bisher hat mir der SRAM 
der kleineren AVRs auch immer gereicht. Bzw. der SRAM war für gewisse 
RAM-intensive Projekte (wie PC-kompatible SD-Card, Logger) so arg zu 
klein, dass auch der LCD-RAM nicht weitergeholfen hätte.

...

Autor: Werner Freytag (frewer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag Klaus,

Deine Routine deckt sich eigentlich mit meiner Routine mit Ausnahme der 
Zeitverzögerung. Nun habe ich mit der Busy-Abfrage (nach Tagelangem 
ändern, hab ich jetzt die Lösung gefunden) keine Probleme mehr und die 
Abfrage gibt mittlerweile auch die Adresse des Cursor mit aus. Trotzdem 
klappt die "Ausleserei" immer noch nicht. Als Anhang habe ich die 
geänderte und bzgl Busy jetzt funktionierende LCD_Anzeige.inc angehängt. 
Ich kriege beim Lesen auch was raus, aber einfach nicht das richtige 
Zeichen.

Vielleicht kann doch noch jemand weiterhelfen.

mfG  Werner

Autor: Werner Freytag (frewer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hatte den Anhang vergessen.

mfG  Werner

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.