Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с DS1678, не отвечает
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
Camelot
Добрый всем день!

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

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


В каком режиме работает Ваш 'Cyclone'? Сделайте правильно начальную инициализацию Master-Slave (процессор-DS1678). Очень похоже что это не ответ ACK, а самый натуральный NACK.
И во избежании дальнейших ощибок лучше воспользуйтесь готовой (рабочей) программой-драйвером обслуживающая I2C. Такого добра и на нашем форуме и в паутине предостаточно...
Camelot
Да вроде правльно инициализирую, посылаю слева-направо следующий пакет:
0 - старт, 1001010-slave address, 0-write, z-ACK, 0000FFFF-internal address, z-ACK, 1-stop.
BVU
Цитата(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 и посмотрите еще раз описание, что еше необходимо для инициализации. Далее частота передачи должна быть строго синхронизирована между устройствами во избежании ошибки 'набега'. Лучше всего синхронизироваться по прерываниям от таймера.
Camelot
Может это и неправильно, но во время когда DS1678 должен выставлять логический ноль на SDA, я устанавливаю 3-е состояние на этой шине, т.к. SDA двунаправленный порт. Данные на SDA изменяются по спаду фронта, по переднему фронту они уже сформированы.
Camelot
Синхросигнал я беру с PLL и делю его, на осциле смотрел, получается хорошие 100 КГц.
BVU
Цитата(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.
Camelot
Спасибо большое за советы smile.gif
Особенности применения ПЛИСины, как оказалось. Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
BVU
Цитата(Camelot @ Sep 15 2005, 11:07)
Спасибо большое за советы  smile.gif
Особенности применения ПЛИСины, как оказалось.  Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
*


Наверно можно сделать все проще...
Что-то вчера в конце дня обсуждение пошло в 'косяк' (устали). Ну сами подумайте, зачем переключаться в Z-состояние, если надо переключиться на прием (сменить выход на вход для принятия бита подтверждения ACK со стороны DS1678)!?
Я не знаю Вашей схемотехнической реализации (приемника/передатчика на ПЛИС), но если прием идет по одному внешнему выводу, а передача по другому и они естественно соединены, то конечно выход надо переводить в Z на момент приема.
Camelot
Передача идет по одному пину (который в ПЛИСе настроен как bidirectional). Этот пин может иметь три состояния: 0, 1, z. Поэтому так и реализовано. У меня
к Вам еще есть вопрос, если Вы не против. Читаю секунды, они вроде тикают, выключаю питание, через время включаю, но секунды начинают считать от того места где выключил питание. Значит ли это что при питании от батареи RTC неработает? И фиксирует ли логгер события при питании от батареи?
BVU
Батарейное питание для любых часовых контроллеров в том числе и для DS1678 (Vbat) предназначено, чтобы счет времени продолжался, и после обесточивания всей системы. Это как бы стандарт 'здравого смысла'. Vbat должно быть в пределах 2.6 - 3.5 В, может оно у Вас меньше? Во всяком случае в описании про подобный нюанс ничего нет. Я бы еще настоятельно Вам рекомендовал обратить внимание на пункт описания: RECOMMENDED LAYOUT FOR CRYSTAL. Возможно кварцевый генератор DS1678 работает нестабильно а в следствии этого сильно зависит от величины питающего напряжения. Необходимо использовать кварцевый резонатор который рекомендован в фирменном руководстве, а так же соблюсти защитный земляной контур-кольцо в месте соединения кварца с выводами контроллера.
-Al-
Цитата(Camelot @ Sep 15 2005, 11:07)
Спасибо большое за советы  smile.gif
Особенности применения ПЛИСины, как оказалось.  Добавил по выходу SDA триггер, который засинхронизировал по системному клоку и включил "open-drain" в свойствах пина. Во время когда должен отвечать логгер, переключал SDA в третье состояние (если этого не делать, то уровень SDA не вытягивает до логического нуля, а провисает где-то до 2 В, т.е. остается в логической единицей).
*

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


Совершенно верно так работают все выходы с открытым колектором. Это еще в начальных классах высшей школы проходят... smile.gif
Camelot
Помоему уже это проехали smile.gif После драки кулаками не машут. Вы бы лучше сказали фиксирует ли логгер события при выключенном питании, а про резисторы подтяжки, не надо меня учить
BVU
Если у DS1678 имеется NVR, то почему бы и нет?!...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.