- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: LCD-Libary für Reichelt LCDs in ASM (AVR)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470

    LCD-Libary für Reichelt LCDs in ASM (AVR)

    Anzeige

    Praxistest und DIY Projekte
    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.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.11.2004
    Beiträge
    8
    ... 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

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    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.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2005
    Ort
    Kaiserslautern
    Beiträge
    794
    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

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    - 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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests