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
> ; #include <P16f877A.INC> > ; __CONFIG _BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC soweit ich mich entsinnen kann ist alles was in einer zeile nach dem semikolon steheht doch ein kommentar? an sonsten bin ich nicht fit in sachen asm aber ein fehler der gerne gemacht wird bei pic und spi ist das nach dem senden das register nichtmehr ausgelesen wird und dadurch keine weiteren übertragungen stattfinden ich poste mal nen stück c-code vieleicht kannste damit was anfangen das is von der kommunikation mit nem mcp4822 (DA-Wandler von microchip)
1 | void send_spi_contrast(char data) |
2 | {
|
3 | GIE = 0; // interrups ausschalten (hatte probleme bei mir gemacht |
4 | cs = 0; // chipselect auf 0 setzen (meist auch solange wie du mit dem device kommunizieren möchtest |
5 | SSPBUF = 0b00010001; // was auch immer du senden möchtest ins sspbuf register schreiben |
6 | while(BF == 0); // warten bis er fertig damit ist |
7 | spi_dummy = SSPBUF; // SSPBUF REGISTER AUSLESEN !!! |
8 | BF = 0; // bf wieder auf 0 setzen |
9 | SSPBUF = data; //das 2te byte ins sspbuf register schreiben |
10 | while(BF == 0); // warten bis er fertig damit ist |
11 | spi_dummy = SSPBUF; // SSPBUF REGISTER AUSLESEN !!! |
12 | BF = 0; // bf wieder auf 0 setzen |
13 | cs = 1; // chipselect wieder auf 1 (kommunikation beendet |
14 | GIE = 1; // interrupts wieder einschalten |
15 | }
|
Oh das mit dem Semicolon in der config ist wohl beim kopieren verrutscht ich versuch mal das In C geschriebene zu verwerten danke aufjeden fall
ich wollt noch was Fragen (Weil ich es immer noch nicht zum laufen gebracht hab) kann es sein das es an dem 16 bit register vom Max liegt ich sende ja immer 2mal 8 bit pakete bitte um Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.