Gast
#860967
Hallo ich brauche Hilfe bei der Ansteuerung von einem Maxim Max 6952 .
Also Laufen soll das alles mit einem Pic 16f877a den ich mit dem SPI Bus
an den Max verbinde. Die Assembler source Habe ich schon geschrieben
aber nachdem ich alles verbunden hab tut sich nichts ich weiß nun nicht
so recht ob mein Programm den Fehler hat (ob der max die daten überhaupt
so wie ich sie im vorgebe empfangen kann) wenn sich also jemand schon
mit diesem thema auseinandergesetzt hat bitte ich um Hilfe
Übrigens es würde probeweise die Zahl 1 auf der 1 Matrize ausgegeben
wenn es funktionieren würde
Mein Source file
list p=16f877a
;**************************************************************
; Includedatei für den 16F877a einbinden
;
; #include <P16f877A.INC>
;
; Configuration festlegen
;
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
; __CONFIG _BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC
;
;**************************************************************
; Variablennamen vergeben
#define SS PORTA,2 ; Slave Select an PortA RA2
CONFIGU Equ 0x21
CONFIGL Equ 0x22
INTENSIU10 Equ 0x23
INTENSIL10 Equ 0x24
INTENSIU32 Equ 0x25
INTENSIL32 Equ 0x26
DISPLU Equ 0x27
DISPLL Equ 0x28
TRISA Equ 0x85
TRISC Equ 0x87
STATUS Equ 0x03
RP0 Equ 5
PORTA Equ 0x05
PCLATH Equ 0x0A
INTCON Equ 0x0B
SSPCON Equ 0x14
SSPBUF Equ 0x13
SSPSTAT Equ 0x94
BF Equ 0
ADCON1 Equ 0x9F
ORG 0x00
;**************************************************************
;
;
; Ausgaenge einstellen
Init
; Set up für SPI
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw b'00000000' ; Porta und c alle output
movwf TRISA
movlw 0x06 ;A/D ausschalten
movwf ADCON1
;Set up für SPI Ports
movlw 0x10 ;SCK ist output (Master), SDI is input,
movwf TRISC ;SDO ist output,Alle anderen auch
movlw b'01000000' ;Mode 1,1 SPI, middle of output
movwf SSPSTAT ;Ins Abfrage Register
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
movlw b'0011001' ;Mode 1,1 SPI Master Mode, 1/16 Tosc bit
movwf SSPCON ;SSP Aktiv
;set up für alle Ausgehenden Daten
movlw 0x04 ;Config Adressbyte für Max 6952
movwf CONFIGL ;zwischen speichern in Register
movlw 0x01 ;Config Steuerbyte für Max 6952
movwf CONFIGU ;zwischen speichern in Register
movlw 0x01 ;Intensität 1 und 2 Matrize Adressbyte
movwf INTENSIL10 ;zwischen speichern in Register
movlw 0xFF ;Intensität 1 und 2 Matrize Steuerbyte
movwf INTENSIU10 ;zwischen speichern in Register
movlw 0x02 ;Intensität 3 und 4 Matrize Adressbyte
movwf INTENSIL32 ;zwischen speichern in Register
movlw 0xFF ;Intensität 3 und 4 Matrize Steuerbyte
movwf INTENSIU32 ;zwischen speichern in Register
movlw 0x20 ;Adressbyte für 1 Matrize
movwf DISPLU ;zwischen speichern in Register
movlw 0x31 ;Steuerbyte für Muster Zahl 1 auf Matrize 1
movwf DISPLL ;zwischen speichern in Register
;*************************************************************
Hauptrogramm
bcf SS ;Setze Slave Select Low zum Schreiben
movf CONFIGL,0 ;Schreibe Adressbyte config ins work
call Transmit ;Übertragung in SSPBUF
movf CONFIGU,0 ;Schreibe Steuerbyte config ins work
call Transmit ;Übertragung in SSPBUF
bsf SS ;Setze Slave Select auf High
bcf SS ;Setze Slave Select Low zum Schreiben
movf INTENSIL10,0 ;Schreibe Adressbyte Intensität ins work
call Transmit ;Übertragung in SSPBUF
movf INTENSIU10,0 ;Schreibe Steuerbyte Intensität ins work
call Transmit ;Übertragung in SSPBUF
bsf SS ;Setze Slave Select auf High
bcf SS ;Setze Slave Select Low zum Schreiben
movf INTENSIL32,0 ;Schreibe Adressbyte Intensität ins work
call Transmit ;Übertragung in SSPBUF
movf INTENSIU32,0 ;Schreibe Steuerbyte Intensität ins work
call Transmit ;Übertragung in SSPBUF
bsf SS ;Setze Slave Select auf High
bcf SS ;Setze Slave Select Low zum Schreiben
movf DISPLL,0 ;Schreibe Adressbyte für Zahl 1 ins work
call Transmit ;Übertragung in SSPBUF
movf DISPLU,0 ;Schreibe Steuerbyte für Zahl 1 ins work
call Transmit ;Übertragung in SSPBUF
bsf SS ;Setze Slave Select auf High
Finish
goto Finish ;Alles Übertragen tue nichts mehr
Transmit
movwf SSPBUF ;Schreibe aufs SSPBUF die Daten
bsf STATUS,RP0
LOOP btfss SSPSTAT, BF ;Teste ob Übertagung erfolgreich
goto LOOP ;Wenn Nein Teste nochmal
bcf STATUS, RP0 ;Wenn ja dann sende die Nächsten daten
return
end