Добрый день уважаемые знатоки!
При программировании интерфейса twi у ATMega8 столкнулся с проблемой.
Пытаюсь подключить датчик температуры LM75 по указанному интерфейсу.
Делаю вроде правильно:
1. Формирую стартовые условия.
2. После возникновения прерывания проверяю статусный регистр. Если битики TWS7...TWS3 дают чисто 0x08 то, посылаю байт адреса микросхемы (0х90)
3. После возникновения прерывания проверяю статусный регистр. Если битики TWS7...TWS3 дают чисто 0x18, посылаю байт указателя(0х00).
4. После возникновения прерывания проверяю статусный регистр. Если битики TWS7...TWS3 дают чисто 0x28... А они его не дают!!!
Уже замучился, никак не могу получить код 0х28 в статусном регистре.
Методом перебора нашел код, который тама получается: 0х10 - повстарт ??? причем он тут непонятно...
Кстати тоже самое было и с 1307, часы не ACKали байт указателя.
Обе линии подтянуты к питанию через 4.7 кОм.
Напряжение питания - 5В.
Если кто сталкивался с подобным, помогите плиз!
Вот код прерывания:
CODE
#pragma vector = TWI_vect
__interrupt void twi_interrupt(void)
{
if((0xf8&TWSR)==0x08)
{
buffer_1[0] = 0x9F;
TWDR = 0x90;
TWCR |= 0x84;
return;
}
if((0xf8&TWSR)==0x18)
{
buffer_1[1] = 0x25;
TWDR = 0x00;
TWCR |= 0x84;
return;
}
if((0xf8&TWSR)==0x28)
{
buffer_1[2] = 0x0D;
TWDR = 0x00;
TWCR |= 0x84;
return;
}
TWCR |= 0x94;
}