Доброго дня. Начал изучать i2c и на отладке установлена EEPROM 24LC04B.
Столкнулся с тем что не получаю от неё бит ACK.
По скольку работаю в первый раз то не могу понять не исправна же сама микросхема/отладка или я выставил не верные адреса/тайминги
[uquote="BOB51",url="/forum/viewtopic.php?p=4656473#p4656473"]Или ошибка в программе... [/uquote]
А что может не так быть?
По симуляции выход уходит в 'z' , да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.
Осцилогоафа нету проверить.
Делал на ардуинке i2c сканер и получал примерно такую же картину, из за чего сейчас в ступоре, ведь по моей логике всё должно было работать...
[uquote="Trioni",url="/forum/viewtopic.php?p=4656528#p4656528"]да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.[/uquote] Каким образом? Сопротивление верхнего ключа master против сопротивления нижнего ключа slave. Что будет посередине? Будет хрень, интерпретация которой логическим анализатором непредсказуема.
[uquote="Martian",url="/forum/viewtopic.php?p=4656548#p4656548"][uquote="Trioni",url="/forum/viewtopic.php?p=4656528#p4656528"]да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.[/uquote] Каким образом? Сопротивление верхнего ключа master против сопротивления нижнего ключа slave. Что будет посередине? Будет хрень, интерпретация которой логическим анализатором непредсказуема.
Trioni писал(а):По симуляции выход уходит в 'z'
так это симуляция или реальное устройство?[/uquote]
1) Думал будет просто 'кз' через подтягивающий резистор и транзистор slave => линия просто лежит в нуле
2) устройство.
(Код и симуляцию скину после работы уже только. Не думал что дойдёт)
[uquote="Trioni",url="/forum/viewtopic.php?p=4656377#p4656377"]Картинка с анализатора: [/uquote]Какое-то странно длинное старт-условие....
Хотя конечно криминала здесь нет.
Разрешение картинки такое, что понять по ней что-либо трудно. Например - не происходят ли фронты по SDA и SCL одновременно? Это может восприниматься ведомым как стоп-условие и тогда он конечно не станет выставлять ACK. Внутри ведомого фронт по SDA может чуть запоздать, и это будет выглядеть для него как СТОП.
[uquote="jcxz",url="/forum/viewtopic.php?p=4657002#p4657002"]Какое-то странно длинное старт-условие....
Хотя конечно криминала здесь нет.[/uquote]
Игрался просто с разными таймингами, в том числе давая больше времени на старт.
[uquote="jcxz",url="/forum/viewtopic.php?p=4657002#p4657002"]Разрешение картинки такое, что понять по ней что-либо трудно. Например - не происходят ли фронты по SDA и SCL одновременно? Это может восприниматься ведомым как стоп-условие и тогда он конечно не станет выставлять ACK. Внутри ведомого фронт по SDA может чуть запоздать, и это будет выглядеть для него как СТОП.[/uquote]
Скрин симуляции, вроде наложений нет, один такт scl разбивал на 4 мини-тактка
Читаете или пишете в EEPROM? Какая частота SCL? Программной реализацией I2C или аппаратной? Являются ли выводы SDA и SCL открытым стоком? Есть подтягивающие резисторы? Куда они включены и какое значение? Фото экспериментальной установки? Хотя бы фрагмент реализации I2C?
Напр. данные ниже взяты из лог. анализатора. Детали комуникации видны, а также распознавание функций в I2C (к PCF8574). В вашем случае что есть что, только догадываемся и предполагаем.
,
Последний раз редактировалось veso74 Сб дек 07, 2024 11:10:32, всего редактировалось 1 раз.
[uquote="Trioni",url="/forum/viewtopic.php?p=4657245#p4657245"]Изначально же сказал: на устройстве не получаю бит ACK.
Симуляцию скинул просто вместо сотен строчек кода, ясное дело там никакого ответного сигнала не будет.[/uquote] Ясно. Ну, шлите дальше красивые картинки.
[uquote="Trioni",url="/forum/viewtopic.php?p=4657178#p4657178"]Скрин симуляции, вроде наложений нет, один такт scl разбивал на 4 мини-тактка [/uquote]Не понял - а какое отношение имеет эта картинка к скриншоту осциллографа из первого поста? Там совершенно ясно видны совершенно другие временные соотношения.
К тому-же - даже по этой картинке - разве не видите странностей? Между рисками "1 мкс" и "19 мкс" попадает примерно ~8.5 периодов SCLK.
Т.е. = 8.5/18e-6 = ~472 кГц. При том что по даташиту 24LC04B умеет максимум 400 кГц.
Не многовато вы хотите от 24LC04B? На такую осц. она имеет полное право отвечать NACK.
Добавлено after 6 minutes 29 seconds:
[uquote="Trioni",url="/forum/viewtopic.php?p=4657245#p4657245"]Симуляцию скинул просто вместо сотен строчек кода, ясное дело там никакого ответного сигнала не будет.[/uquote]Да уж.... с логикой явно серьёзные проблемы....
Вы когда придёте к врачу лечить какую-то болячку, например - перелом, тоже скажете: "Доктор, давайте не будем делать рентген перелома, я вам просто нарисую как я думаю выглядит кость, а вы по моему рисунку и лечите".
Ну наверно можно завершать. Нормальных ответов я так и не получу всё равно.
А скидывать код на 300+ строк вызовет лишь очередной виток вопросов о вечном, а если скину краткие выдержки то вопросы что "код не весь".
Про тайминги отвечал ещё в первом посте. Где на картинке видно "T = 10uS", скрин симуляции был прилеплен что бы показать итоговое значение кода (например что sda уходит в Z-стейт) (далее уже самостоятельно не раз менял тайминги проверяя на 100 и 400кГц - отсюда и разности между картинкой и симуляцией)
[uquote="Trioni",url="/forum/viewtopic.php?p=4657520#p4657520"]Ну наверно можно завершать. Нормальных ответов я так и не получу всё равно.[/uquote]Чтобы получить "нормальный ответ", нужно сначала задать "нормальный вопрос".
Чего вы до сих пор так и не сделали. И даже как видно - не стремитесь это сделать.
Причём тут некий "код на 300+ строк", которым вы всё пугаете - вообще не понятно.
Trioni писал(а):А скидывать код на 300+ строк вызовет лишь очередной виток вопросов о вечном, а если скину краткие выдержки то вопросы что "код не весь".
Ну если стартовое_условие+адрес+проверка_состояния это 300+ строк, тогда лучше не нужно скидывать))
Но код всегда вторичен) даже третичен, если не четверичен или пятеричен))