Страница 3 из 3
Re: I2C шлюз для компьютера
Добавлено: 09 окт 2015, 19:22
rhf-admin
Да уж, ошибка, как говорится, была на поверхности. Для тех, кто поленится сравнивать коды, поясню:
Код: Выделить всё
rcall Start_uslovie ; повторный старт
ldi BTS, 0xA1 ; выдали адрес часов на чтение
<------------------ вот здесь забыли вызвать Send_Byte и отправить-таки 0x0A в шину
rcall Recieve_Byte ; забрали байт секунд
Но готовность устройства к общению (Ack) всё-таки адо проверять (IMHO), в более сложных проектах может пригодиться.
Re: I2C шлюз для компьютера
Добавлено: 10 окт 2015, 00:41
Arcanum
вопрос в догонку:
надо ли сбрасывать ack на последний байт при записи в слейв?
upd: туплю. не надо.
реализовал запись. работает.
вот кусок кода:
Код: Выделить всё
ComWriteI2C:
rcall Start_uslovie ; старт шины
ldi BTS, 0xA0 ; загрузили адрес на ЗАПИСЬ
rcall Send_Byte ; выдали адрес часов на запись
ldi BTS, 0x02 ; загрузили адрес байта
rcall Send_Byte ; выдали адрес ячейки памяти байт
rcall Read_Buff_RX ; загрузили байт секунд из буфера
mov BTS,OSRG
rcall Send_Byte ; выдали байт секунд
rcall Read_Buff_RX ; загрузили байт минут из буфера
mov BTS,OSRG
rcall Send_Byte ; выдали байт минут
rcall Read_Buff_RX ; загрузили байт часов из буфера
mov BTS,OSRG
rcall Send_Byte ; выдали байт часов
rcall Stop_uslovie ; Стоп шины
LDI tmp2, 'W'
rcall Load_Buff_TX
LDI tmp2, '_'
rcall Load_Buff_TX
LDI tmp2, 'O'
rcall Load_Buff_TX
LDI tmp2, 'k'
rcall Load_Buff_TX
TX_RUN
Re: I2C шлюз для компьютера
Добавлено: 14 ноя 2015, 00:31
rhf-admin
После долгих ковыряний мне всё таки удалось запихать все три варианта шлюза (
I2C,
SPI и
1~Wire) в один. Плюс на остатках памяти ещё и GPIO удалось приделать.
Получилось вот так:
UART to I2C/SPI/1W
Re: I2C шлюз для компьютера
Добавлено: 18 ноя 2015, 21:21
rhf-admin
Написал пару программулинок для шлюза. Одна сканирует ключи-таблетки по однопроводке, её на сайт выложил (
в статье про шлюз, внизу, есть ссылка),
а другая позволяет программировать микросхемы памяти I2C. Она пока не дописана (пока может работать только с микрухами с однобайтным счётчиком), поэтому выложу сюда.
Вместе с
USB to UART получается довольно шустрый программатор I2C EPROM. Позже ещё видосы сниму.
Re: I2C шлюз для компьютера
Добавлено: 24 ноя 2015, 13:28
Arcanum
месяц болел, снова вернулся!)
Вопрос - как примерно реализовать многомастерность? у меня на линии и2ц одни часы к которым обращаются от 1 до 5 масетров одновременно. как тиньку обучить чтоб не мешала? слушать линию постоянно? али как?
Re: I2C шлюз для компьютера
Добавлено: 24 ноя 2015, 22:32
rhf-admin
Насколько я понимаю, всё происходит примерно так:
1) Начинать передачу мастер должен ни в любой момент когда попало, а только отследив состояние "свободная шина" (на обоих линиях высокий уровень дольше определённого времени)
2) Мастер должен не просто выставлять сигналы на шину, но и убеждаться, что на шине эти сигналы установились. Точнее это касается только сигнала высокого уровня. Это нужно для отслеживания коллизий, когда N мастеров начали передачу одновременно. Низкий уровень выставляется на шине жёстко, а высокий - подтягивается через резистор (выходная нога при этом переводится в Z-состояние). Соответственно, если какие-то мастера будут выставлять ноль, а какие-то - единицу, то "победят" те, кто выставляет ноль, то есть на шине установится ноль. И тогда те, кто выставлял единицу, должны увидеть, что единица не выставилась, понять, что раз так произошло - значит шиной рулит кто-то ещё и заткнуться в тряпочку (отследить состояние "свободная шина" и попробовать ещё раз) .
Re: I2C шлюз для компьютера
Добавлено: 29 ноя 2015, 15:31
rhf-admin
Написал отдельную статью про то,
как использовать шлюз в качестве программатора I2C EPROM. Там же ссылка на новую версию программы (добавил чипов, возможность чтения/сохранения файлов) и небольшой видос, как это всё работает.
Re: I2C шлюз для компьютера
Добавлено: 21 дек 2015, 15:20
rhf-admin
Ещё две статьи. В одной шлюз превращается в
программатор SPI EPROM,
в другой - в
USB-термометр с http-сервером (то есть считываемая температура доступна через браузер по сети).
Видосы прилагаются.