Yes, you can use the original pins for I2C. For this you have to use
the example included in the phrozen patch (apps/i2c). Then it should
be no problem. I'm not sure, if you could use any other port than the
original i2c-port in this example.

Regards Steff

--- In [email protected], "FReichel" <[EMAIL PROTECTED]> wrote:
>
> Dear all,
> 
> I'm the first time at this group.
> I tried the axis example, but I could not use the original ports, 
> because the mmc card is there connected. So I used OG4 and IOG16.
> But I got only the message "Nack".
> I changed it in the c-file to 1<<4; 1<<16; 
> Why doesn't used a pullup resistor for SCK (I2C-Clock)??
> Can I use the original pins for I2C (port PB0 and PB1)?
> 
> Thanks for your help.
> Frank
> 
> 
> --- In [email protected], Matteo <ma1069@> wrote:
> >
> > Hi all,
> > 
> > I already broken my head with i2c bit banging mode time ago, 
> whithout the
> > phrozen patch (because I hadn't when I wrote my code)
> > 
> > If you are interested to, I'll post here the code needed to write 
> to/read
> > from the PCF8591 and PCF8574
> > Please note that I've used a custom type for storing the A/D 
> converter
> > values, a stupid typedef with 4 unsigned chars inside named vect4d.
> > 
> > It works with the functions you can find on the user space bit 
> banging
> > method tutorial...
> > I can assure you that it works because I'm actually using it :)
> > 
> > vect4d ADConRead(unsigned char addr) {
> >   unsigned char address; /* Base address: 1001 000X */
> >   vect4d temp;
> >   address = addr;
> >      i2c_start();
> >         if (i2c_outbyte(address)==0) {
> >             //printf("NACK received %d\n",__LINE__);
> >             i2c_stop();
> >         }
> > 
> >         if (i2c_outbyte(4)==0) {
> >             //printf("NACK received %d\n",__LINE__);
> >             i2c_stop();
> >         }
> >         i2c_stop();
> > 
> >         // Read the A/D value
> > 
> >         i2c_start();
> >         if (i2c_outbyte(address+1)==0) {
> >             //printf("NACK received %d\n",__LINE__);
> >             i2c_stop();
> >         }
> > 
> >         i2c_inbyte2(0);                 // Last conversion result
> >         temp.val1=i2c_inbyte2(0);     // Current conversion result
> >         temp.val2=i2c_inbyte2(0);
> >         temp.val3=i2c_inbyte2(0);
> >         temp.val4=i2c_inbyte2(1);
> > 
> >         i2c_stop();
> > 
> > 
> >   return temp;
> > }
> > 
> > /* Write values on a I/O Expander: */
> > int IOExpWrite(unsigned char address, unsigned char pattern) {
> >   unsigned char o_byte = 112;
> >   i2c_stop();
> >   i2c_start();
> > 
> >   o_byte = devices[address].slaveadd;
> >   if (i2c_outbyte(pattern)==0) return -1;
> >   i2c_stop();
> > 
> >   return 1;
> > }
> > 
> > /* Read values from a I/O Expander: */
> > unsigned char IOExpRead(unsigned char address) {
> >   unsigned char o_byte = 112;
> >   unsigned char i_byte;
> >   i2c_stop();
> >   i2c_start();
> > 
> >   o_byte = address;
> >   if (i2c_outbyte(o_byte)==0) printf("NACK !! --");
> >   i_byte = i2c_inbyte();
> >   i2c_stop();
> > 
> >   return i_byte;
> > }
> >
>


Reply via email to