- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Universelle LCD-Routine für AVR

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24

    Universelle LCD-Routine für AVR

    Anzeige

    Praxistest und DIY Projekte
    Hi @all

    da ich in den letzen Wochen in den verschiedensten Foren gesehen habe, welche Schwierigkeiten in Verbindung mit dem Anschluß eines LCD an den AVR vorhanden sind, habe ich versucht eine völlig universelle LCD Routine in Assembler zu schreiben. Diese basiert von der Idee her auf die Routinen von Andreas Schwarz arbeitet aber nicht Port gebunden. Sprich jeder PIN des LCD kann an jeden Port des AVR angeschlossen werden, auch völlig durcheinander ! (Siehe Testprogramm . In den Foren habe ich bemerkt, dass viele Anfänger (auch ich bin einer) versuchen Ihre Hardware an die vorhandenen Routinen anzupassen. Ich finde dies ist der falsche Weg, Software sollte immer an die Hardware angpasst werden. Vielleicht ist dies ja ein kleiner Denkanstoss, wenn jemand eine Routine entwickelt hat, diese dann auch später universell anzupassbar zu machen, und somit einer breiten Fangemeinde zugänglich zu machen (LINUX ist so groß geworden ! ).
    So aber nun zu den Routinen.
    Auskommentierte Zeilen sind noch in der Entwicklung
    (über Hilfe, Anmerkungen, Kritik und Teamwork würde ich mich wirklich riesig freuen).
    Ich habe versucht soweit es mir möglich war, alles zu kommentieren.
    Auch hier kann ich noch jede Menge Hilfe gebrauchen.
    Es wäre schön, wenn an diesen Projekt eine Menge Leute mitarbeiten würden, um dann die fertige Routine der Allgemeinheit zugänglich zu machen.
    Also Postet gerne eure Meinung, Anregungen damit ich sehe ob es noch mehr Leute gibt die wie ich denken

    So Long

    Skyrider

    lcd.zip
    emthält:
    <lcd_test.asm>
    <lcd.inc>
    >LCDdef.inc>
    <Mega16.inc>
    <Mega8515.inc>
    <tiny2313.inc>
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    das stimmt nicht ganz. bei Bascom kann man die routinen dem anschluss anpassen. bei winavr kann man die routinen ganz einfach an den 4 datenpins anpassen oder sogar auf 8-bit abfahren.
    wie kann man jetzt deine asm-routine denn in Bascom oder winavr-einbinden.
    mfg pebisoft

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    Klasse gemacht !

    Ein Vorschlag:
    in der Initialisierung,
    Das "- 1" in den Zeilen
    sbi lcd_port_db4 - 1, lcd_db4 ;setze DDR für DB4 auf Ausgabe
    usw.
    finde ich etwas unschön.
    Es muss ja nicht immer so sein, das bei jedem AVR das DD-Register
    eins tiefer ist als die Portadresse.
    Lieber noch einen Parameter "lcd_ddr_db4 = DDRA" oder so definieren.
    Dann ist es wirklich universell.

    Wie gesagt, nur ein Vorschlag.
    Ansonsten gefällt es mir gut.

    Gruß Jan

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24
    @pebisoft

    das stimmt nicht ganz. bei Bascom kann man die routinen dem anschluss anpassen. bei winavr kann man die routinen ganz einfach an den 4 datenpins anpassen oder sogar auf 8-bit abfahren.
    wie kann man jetzt deine asm-routine denn in Bascom oder winavr-einbinden.
    mfg pebisoft
    Sorry, der Titel sollte eigentlich "Universelle ASM LCD-Routine für AVR" lauten.
    Das man in Bascom alle PINS einzeln ansteuern kann hatte ich in ersten Tests mit Bascom gesehen. mit winavr kenne ich mich (leider noch nicht) aus, und kann dir so nicht sagen wie es eingebunden werden kann (oder auch die im Netz vorhandenen Assembler LCD-Routinen). Ich gehe davon aus, dass die Routinen interessant sind die in Assembler programmieren oder Assembler programmieren lernen wollen.
    Nobody ist perfect !

    Gruß
    Skyrider

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    67
    Beiträge
    1.062
    Hallo pebisoft

    Wenn skyrider sauber die Aufruf-Konvention beschreibt, so kann man gerade bei Bascom eine asm-Routine durch einbetten in der Assembler direktive einbetten, leichter gehts nicht, oder? Im Buch von Claus Kühnel, Programmieren der AVR RISC mit BASCOM-AVR, siehe auch Büchervorstellungen in diesem Forum, werden serienweise Beispiele gezeigt.
    MfG

    Hellmut

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24
    @JanB

    sbi lcd_port_db4 - 1, lcd_db4 ;setze DDR für DB4 auf Ausgabe
    Hallo Jan,

    hatte ich zuerst auch so gemacht
    leider fand ich dann die Zuweisungen doch etwas verwirrend.

    wie wärs denn da mit
    .set lcd_ddr_offset = 1

    sbi lcd_port_db4 - lcd_ddr_offset, lcd_db4 ;setze DDR für DB4 auf Ausgabe
    Wirkt allerdings auch etwas verwirrend

    Gruß Skyrider

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24
    @Hellmut

    Danke für die Unterstützung,
    bei Bascom und Winavr habe ich nur einmal kleine Code-Auschnitte gesehen um zu wissen das es geht, aber leider noch keine Ahnung wie.

    Viele Grüße

    Skyrider

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    67
    Beiträge
    1.062
    Hallo Skyrider

    Zitat aus dem oben genannten Buch von Claus Kühnel im Kapitel: 3.11 BASIC & Assembler, Seite 92 & 93:

    "Die meisten Assembler-Mnemonics werden vom Compiler bereits erkann. Die Ausnahmen sind SUB, SWAP und OUT...."

    " Nicht alle Register sind für die Programmierung in Assembler frei. R4/R5 werden als Stackframe verwendet. R8/R9 dienen als Datapointer für die READ Instruktion. R6 enthält einige Bitvariablen:..."

    Ende Zitate.

    So genau hatte ich das Thema nicht recherchiert, aber der Compiler erkennt offenbar Assembler-Befehle direkt an ihren Mnemonics. leichter kann die Einbettung nicht gehen. In einen Programm-Beispiel für die Messung von Impulslängen wird eine Funktion unter BASIC definiert, die Funktion selber ist reiner Assembler-Kode.
    MfG

    Hellmut

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24
    @all

    ich habe einige neue Funktionen in die Routine eingebaut.
    - Auf Anregung von JanB sind die Datenrichtungregister deklariert
    - lcd_pos (x,y) setzt Cursor auf Zeile x Spalte y
    - lcd_out (Z) gibt Zeichenketten aus
    - tiny2313.inc Unterstützung für den tiny2313

    @JanB
    Thanks

    @Hellmut
    Ich glaub ich muss mir doch noch mal das Buch von Claus Kühnel kaufen

    Gruß
    Skyrider

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    09.08.2004
    Ort
    Quickborn
    Beiträge
    24
    Hi @all

    ich habe eine neue Version (Beta v099.025) bereitgestellt:

    - Aufteilung der Deklarationen in LCDdef.inc um beim Einspielen einer neuen Version nicht alles wieder anpassen zu müssen.
    - <lcd_busy> fragt das BusyFlag ab
    - <wait_ms (x)> flexible Delay-Routine (1-255ms)
    - diverse Anpassungen und Verbesserungen innerhalb der Routine

    VG
    Skyrider

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test