Суббота, 18.05.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2022 » Январь » 25 » Передача цифровой информации (данные, счётчик, сброс)
15:16
Передача цифровой информации (данные, счётчик, сброс)

Передача цифровой информации (данные, счётчик, сброс)

Я могу коротко и последовательно перечислить действия и результаты, но подозреваю, что это будет непонятно. Потому кое-что напомню.
Как работает стандартное цифровое устройство хорошо видно, например, на сдвиговом регистре:
https://akostina76.ucoz.ru/blog/2019-12-28-6198

Сдвиговой регистр это микросхема с кучей ножек. Есть ножки – входы, на которые подаются сигналы. А есть выходы, к которым можно подключить светодиоды и увидеть, есть на них напряжение или нет. Состояние выходов определяется тем, что было подано на входы.
Чтобы получить последовательное включение светодиодов а потом их общее выключение надо было на входы поддать такие сигналы:

Ножки (пины)  входа часто можно разбить на три группы.
Первая группа для передачи данных. Здесь и ниже я буду эти ножки обозначать зелёным. По ним идёт информация. Если бы мне потребовалось не сплошное включение светодиодов, а через один, по каналу DS пришлось бы делать зубцы через один. А конкретная последовательность на том же DS позволила бы получить на выходах сдвигового регистра двоичное, а значит и обычное число (размером до байта = 8 бит).
Вторая группа – счётчики. Выделять я их буду синим (здесь их нетипично две штуки). Информация ведь передаётся последовательно, бит за битом. Что-то должно задавать ритм процесса, что ли. Эти счётчики его и задают. В момент включения счётчика считавшаяся информация с входа данных. Если там есть информация, сохраняется единица. Если в момент включения счётчика информации данных нет, то сохраняется ноль. 
В диаграмме выше такой классический счётчик (обычно называемый часами) это SH_CP. Именно он записывает каждую следующую единицу из DS во внутреннюю память. Второй счётчик (ST_CP) пропихивает её дальше.
Последняя типовая группа – сбросы информации (обозначен белым квадратом). На диаграмме выше вообще учитывается то, что происходит на DS, SH_CP и ST_CP только если есть сигнал на MR. Сокращение MR означает master reset, т.е сброс. Кратковременное его периодическое отключение приводит к выключению всех светодиодов.
Передавать информацию по одному проводку можно, но это довольно долгий процесс, если информации много. Потому для дисплеев часто предусмотрена возможность передачи сразу по 4-м и даже 8-ми каналам. Потому изначально у дисплеев вот так много ножек:

При передаче данных по 4-рём проводам будет так:

D4, D5, D6, D7 – данные, Е – счётчик (часы), RS должно быть включено чтобы все поступающее по этим каналам учитывалось (иначе сброс).
Передавать информацию по 8 проводам тоже можно. Это будет быстрее. Но у микроконтроллера не так много ножек, а подключить часто надо много чего. Потому часто приходится так экономить.
Потому часто к мониторам сразу подключена микросхема:

… которая позволяет использовать для передачи информации только два провода. Штырьков там 4, потому что два для плюса и минуса батарейки.
Передача данных осуществляется по стандартному протоколу передачи I2C. Данные передаются только по одному проводу (второй – счётчик) и только в одну сторону (от контроллера к дисплею). Дисплеи редко посылают информацию, но в стандарте (диаграмма выше) предусмотрен pin R/W определяющий запись или чтение.
Протокол I2C передаёт информацию только в одну сторону:
https://ru.wikipedia.org/wiki/I%C2%B2C

Не вдаваясь в подробности и тонкости этой картинки:

… по SDA в этом протоколе идут данные, на SCL тикают часы, а ноль или единица определятся синхронностью сигналов.
Штука хорошая. Только цепляется такое только на два специальных штырька на микросхеме, причём конкретно на Iskra почему-то именно они очень неудобно расположены. По счастью к ним можно параллельно цеплять несколько устройств, работающих по I2C протоколу:
https://soltau.ru/index.php/arduino/item/371-interfejs-i2c-i-arduino

Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 27 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 27 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.
… Т.е эта возможность реализуется за счёт настроек протокола. Провода позволяют что угодно, но в протоколе I2C полагается первым при передаче посылать адрес получателя и только потом данные. Так последовательно можно передавать информацию то одному, то другому подключенному устройству.
Следующий стандартный протокол, по которому контроллер может обмениваться информацией с устройством – SPI:
https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface

Подключается четырьмя проводами:

Очевидно, что счётчик – часы тут SCK. Стандартная передача от микросхемы к устройству (от мастер к слейв) – MOSI.
Протокол рассчитан на передачу данных в обе стороны. Флэшку, например, по нему можно подключать. Для такого встречного потока есть провод MISO, который я отметила жёлтым.
С точностью до терминологии SS-CS ничем кроме сброса, определяющего с каким устройством идёт общение (передаются ли ему данные), быть не может:

Скорее всего, как то так оно и есть.
Сюда же добавлю ещё один стандартный протокол UART:
https://wiki.iarduino.ru/page/serial-protocols-uart/

… хотя бы потому что в его названии и в названии проводов есть слова передатчик и приемник:
Универсальный асинхронный приёмопередатчик (Univsersal Asynchronos Reciever-Transmitter) - это физическое устройство приёма и передачи данных по двум проводам.
У каждого устройства, поддерживающего UART обычно обозначены два вывода: RX и TX. TX — означает transmit (передаю), RX — receive (принимаю). Отсюда становится понятно что RX одного устройства нужно подключать к TX другого.
Все это вместе можно засунуть в такую таблицу:

В колонки «N» я добавила стандартные номера выходов микросхемы для подключения, а сбросы обозначила серым.

Просмотров: 102 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
«  Январь 2022  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz