ATmega8 + PCF8574: 8-битный расширитель портов на I2C интерфейсе

разделы: AVR, Arduino, I2C, HD44780, дата: 24 октября 2017г.

Статья правилась 5-го августа 2022г. Было испрвлено неверное определение: "сдвиговый регистр pcf8574" на правильное: "расширитель портов pcf8574". Добавлено оглавление. Также поправлена битая ссылка на datasheet.

Этот расширитель портов наиболее известен по китайским драйверам дисплея HD44780, которые можно приобрести на али или ибэе. Он довольно подробно был разобран здесь: "Сообщество EasyElectronics.ru: I2C расширитель портов PCF8574". Я в свою очередь, попытаюсь сосредоточиться на программировании микроконтроллера ATmega8 для работы с этим регистром. Впрочем, начну я все же с Arduino и имеющегося у меня зоопарка: ATmega328/MSP430G2553/STM32F103C8.

Расширитель портов PCF8574 может выпускаться разными фирмами, мне попались чипы с суффиксом "T", что обозначает производителя как "NXP Semiconductor". Руководство на pcf8574t можно скачать с официального сайта NXP: "PCF8574; PCF8574A Remote 8-bit I/O expander for I2C-bus with interrupt".

Содержание:

I. Общие сведения

  1. Немного справочной информации
  2. Подключение LCD HD44780 к Arduino через модуль драйвера на PCF8574
  3. Подключение LCD HD44780 к STM32duino через модуль драйвера на PCF8574
  4. Подключение LCD HD44780 к MSP430 Launchpad через модуль драйвера на PCF8574
  5. Arduino библиотека PCF8574

II. Работа PCF8574 + ATmega8

  1. Сканер I2C шины
  2. Бегущий огонь на расширителе портов PCF8574
  3. Управление семисегментным индикатором через расширитель портов PCF8574
  4. Чтение из расширителя портов PCF8574
  5. Подключение LCD HD44780 через расширитель портов PCF8574

Читать дальше

ATmega8 + Proteus: входной сдвиговый регистр 74HC165, совместная работа с 74hc595

разделы: AVR, SPI, Proteus, HD44780, дата: 13 октября 2017г.

    Сдвиговые регистры, оглавление:
  1. ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595
  2. ATmega8 + Proteus: входной сдвиговый регистр 74HC165, совместная работа с 74hc595
  3. ATmega8 + Arduino + Proteus: 8-битный сдвиговой регистр на I2C интерфейсе PCF8574

Вначале я хотел дополнить предыдущую статью входным регистром 74hc165, но потом понял понял, что он заслуживает "свои пять минут славы". Сложности возникают при подключении входного регистра совместно с выходным 74hc595 на один SPI порт. Кроме того, как оказалось, организация работы по SPI в ATmega8 имеет свои интересные особенности.

Итак, сдвиговый регистр 74hc165 преобразует параллельную шину в последовательную, работает только на вход, и имеет разрядность 8-бит. Их так же можно подключать цепочкой из n-элементов, которая даст 8^n - входов.

Руководство на SN74HC165N можно скачать например с сайта Texas Instruments.

    Оглавление:
  1. Чтение сдвигового регистра 74hc165 через программный SPI интерфейс;
  2. Чтение сдвигового регистра 74hc165 через аппаратный SPI ATmega8;
  3. Ретранслятор параллельной шины;
  4. LCD дисплей HD44780 и сдвиговый регистр 74HC165(вариант для Proteus);
  5. LCD дисплей HD44780 и сдвиговый регистр 74HC165(вариант для реального устройства);

Читать дальше

ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595

разделы: AVR, SPI, Proteus, HD44780, дата: 26 сентября 2017г.

    Сдвиговые регистры, оглавление:
  1. ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595
  2. ATmega8 + Proteus: входной сдвиговый регистр 74HC165, совместная работа с 74hc595
  3. ATmega8 + Arduino + Proteus: 8-битный сдвиговой регистр на I2C интерфейсе PCF8574

Изучение модуля USI MSP430 странным образом(на самом деле закономерным) вывела меня на такую штуку, как сдвиговый регистр. Имея о них лишь общее представление, мне пришлось срочно разбираться c этой, довольно обширной темой. Итак.

Сдвиговый регистр, он же расширитель портов, он же шинный преобразователь, преобразует сигнал последовательной шины в параллельный или/и обратно.

В рамках этой статью я рассмотрю работу с популярным 8-и битовыми сдвиговым регистром на SPI интерфейсе 74HC595.

В качестве практических примеров, я рассмотрю подключение светодиодной гирлянды, семисегментных индикаторов и дисплея с параллельной шиной HD44780.

В качестве микроконтроллера я буду использовать ATmega8, а в качестве среды моделирования Proteus 8.5.

Кроме этого, я затрону организацию SPI интерфейса у ATmega8.

    Оглавление:
  1. Сдвиговый регистр 74HC595 c SPI интерфейсом;
  2. Управление гирляндой светодиодов;
  3. SPI интерфейс в микроконтроллере ATmega8;
  4. Подключение семисегментного индикатора через сдвиговый регистр 74HC595;
  5. Подключение жидко-кристаллического дисплея HD44780 через сдвиговый регистр 74HC595;

Читать дальше

HD44780 + ATmega8: таймер с крупными цифрами

разделы: AVR, HD44780, дата: 15 сентября 2015г.


макет цифр

Небольшая демо-программа, таймер для ATmega8 с дисплеем HD44780. В качестве отправной точки использовал исходник из предыдущего поста. Идея была почерпнута здесь: LCD "Bigfont" Numbers over 2 or 4 lines".

Исходник:

Читать дальше

ATmega8: простая программа управления ЖК-дисплеем HD44780

разделы: AVR, HD44780, дата: 9 сентября 2015г.


Управление ЖК-дисплеем HD44780 довольно простое. Он имеет параллельную шину на 8 пин и три управляющих линии.

  1. Контакты D0-D7 это 8-битная шина. Может работать как в 8-битном режиме, так и в 4-битном. В последнем случае задействуются "старшие" пины D4-D7.
  2. RS выбор регистра. В контроллере дисплея имеется два регистра: регистр команд IR и регистр данных DR. В зависимости от того, что мы пишем в контроллер данные или подаем команды, с помощью RS линии мы выбираем "адресата". При RS равном нулю посылаются команды, при RS равном единице пишутся данные.
  3. E выполняет роль клавиши "Enter". Можно в каком угодно порядке и последовательности менять значения пинов контроллера дисплея, но когда управляющий пин E устанавливается в единицу, то всё, данные уходят в контроллер дисплея. Чтобы записать очередные данные следует E вновь сбросить в ноль.
  4. RW не используемый в данном случае пин, который переключает режимы дисплея с чтения на запись и обратно. В данном примере RW запитан на массу(землю), т.е. установлен в ноль, что означает работу дисплея только на прием, на получение и отображение данных и команд. При RW равном единице дисплей переводится в режим передачи, и тогда возможно прочитать BF(busy flag) - флаг занятости. Дело в том, что дисплей довольно медлительное устройство, и при записи в него команд или данных он становится на некоторое время недоступен. Чтобы понять, когда в него снова можно писать следует ждать когда сбросится BF. В данном примере вместо опроса BF используются задержки с гарантированным временем готовности дисплея. С опросом BF флага, программа работала бы конечно быстрее, но это, как говорится, палка о двух концах. Усложнение ради упрощения.

Читать дальше