Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AD7414 : не читается байт 2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Всеволод
AD7414 - датчик температуры, интерфейс I2C.
Temperature value register содержит 10 битов значения температуры.
Первый байт читается нормально и правильно (8 старших битов результата),
а со вторым проблема. Похоже, датчик просто ничего не передает.

Программа работает под отладчиком через ICD2.
Подскажите, если кто сталкивался.

В присоединенных файлах осциллограмма, чтение целиком и чтение двух
байтов результата. Вроде все соответственно документации.

Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
NickB
А Вы предварительно адрес регистра записываете?
Применяли AD7414 (правда с АРМом) без проблем
Сергей Борщ
Цитата(Всеволод @ May 23 2007, 14:07) *
AD7414 - датчик температуры, интерфейс I2C.
По симптомам 99% что вы в ответ на первый же принятый байт посылаете NACK после чего AD7414 перестает передавать на шину. Вы должны послать на все принимаемые байты кроме последнего ACK и только на последний NACK.
Всеволод
Цитата(NickB @ May 23 2007, 18:52) *
А Вы предварительно адрес регистра записываете?
Применяли AD7414 (правда с АРМом) без проблем

Спасибо за ответ. Конечно я записал адрес. Тем более, что в
получаемом первом байте правильная температура.
Попробую запаять другой датчик, что ли...


Цитата(Сергей Борщ @ May 23 2007, 21:48) *
По симптомам 99% что вы в ответ на первый же принятый байт посылаете NACK после чего AD7414 перестает передавать на шину. Вы должны послать на все принимаемые байты кроме последнего ACK и только на последний NACK.

Нет, после первого отвечаю ACK, после второго NACK. Это хорошо видно на осциллограмме,
именно эти 2 байта видно в PRINT_02.BMP.
Пробовал специально возвращать NACK после первого байта - результат точно такой же...
Может ли быть, что ACK воспринимается как NACK? Или как STOP?
Сергей Борщ
Цитата(Всеволод @ May 24 2007, 08:43) *
Может ли быть, что ACK воспринимается как NACK? Или как STOP?
По картинкам действительно все красиво. Скачал и посмотрел даташит. Судя по вашим картинкам, вы работаете по картинке 13. Но перед этим надо по картинке 11 записать address pointer reg. Вы это делаете? Вы точно указываете на температурный регистр? А вы пробовали работать по картинке 12, т.е. в одном цикле писать APR и читать температуру?
Всеволод
Цитата(Сергей Борщ @ May 24 2007, 11:12) *
По картинкам действительно все красиво. Скачал и посмотрел даташит. Судя по вашим картинкам, вы работаете по картинке 13. Но перед этим надо по картинке 11 записать address pointer reg. Вы это делаете? Вы точно указываете на температурный регистр? А вы пробовали работать по картинке 12, т.е. в одном цикле писать APR и читать температуру?

Да, читаю по fig. 13, а адрес регистра для чтения задается по fig. 10.
Прочитать 2 раза по 1 байту непонятно как. Температурный регистр
состоит из 2 байт и прочитать второй по fig. 12 не получается -
прочитывается опять первый байт.
Сергей Борщ
Цитата(Всеволод @ May 24 2007, 10:35) *
Тогда еще одна крамольная мысль - оторвите вывод SDA датчика от линии и повесьте в разрыв резистор ~100 ом. Посмотрите осциллографом обмен на обоих концах этого резистора. Если разница есть - выкладывайте свой код реализации I2С, если нет - то не знаю.
Всеволод
Всем спасибо за участие, заработало. Все-таки что-то с датчиком.
На другой плате работает без проблем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.