Добрый день, по закону i2c мастер не имеет право установить порту логическую единицу. Если ведомый немного тормоз, он имеет право придавить порт к земле. Мастер должен в этот момент следить, когда логическая единица появится от подтягивающего резистора на порту.
Вопрос: На момент написание кода (программы) - Какое значение присвоить переменной (двунаправленный порт "inout")
i2c_scl <= 1'bz;
i2c_scl <= 1'bx;
Техника
Микроконтроллеры - логическая "1" от подтягивающего резистора
Мастер должен переключать состояние линии тактирования между выходом, установленным в ноль (для формированиия нуля) и входом (для формирования единицы), просто перед тем как сформировать ноль нужно убедиться, что шина отпустилась (что слэйв её не удерживает) и всё.
Вот здесь есть ассемблерные процедуры для реализации i2c на микроконтроллере, смотри:
http://radiohlam.ru/i2c_proc_avr/
Вот здесь есть ассемблерные процедуры для реализации i2c на микроконтроллере, смотри:
http://radiohlam.ru/i2c_proc_avr/
Да кто ж его знает, что ты там колхозишь, и чего там надо присваивать...
Вообще то в случае тугодумности слэйв притягивает линию сцл к земле, а не какой то там "порт"
Вообще то в случае тугодумности слэйв притягивает линию сцл к земле, а не какой то там "порт"
Kubanych Nurmamatov
По-уму конечно правильней переключаться между выходным 0 и hi-Z
Вопрос вообще не ясен.
Как именно у тебя в схеме происходит активация линии - записью лог 0 или 1 в порт - никому, кроме тебя не известно. Даже неизвестно, что у тебя за контроллер и как ты в своей схеме реализуешь I2C.
В реализации I2C нет портов. Отличие от стандартных двухтактынх транзисторных логических выходов (push-pull) выходных каскажов состоит в том, что каждая линия может в один и тот же момент времени стать как входами для всех устройств (с технической точки зрения это не старшно), так и выходами (а это чравато там, что если одно устройство с push-pull выдаёт "0", а второе "1", то источник питания будет замкнут через соотвтетствующие транзисторы выходного каскада и сгорят). Поэтому там применяются выходы с открытым коллетором, который может только притянуть линию к земле (установить "0"), а в пассивном состоянии на линии атвоматически устанавливается "1" подтягивающим резистором. Даже если обы выхода будут нулями, то ток через эти транзисторы понятно не потечёт.
Что за программу ты пишешь, на каком языке, на какой момент времени ты спрашиваешь, для кого - мастери или слейва - не ясно. Любая линия в любой момент может быть либо активна, когда она активно притягивается к земле (всегда будет 0, смысла её считывать в этот момент нет), либо когда её не трогают (тогда её и считывают, т. к. если другое устройство не притягивает, то будет уровень лог. "1", либо же "0", если другое устройство притягивает).
Советую не колхозить самому I2C библиотеки, а взять готовую и проверенную ДЛЯ КАЖДОГО КОНТКРЕТНОГО КОНТРОЛЛЕРА (желательно от производителя) либо переписать логику работы на нужный язык, т. к. тут может быть много подводных камней, которые не очевидны, и ты потом потратишь много часов выясняя, почему первое чило считывается правильно, а второе - нет, или почему оно время от времени ни с того ни с сего начинает глючить.
Как именно у тебя в схеме происходит активация линии - записью лог 0 или 1 в порт - никому, кроме тебя не известно. Даже неизвестно, что у тебя за контроллер и как ты в своей схеме реализуешь I2C.
В реализации I2C нет портов. Отличие от стандартных двухтактынх транзисторных логических выходов (push-pull) выходных каскажов состоит в том, что каждая линия может в один и тот же момент времени стать как входами для всех устройств (с технической точки зрения это не старшно), так и выходами (а это чравато там, что если одно устройство с push-pull выдаёт "0", а второе "1", то источник питания будет замкнут через соотвтетствующие транзисторы выходного каскада и сгорят). Поэтому там применяются выходы с открытым коллетором, который может только притянуть линию к земле (установить "0"), а в пассивном состоянии на линии атвоматически устанавливается "1" подтягивающим резистором. Даже если обы выхода будут нулями, то ток через эти транзисторы понятно не потечёт.
Что за программу ты пишешь, на каком языке, на какой момент времени ты спрашиваешь, для кого - мастери или слейва - не ясно. Любая линия в любой момент может быть либо активна, когда она активно притягивается к земле (всегда будет 0, смысла её считывать в этот момент нет), либо когда её не трогают (тогда её и считывают, т. к. если другое устройство не притягивает, то будет уровень лог. "1", либо же "0", если другое устройство притягивает).
Советую не колхозить самому I2C библиотеки, а взять готовую и проверенную ДЛЯ КАЖДОГО КОНТКРЕТНОГО КОНТРОЛЛЕРА (желательно от производителя) либо переписать логику работы на нужный язык, т. к. тут может быть много подводных камней, которые не очевидны, и ты потом потратишь много часов выясняя, почему первое чило считывается правильно, а второе - нет, или почему оно время от времени ни с того ни с сего начинает глючить.
Темирлан Апасканов
Спасибо что более грамотно описали мой вопрос. Ни гугл, ни я, ни квартус не знаем что искать. Готовых кодов практически нет, что находил - в поверке на железе оказывалось бредятеной, либо сходу компилятор квартуса ругается, что будет внутрисхемное КЗ.
Если поможет: язык программирования Verilog. Контроллер MAX II (CPLD Altera)
Если поможет: язык программирования Verilog. Контроллер MAX II (CPLD Altera)
Темирлан Апасканов
https://marsohod.org/forum/yazyki-programmirovaniya/4748-interfejs-i2c
пол года уже висит вопрос на профильном форуме, видать все плохо.
пол года уже висит вопрос на профильном форуме, видать все плохо.
Похожие вопросы
- Как подтягивающий резистор на sclk может менять страп dev_id? Я этого не могу понять, Карл! Обьясните плз!
- вопрос серьезный про логические транзисторы и микроконтроллеры
- Как работают микроконтроллеры?
- Микроконтроллер и Микропроцессор это практически одно и тоже? Можноли Микроконтроллер назвать миниаютным процессором?
- Как делаются схемы на микроконтроллерах?
- Расчёт резистора для светодиода. Существует ли разница в методике расчета в зависимости от количества светодиодов?
- Можно ли "собрать" нужный мне резистор из тех, что у меня есть?
- Помогите с выбором микроконтроллера!
- Можно ли запрограммировать микроконтроллер ATtiny2313A-PU(DIP), программой, разработанной для ATtiny2313-20PU(DIP)?
- Почему в схеме при выделяемой мощности на резисторе 2.5 ватта.
Что вы так привязались к этой логической последовательности? Я не это спрашивал.