Forum: Mikrocontroller und Digitale Elektronik LCD Zeichen auslesen


von Werner F. (frewer)


Angehängte Dateien:

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

von Holger S. (holger_s)


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

von Klaus (Gast)


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

von ??? (Gast)


Lesenswert?

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

von Hannes Lux (Gast)


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.

...

von Werner F. (frewer)


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

von Werner F. (frewer)


Angehängte Dateien:

Lesenswert?

Sorry, hatte den Anhang vergessen.

mfG  Werner

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.