Hej!
Tack för tipsen, jag har nu skrivit lite ny kod, satt dit pull-up resistorer och satt rätt adress(!). Det jag försöker göra är att ta emot en byte data från en sensor via i2c. Nu hänger den sig på raden för ACK från slave jag antar betyder att den inte hittar på sensorn.
Så här tänker jag mig att programmet skall fungera.
Initiera MSSP för i2c master
Skicka start bit, SSPCON2,SEN
Adressera slave
Ta emot ACK från slave
Konfigurera MSSP för recive mode, SSPCON2,RCEN
Ta emot data från slave
Spara data till en variabel, SSPBUF-->variabel
Skicka ACK till slave
Sätt stop bit, SSPCON2,PEN
Klart!
Här kommer delar av min kod.
Initiering av MSSP:
Kod: Markera allt
;Configure SSP for hardware master mode i2c
bsf SSPSTAT,SMP ;I2C slew rate control disabled
bsf SSPCON1,SSPM3 ;I2C master mode in hardware
bsf SSPCON1,SSPEN ;enable SSP module
movlw 0x1D ;set I2C clock rate to 100kHz,29d=>1Dh för 12MHz
movwf SSPADD ;SSPADD is baudrate reload value in mastermode
bsf TRISC,3 ;I2C SCL pin is input
bsf PORTC,3 ;(will be controlled by SSP)
bsf TRISC,4 ;I2C SDA pin is input
bsf PORTC,4 ;(will be controlled by SSP)
Mottagning av en byte data:
Kod: Markera allt
;Startar mottagning över i2c
bcf PIR1,SSPIF
bsf SSPCON2,SEN ;Sätter start bit för MSSP
startSend
btfss PIR1,SSPIF ;Kontrollerar om i2c modulen är igång
goto startSend
bcf PIR1,SSPIF
movf slaveAddr,W
movwf SSPBUF ;Flytta slave adressen till SSPBUF för read, detta startar sänding av adressen
addressSSPBUF
btfss PIR1,SSPIF ;btfsc SSPSTAT,2 ;Kontrollerar om vi skickat adressen, R/W bit
goto addressSSPBUF
ackSlave
btfss SSPCON2,ACKSTAT ;Fick vi ACK fån slave för adressen? ACKSTAT bara aktiv i Master transmit mode
Goto ackSlave
bcf PIR1,SSPIF
bsf SSPCON2,RCEN ;Gör klart för mottagning av en byte
reciveByte
btfss PIR1,SSPIF ;Kontrollerar om vi tagit emot en byte
goto reciveByte
movff SSPBUF,data1 ;Lägg mottagen data in en variabel
bsf SSPCON2,ACKDT ;Skickar ACK till slave
bsf SSPCON2,ACKEN
ackSend
btfsc SSPCON2,ACKEN ;Kontrollerar om ACK är skickad
goto ackSend
bsf SSPCON2,PEN ;Skickar stop bit
stopSend
btfsc SSPCON2,PEN ;Kontrollerar om stop bit sänd
goto stopSend
Ska jobba vidare med det under kvällen så får vi se