Страница 1 из 1

Кто работал с датчиком температуры AD7415? Есть вопросы...

Добавлено: Вс фев 28, 2010 12:30:13
Bugger81
Atmega8+AD7415+DS3231+CVAVR

Первый раз пытаюсь обработать I2C-устройство самостоятельно, без библиотек, и возникают проблемы: немогу ничего сделать. На одной шине с ней висят часы DS3231 - они работают, а эта выдаёт только 255 на выходе. Может я неправильно работаю с протоколом I2C, подскажите?

Вот либа:

Код: Выделить всё

#include <i2c>
#include <delay>


void write_data1(char adr, char data1)
{                  //функция записи
i2c_start();       //формируем состояние СТАРТ на шине 
i2c_write(0x49);   //пишем адрес устройства
i2c_write(adr);    //пишем адрес регистра внутри устройства(часов)
i2c_write(data1);   //пишем данные в выбранный регистр
i2c_stop();        //формируем состояние СТОП на шине
}



unsigned char read_temp5 (char adr) //функция чтения

{
unsigned char data1; //объявляем переменную

i2c_start(); //формируем состояние СТАРТ на шине
i2c_write(0x49); //пишем адрес устройства
i2c_write(0b00000001); //пишем адрес регистра внутри устройства(служебн)
i2c_write(0b00000100); //команда измерения температуры
i2c_start(); //формируем состояние СТАРТ на шине
i2c_write(adr); //пишем адрес регистра внутри устройства (регистр температуры)
data1 = i2c_read(0); //считываем данные из выбранного регистра
return data1;

И кусок программы:

Код: Выделить всё

nado1=read_temp5(0x0);
lcd_gotoxy(0,1);
sprintf(lcd_buffer," %i",nado1);
lcd_puts(lcd_buffer);
Выдаёт всегда 255. Вполне вероятно, что я выполняю неправильную последовательность комманд для чтения температуры, первый раз вплотную работаю с pdf.

Добавлено: Вс фев 28, 2010 16:33:07
Bugger81
Усё, разобрался. Я, оказывается адресовался к устройству неправильно. У него было в адресе 7 бит, я думал, что старший - 0, а, прочитав внимательно pdf, оказалось, что начинается со таршего, а младший бит - это признак чтения/записи.

Поменял адрес - теперь всё ОК.