12.07.2015 Views

Programming Manual Elektor Proton Robot - ELEKTOR.se

Programming Manual Elektor Proton Robot - ELEKTOR.se

Programming Manual Elektor Proton Robot - ELEKTOR.se

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}SSPBUF=Data;//Send bytewhile((PIR1 & 0x08) == 0); //Wait for control bit to be <strong>se</strong>ntif(SSPCON2 & 0b01000000) //Check Acknowledgementreturn (1); //No Acknowledgementel<strong>se</strong> return (0); //Acknowledgement received//receive a byte of data - requested by the master and <strong>se</strong>nt by the slave// returns a byte of incoming data// if last = 1 - last byte was received - If last = 0 - the master expects further I2C_RECEIVE_BYTE instructionschar I2C_RECEIVE_BYTE(char Last){PIR1 &=~0b00001000; //cr_bit(PIR1,SSPIF);SSPCON2 |=0x08;//st_bit(SSPCON2,RCEN),Initiate Readwhile((PIR1 & 0x08) == 0); //while(ts_bit(PIR1,SSPIF) == 0),Wait for data readif (Last)SSPCON2 |=0b00100000; //st_bit(SSPCON2,ACKDT),Send Nackel<strong>se</strong> SSPCON2 &=~0b00100000; //cr_bit(SSPCON2,ACKDT),Send AckSSPCON2 |=0b00010000; //st_bit(SSPCON2,ACKEN),Initiate Nackwhile(SSPCON2&0b00010000); //(ts_bit(SSPCON2,ACKEN)) Wait for data readreturn(SSPBUF);//Store incoming data}//combination of all the I2C instructions to <strong>se</strong>nd a byte of date to a specific// index in a certain devicevoid I2C_SEND_MESSAGE(char Device_ID, char AddrH, char Data){char RetVal = 0;I2C_START();//Start transactionI2C_TRANSMIT_BYTE(Device_ID); //Transmit Device AddressI2C_TRANSMIT_BYTE(AddrH); //Transmit Internal AddressI2C_TRANSMIT_BYTE(Data); //Send Data byteI2C_STOP();//Stop Transaction}//combination of all the I2C instructions to receive a byte of date from a specific// index in a certain devicechar I2C_RECEIVE_MESSAGE(char Device_ID, char AddrH){char RetVal = 0;I2C_START();//Start transactionI2C_TRANSMIT_BYTE(Device_ID); //Transmit Device AddressI2C_TRANSMIT_BYTE(AddrH); //Transmit Internal AddressI2C_RESTART();//Restart transactionDevice_ID = Device_ID | 0x01; //Change Device ID to read modeI2C_TRANSMIT_BYTE(Device_ID); //Transmit Device AddressRetVal = I2C_RECEIVE_BYTE(1); //Read data at addressI2C_STOP();//Stop Transactionreturn RetVal;//Return data}Bart Huyskens <strong>Manual</strong> <strong>Elektor</strong> <strong>Proton</strong> V1.0 3 April 2011 153

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!