PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dot Matrix mit MAX 7219 Ansteuerung mit PIC 16F84A



biohazard360
13.04.2007, 16:04
Hallo nun ich will mein Display mit dem Max 7219 ansteuern dieser soll dann einen Buchstaben ausgeben:

Variablenfestlegung:

CBLOCK H'20'
variable1 ; das Wort variable1 entspricht der Adresse H'20'
zaehl ; das Wort zaehl entspricht der Adresse H'21'
register
sendregister
value
temp
z1
z2
z3
ENDC


Hauptprogamm und unterprogramm:


;*****************
;* Hauptprogramm *
;*****************

main
BSF PORTB,1 ;setze Bit des Registers PORTB,1
GOTO up_initmax ;gehe zu up_initmax
GOTO up_zeichen ;gehe zu up_zeichen
GOTO up_warte ;gehe zu up_warten
GOTO main ;gehe zu main






;******************
;* Unterprogramme *
;******************
up_warte ;warteschleife
MOVLW D'170' ;lade W-Register mit D'170'
MOVWF z1 ;kopiere W-Register nach z1
outer
MOVLW D'120' ;lade W-Register mit D'120'
MOVWF z2 ;kopiere W-Register nach z2
middle
MOVLW D'70' ;lade W-Register mit D'70'
MOVWF z3 ;kopiere W-Register nach z3
inner
DECFSZ z3 ;decrementier Register z3 und springe bei 0
GOTO inner ;gehe zu inner
DECFSZ z2 ;decrementier Register z2 und springe bei 0
GOTO middle ;gehe zu middle
DECFSZ z1 ;decrementier Register z1 und springe bei 0
GOTO outer ;gehe zu outer

RETURN

up_zeichen ; Tabelle mit den Werten der Ausgabe
addwf PCL, f ;addiere W-Register zu PCL,f
retlw b'10000000' ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
retlw b'10000000' ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
retlw b'10000000' ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
retlw b'10000000' ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
retlw b'10000000' ;springe aus dem Unterprogramm mit der Übergabe b'10000000'

retlw b'11000000' ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
retlw b'01000000' ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
retlw b'11000000' ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
retlw b'01000000' ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
retlw b'01000000' ;springe aus dem Unterprogramm mit der Übergabe b'01000000'

retlw b'11100000' ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
retlw b'00100000' ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
retlw b'11100000' ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
retlw b'00100000' ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
retlw b'00100000' ;springe aus dem Unterprogramm mit der Übergabe b'00100000'

retlw b'11110000' ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
retlw b'00010000' ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
retlw b'11110000' ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
retlw b'00010000' ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
retlw b'00010000' ;springe aus dem Unterprogramm mit der Übergabe b'00010000'

retlw b'11111000' ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
retlw b'10001000' ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
retlw b'11111000' ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
retlw b'10001000' ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
retlw b'10001000' ;springe aus dem Unterprogramm mit der Übergabe b'10001000'

retlw b'01111100' ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
retlw b'01000100' ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
retlw b'01111100' ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
retlw b'01000100' ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
retlw b'01000100' ;springe aus dem Unterprogramm mit der Übergabe b'01000100'

retlw b'00111110' ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
retlw b'00100010' ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
retlw b'00111110' ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
retlw b'00100010' ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
retlw b'00100010' ;springe aus dem Unterprogramm mit der Übergabe b'00100010'

retlw b'00011111' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00010001' ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
retlw b'00011111' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00010001' ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
retlw b'00010001' ;springe aus dem Unterprogramm mit der Übergabe b'00010001'

retlw b'00001111' ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
retlw b'00001000' ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
retlw b'00001111' ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
retlw b'00001000' ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
retlw b'00001000' ;springe aus dem Unterprogramm mit der Übergabe b'00001000'

retlw b'00000111' ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
retlw b'00000100' ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
retlw b'00000111' ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
retlw b'00000100' ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
retlw b'00000100' ;springe aus dem Unterprogramm mit der Übergabe b'00000100'

retlw b'00000011' ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
retlw b'00000010' ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
retlw b'00000011' ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
retlw b'00000010' ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
retlw b'00000010' ;springe aus dem Unterprogramm mit der Übergabe b'00000010'

retlw b'00000001' ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
retlw b'00000001' ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
retlw b'00000001' ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
retlw b'00000001' ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
retlw b'00000001' ;springe aus dem Unterprogramm mit der Übergabe b'00000001'

retlw b'00000000' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00000000' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00000000' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00000000' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
retlw b'00000000' ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
;------------------------
up_initmax ;max initialisierung

Banksel TRISB ;Umschalten auf die Datenspeicherbank TRISB
bcf TRISB,1 ;lösche Bit des Registers TRISB,1
bcf TRISB,2 ;lösche Bit des Registers TRISB,2
bcf TRISB,0 ;lösche Bit des Registers TRISB,0

Banksel PORTB ;Umschalten auf die Datenspeicherbank PORTB
bsf PORTB,1 ;setze PORTB,1 LOAD_PORT
bcf PORTB,2 ;lösche PORTB,2 CLK_PORT


call clear ;rufe clear auf
movlw b'00001111';lade W-Register mit D'170'
call intensity ;rufe clear auf
movlw b'11111111';lade W-Register mit D'170'
call decodemode ;rufe clear auf
movlw b'00000111';lade W-Register mit D'170'
call scanlimit ;rufe clear auf
movlw b'00000001';lade W-Register mit D'170'
call shutdown ;rufe clear auf
movlw b'00000000';lade W-Register mit D'170'
call displaytest ;rufe clear auf
return ;zurück

send ;senden
movf register,w ;kopiere Register
movwf sendregister;kopiere W-Register nach z2
movlw d'16' ;lade W-Register mit D'170'
bcf PORTB,1 ;lösche PORTB,1

sendloop ;sendenschleife
bcf PORTB,0 ;lösche PORTB,0
btfsc sendregister,7 ;teste sendregister,7 und springe wenn gelöscht
bsf PORTB,0 ;setze PORTB,0
rlf value,f ;rotiere value,f nach links durch carryflag
rlf sendregister,f ;rotiere sendregister,f nach links durch carryflag
bsf PORTB,2 ;setze PORTB,2
nop ;keine Operation
bcf PORTB,2 ;lösche PORTB,2
addlw 0xff ;addiere Arbeitsregister mit 0xff
btfss STATUS,Z ;teste STATUS,Z und springe wenn gesetzt
goto sendloop ;geh zu sendloop
bsf PORTB,1 ;setze PORTB,1
return ;zurück

decodemode ;decodemode
movwf value ;kopiere W-Register nach value
movlw b'00001001' ;lade W-Register mit b'00001001'
movwf register ;kopiere W-Register nach register
goto send ;gehe zu send

intensity ;intensity
movwf value ;kopiere W-Register nach value
movlw b'00001010' ;lade W-Register mit b'00001010'
movwf register ;kopiere W-Register nach register
goto send ;gehe zu send

scanlimit ;scanlimit
movwf value ;kopiere W-Register nach value
movlw b'00001011' ;lade W-Register mit b'00001011'
movwf register ;kopiere W-Register nach register
goto send ;gehe zu send

displayon ;displayon
movlw b'00000001';lade W-Register mit b'00000001'
goto shutdown ;gehe zu shutdown

displayoff ;displayoff
movlw b'00000000';lade W-Register mit b'00000000'

shutdown ;shutdown
movwf value ;kopiere W-Register nach value
movlw b'00001100' ;lade W-Register mit b'00001100'
movwf register ;kopiere W-Register nach register
goto send ;gehe zu send

displaytest ;displaytest
movwf value ;kopiere W-Register nach value
movlw b'00001111' ;lade W-Register mit b'00001111'
movwf register ;kopiere W-Register nach register
goto send ;gehe zu send

clear
movlw 0x00 ;lade W-Register mit D'170'
goto send ;gehe zu send

END ;Programmende


Könnt ihr mir sagen wo der Fehler liegt?

Ach ja es werden übrigens nur 4 LED´s von der D-M-Anzeige angezeigt![/list]

Benedikt.Seidl
13.04.2007, 18:45
main
BSF PORTB,1 ;setze Bit des Registers PORTB,1
GOTO up_initmax ;gehe zu up_initmax
GOTO up_zeichen ;gehe zu up_zeichen
GOTO up_warte ;gehe zu up_warten
GOTO main ;gehe zu main

dieser teil hier macht mich ein bisschen stutzig,.. der zweite goto befehl wird nie ausgeführt werden, weil er ja runtergegangen ist, und nie wieder raufkommt. evtl. verwechselst du es mit call?

nur ein schneller versuch nach dem drüberfliegen

SEIDL.

biohazard360
14.04.2007, 00:35
mmh ... etwas verstutz mich auch, und zwar das er selbst ohne ein programm die 4 lichter auf dem d-m-display anzeigt.

Könnte es ein Hardware fehler sein.

Und benedikt. habe mir deinen rat mal zu herzen genommen und es umgeändert aber nix tut sich

Richi 007
15.06.2007, 16:38
Ich hab zwar keine Idee, aber den Max 7219 such ich jetzt schon seit 2 Wochen.
Wo hast du den gekauft?

biohazard360
15.06.2007, 20:15
ich habe den bei www.reichelt.de gekauft

Richi 007
02.07.2007, 18:00
Danke,aber hab ihn schon vor deiner Antwort gefunden