Thanks Robert for your mail : I'll certainly use you code for my PICs haven't I2C hardware.
Pic 16F88 have the needed hardware and I did notice those function in libio lib. But my question is more having a full example, from 0 to a workable tiny application : - initialization to do, - choregraphy - checks Thanks Laurent --- The misspelling master is on the Web. _________ 100 % Dictionnary Free ! / /( / Dico / / Pleins d'autres fautes sur /________/ / (#######( / http://destroyedlolo.homeunix.org Quoi, des fautes d'orthographe! Pas possible ;-D. A voir aussi : http://sillingy.clubphotos.fr , le site du photo club de ... Sillingy. --- En date de : Jeu 8.7.10, r...@penti.org <r...@penti.org> a écrit : > De: r...@penti.org <r...@penti.org> > Objet: Re: [Sdcc-user] Example or tutorial for I2C usage with PIC > À: sdcc-user@lists.sourceforge.net > Date: Jeudi 8 juillet 2010, 2h47 > Quoting "Laurent FAILLIE" <l_fail...@yahoo.com>: > > > Hello, > > > > I googled but w/o success ... can someone point me out > a tutorial or > > at least an example of I2C slave programming with SDcc > on PIC (I'm > > using 16F88) ? > > > > I don't know if the 16F88 has a hardware I2C circuit, but > if it has, > I've used this (just the relevant functions here): > > > // Send an I2C start sequence > void I2Cstart() > { > SEN=1; > while(SEN) { > } > SSPIF=0; > } > > > // Send an I2C STOP sequence > void I2Cstop() > { > PEN=1; > while(PEN) { > } > SSPIF=0; > } > > // Send a repeated START > void I2Crestart() > { > RSEN=1; > while(RSEN) { > } > SSPIF=0; > } > > > These were the control signals, next is what I used for the > data, > after calling relevant previous functions (never mind my > comments, I > assume an RTC won't complain about any data errors): > > // Shift one byte of data to the bus. > // As of this version, no error checing is done. The > function > // assumes the receiver sends an "Acknowledged". > void I2Cwrite(unsigned char c) > { > SSPBUF=c; > while(!SSPIF); > SSPIF=0; > } > > > > > > // Shift in one byte from the bus and then sends and > "Acknowledge" > unsigned char I2Cread(unsigned char ack) > { > unsigned char c; > RCEN=1; > while(!BF); > c=SSPBUF; > if(ack) { > ACKDT=0; > } > else { > ACKDT=1; > } > ACKEN=1; > return(c); > } > > > > > ************************************ > Then, the bit-banged version, if you don't have proper I2C > hardware. > This is on a 16F690, mapping like this: > SDA=PORTB4 > SCL=PORTB6 > > (You can try without the delays, for me it was just for > being on the > safe side) > > > > void I2Cstart(void) > { > SCL=0; > I2Cdelay(); > SDA=1; > I2Cdelay(); > SCL=1; > I2Cdelay(); > SDA=0; > I2Cdelay(); > } > > > void I2Cstop(void) > { > SDA=0; > I2Cdelay(); > SCL=1; > I2Cdelay(); > SDA=1; > I2Cdelay(); > } > > > > void I2Cwrite(unsigned char c) > { > signed char i; > SCL=0; > I2Cdelay(); > for(i=7 ; i>=0 ; i--) { > SDA=((c>>i)&0x01); > I2Cdelay(); > SCL=1; > I2Cdelay(); > while(SCL_RD==0) { // Ensure > the clock has been released by the slave > } > SCL=0; > I2Cdelay(); > } > I2Cdelay(); > while(SDA_RD) { > // wait for ack > } > SCL=1; > I2Cdelay(); > I2Cdelay(); > I2Cdelay(); > > } > > > > > unsigned char I2Cread(unsigned char ack) > { > unsigned char i,byte; > byte=0x00; > SCL=0; > for(i=0;i<8;i++) { > I2Cdelay(); > SDA=1; > SCL=1; > while(SCL_RD==0) { // Clock > stretch > } > I2Cdelay(); > byte=byte << 1; > byte |= (SDA_RD & 0x01); > I2Cdelay(); > SCL=0; > } > I2Cdelay(); > if(ack==0) { > SDA=1; > I2Cdelay(); > SCL=1; > I2Cdelay(); > SCL=0; > I2Cdelay(); > } > else { > SDA=0; > I2Cdelay(); > SCL=1; > I2Cdelay(); > SCL=0; > } > return(byte); > > } > > > Note: I haven't bothered with error checking or things like > that, you > may want to add some later on... > > I hope this helps at all. > > Regards, Robert > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Sdcc-user mailing list > Sdcc-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sdcc-user > ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user