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

 
 
> Прикручивание DS2482S к TWI arm Atmel, как-то неправильно наверное переключаю направление
DpInRock
сообщение Dec 5 2015, 14:23
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Смыл обращения к 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 при наличии аппаратного как-то не очень.

Короче разобрался.
ПАузы между командами должны быть. И не смотреть на описание этой микросхемы. Его составляли враги.

Сообщение отредактировал DpInRock - Dec 5 2015, 15:28


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Dec 13 2015, 17:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Обычно после отсылки чего нибудь куда нибудь ждут флажок в регистре статуса TWI что , что-то куда-то ушло , а уж затем делают следующие действие. А не делают паузы.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Dec 15 2015, 19:55
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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

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

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

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

В общем, не нравился мне даллас никогда.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 00:13
Рейтинг@Mail.ru


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