-         

Ergebnis 1 bis 2 von 2

Thema: LCD Ansteuerungs Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    06.12.2005
    Ort
    Hamburg
    Alter
    28
    Beiträge
    86

    LCD Ansteuerungs Problem

    Anzeige

    Also ich habe ein LCD mit 2x16 Zeichen und HD44780 Controller mit Bascom gehts einwandfrei nur würde ich das gerne in Assembler schreiben (kommen noch andere Sachen und Bascom macht zugroßen Code) jedenfalls habe ich mir so aus dem Internet und dem HD... ´Datenblatt Sachen zusammengesucht und wollte mir jetzt was zur ansteuerung schreiben doch wenn ich portinit und danach lcdinit ausführe bleibt das Display leer stimmen meine Befehle überhaupt so? oder ist in einer der Hilfsroutinen ein Fehler irgendwie glaube ich ich sehe das Byte vor lauter Bits nicht mehr...

    Code:
    .equ DPort=Portb
    .equ D4=4
    .equ D5=3
    .equ D6=2
    .equ D7=1
    .equ lcdpin=pinb
    .equ eport=porta
    .equ rsport=portd
    .equ rwport=portd
    .equ ddrlcd=DDRB
    .equ ddre=DDRa
    .equ ddrrw=DDRa
    .equ RW=1
    .equ ddrRS=DDRD
    .equ E=0
    .equ RS=3
    .org 0x170
    
    portinit:
    sbi ddrlcd,d4
    sbi ddrlcd,d5
    sbi ddrlcd,d6
    sbi ddrlcd,d7
    sbi ddrrs,rs
    sbi ddre,e
    sbi ddrrw,RW
    ret
    dataout:
    rcall lcdbusy
    cbi rwport,rw
    nop
    swap r16
    sbrc r16,0
    sbi dport,d4
    sbrs r16,0
    cbi dport,d4
    sbrc r16,1
    sbi dport,d5
    sbrs r16,1
    cbi dport,d5
    sbrc r16,2
    sbi dport,d6
    sbrs r16,2
    cbi dport,d6
    sbrc r16,3
    sbi dport,d7
    sbrs r16,3
    cbi dport,d7
    rcall lcd_enable
    ret
    lcdinit:
    cbi rsport,rs
    ldi r16,0b00110000	;init
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdwait
    ldi r16,0b00110000	;init
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdwait
    ldi r16,0b00110000	;init
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ldi r16,0b00101000	;4bit;2 Zeilen;standart font 
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ldi r16,0b00001111  ;LCD an;Cursor Blinken;Cursor ON
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ldi r16,0b00000110	;set Entry Mode
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ldi r16,0b00000001 	;clear Display
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ldi r16,0b00000010 	; return Home
    rcall dataout	
    swap r16
    rcall dataout
    rcall lcdbusy
    sbi rsport,rs
    ldi r16,'A'			; A anzeigen
    rcall dataout
    swap r16
    rcall dataout
    rcall lcdbusy
    ret
    lcd_enable:
    sbi eport, e                  
    nop                          
    nop
    nop
    nop
    nop
    cbi eport, e                
    ret     
    lcdbusy:
    cbi rsport,rs
    sbi rwport,rw
    cbi ddrlcd,d7
    sbic lcdpin,d7
    rjmp lcdbusy
    sbi ddrlcd,d7
    ret
    lcdwait:  ;wait routine wenn busy abfrage nicht möglich
    ldi ZH,high(65535)
    ldi ZL,low(65535)
    rcall wait
    ldi ZH,high(5535)
    ldi ZL,low(5535)
    rcall wait
    ret
    wait:
    nop
    nop
    sbiw  ZL,1
    brne wait
    ret

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    wollte mal fragen, ob dein Problem noch immer aktuell ist?
    Wenn ja, wie ist dein Display angeschlossen?
    Ausserdem solltest du mal deinen Code dokumentieren,dann findet man sich auch später noch schnell zurecht.

Berechtigungen

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