SPI MCP23S09

OP #4072976
Lesenswert?

Hallo,
vielleicht kann mir jemand weiter helfen.
Ich möchte über den SPI den MCP23S09 ansteuern.
Wäre die Initialisierung soweit richtig? Und wie steuer ich zB. eine Led 
über den MCP an.

init_SPI

  BANKSEL      SSPCON
  movlw      B'00110000'
  movwf      SSPCON

  BANKSEL      SSPSTAT
  movlw      B'10000000'
  movwf      SSPSTAT

  BANKSEL      INTCON
  bsf      INTCON,7
  bsf      INTCON,6

Gruß Hansi
#4073002
Lesenswert?

Du möchtest wahrscheinlich wissen, ob deine SPI-Initialisierung für 
"deinen" Mikrocontroller ok ist.
Kannst du uns diesen Controller auch nennen?
Andernfalls ist es nicht ratsam, Hinweise zu geben bzw. auf diese zu 
hören.

Im Datenblatt steht eigentlich alles notwendige für den MCP23S09 drin.

- GPIO-Port als Ausgang definieren (per default sind alle als Input) - 
Register "IODIR"
- GPIO-Port mit gewünschter Bitbelegung beschreiben - Register "OLAT"

Da keiner weiß, ob wie du die LED an den Expander angeschlossen hast, 
kann nicht gesagt werden, ob du sie mit einer 1 oder einer 0 anbekommst.

and GO!
#4073029
Lesenswert?

Also ich würde dir zum SPI-Mode 1,1 raten
(Data transmitted on falling edge of SCK + SCK high in IDLE)

Im MCP23S09-Datenblatt wird auch Mode 0,0 oder 1,1 empfohlen.

Quasi:

SSPSTAT: 0b11000000
SSPCON:  0b00110000

[EDIT]
Wenn du mit den Interrupts die LED Togglen möchtest, musst du noch etwas 
mehr einstellen, als GIE und PIE ;)
OP #4073745
Lesenswert?

Es will immer noch nicht so richtig,
ich hab jetzt genau das geschrieben:

;init_SPI

  BANKSEL      SSPCON
  movlw      B'00110000'
  movwf      SSPCON

  BANKSEL      SSPSTAT
  movlw      B'11000000'
  movwf      SSPSTAT




Programm
;  bcf      PORTC,2
  BANKSEL      PIE1
  bsf      PIE1,SSPIE
  BANKSEL      PORTA
  bcf      PORTA,0
  BANKSEL      SSPBUF
  movlw      B'00101000'
  movwf      SSPBUF

  movlw      SSPBUF
  movwf      Leer
  BANKSEL      PORTA
  bsf      PORTA,0
  BANKSEL      PIE1
  bcf      PIE1,SSPIE
  BANKSEL      PIR1
;  bcf      PIR1,SSPIF
#4073912
Lesenswert?

Sry, ich war grad mit den Gedanken in einem anderen Thread^^
Da ging es um einen PIC18F2550^^

Für den PIC16 ist das Beschreiben von PORTA ok.

Dann schau dir bitte die Kommunikation mit dem MCP23S09 an. Du musst ihn 
via SPI korrekt adressieren!
D.h. fallende Falnke CS + Opcode(inkl.R/W) + Register (+ zu schreibendes 
Byte, wenn im Write-Mode) + steigende Flanke CS

steht doch alles im Datenblatt^^

Wenn du einfach nur ein Byte via SPI raus schickst, weiss doch der 
IO-Expander nicht, was er damit machen soll. Das Teil hat keine 
integrierte Intelligenz.

[EDIT]
Des Weiteren:
Wozu aktivierst du SSPIE vor dem Senden?
Wozu brauchst du den Interrupt "während" der Operation als Master?
OP #4073929
Lesenswert?

BANKSEL      TRISA
movlw      B'00000000'
movwf      TRISA

movlw      B'00010000'    ; SDI (RC4)
movwf      TRISC

;init_SPI

BANKSEL   SSPSTAT
movlw       B'11000000'
movwf       SSPSTAT

  BANKSEL      SSPCON
  movlw       B'00110000'
  movwf      SSPCON



Programm


  BANKSEL      PORTA
  bcf      PORTA,0


  BANKSEL      SSPBUF
  movlw      B'0010000110101011'
  movwf      SSPBUF

  BANKSEL     SSPSTAT

Flagabfrage
  btfss      SSPSTAT,BF
  goto      Flagabfrage

  BANKSEL      SSPBUF
  movf      SSPBUF, W

  BANKSEL      PORTA
  bsf      PORTA,0

    goto      Programm

end


Ich habe das soweit fertig.Ist das richtig mit den 16 Bit am SSPBUF?
#4073950
Lesenswert?

Hansi Müller schrieb:
> Ich habe das soweit fertig.Ist das richtig mit den 16 Bit am SSPBUF?

Was sagt denn dein Verstand, wenn du 16Bit in ein 8Bit-Buffer schieben 
möchtest?
Du musst das schon nacheinander machen.
1. Byte1 ins SSPBUF
2. warten bis rausgesendet (Stichwort: SSPIF)
3. Byte2 ins SSPBUF
4. warten bis rausgesendet (Stichwort: SSPIF)
und so weiter...

Kannst du mal bitte erklären, was das für ein 16Bit-Wort ist?
Bzw. warum du genau diese Bitbelegung verwendet hast.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren