PIC + LCD
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  PIC + LCD « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: PIC + LCD  (Gelesen 1740 mal)
 
bastler1010
Newbie
*
Offline Offline

Beiträge: 11


Profil anzeigen
« am: August 04, 2011, 12:37:16 »

Hallo,

ich möchte das EADOGM162A mit einem pic16f876a ansteuern.

Habe auch schon Displays angesteuert, somit ist mir die Kommunikation über SPI geläufig.

Ich gehe wie immer vor, aber irgendwie will es nicht.

Quelltext:

Code:
list p=16f876a
#include <p16f876a.inc>
#include <Display_1.inc>

;-------Konfigurationsbits--------

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF


;-------Definitionen-------

#define Display_SI PORTC, 0
#define Display_CLK PORTC, 1
#define Display_RS PORTC, 2
#define Display_CSB PORTC, 3


;-------Variablen-------

w_file EQU 0x70
s_file EQU 0x71

Display_Daten EQU 0x20
Display_Zähler EQU 0x21

;_________________________________________________________________________________________________________________________________


ORG 0x000
clrf PCLATH
goto start

ORG 0x004
movwf w_file
movf STATUS, W
movwf s_file

;Interruptroutinen

movf s_file, W
movwf STATUS
swapf w_file, F
swapf w_file, W
retfie

;______________________________________________________________

start

_BANK_0
clrf PORTA
clrf PORTB
clrf PORTC
_BANK_1
movlw b'00000000'
movwf ADCON1
movlw b'00000000'
movwf TRISA
movlw b'00000000'
movwf TRISB
movlw b'00000000'
movwf TRISC
_BANK_0

movlw b'01000000'
movwf ADCON0

bsf Display_CSB
bcf Display_CLK
bcf Display_SI
bcf Display_RS

Initialisierung_Display



main

movlw 0x80
call SchreibeDisplay_Kommando
movlw A'H'
call SchreibeDisplay_Daten
movlw A'i'
call SchreibeDisplay_Daten
movlw A'!'
call SchreibeDisplay_Daten
movlw A'!'
call SchreibeDisplay_Daten

goto main

;-------Unterprogramme-------

SchreibeDisplay_Kommando
movwf Display_Daten
bcf Display_CSB
bcf Display_RS
bcf Display_CLK

movlw d'8'
movwf Display_Zähler


Kommando
rlf Display_Daten, F
btfsc STATUS, C
bsf Display_SI
btfss STATUS, C
bcf Display_SI
nop
bsf Display_CLK
nop
bcf Display_CLK
decfsz Display_Zähler, F
goto Daten
bcf Display_SI
bcf Display_RS
_DELAY_TMR1_US d'30'

return


SchreibeDisplay_Daten
movwf Display_Daten
bcf Display_CSB
bsf Display_RS
bcf Display_CLK

movlw d'8'
movwf Display_Zähler

Daten
rlf Display_Daten, F
btfsc STATUS, C
bsf Display_SI
btfss STATUS, C
bcf Display_SI
nop
bsf Display_CLK
nop
bcf Display_CLK
decfsz Display_Zähler
goto Daten
bcf Display_RS
bcf Display_SI
_DELAY_TMR1_US d'30'

return




END


Makros:

OSC_FREQ EQU d'4000000'

;-------Macros------

_BANK_0 macro
bcf STATUS, RP0
bcf STATUS, RP1
endm

_BANK_1 macro
bsf STATUS, RP0
bcf STATUS, RP1
endm

_BANK_2 macro
bcf STATUS, RP0
bsf STATUS, RP1
endm

_BANK_3 macro
bsf STATUS, RP0
bsf STATUS, RP1
endm

;-------Init-Display-------

Initialisierung_Display macro
movlw 0x38
call SchreibeDisplay_Kommando
movlw 0x39
call SchreibeDisplay_Kommando
movlw 0x14
call SchreibeDisplay_Kommando
movlw 0x78
call SchreibeDisplay_Kommando
movlw 0x52
call SchreibeDisplay_Kommando
movlw 0x69
call SchreibeDisplay_Kommando
_DELAY_TMR1_US d'1100'
movlw 0x06
call SchreibeDisplay_Kommando

endm

_DELAY_TMR1_US macro usek
variable timer_HL=0
variable timer_H=0
variable timer_L=0

if usek > d'524000'
error "Macro:Wert zu groß"
endif

if usek < d'20'
error "Macro:Wert zu klein"
endif

timer_HL = d'65536'-(OSC_FREQ/d'10000000'*usek/d'4'/d'8')

timer_H = (timer_HL >>d'8')

timer_L = (timer_HL & 0x00FF)+d'1'

bcf PIE1, TMR1IE
movlw timer_H
movwf TMR1H
movlw timer_L
movwf TMR1L
movlw b'00110001'
movwf T1CON
btfss PIR1, TMR1IF
goto $-d'1'
bcf PIR1, TMR1IF
endm

Hoffentlich lässt dich der dumme Fehler schnell finden..... Zwinkernd
Danke für Eure Hilfe!!



* Schaltplan_LCD.gif (274.18 KB, 1996x1623 - angeschaut 61 Mal.)
« Letzte Änderung: August 04, 2011, 16:38:39 von Stampede » Gespeichert
Hagi
Full Member
***
Offline Offline

Beiträge: 201


Profil anzeigen WWW
« Antworten #1 am: August 04, 2011, 13:52:56 »

Im Abschnitt"Kommando" hast du einen Fehler.
Code:
Kommando
rlf Display_Daten, F
btfsc STATUS, C
bsf Display_SI
btfss STATUS, C
bcf Display_SI
nop
bsf Display_CLK
nop
bcf Display_CLK
decfsz Display_Zähler, F
goto Kommando      ;  Das ist die Copy/Paste-Falle:  goto Daten
bcf Display_SI
bcf Display_RS
_DELAY_TMR1_US d'30'
Gespeichert

bastler1010
Newbie
*
Offline Offline

Beiträge: 11


Profil anzeigen
« Antworten #2 am: August 04, 2011, 14:14:22 »

Copy/Paste - Falle, inwiefern?

Das Display funktioniert leider trotzdem nicht. Traurig
Gespeichert
Hagi
Full Member
***
Offline Offline

Beiträge: 201


Profil anzeigen WWW
« Antworten #3 am: August 04, 2011, 14:31:29 »

Copy/Paste-Falle bedeutet:
Wenn man bei der Programmerstellung einen Abschnitt kopiert (Copy) und an anderer Stelle einfügt (Paste).
Dabei werden oftmals einige Anpassungen vergessen.

Neue Erkenntnis:

Du hast die Initialisierung des Displays vergessen.
Im Datenblatt zum Display ist ein komplettes Beispiel.

Außerdem wird das LCD-Modul in einer Dauerschleife immer wieder Initialisiert.
Das ist bestimmt nicht richtig.
Also, am Ende kommt die Endlosschleife in Form von
Code:
endlos
    goto endlos

In einem altenProjekt von mir habe ich auch dieses Display eingesetzt:
http://www.hagi-online.org/picmicro/kabeltester8p.html

Code:
LCD_Init      movlw    b'00111001'     ; 8-Bit Datenlänge, 2 Zeilen
              call     Kommando
              movlw    b'00011100'     ; BS: 1/4, 2-zeiliges LCD
              call     Kommando
              movlw    b'01110100'     ; Kontrast, Part 1
              call     Kommando
              movlw    b'01010010'     ; Kontrast, Part 2
              call     Kommando
              movlw    b'01101001'     ; Spannungsfolger und Verstärkung setzen
              call     Kommando
              movlw    d'200'          ; kurze Pause, laut der FAQ von www.lcd-module.de
              call     Warten_xms      ; 200ms warten ...
              movlw    b'00001100'     ; Display ein, Cursor aus, Cursor blinkt nicht
              call     Kommando
              movlw    b'00000110'     ; Cursor Auto-Increment
              call     Kommando

              return
« Letzte Änderung: August 04, 2011, 15:02:05 von Hagi » Gespeichert

bastler1010
Newbie
*
Offline Offline

Beiträge: 11


Profil anzeigen
« Antworten #4 am: August 04, 2011, 15:12:28 »

Danke....initialisiert habe ich, aber nicht vollständig, wie mir gerade aufgefallen ist.

Man sollte sich konzentrieren, wenn man programmiert Augen rollen.
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.041 Sekunden mit 18 Zugriffen.
 
Top! Top!