реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AD7414 : не читается байт 2, второй из temperature value register
Всеволод
сообщение May 23 2007, 11:07
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 23-05-07
Пользователь №: 27 912



AD7414 - датчик температуры, интерфейс I2C.
Temperature value register содержит 10 битов значения температуры.
Первый байт читается нормально и правильно (8 старших битов результата),
а со вторым проблема. Похоже, датчик просто ничего не передает.

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

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

Прикрепленный файл  PRINT_02.BMP ( 175.55 килобайт ) Кол-во скачиваний: 70
Прикрепленный файл  PRINT_03.BMP ( 175.55 килобайт ) Кол-во скачиваний: 69
Go to the top of the page
 
+Quote Post
NickB
сообщение May 23 2007, 14:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



А Вы предварительно адрес регистра записываете?
Применяли AD7414 (правда с АРМом) без проблем
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 23 2007, 17:48
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Всеволод
сообщение May 24 2007, 05:43
Сообщение #4





Группа: Новичок
Сообщений: 4
Регистрация: 23-05-07
Пользователь №: 27 912



Цитата(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?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 24 2007, 07:12
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Всеволод
сообщение May 24 2007, 07:35
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 23-05-07
Пользователь №: 27 912



Цитата(Сергей Борщ @ May 24 2007, 11:12) *
По картинкам действительно все красиво. Скачал и посмотрел даташит. Судя по вашим картинкам, вы работаете по картинке 13. Но перед этим надо по картинке 11 записать address pointer reg. Вы это делаете? Вы точно указываете на температурный регистр? А вы пробовали работать по картинке 12, т.е. в одном цикле писать APR и читать температуру?

Да, читаю по fig. 13, а адрес регистра для чтения задается по fig. 10.
Прочитать 2 раза по 1 байту непонятно как. Температурный регистр
состоит из 2 байт и прочитать второй по fig. 12 не получается -
прочитывается опять первый байт.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 24 2007, 08:43
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Всеволод @ May 24 2007, 10:35) *
Тогда еще одна крамольная мысль - оторвите вывод SDA датчика от линии и повесьте в разрыв резистор ~100 ом. Посмотрите осциллографом обмен на обоих концах этого резистора. Если разница есть - выкладывайте свой код реализации I2С, если нет - то не знаю.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Всеволод
сообщение May 28 2007, 10:12
Сообщение #8





Группа: Новичок
Сообщений: 4
Регистрация: 23-05-07
Пользователь №: 27 912



Всем спасибо за участие, заработало. Все-таки что-то с датчиком.
На другой плате работает без проблем.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 02:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.02374 секунд с 7
ELECTRONIX ©2004-2016