Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прикручивание DS2482S к TWI arm Atmel
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
DpInRock
Смыл обращения к DS2482 состоит в том, что первоначальная команда записи должна поменяться на команду чтения после повторного старта.

И вот тут как угадать, когда именно перенастраивать TWI?

Делал по всякому.
Например так

Код
TWI0->TWI_THR = 0x87; -- передается два байта, признак стоп не установлен.
while(!TWI_ByteSent());
TWI0->TWI_THR = bit7;
while(!TWI_ByteSent()); -- тут еще не закончился передаваться байт

TWI0->TWI_MMR = (0 << 8) | TWI_MMR_MREAD | (0x18 << 16); --- а я уже перестариваю на чтение у устанавливаю СТАРТ.
TWI0->TWI_CR=1;

do {
     while (!TWI_ByteReceived());
     a=TWI_ReadByte();
    
    } while ((a&1)!=0);


Какие-то команды так выполняются, например Сброс 1-wire. Четко видно. И возвращается нужный статус.
А вот команда чтения байта - фигня какая-то.
СУдя по всему всегда читается байт статуса. Вне завимости от команды....

Ктоб направил на путь. А то писать руками программный I2c при наличии аппаратного как-то не очень.

Короче разобрался.
ПАузы между командами должны быть. И не смотреть на описание этой микросхемы. Его составляли враги.
ILYAUL
Обычно после отсылки чего нибудь куда нибудь ждут флажок в регистре статуса TWI что , что-то куда-то ушло , а уж затем делают следующие действие. А не делают паузы.
DpInRock
Цитата(ILYAUL @ Dec 13 2015, 20:48) *
Обычно после отсылки чего нибудь куда нибудь ждут флажок в регистре статуса TWI что , что-то куда-то ушло , а уж затем делают следующие действие. А не делают паузы.

Дело в том, что мне нужно сформировать Repeated Start. Но уже с командой ЧТЕНИЯ (относительно содержимого младшего бита I2C).
Поэтому происходит такая ситуация - байт все еще идет (но его уже нет в буфере), а я должен перестроить командный регистр на операцию чтения, датть старт операции чтения, да еще и одновременно с этим дать СТОП, поскольку от чтения мне нужен только один байт.

И это в то время, когда передатчик как таковой не закончил работу.

В TWI такая проблема решается с помощью регистров IADDR, в которые надо подсунуть данные, которые надо передать с флагом записи. При этом сам TWI настраивается на чтение.

В общем, не нравился мне даллас никогда.
ILYAUL
я так понимаю Вы про это время The idle time is needed for the 1-Wire function to complete. Или
Цитата
Поэтому происходит такая ситуация - байт все еще идет (но его уже нет в буфере), а я должен перестроить командный регистр на операцию чтения, датть старт операции чтения, да еще и одновременно с этим дать СТОП, поскольку от чтения мне нужен только один байт.

TWI или I2C так не работает. Это автомат состояний. Пока вы не получите ACK/NOACK следующую операцию Вы не сможете сделать и так каждый шаг Вашей цитаты. Ткните страницу DS , что Вы пытались сделать.
Разберём ее по частям , а то на пальцах сложно.
DpInRock
Дело в том, чтобы получить повторный старт, или закончить передачу, я должен дать команду СТОП ДО начала передачи байта как такового (Или ДО НАЧАЛА ПРИЕМА, если нужен один байт). ДО НАЧАЛА ПЕРЕДАЧИ.

И вот проблема решилась с помощью IADDR.
Но в большинстве случаев с помощью обычной задержки между операциями.
==
И тут уже дело не в TWI как таковом, а в том, что микросхема дает готовность 1-wire почему-то существенно раньше чем надо.
А в случае DS2482 это выливается в то, что автомат этой микросхемы виснет намертво. Т.е. линия SDA валится в 0 пожизненно. Пока питание не перевключишь. А с точно выверенными задержками работает как часы.

Т.е. микросхема очень чувствительна к последовательностям. Ни одной такой I2C микросхемы до сих пор не встречал. Т.е. обычно, валишь любую чушь по I2C - без проблем. Рано или поздно будет все хорошо. В данной микросхеме как-то все не так. Почему не сделали как у людей - с обычными адресуемыми регистрами - непонятно.

Ну дал бы команду. А потом спокойно читал регистр состояния до посинения. А тут - стоит произойти несоответствию твоих (пусть идиотских) действий и состоянию 1-wire как таковой - можешь получить железный вис.

Вот пока такие впечатления. Первый раз в жизни употребил программную задержку. Но потратил на оживление этой микросхемы целых 2 дня. И пока оставил ее в покое. Типа, работает устойчиво - не трогай. Но осадок - остался, что всё не так.


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.