Atmega8+AD7415+DS3231+CVAVR
Первый раз пытаюсь обработать I2C-устройство самостоятельно, без библиотек, и возникают проблемы: немогу ничего сделать. На одной шине с ней висят часы DS3231 - они работают, а эта выдаёт только 255 на выходе. Может я неправильно работаю с протоколом I2C, подскажите?
Вот либа:
И кусок программы:
Выдаёт всегда 255. Вполне вероятно, что я выполняю неправильную последовательность комманд для чтения температуры, первый раз вплотную работаю с pdf.
Первый раз пытаюсь обработать 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);
