AVR & I2C

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
                           Здравствуй, All!

Кто нибудь может поделиться сишными исходниками для работы с шиной I2C. Хочу
сравнить исходники и найти ошибку :-((
У меня создается впечатление что наступил на какие то грабли но не вижу на
какие :-(( Имеем 24С01А (планируется 24С64) & 90S8515 пытаюсь организовать

for(i=0;i<128;i++)
// write_byte_I2C(Adress,Data_Byte)

При записи организую програмный стоп после заливки 1 байта чтобы проверить ACK
микросхемы памяти. Алгоритм закачивания в память вроде стандартный: к примеру
заливаем I2C_start -> 0xA0 (ACK=0) -> 0x00 (ACK=0) -> 0x00 (ACK=0) -> I2C_stop
ноги 1,2,3 на земле. Вынимаю микросхему вставляю в программатор там все ячейки
0xFF :( Т.е. судя по ACK она вроде пишет но реально ничего подобного не
наблюбается :( SDA SCL подтянут к 5В резюками и рулятся DDRB при этом
PORTB=0x00. Время таймингов завишено 10 кратно изначально по этому грешить что
микруха писать не успевает не могу.
Вобщем мне надо с чем то сравнить чтоб глюк найти. :(

P.S. Самое неприятное, что я то же самое делал для MSP430 на асме и все
работало я там I2C индикатором рулил :( но пока ломает 430 асм перелопачивать
под AVR :(

                  С уважением, Олег.

... В чем заключается мультизадачнось WINDOWS? Работает и глючит одновременно!

AVR & I2C
       Доброго здоровья, Oleg!

27 Aug 03 09:38, Oleg Dolgov написал для All:

 OD> Кто нибудь может поделиться сишными исходниками для работы с шиной I2C.
 OD> Хочу
 OD> сравнить исходники и найти ошибку :-(( У меня создается впечатление что
 OD> наступил на какие то грабли но не вижу на какие :-(( Имеем 24С01А
 OD> (планируется
 OD> 24С64) & 90S8515 пытаюсь организовать

 OD> for(i=0;i<128;i++)
 OD> // write_byte_I2C(Adress,Data_Byte)

 OD> При записи организую програмный стоп после заливки 1 байта чтобы проверить
 OD> ACK
 OD> микросхемы памяти. Алгоритм закачивания в память вроде стандартный: к
 OD> примеру
 OD> заливаем I2C_start -> 0xA0 (ACK=0) -> 0x00 (ACK=0) -> 0x00 (ACK=0) ->
 OD> I2C_stop
 OD> ноги 1,2,3 на земле. Вынимаю микросхему вставляю в программатор там все
 OD> ячейки
 OD> 0xFF :( Т.е. судя по ACK она вроде пишет но реально ничего подобного не
 OD> наблюбается :( SDA SCL подтянут к 5В резюками и рулятся DDRB при этом
 OD> PORTB=0x00. Время таймингов завишено 10 кратно изначально по этому грешить
 OD> что
 OD> микруха писать не успевает не могу. Вобщем мне надо с чем то сравнить чтоб
 OD> глюк найти. :(

 OD> P.S. Самое неприятное, что я то же самое делал для MSP430 на асме и все
 OD> работало я там I2C индикатором рулил :( но пока ломает 430 асм
 OD> перелопачивать
 OD> под AVR :(

  вот это у меня работает, макросы SET, CLR, DBIT1, DBIT0 транслируются в
стандартные битовые операции

static uchar I2C_Err;
/************************************************/
void Send_START()
{
  SET(I2C_DIR);
  SET(I2C_DTAO);
  SET(I2C_SCK);
  CLR(I2C_DTAO);
}

/************************************************/
void Send_STOP()
{
  SET(I2C_DIR);
  CLR(I2C_DTAO);
  SET(I2C_SCK);
  SET(I2C_DTAO);
}

/************************************************/
uchar Send_I2Byte(register uchar data)
{
register uchar i,j,M;

  SET(I2C_DIR); CLR(I2C_SCK);
  for (i=0,M=0x80;i<8;i++,M>>=1) {
    if (data&M) SET(I2C_DTAO); else CLR(I2C_DTAO);
    SET(I2C_SCK); for (j=0;j<20;j++) _NOP(); CLR(I2C_SCK);
    for (j=0;j<20;j++) _NOP();
  }
  CLR(I2C_DIR); CLR(I2C_DTAO); SET(I2C_SCK);
  for (j=0;j<20;j++) _NOP();
  MDB%IT1(I2C_DTAI)?0:1;
  SET(I2C_DIR); CLR(I2C_SCK);
  return M;
}

/************************************************/
uchar Read_I2Byte(register uchar ack)
{
register uchar val,i,j,M;

  CLR(I2C_DIR); CLR(I2C_DTAO); CLR(I2C_SCK); val=0;
  for (i=0,M=0x80;i<8;i++,M>>=1) {
    SET(I2C_SCK); for (j=0;j<20;j++) _NOP();
    if DBIT1(I2C_DTAI) val|=M;
    CLR(I2C_SCK);
    for (j=0;j<20;j++) _NOP();
  }
  SET(I2C_DIR);
  if (ack) CLR(I2C_DTAO); else SET(I2C_DTAO);
  SET(I2C_SCK); for (j=0;j<20;j++) _NOP(); CLR(I2C_SCK);
  return val;
}


    WBR, Сергей.                                     ICQ: 101347299

... Такая эмансипация, что каждый может стать женщиной.

Site Timeline