-
        

Ergebnis 1 bis 2 von 2

Thema: Displaytech 161A, beim Init geht das Display nicht aus.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2007
    Beiträge
    8

    Displaytech 161A, beim Init geht das Display nicht aus.

    Anzeige

    Hallo zusammen !

    Ich habe mich heute zum ersten mal mit Displays beschäftigt (Displaytech 161A).
    Als Vorlage habe ich den Quellcode von sprut genommen.

    Ich komme aber beim Init nicht weiter. Das Display schaltet auf 8 Zeichen, aber die nächste Anweisung "Display Off" funktioniert nicht, das Display geht nicht aus.

    Ich finde den Fehler nicht, Kabelanschlüsse sind ok.

    Könnt Ihr mir helfen ? Was ist denn beim Init falsch, wieso geht das Display nicht aus ?

    Gruß
    Heiko

    Das ist mein Programm :
    list p=16f84a
    ;************************************************* *************
    ;* Pinbelegung
    ;* ----------------------------------
    ;* PORTA:
    ;* 0 - RS
    ;* 1 - R/W
    ;* 2 - E
    ;* 3 -
    ;* 4 -
    ;* PORTB:
    ;* 0 - 7 LCD Display DB0 - DB7
    ;*
    ;*
    ;************************************************* *************
    ; Includedatei für den 16F84 einbinden

    #include <P16f84A.INC>

    ; Configuration festlegen
    ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator

    __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC

    ;************************************************* *************
    ; Variablen festlegen

    loops EQU 0x24
    loops2 EQU 0x25

    ; Constanten festlegen
    LcdE equ 2 ; enable Lcd (An PortA)
    LcdRW equ 1 ; read Lcd (An PortA)
    LcdRS equ 0 ; Daten Lcd (An PortA)

    ;************************************************* *******
    ; Das Programm beginnt mit der Initialisierung

    Init
    bsf STATUS, RP0 ; auf Bank 1 umschalten
    movlw B'00000000' ; PortA/B alle output
    movwf TRISB ; Internes Register im PIC für PORTB ändern
    movwf TRISA ; Internes Register im PIC für PORTA ändern
    bcf STATUS, RP0 ; auf Bank 0 zurückschalten
    clrf PORTB ; PortB auf Null
    clrf PORTA ; PortA auf Null

    call InitLCD ; Display initialisieren

    sleep
    Main
    goto Main

    ;************************************************* ****************
    ;Zeitverzögerung um loops * 1 ms
    ; 4MHz externer Takt bedeutet 1MHz interner Takt
    ; also dauert 1 ms genau 1000 Befehle
    ; 110 Schleifen a 9 Befehle sind 990 Befehle = 0.99 ms
    ; die restlichen 10 Befehle für Einsprung und Rücksprung

    WAIT
    top movlw .110 ; timing adjustment variable (1ms)
    movwf loops2
    top2 nop ; sit and wait
    nop
    nop
    nop
    nop
    nop
    decfsz loops2, F ; inner loops complete?
    goto top2 ; no, go again
    ;
    decfsz loops, F ; outer loops complete?
    goto top ; no, go again
    retlw 0 ; yes, return from subWAIT

    ;************************************************* *********
    ; Initialisierung des LCD-Displays

    InitLCD
    movlw D'255' ; 250 ms Pause nach dem Einschalten
    movwf loops
    call WAIT

    movlw B'00000000' ;1
    movwf PORTA
    movlw B'00110000'
    movwf PORTB
    call EnableSignal

    movlw D'5' ; 5 ms Pause
    movwf loops
    call WAIT

    movlw B'00000000' ;2
    movwf PORTA
    movlw B'00110000'
    movwf PORTB
    call EnableSignal

    movlw D'5' ; 5 ms Pause
    movwf loops
    call WAIT

    movlw B'00000000' ;3
    movwf PORTA
    movlw B'00110000'
    movwf PORTB
    call EnableSignal
    nop

    movlw D'150' ; 150 ms Pause
    movwf loops
    call WAIT

    movlw B'00000000' ;4 Function Set - Display auf 8 Zeichen
    movwf PORTA
    movlw B'00111000'
    movwf PORTB
    call EnableSignal

    ; --- Bis hier OK.

    movlw B'00000000' ; Display Aus - funktioniert nicht, warum ?
    movwf PORTA
    movlw B'00001000'
    movwf PORTB
    call EnableSignal

    ; movlw B'00000000' ; 6 Display Clear - erstmal heraus
    ; movwf PORTA
    ; movlw B'00000001'
    ; movwf PORTB
    ; call EnableSignal
    ; nop


    ; movlw B'00000000' ; 7 Entry Mode Set
    ; movwf PORTA
    ; movlw B'00000110'
    ; movwf PORTB
    ; call EnableSignal

    return

    EnableSignal

    bsf PORTA, LcdE ; Enable Impuls setzen
    nop

    movlw D'50' ; 50 ms Pause
    movwf loops
    call WAIT

    bcf PORTA, LcdE ; Enable Impuls löschen

    return

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    02.11.2007
    Beiträge
    8
    Hat sich erledigt !

    Läuft jetzt .

    Problem lag am Abfragen vom Busy Flag....

    Grüße,
    Heiko

Berechtigungen

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