Easyelectronics.ru

Электроника для всех
Текущее время: 22 май 2022, 16:21

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: софтовый I2C
СообщениеДобавлено: 12 мар 2021, 10:48 
Заглядывает иногда

Зарегистрирован: 17 фев 2021, 18:47
Сообщения: 37
Откуда: Кемерово
Столкнулся с проблемой реализации софтового I2C, так как мой МК не поддерживает его(PIC16F716). Вычитал, что надо управлять с помощью регистров TRIS, но есть проблема. Между установкой PORTA в 0 и TRISA в 0 проходит какое-то время, а снаружи МК на пин действует 1 за счет подтяжки. Вопрос: может ли состояние в регистре PORT поменяться на 1 за время между установкой PORTA и TRISA?

_________________
Копаю экзотику


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 12 мар 2021, 11:09 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3819
А зачем вы PORT трогаете? PORT у вас всегда в 0. TRIS в 1 в простое и при чтении ответа, дергая в 0 при передаче, когда нужно уровень прижать к земле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 12 мар 2021, 17:10 
Заглядывает иногда

Зарегистрирован: 17 фев 2021, 18:47
Сообщения: 37
Откуда: Кемерово
NStorm писал(а):
А зачем вы PORT трогаете?

так он сам будет трогаться, когда TRIS в 1, значения из внешнего мира будут писаться в регистр PORT(в нашем случае туда тупо будет писаться 1), поэтому и надо ставить нули, а между установкой нуля в PORT и нуля в TRIS единица в PORT может уже записаться

_________________
Копаю экзотику


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 12 мар 2021, 19:29 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3819
Состояние хранит защелка отдельная. Значения из неё переносится в регистр PORT только когда вы обращаетесь к регистру на чтение. Если вы запишите в регистр 0, даже если на пине будет 1, в регистре всё еще будет 0, пока вы его прочитаете. Поэтому PORT = 0; TRIS = 0 подряд выставит именно низкий выход на пине, даже если там была подтяжка внешняя к высокому уровню.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 12 мар 2021, 19:33 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3819
В ДШ всё это на схеме пина показано:
Вложение:
pic-io-latch.png
pic-io-latch.png [ 16.54 Кб | Просмотров: 2044 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 13 мар 2021, 16:34 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3819
Не совсем то обвел, это защелка выхода. А входа в самом низу. Но не суть важно. Смысл в том, что не поменяется значение PORTx, пока его не прочитать. Этакий порт Шредингера )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 13 мар 2021, 23:02 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:55
Сообщения: 5672
Откуда: Уругвайская АССР
Вот из схемы это совсем не следует.
Хоть по причине личной неприязни я не имел дела с пиками, но подобный косяк в устройстве портов мне кажется чересчур сомнительным, даже отечественные разработчики до такого не опускались. Не могли бы вы подтвердить ваши слова о "порту Шрёдингера" ссылкой на конкретное место даташита?

_________________
Без гнева и жестокости, сегодня Смерть взмахнёт косой, и ангел тайными дорогами мой милый Кубик унесёт с собой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 14 мар 2021, 09:29 
Заглядывает иногда

Зарегистрирован: 17 фев 2021, 18:47
Сообщения: 37
Откуда: Кемерово
NStorm писал(а):
Смысл в том, что не поменяется значение PORTx, пока его не прочитать.

Так запись в регистр порта это же чтение-модификация-запись, то есть оно поменяется, или чтение-модификация-запись это рекомендация программисту и сам МК так аппаратно при записи не делает?

_________________
Копаю экзотику


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: софтовый I2C
СообщениеДобавлено: 15 мар 2021, 19:34 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3819
Горнист писал(а):
Вот из схемы это совсем не следует.
Хоть по причине личной неприязни я не имел дела с пиками, но подобный косяк в устройстве портов мне кажется чересчур сомнительным, даже отечественные разработчики до такого не опускались. Не могли бы вы подтвердить ваши слова о "порту Шрёдингера" ссылкой на конкретное место даташита?

На защелку нижнюю гляньте и RD PORT. Строб на EN защелки придет при операции чтения. В отличии от TRIS, который как видно читается с выходной защелки сразу.
В ДШ есть такие слова:
Цитата:
Reading the PORTA register reads the status of the pins, whereas writing to it will write to the PORT latch.

Не совсем так, но смысл тот же. Записав значение в PORT, оно переносится в выходную защелку и хранится в ней. Если TRIS был в 1, выходной каскад просто не откроется логикой. Если чуть позже записать в TRIS 1, он откроется и на выходе появится нужный уровень, даже если внешне он менялся.

Цитата:
Так запись в регистр порта это же чтение-модификация-запись, то есть оно поменяется, или чтение-модификация-запись это рекомендация программисту и сам МК так аппаратно при записи не делает?

Ну так чтение ведь до модификации и записи идет. Ну прочитает МК регистр, пусть там 1 появится, тут же меняет его на ваш 0, и пишет потом. Вы же сначала пишете в PORT 0, потом в TRIS 0. Тем самым на выходе установится низкий уровень.
Ну подумайте логический i2c и многие другие подключения всегда подтянуты к высокому уровню. Что по вашему PIC никак в этом случае не может низкий уровень на выходе выдать, потому что будет высокий каждый раз считывать? Нет конечно же.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB