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

 
 
 
Reply to this topicStart new topic
> Проблема с DS1678, не отвечает, работа с I2C
Camelot
сообщение Sep 14 2005, 10:36
Сообщение #1


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Добрый всем день!

Использую на плате этого зверя, управляю им с помощью Cyclone.
Написал корку, которая используя I2C, пишет в него Memory Adsress Pointer, но
этот девайс не отдает бит ACK в нужные моменты, т.е. простыми словами
молчит. Посмотрел на осциле - все ОК, пакет с синхронизацией правильные,
как в доке, но ACK от DS1678 вместо логического 0 равен логической единице (DS1678 не сливает). Если кто знает с чем это может быть связано, посоветуйте плиз.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 14 2005, 13:29
Сообщение #2


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Camelot @ Sep 14 2005, 14:36)
Добрый всем день!

Использую на плате этого зверя, управляю им с помощью Cyclone.
Написал корку, которая используя I2C, пишет в него Memory Adsress Pointer, но
этот девайс не отдает бит ACK в нужные моменты, т.е. простыми словами
молчит. Посмотрел на осциле - все ОК, пакет с синхронизацией правильные,
как в доке, но ACK от DS1678 вместо логического 0 равен логической единице (DS1678 не сливает). Если кто знает с чем это может быть связано, посоветуйте плиз.
*


В каком режиме работает Ваш 'Cyclone'? Сделайте правильно начальную инициализацию Master-Slave (процессор-DS1678). Очень похоже что это не ответ ACK, а самый натуральный NACK.
И во избежании дальнейших ощибок лучше воспользуйтесь готовой (рабочей) программой-драйвером обслуживающая I2C. Такого добра и на нашем форуме и в паутине предостаточно...


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 14 2005, 13:34
Сообщение #3


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Да вроде правльно инициализирую, посылаю слева-направо следующий пакет:
0 - старт, 1001010-slave address, 0-write, z-ACK, 0000FFFF-internal address, z-ACK, 1-stop.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 14 2005, 13:50
Сообщение #4


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Camelot @ Sep 14 2005, 17:34)
Да вроде правльно инициализирую, посылаю слева-направо следующий пакет:
0 - старт, 1001010-slave address, 0-write, z-ACK, 0000FFFF-internal address, z-ACK, 1-stop.
*


Скажите, а что такое z-ACK? Это 0-ACK?
Просто в моем понимании z - это третье состояние, т.е. высокоомное.
Если всетаки - 0, то вроде бы все верно...
Проверьте полярность фронта тактирования у SCL и посмотрите еще раз описание, что еше необходимо для инициализации. Далее частота передачи должна быть строго синхронизирована между устройствами во избежании ошибки 'набега'. Лучше всего синхронизироваться по прерываниям от таймера.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 14 2005, 14:02
Сообщение #5


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Может это и неправильно, но во время когда DS1678 должен выставлять логический ноль на SDA, я устанавливаю 3-е состояние на этой шине, т.к. SDA двунаправленный порт. Данные на SDA изменяются по спаду фронта, по переднему фронту они уже сформированы.
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 14 2005, 14:05
Сообщение #6


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Синхросигнал я беру с PLL и делю его, на осциле смотрел, получается хорошие 100 КГц.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 14 2005, 14:15
Сообщение #7


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Camelot @ Sep 14 2005, 18:02)
Может это и неправильно, но во время когда DS1678 должен выставлять логический ноль на SDA, я устанавливаю 3-е состояние на этой шине, т.к. SDA двунаправленный порт. Данные на SDA изменяются по спаду фронта, по переднему фронту они уже сформированы.
*

По всей видимости z-состояние для приема ACK от DS1678 надо устанавливать сразу же после тактового строба передачи W(write). Возможно Вы просто не успеваете захватить ACK.

Цитата(Camelot @ Sep 14 2005, 18:05)
Синхросигнал я беру с PLL и делю его, на осциле смотрел, получается хорошие 100 КГц.
*

Хорошие они то хорошие - бесспорно, но с ними надо еще синхронизовать передачу по SDA.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 15 2005, 07:07
Сообщение #8


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Спасибо большое за советы smile.gif
Особенности применения ПЛИСины, как оказалось. Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 15 2005, 09:46
Сообщение #9


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Camelot @ Sep 15 2005, 11:07)
Спасибо большое за советы  smile.gif
Особенности применения ПЛИСины, как оказалось.  Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
*


Наверно можно сделать все проще...
Что-то вчера в конце дня обсуждение пошло в 'косяк' (устали). Ну сами подумайте, зачем переключаться в Z-состояние, если надо переключиться на прием (сменить выход на вход для принятия бита подтверждения ACK со стороны DS1678)!?
Я не знаю Вашей схемотехнической реализации (приемника/передатчика на ПЛИС), но если прием идет по одному внешнему выводу, а передача по другому и они естественно соединены, то конечно выход надо переводить в Z на момент приема.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 15 2005, 11:32
Сообщение #10


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Передача идет по одному пину (который в ПЛИСе настроен как bidirectional). Этот пин может иметь три состояния: 0, 1, z. Поэтому так и реализовано. У меня
к Вам еще есть вопрос, если Вы не против. Читаю секунды, они вроде тикают, выключаю питание, через время включаю, но секунды начинают считать от того места где выключил питание. Значит ли это что при питании от батареи RTC неработает? И фиксирует ли логгер события при питании от батареи?
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 15 2005, 12:09
Сообщение #11


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Батарейное питание для любых часовых контроллеров в том числе и для DS1678 (Vbat) предназначено, чтобы счет времени продолжался, и после обесточивания всей системы. Это как бы стандарт 'здравого смысла'. Vbat должно быть в пределах 2.6 - 3.5 В, может оно у Вас меньше? Во всяком случае в описании про подобный нюанс ничего нет. Я бы еще настоятельно Вам рекомендовал обратить внимание на пункт описания: RECOMMENDED LAYOUT FOR CRYSTAL. Возможно кварцевый генератор DS1678 работает нестабильно а в следствии этого сильно зависит от величины питающего напряжения. Необходимо использовать кварцевый резонатор который рекомендован в фирменном руководстве, а так же соблюсти защитный земляной контур-кольцо в месте соединения кварца с выводами контроллера.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
-Al-
сообщение Sep 15 2005, 13:45
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(Camelot @ Sep 15 2005, 11:07)
Спасибо большое за советы  smile.gif
Особенности применения ПЛИСины, как оказалось.  Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
*

Не только SDA должеен быть Open-Drain, но и SCL тоже. Приемник имеет полное право держать уровень SCL в низком состоянии для формирования цикла ожидания. Высокий уровень (1) на линиях I2C формируется ТОЛЬКО за счет подтягивающих резисторов. Учите мат-часть!
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 15 2005, 14:35
Сообщение #13


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(-Al- @ Sep 15 2005, 17:45)
Высокий уровень (1) на линиях I2C формируется ТОЛЬКО за счет подтягивающих резисторов.
*


Совершенно верно так работают все выходы с открытым колектором. Это еще в начальных классах высшей школы проходят... smile.gif


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Camelot
сообщение Sep 16 2005, 05:14
Сообщение #14


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

Группа: Свой
Сообщений: 182
Регистрация: 10-01-05
Пользователь №: 1 872



Помоему уже это проехали smile.gif После драки кулаками не машут. Вы бы лучше сказали фиксирует ли логгер события при выключенном питании, а про резисторы подтяжки, не надо меня учить
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 16 2005, 05:59
Сообщение #15


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Если у DS1678 имеется NVR, то почему бы и нет?!...


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

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

 


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


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