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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STR91x I2C - как послать NASK
vromanov
сообщение May 7 2007, 17:28
Сообщение #1


Участник
*

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



Подключаю к STR912 DS1631 (термодатчик). В соответсвии с даташитом, при получении байтов, после получения последнего байта надо передавать NASK вместо ASK. Как бы это провернуть?
А то DS1631 не получив NASK подвисает sad.gif. И его приходится сбрасывать (вручную) для продолжения работы.

Сообщение отредактировал vromanov - May 7 2007, 17:29
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 18:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vromanov @ May 7 2007, 20:28) *
Подключаю к STR912 DS1631 (термодатчик). В соответсвии с даташитом, при получении байтов, после получения последнего байта надо передавать NASK вместо ASK. Как бы это провернуть?

Вы хоть поняли, что спросили?

P.S.
ACK и NAK, имеются ввиду, полагаю?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 18:05
Сообщение #3


Участник
*

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



Что сказал - понял. Просто именно такая терминология используется в даташите к DS1631 и в других местах.
Цитата
Acknowledge (ACK): When a device is acting as a receiver, it must generate an acknowledge (ACK) on
the SDA line after receiving every byte of data. The receiving device performs an ACK by pulling the
SDA line low for an entire SCL period (see Figure 8). During the ACK clock cycle, the transmitting
device must release SDA. A variation on the ACK signal is the “not acknowledge” (NACK). When the
master device is acting as a receiver, it uses a NACK instead of an ACK after the last data byte to indicate
that it is finished receiving data. The master indicates a NACK by leaving the SDA line high during the
ACK clock cycle.

За указание другого термина спасибо. Сейчас попробую погуглить по нему
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 18:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vromanov @ May 7 2007, 21:05) *
Что сказал - понял.

А я нет sad.gif. Какая проблема? Байт 0x06 отправлять умею, а оставшиеся 255 вариантов нет?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 18:18
Сообщение #5


Участник
*

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



Не понимаю, при чем тут байт 06?
STR912 автоматически посылает (ну или выставляет) ASK после каждого принятого байта. Если настроено. АSK это вообще то не байт. И сравнивать выставление ASK или NASK с передачей байтов странно.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 7 2007, 19:14
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(vromanov @ May 7 2007, 21:18) *
Не понимаю, при чем тут байт 06?
STR912 автоматически посылает (ну или выставляет) ASK после каждого принятого байта. Если настроено. АSK это вообще то не байт. И сравнивать выставление ASK или NASK с передачей байтов странно.

Очевидно байт 06 это та величина, которую надо записать в командный регистр контроллера I2C STR912, чтобы тот выдал NACK вместо очередного ACK.
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 20:03
Сообщение #7


Участник
*

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



Насколько я понял из ироничного ответа zltigo, байт 0x06 как раз служит для отправки ASK, а для отправки NASK нужно что-то другое.
К сожалению, я не могу проверить что-же все таки отправляется на самом деле, т.к. не имею осцилографа sad.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 20:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vromanov @ May 7 2007, 23:03) *
Насколько я понял из ироничного ответа zltigo, байт 0x06 как раз служит для отправки ASK, а для отправки NASK нужно что-то другое.

1. ASK и NASK - ведомы ТОЛЬКО Вам.
2. То,о чем речь, это ACK 0x06 и NAK(NotACK) 0x15. Все это смотрится с любой таблице ASCII кодов.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 20:33
Сообщение #9


Участник
*

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



ЭЭЭЭээээ
Вы там буковок в теме "I2C" не заметили?
И то, что сокращение ASK может обозначать не только символ из таблицы но и удержание линии в нулевом состоянии в течении периода клока, а NASK удержание линии данных в "1" состоянии.
К символам это отношения не имеет.
ASK это всего лишь сокращение для Acknowledge, а
NASK для Not Acknowledge.
И если вам это не ведомо, это говорит, что вам не ведом протокол I2C
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 20:52
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(IgorKossak @ May 7 2007, 22:14) *
Очевидно байт 06 это та величина, которую надо записать в командный регистр контроллера I2C STR912, чтобы тот выдал NACK вместо очередного ACK.

Нет, к контроллеру это не имеет отношения. Это информационные байты.
По крайней мере я так понял.
Если же речь идет о I2C протоколе, там STOP все кончается после ответа на последний ACK. NAK, как такового в протоколе нет, разве только выдачу ACK автоматом можно отключить.

Цитата(vromanov @ May 7 2007, 23:33) *
ASK это всего лишь сокращение для Acknowledge, а
NASK для Not Acknowledge.
И если вам это не ведомо, это говорит, что вам не ведом протокол I2C

Мне неведомы БЕЗГРАМОТНЫЕ ASK и NASK вместо ACK и NAK. Понятно?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 21:02
Сообщение #11


Участник
*

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



Ах вот вы к чему придрались! smile.gif)
К сожалению, страдаю дизграфией. Совершенно спокойно могу написать "влот" вместо "флот". Кто-то не может нормально говорить, у меня проблемы с письмом.
NACK и ACK в I2C протколе имеется. Но это совсем не БАЙТ. Ну как ACK может быть байтом если передается течении одного такта, а байт передается в течении 8 тактов?

В общем, проблема решена. Все работает. Темература успешно отображатеся на LCD
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 21:15
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vromanov @ May 8 2007, 00:02) *
NACK и ACK в I2C протколе имеется.

В терминологии Philips - владельцев патента на I2C сокращения ACK и NACK не используются.
Есть четкое понятие "Acknowledge Flag". Он может присутствовать/передаваться или просто отсутствовать. Отсутствие флага не значит, что было передано неподтверждение, поскольку устройство может просто отсутствовать. Посему "Передавать NACK" термин по отношению к I2C некорректный. Правильно - "Ну устанавливать ACK Flag"("Не передавать ACK").


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 7 2007, 21:41
Сообщение #13


Участник
*

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



Что вы говорите.....
Берем первый попавшийся пример с сайта филипса и читаем

;* acknowledge bit. If NACK is received, the NO_ACK bit is *
;* set. If arbitration is lost or an error occurs during *
;* I2C_TRX_BYTE the function is exit with the I2C_ERR bit *
;* set. *
....
MOV I2DAT,#80H ;send NACK

Т.е. и филипс использует сокрашение NACK и его (NAСK) можно "передать" или "принять".

Что еще придумаем? smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 7 2007, 22:09
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(vromanov @ May 8 2007, 00:41) *
Берем первый попавшийся пример с сайта филипса и читаем

А зачем "первый попавшийся"? Есть вполне официальные документы, а не какие-то комментарии из двух слов к неким исходникам в АN писанные какими-то программистами. В спецификации I2C и в базирующихся на ней документах на контроллеры Philips понятия Negative ACK (NAK/NACK) отсутствует.
В документации на STR912, естественно, отсутствуют тоже. Есть Acknowledge и Non-Acknowledge.
Собственно Ваши проблемы и начались с того, что Вы захотели "Послать неподтверждение", вместо того, что бы "Не посылать подтверждение". Что совсем не одно и тоже и поскольку "Послать неподтверждение" принципиально не возможно на I2C, то этого действия Вы в документации на контроллер и не нашли. А я соответственно совсем не понял вопрос, о чем и написал в первом-же своем посте.
Цитата
Что еще придумаем? smile.gif

Это Вы сами c собой разговариваете?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 8 2007, 07:05
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Он нашел, потому так и спросил.
В STR91x это приблизительно так и выглядит. Надо явно установить бит посылки подтверждений и явно этот бит сбросить перед приемом последнего байта.
Но только фокус в том, что сбросить его надо еще когда начинаем принимать предпоследний байт.
Доку на STR91x пишут какие-то чурки из Туниса, так что удивляться не приходится.

Цитата(zltigo @ May 8 2007, 01:39) *
"Послать неподтверждение" принципиально не возможно на I2C, то этого действия Вы в документации на контроллер и не нашли.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:54
Рейтинг@Mail.ru


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