www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HD44780 8bittig ansteuern mit PIC18F4550


Autor: PrototypePHX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

will ein HD44780-Display 8bittig mit einem PIC18F4550 über Assembler 
ansteuern, krieg es aber nicht gebacken bzw. finde meinen Fehler nicht. 
Ich kann lediglich den Kontrast einstellen. Hier mein Code:
init
  CLRF  TRISB
  CLRF  PORTB

  CLRF  TRISC
  CLRF  PORTC


#define DB0  PORTB, RB0
#define DB1  PORTB, RB1
#define DB2  PORTB, RB2
#define DB3  PORTB, RB3
#define DB4  PORTB, RB4
#define DB5  PORTB, RB5
#define DB6  PORTB, RB6
#define DB7  PORTB, RB7
#define RS  PORTC, RC6
#define E  PORTC, RC7

main
  CALL  lcd_init
  CALL  delay_20ms
  MOVLW  'A'
  CALL  lcdchar
  MOVLW  'B'
  CALL  lcdchar
  MOVLW  'C'
  CALL  lcdchar
loop
  GOTO  loop


lcd_init
  BCF  RS
  CALL  wait_20ms
  MOVLW  b'00110000'  ;Interface auf 8bit setzen
  CALL  lcdcomm
  CALL  wait_20ms  ;Interface auf 8bit setzen 2
  CALL  lcde
  CALL  wait_20ms  ;Interface auf 8bit setzen 3
  CALL  lcde

  CALL  wait_20ms
  MOVLW  b'00111000'  ;2 Zeilen, 5x8
  CALL  lcdcomm

  CALL  wait_20ms
  MOVLW  b'00001100'  ;Display ein, Cursor aus
  CALL  lcdcomm

  CALL  wait_20ms
  MOVLW  b'00000110'  ;Cursor aus, Shift aus, rechts
  CALL  lcdcomm

  RETURN


lcde
  BSF  E
  NOP
  NOP
  BCF  E
  RETURN


lcdchar
  BSF  RS
  MOVWF  PORTB
  CALL  lcde
  CALL  wait_20ms
  RETURN

lcdcomm
  BCF  RS
  MOVWF  PORTB
  CALL  lcde
  CALL  wait_20ms
  RETURN
Variablendeklaration, usw. hab ich weggelassen, ist nicht relevant denke 
ich. Die wait-Zeiten hab ich mit einem Delay-Generator erzeugt, sollten 
also auf jeden Fall stimmen.
Danke schonmal ;)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #define RS PORTC, RC6
> #define E  PORTC, RC7

RW des LCD hast du auf GND verdrahtet?

> lcd_init
>   BCF  RS
>   CALL  wait_20ms
>   MOVLW  b'00110000'  ;Interface auf 8bit setzen
>   CALL  lcdcomm

20 ms ist da ziemlich knapp. 1 s würde ich testen und mich dann 
runtertasten oder es so lassen :-)

Auf den Delaygenerator würde ich mich nicht verlassen. Wenn keine 
Messmittel vorhanden sind, versuche mit einer 20ms Delayroutine eine LED 
im 1s Takt blinken zu lassen und mit einer Uhr und Mitzählen die Delays 
zu kontrollieren.

Nebensache: Statt

>  CALL  wait_20ms
>  MOVLW  b'00110000'  ;Interface auf 8bit setzen
>  CALL  lcdcomm

hätte ich erwartet:

  CALL  wait_20ms
  MOVLW  b'00110000'  ;Interface auf 8bit setzen
  CALL  lcde

Autor: PrototypePHX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, RW ist auf GND. Das mit der delay-Routine versuche ich gleich mal.

Autor: sebihepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, es fehlt noch ein Clear Display Kommando.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiss das mit der Nebensache. PIC ASM ist "anders". Das müsste so 
passen.

Aber bei

> lcde
>   BSF  E
>   NOP
>   NOP
>   BCF  E
>   RETURN

könnten nur 2 NOPs zu knapp sein. Wie schnell läuft dein PIC und wie 
passt die Ausführungszeit von 2x NOP zu dem Mindesttiming im Datenblatt?

Autor: PrototypePHX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab wait jetzt auf 1 Sekunde gesetzt und ich bekomme jetzt zumindest 
Zeichen auf dem LCD, aber an völlig zufälligen Stellen und meistens auch 
erst nach ein paar Resets.
---
Mein PIC läuft mit 12MHz, laut Datenblatt muss E mindestens 1µS lang 
sein.
2/3000000=0,0000006s, also in der Tat zu kurz. Habe dann 3 NOPs 
zusätzlich hinzugefügt, hat aber leider auch nicht viel geholfen.

Danke für die Antworten bisher, bin jetzt zumindest ein paar Schritte 
weiter :)

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.