Forum: Mikrocontroller und Digitale Elektronik Character LCD für AVRs mit 4bit Bus


von Johannes A. (Gast)


Angehängte Dateien:

Lesenswert?

Für alle

von Fabian Knapp (Gast)


Lesenswert?

das müsste in die codesammlung... warum amchst du eigentlich keinen
einfachen busycheck anstatt da immer mit den delays rumzumachen?

von Johannes A. (Gast)


Lesenswert?

Sorry, das Posting war etwas sehr knapp - Panne meinerseits.

Also: Das Teil läuft jetzt seit fast 4 1/2 Jahren problemlos auf nem
AVR mit 4MHz. Für höhere Taktraten sind die die "pause" Settings
anzupassen:

z.B. für 8MHz
pause40us_  = (80-5)
pause2ms_   = (4000-5)
pause50ms_  = (100000-5)

oder für 16MHz
pause40us_  = (160-5)
pause2ms_   = (8000-5)
pause50ms_  = (200000-5)

Und natürlich müssen die Port-Zuweisungen für die Controls und
4bit-Daten

LCD_rs_   = (PORTC<<8) + 1
LCD_rsd_ = (DDRC<<8) + 1
LCD_e_   = (PORTC<<8) + 3
LCD_ed_   = (DDRC<<8) + 3
LCD_wr_  = (PORTC<<8) + 2
LCD_wrd_ = (DDRC<<8) + 2
;
LCDdout = PORTC
LCDdin  = PINC
LCDddr  = DDRC

auf die jeweils verwendeten angepasst werden. Das heißt auch, wenn die
Datenbusbits für das LCD dann auf den Bits 0..3 landen statt auf 4..7,
muss natürlich auch der swap-Befehl in LCD_put8b entsprechend umgerückt
werden.

Ich hoffe, das hilft >1 "Wie geht LCD"-Frager.

Gruß Johannes

P.S.1: Die Funktionen taugen für 2- und 4-zeilige Displays.
P.S.2: Die unbenutzen Datenbuspins des LCD sind offen.

von Johannes A. (Gast)


Lesenswert?

Fabian, der Busy-Check funktioniert während der Init eh nicht.
Das steht auch in (besseren) Datenblättern.

Gruß Johannes

von Benedikt W. (Gast)


Lesenswert?

das  .include "aio8515.s" ist für deinen avr nehme ich an.
wozu ist .area text ? kannste das auch noch hochladen ?

und noch eine frage was hat es mit den auskommentierten befehen
_LCDinit::
;  cbi    >LCD_e_,<LCD_e_
  sbi    >LCD_ed_,<LCD_ed_
;  cbi    >LCD_wr_,<LCD_wr_
  sbi    >LCD_wrd_,<LCD_wrd_
;  cbi    >LCD_rs_,<LCD_rs_
  sbi    >LCD_rsd_,<LCD_rsd_

auch sich ?

von Johannes A. (Gast)


Lesenswert?

Ich vergaß dazuzuschreiben, dass der Code für den Assembler vom
Imagecraft C-Copiler ist...

Ja, das .include bindet die I/O Definitionen ein.
Das .area text entpricht der CSEG Direktive beim Atmel Assembler,
und die > und < "high" und "low".
Ansonsten stören den Atmel Asm noch die doppelten Doppelpunkte hinter
einigen Labels, mit denen beim Imagecraft Asm globale Funktionen
definiert werden.

Und die auskommentierten Befehle in der init? Hm, weiß ich echt nicht
mehr, warum ich die damals auskommentiert hatte... Störte jedenfalls
nicht, und wird wohl auch nicht stören, wenn Du sie wieder aktivierst.

Gruß Johannes

von Benedikt W. (Gast)


Lesenswert?

mein lcd geht endlich. der fehler lag wohl am timing und daran das der
befehl für font und format fehlten. nach 10 mal strom an und aus gings,
fragt nicht warum !? ^^
danke für die hilfe

grüße g1o

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.