??? 01/13/06 14:25 Read: times |
#107288 - Re: Why not interrupt. Responding to: ???'s previous message |
Dear Erik,
Thanks for your reply, I2CON=0x40; I2CON|=0x20; This seems ok I2CON=40 makes all other bits 0 except I2C enable bit. why do you not base it on interrupt? this is a "heavy" as bit banging. I am using interrupt too but that has been kept shortest possible so that it can read data from ADC at fastest speed possible. The function i posted is used only for channel setting and a dummy read actual reading is done in interrupt. Here is the interrupt. //ISR for I2C Bus ADC data Receive. void i2c_isr(void) interrupt 11 using 1 { uchar bt2; // Variable to store adc data uint bsqr; // Variable to store square data. bt2=I2DAT; // Fetch data from ADC bsqr=bt2*bt2; // Square it. t1lock=0; // Flag set by timer 1 interrupt when it occurs. MSSUM+=bsqr; samples++; if (t1lock) // If timer 1 interrupt had occured while above computations { MSSUM=0; // Make MSSUM and samples zero. samples=0; } I2CON&=0xF7; // SI=0 } These lines in main function initiate the interrupt. I2CON=0x44; // Initializing for 94KHz Auto Ack on. I2CON|=0x20; // Send a start condition. while(!(I2CON&0x08)); //Wait for SI I2CON&=0xDF; // Clear start bit. I2DAT=0x91; // Slave address 000 and read. I2CON&=0xF7; // Clear the SI Flag. while(!(I2CON&0x08)); //Wait for SI I2CON&=0xF7; // Clear the SI Flag. EI2C=1; // Set I2C interrupt flag to turn on interrupt. The above two codes seems working absolutely fine and have possibly no problems only the first function i posted has problems. Thanks & Regards, Prahlad Purohit |
Topic | Author | Date |
I2C routine getting stuck. | 01/01/70 00:00 | |
you can get working code by using | 01/01/70 00:00 | |
Re: Getting code working | 01/01/70 00:00 | |
I took aquick look at the I2con use and | 01/01/70 00:00 | |
Re: Why not interrupt. | 01/01/70 00:00 | |
24MHz without four layer board? | 01/01/70 00:00 | |
Re: 24MHz | 01/01/70 00:00 | |
What max freq can be used with two layer | 01/01/70 00:00 | |
who knows | 01/01/70 00:00 | |
I2C routine getting stuck. | 01/01/70 00:00 | |
Working very well with C668 @ 94khz bus | 01/01/70 00:00 | |
Bit Bangin Works fine. | 01/01/70 00:00 | |
Problem Solved. | 01/01/70 00:00 | |
maybe worth putting it into code library | 01/01/70 00:00 | |
Uploaded into code library.![]() | 01/01/70 00:00 |