PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD-Libary für Reichelt LCDs in ASM (AVR)



teslanikola
23.04.2006, 16:37
Hallo Leute,
nach Stunden von Hirn- und Programmierarbeit sit sie nun endlich fertig:

Meine AVR-ASM-Reichelt-LCD-Libary!!!!!!

Die Libary hängt man einfach mit .include an seine ASM an und schon kann man sie benutzen.


Die Befehle:

lcdinit: Initialisiert das LCD und löscht es anschließend

lcd_out: Sendet ASCI-Bytes an das LCD

lcd_com: Sendet Steuerbefehle an das LCD

lcd_cls: Löscht daas komplette LCD


Benutzte Register:

1. tmp
2. tmp2
3. tmp3

Alle verwendeten Register sind frei zuweisbar, müssen aber oberhalb des r15 liegen.
Das Register tmp ist das Übergaberigister für ASCII-Werte und Steuerbefehle!!


Benutzter Port:

Der Port zum Anschluß des LCDs kann frei gewählt werden, er muss aber mindestens 6Pins haben ( Von PinX.0- PinX.5 )
Der verwendete Port wird mit .equ lcd_port = portX zugewiesen.


Die Belegung des Ports:

lcd_port.0 = DB4
lcd_port.1 = DB5
lcd_port.2 = DB6
lcd_port.3 = DB7
lcd_port.4 = RS
lcd_port.4 = EN


Ich habe die gesammte Lib großzügig komentiert, was änderungen und verständnis erleichtern soll.

Nun wünsche ich euch viel Freude mit meiner Lib, ich hoffe ihr könnt sie gebrauchen.

Fragen, Kritik, Lob und Erfolgreiche Testergebnisse sind erwünscht.

pumann
23.04.2006, 18:03
... mit dieser bzw. Deiner Display/µC-Kombination funktioniert es, jedoch wäre mir es viel zu mühsam, sämtliche Stellen im Quellcode abzusuchen, an denen ich das Timing beachten und ändern muss.

Grundsätzlich sollte das Busy-Flag auch im 4-Bit-Modus abgefragt werden, daß erspart dann auch dieses 'Hick-Hack' mit den Wait-Zeiten.
Ausserdem ist ein 3-maliges warten während der Initialisierung bei vielen Controlern nicht notwendig.
Desweiteren solltest Du auch beachten, daß es auch HD44780-kompatible Controler gibt, die die Daten erst bei fallenden Flanken am Dateneingang übernehmen.

Sehe es daher nicht als grundsätzliche Kritik, sondern viel mehr als Verbesserungsvorschlag, denn nicht jeder kommt mit Assembler klar ;)

teslanikola
23.04.2006, 18:23
Grundsätzlich sollte das Busy-Flag auch im 4-Bit-Modus abgefragt werden, daß erspart dann auch dieses 'Hick-Hack' mit den Wait-Zeiten.


Tja das kann man sehen wie man will, wenn ich die Busy mit abfragen muss dann geht mir schon wieder ein Portpin drauf, das mag bei großen AVRs ja kein Problem sein aber zb beim Tiny2313 ist jeder Pin kostbar, werde vlt eine 2. LIB machen für Leute ide ne Busy brauchen/wollen.



Desweiteren solltest Du auch beachten, daß es auch HD44780-kompatible Controler gibt, die die Daten erst bei fallenden Flanken am Dateneingang übernehmen.


Tja also ich hab keine HD44780er mehr da, die sind ja heute schon am aussterben, wenn aber jemand einen rumfahren hat sollte den Code mal testen, müsste aber funktionierne, da ja der E erst getooglet wird und dann gewartet, wie es mit dem Init dann aussieht kann ich nicht sagen.




Sehe es daher nicht als grundsätzliche Kritik, sondern viel mehr als Verbesserungsvorschlag


Ich habe Kritik erwünscht also muss ich sie ertragen ;-), nein ist schon in ordnung, dann weis ich ja auch was ich verbessern kann, wenn jeder das blaue von himmel redet werde ich ja nich schau draus.

CowZ
23.04.2006, 19:09
Hi,

was vllt noch sinnvoll wäre:
- Einfache Frequenzänderung (nur an einer Stelle im Code Frequenz einstellen)
- Weitere Ausgaberoutinen (Byte binär ausgeben hat bei mir schon gute Dienste geleistet; Byte Hex-Ausgeben...)
- Was definitiv fehlt: Momentane LCD Position. Er sollte automatisch die Zeilensprünge etc. machen. (Beim LCD161 von Reichelt muss man nach den ersten 8 Zeichen zur Adresse 40 springen etc...)

Ansonsten: Code gut kommentiert ;)

Gruß CowZ
PS: Nimm mir meine Kritik nicht zu übel, ist konstruktiv gemeint ;)

teslanikola
23.04.2006, 20:24
- Weitere Ausgaberoutinen (Byte binär ausgeben hat bei mir schon gute Dienste geleistet; Byte Hex-Ausgeben...)


Was verstehst du unter Byte binär ausgeben? meinst du das wenn du ein Byte ins tmp schreibst das dan auf dem Display steth 00101wasweis ich?
Weist du wenn ich das einbaue wird meine Lib extrem groß, aber wenn du das bruachst, gibts bei den Appnotes von Atmel ne menge umwandlungsroutinen.



- Was definitiv fehlt: Momentane LCD Position

Tja da muss ich dann wol doch ncoch die R/W leitung mit einbeziehen, weil das in registern zu speichern fin ich schwachsinnig.



- Einfache Frequenzänderung (nur an einer Stelle im Code Frequenz einstellen)

Tja das gibt sich dann wennn ich die Busy-Flag mit einbeziehe ;-)



Er sollte automatisch die Zeilensprünge etc. machen

Da gibts ein Probolem, das ist LCD spezifisch und würd die LIB in die Länge ziehen, aber ich werde mir was überlegen, wo man die gewünschte sprungaddresse/startaddresse eingeben kann.


EDIT:
Nach Datenblatt kann die Busy-Flag erst NACH der initialisierung abgefragt werden, was bedeutet das die Waits in der Init bleiben müssen!!! Aber die Waits bei lcd_out, lcd_com und lcd_cls werde auf jeden fall ersetzt.