www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik lcd routines umgeschrieben -fehler


Autor: tiroler79 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo allerseits!

habe die datei lcd routines (tutorial) für mich umgeschrieben da ich
andere pins verwenden will
statt pin db4 pd5 usw.
;DB4 pd5
;db5 pd6
;db6 pd7
;db7 pb0
;rs  pb6
;e   pb7

;-- = alter original code ausgeklammert

funktioniert nur leider nicht und finde einfach keinen fehler!

kann mir jemand weiterhelfen

vielen dank im vorhinein

thomas

Autor: Dennis Brücke (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir deinen Code nicht wirklich genau durchgesehen, da Du leider
deine Änderungen nicht Dokumentiert hast.

Als erstes würde ich die Port´s in deiner Routine nicht direkt
"beziffer" (sbi portd, 5) sondern würde name per .EQU dafür
definieren, da du sonst jedesmal alles umschreiben musst wenn du mal
nur eine Leitung an einen anderen Pin haust...

Ich hab mal meine Routine mit in den Anhang gepackt, vieleicht kannst
Du damit was anfangen.

Gruß Dennis

Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
musst grad festellen das es meine alte routine ist, sie funktioniert
zwar ist aber kaum dokumentiert.

gruß dennis

p.s. die neuere hab ich leider nicht hier.

Autor: tiroler79 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank erstmals

mein problem ist daß sich meine datenpins auf verschiedenen ports
befinden
daher mein etwas komlpizierteres asm file

lg
thomas

Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch kein Problem ;)

am anfang der File "Definierst du doch die Pins"
um es Dir aber nicht allzu "schwer" zu machen leg die DB4-DB7 auf
irgendein Port 0-3 das solltest auf jedenfall machen um dein register,
welches deine Daten beinhaltet nicht noch in einzelne Bits zu zerlegen
und auf deine einzelnen DB4-DB7 zu legen. Das macht kein Sinn, da du
dafür zeit "verschwendest" welche du so sinnvoll verteilst.

brauchst also nichts komplexes zu machen als dein Datenbyte (bei 8 bit
LCD Ansteuerung) direkt auf den Port zu legen. Bei 4bit Ansteuerung
erst die eine hälft dann die andere.

ich habe dafür auf einen ATmega8 die DB4-7 den PortC genommen, für die
Restlichen Leitungen PortD

----

Habe auch mal den Fehler gemacht ein Display (KS0107/8) "wirr" an die
Ports angeschlossen, um mich dann hinterher rumzuärgern, das ich jetzt
jedes einzelne bit auswerten muss und auf den Port zu legen... kurz
gesagt "nie wieder" ;)

---

Andere Methode wenn Du wirklich keine andere Möglichkeit hast benutz
doch einfach nen Portexpander welchen du mit 3 Leitungen ansteuerst.
Bit reinschieben, Clocken, reinschieben, clocken etc... dann Latch und
fertig is... kannst dann wieder 8bit Modus machen.

Gruß Dennis

Autor: tiroler79 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muß leider die bits einzeln abfragen bzw. zerlegen

dazugehörige platine ist leider schon fertig bestückt (viel bauteile)
(einen platinenfehler kann ich mit ziemlicher sicherheit ausschließen)
alles ausgemessen
display hatte mit originaler lcd routines im versuchsaufbau schon
funktioniert

ich dachte mir ich mache diese bitweise abfrage einfach so:

                 sbrc temp1, 3
     sbi portd, 0
     sbrc temp1, 2
     sbi portd, 7
     sbrc temp1, 1
     sbi portd, 6
     sbrc temp1, 0
     sbi portd, 5

statt das byte via out auszugeben

(alle änderungenen sind weiter eingerückt
und der originalcode übersichtshalber mit ;-- ausgeklammert

habe schon recht viel zeit mit diesem problem verbracht

vielen dank im vorhinein

thomas

Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da währe ich zu faul für ;)
Ich würde jetzt einfach ein 74HC595 zwischenschalten...

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mooment.

Wenn ich das richtig sehe, hast du doch nur statt Pin0-3 die Pinne 4-7
benutzt oder?

ist doch ganz easy:

Tutorial Routine:

lcd_data:
           mov temp2, temp1             ;"Sicherungskopie" für
                                        ;die Übertragung des 2.Nibbles
           swap temp1                   ;Vertauschen
           andi temp1, 0b00001111       ;oberes Nibble auf Null setzen
           sbr temp1, 1<<4              ;entspricht 0b00010000
           out PORTD, temp1             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
                                        ;2. Nibble, kein swap da es
schon
                                        ;an der richtigen stelle ist
           andi temp2, 0b00001111       ;obere Hälfte auf Null setzen
           sbr temp2, 1<<4              ;entspricht 0b00010000
           out PORTD, temp2             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
           rcall delay50us              ;Delay-Routine aufrufen
           ret                          ;zurück zum Hauptprogramm

Es wird das untere Nibble auf 0 gesetzt (Pin0-3) und die oberen werden
übernommen. du machsts wie folgt:

lcd_data:
           mov temp2, temp1             ;"Sicherungskopie" für
                                        ;die Übertragung des 2.Nibbles
           andi temp1, 0b11110000       ;oberes Nibble auf Null setzen
           sbr temp1, 1<<4              ;entspricht 0b00010000
           out PORTD, temp1             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
                                        ;2. Nibble, kein swap da es
schon
                                        ;an der richtigen stelle ist
           swap temp1                   ;Vertauschen
           andi temp2, 0b11110000       ;obere Hälfte auf Null setzen
           sbr temp2, 1<<4              ;entspricht 0b00010000
           out PORTD, temp2             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
           rcall delay50us              ;Delay-Routine aufrufen
           ret


Oder lieg ich falsch?
Nun wird nämlich alles auf die oberen Pins umgebastelt. Hab lediglich
das Swap verschoben und die ANDI bitmaske geändert, damit auch die
richtigen Ports angesprochen werden.

Autor: tiroler79 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein nein!

wie geschrieben:

;DB4 pd5 db1
;db5 pd6 db2
;db6 pd7 db3
;db7 pb0 db4

;pins original - meine pins - bezeichnung

ich hab die bits ja auch schon einzeln rausgefischt (siehe code)
und pins dann einzeln damit angesteuert

ich finde beim debuggen auch keinen fehler aber mit lcd fuktioniert es
einfach nicht!

ist sicher nur eine kleinigkeit - aber finde sie leider nicht!

vielen dank erstmal

lg
thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.