Кнопки и индикатор параллельно

7Что находится «за» шиной I2C

В качестве бонуса рассмотрим временную диаграмму вывода латинских символов «A», «B» и «С» на ЖК дисплей. Эти символы имеются в ПЗУ дисплея и выводятся на экран просто передачей дисплею их адреса. Диаграмма снята с выводов RS, RW, E, D4, D5, D6 и D7 дисплея, т.е. уже после преобразователя FC-113 «I2C параллельная шина». Можно сказать, что мы погружаемся немного «глубже» в «железо».

Временная диаграмма вывода латинских символов «A», «B» и «С» на LCD дисплей 1602

На диаграмме видно, что символы, которые имеются в ПЗУ дисплея (см. стр.11 даташита, ссылка ниже), передаются двумя полубайтами,
первый из которых определяет номер столбца таблицы, а второй – номер строки. При этом данные «защёлкиваются» по фронту сигнала на линии E (Enable), а линия RS (Register select, выбор регистра) находится в состоянии логической единицы, что означает передачу данных. Низкое состояние линии RS означает передачу инструкций, что мы и видим перед передачей каждого символа. В данном случае передаётся код инструкции возврата каретки на позицию (0, 0) ЖК дисплея, о чём также можно узнать, изучив техническое описание дисплея.

И ещё один пример. На этой временной диаграмме показан вывод символа «Сердце» на ЖК дисплей.

Временная диаграмма вывода символа «Сердце» из ПЗУ на ЖК дисплей 1602

Опять, первые два импульса Enable соответствуют инструкции Home() (0000 00102) – возврат каретки на позицию (0; 0), а вторые два – вывод на ЖК дисплей хранящийся в ячейке памяти 310 (0000 00112) символ «Сердце» (инструкция lcd.createChar(3, heart); скетча).

ЖК дисплей Arduino LCD 1602

Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино. Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano. Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.

Краткое описание пинов LCD 1602

Давайте посмотрим на выводы LCD1602 повнимательней:

Каждый из выводов имеет свое назначение:

  1. Земля GND;
  2. Питание 5 В;
  3. Установка контрастности монитора;
  4. Команда, данные;
  5. Записывание и чтение данных;
  6. Enable;

7-14. Линии данных;

  1. Плюс подсветки;
  2. Минус подсветки.

Технические характеристики дисплея:

  • Символьный тип отображения, есть возможность загрузки символов;
  • Светодиодная подсветка;
  • Контроллер HD44780;
  • Напряжение питания 5В;
  • Формат 16х2 символов;
  • Диапазон рабочих температур от -20С до +70С, диапазон температур хранения от -30С до +80 С;
  • Угол обзора 180 градусов.

Схема подключения LCD к плате Ардуино без i2C

Стандартная схема присоединения монитора напрямую к микроконтроллеру Ардуино без I2C выглядит следующим образом.

Из-за большого количества подключаемых контактов может не хватить места для присоединения нужных элементов. Использование I2C уменьшает количество проводов до 4, а занятых пинов до 2.

Генерация пользовательских символов для LCD

Если вы находите символы на дисплее неподходящими и неинтересными, вы можете создать свои собственные символы (глиф) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны в том случае, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.

Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

Для использования  createChar()  сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

Генератор символов LCD

Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

Единственным ограничением является то, что библиотека LiquidCrystal поддерживает только восемь пользовательских символов.

Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

//  подключаем библиотеку LiquidCrystal:
#include <LiquidCrystal.h>

// Создаем LCD объект. Выводы: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// создадим несколько пользовательских символов
byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

byte Bell = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};


byte Alien = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

byte Check = {
0b00000,
0b00001,
0b00011,
0b10110,
0b11100,
0b01000,
0b00000,
0b00000
};

byte Speaker = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};


byte Sound = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};


byte Skull = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};

byte Lock = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};

void setup() 
{
  // инициализируем LCD и устанавливаем количество столбцов и строк: 
  lcd.begin(16, 2);

  // создание нового символа
  lcd.createChar(0, Heart);
  // создание нового символа
  lcd.createChar(1, Bell);
  // создание нового символа
  lcd.createChar(2, Alien);
  // создание нового символа
  lcd.createChar(3, Check);
  // создание нового символа
  lcd.createChar(4, Speaker);
  // создание нового символа
  lcd.createChar(5, Sound);
  // создание нового символа
  lcd.createChar(6, Skull);
  // создание нового символа
  lcd.createChar(7, Lock);

  // Очищаем LCD дисплей 
  lcd.clear();

  // Печатаем сообщение на LCD.
  lcd.print("Custom Character");
}

// Печатаем все пользовательские символы
void loop() 
{ 
  lcd.setCursor(0, 1);
  lcd.write(byte(0));

  lcd.setCursor(2, 1);
  lcd.write(byte(1));

  lcd.setCursor(4, 1);
  lcd.write(byte(2));

  lcd.setCursor(6, 1);
  lcd.write(byte(3));

  lcd.setCursor(8, 1);
  lcd.write(byte(4));

  lcd.setCursor(10, 1);
  lcd.write(byte(5));

  lcd.setCursor(12, 1);
  lcd.write(byte(6));

  lcd.setCursor(14, 1);
  lcd.write(byte(7));
}

После включения библиотеки нам нужно инициализировать пользовательский массив из восьми байтов.

byte Heart = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

В настройках мы должны создать пользовательский символ, используя функцию createChar(). Эта функция принимает два параметра. Первый — это число от 0 до 7, чтобы зарезервировать один из 8 поддерживаемых пользовательских символов. Второй параметр — это имя массива байтов.

// создание нового символа
lcd.createChar(0, Heart);

Далее в цикле для отображения пользовательского символа мы используем функцию write(), а в качестве параметра мы используем номер символа, который мы зарезервировали.

// byte(0) покажет символ Heart (сердце).
lcd.write(byte(0));

Что входит в классификацию на русском языке

APQC PCF включает объединенные в группы процессы. На верхнем уровне классификации они делятся на 3 вида, к которым относятся 13 групп бизнес-процессов:

  • Процессы управления — связаны с разработкой стратегических целей компании и управлением бизнес-возможностями. Например, оценка внешней среды или формулирование стратегий бизнес-подразделений.

  • Основные бизнес-процессы компании — определяют создание и предоставление товаров или услуг клиентам, генерируют прибыль организации. Например, процессы закупки материалов или управление производством.

  • Сервисные бизнес-процессы — обеспечивают стабильную работу основных, на сами не генерируют прибыль. Примером такой группы процессов является подбор персонала или управление финансовыми ресурсами.

На данном сайте можно ознакомиться со структурной иерархией процессов и подпроцессов до третьего уровня вложенности, а также метриками, предложенными APQC.

Настройка и инструменты для работы с I2C в Raspberry Pi

Предполагается что у вас уже установлена и настроена Raspbian (GNU Debian Linux for Raspberry Pi), о том как настроить Raspbian в Raspberry Pi я писал в одной из публикаций.

Первым делом нужно включить поддержку I2C в ядре операционной системы (ОС). Для этого запустим конфигуратор Raspbian при помощи следующей команды в консоли:

Идем по пунктам “Advanced Options” — “I2C” — «Yes» — жмем «Finish». Перезагружаем операционную систему:

Теперь модуль ядра для шины I²C должен быть активирован, можно приступать к работе. Полезно знать что проделанная операция в настройках конфигуратора равносильна добавлению или раскомментированию строчки «dtparam=i2c_arm=on» в файле «/boot/config.txt».

При помощи нехитрой связки из команд посмотрим загружены ли модули ядра для поддержки I2C:

В выводе должны присутствовать примерно такие строчки:

Если они есть — значит все в норме и можем продолжать дальше.

Установим модуль для работы с шиной I2C в Python, а также пакет с полезными консольными инструментами для I2C:

После установки нам будут доступны несколько полезных утилит: i2cdetect, i2cdump, i2cget, i2cset. Отобразим список доступных в системе шин I²C, этой командой можно проверить есть (+включена) ли поддержка шины в устройстве или нет:

У меня вывод команды имеет следующий вид:

В начале строчки «i2c-1» можно увидеть что номер шины к которой подключен адаптер I²C = 1, эта информация нам позже пригодится.

Для просмотра адресов подключенных устройств можно вызвать команду i2cdetect с указанным номером шины, также по умолчанию она запустится в интерактивном режиме, который мы отключим при помощи параметра «-y», это нужно чтобы просто вывести состояние шины на консоль в текстовом виде.

Какой номер шины указывать для Rasperry Pi:

  • 1 — для Model A, B Rev 2 or B+
  • 0 — для более старых моделей с Rev 1.

В одной из статей я уже приводил рисунок о том .

В моем случае используется Raspberry Pi2 model B, также раньше при помощи команды i2cdetect я узнал что номер шины адаптера — 1. Давайте посмотрим что у нас подключено к шине под номером 1:

К малинке подключен модуль PCF8591 и вывод команды выглядит следующим образом:

Контроллер PCF8591 на шине I2C найден, его адрес — 0x48

Зная адрес устройства и принимая во внимание тот факт, что оно обнаружилось, можно переходить к изучению документации и выполнению первых экспериментов

Introduction: PCF8574 GPIO Extender — With Arduino and NodeMCU

By Tarantula3YoutubeFollow

More by the author:

About: There were 1000+ sperms but I was the fastest one..

More About Tarantula3 »

In my last tutorial, I talked about the TCA9548A MUX which can be used to add at the max of 64 I2C or I²C sensors to your Arduino/ESP8266/ESP32.

In this tutorial, I am going to talk about the PCF8574 8-bit GPIO Port Extender. It is one of the many GPIO extenders available in the market.

This tiny little board becomes a life saver When you run out of pins on your Arduino. This «GPIO (General Purpose Input Output) pin extender» provides an additional 8 pins (P0 ~ P7) which can be used to ‘output a signal’ or ‘read a signal as an input’.

These modules run on the I2C bus, and if daisy-chained you can connect upto 8 of these devices in a project. Each device will give us an additional 8-bits of GPIO enabling 64 GPIOs in total.

These ICs are ridiculously cheap and can be bought easily from eBay or AliExpress. If you don’t want to worry about the wiring and just want to keep your project really «simple», then you can buy these fully assembled breakout boards. You just need to hook them up to the I2C bus and you are all ready to go.

Схема распределения памяти

Фактически микросхема PCF8583 представляет собой статическое ОЗУ, емкостью 256 байт, у которого первые 16 байт являются регистрами специального назначения. Назначение некоторых регистров зависит от режима работы микросхемы. Режим задается в регистре состояния имеющем адрес 00h. Все числа в регистрах часов по умолчанию хранятся в BCD формате. 

Адрес

Описание

00h

Регистр состояния

01h

Доли секунд

1/10с

1/100с

02h

Секунды

10с

03h

Минуты

10мин

1мин

04h

Часы

10ч

05h

Дата

10дн

06h

Месяц

10мес

1мес

07h

Таймер

10дн

08h

Регистр тревог

09h

Тревога. Доли секунд

1/10с

1/100с

0Ah

Тревога. Секунды

10с

0Bh

Тревога. Минуты

10мин

1мин

0Ch

Тревога. Часы

10ч

0Dh

Тревога.Дата

0Eh

Тревога. Месяцы

0Fh

Таймер тревоги

10h…FFh

Статическое ОЗУ

Step 5:

Module: (1 Board for AUD $1.34)

*******************************

  • Now lets have a look at the PCF8574 Break-outboard:
  • Looking from left to right we can see that the module has 4 pins: VCC, GND, SDA and SCL
  • Then we have the two 10kΩ SMD pull-up resistors for the SDA and SCL buses.
  • Next we have the PCF8574 SMD IC followed by the 3 jumpers for A0, A1 and A2 with high and low positions. Then we have these ports which can be used to piggyback another one of these boards.
  • Then we have the 8 I/O pins plus one Interrupt pin. If we look at the back of the board the pins are all labeled starting from P0 to P7 and then ending with the INTrupt pin.

When you are using multiple of these you can switch the address by adjusting these jumperAddress bars.

Step 7: Library to Use

The link is in the description below. Click the DOWNLOADS button in the top right corner of the page, once downloaded rename the uncompressed folder to PCF8574.

Make sure that the PCF8574 folder contains PCF8574.cpp and PCF8574.h.

Place the PCF8574 library folder in your Arduino /libraries/ folder.

You may need to create the libraries sub-folder if this is your first library. Restart the IDE and then you should be able to use the library in your code. This library also comes with very good examples which will help you in getting your hands on the IO Expander.

#include «Arduino.h»

#include «PCF8574.h»

Режим часов (Clock mode)

Режим часов устанавливается путем записи 00b или 01b в биты 4,5 регистра состояния.

В данном режиме микросхема осуществляет счет импульсов от тактового генератора и на основе этих данных вычисляет время и дату. Значения заносятся в регистры 01h-07h в двоично-десятичном формате. Старший полубайт отвечает за десятки, а младший за единицы. При чтении данных в регистрах 05h,06h рекомендуется устанавливать флаг mask. Это позволяет читать дату и месяц, не проводя дополнительных вычислений. Все регистры доступны на чтение и запись. Это позволяет установить текущее время, просто записав нужное значение в соответствующий регистр.

 В режиме часов имеются некоторые особенности работы регистров 04h-05h.

Step 2: Connect the PCF8574/PCF8574A GPIO Module to the Arduino

  1. Connect Female-Female wires — Power(Red wire), Ground(Black wire), SDA(Green wire), and SCL(Yellow wire) to the PCF8574/PCF8574A GPIO Module (Picture 1)
  2. Connect the other end of the Ground(Black wire) to the Ground pin of the Arduino board (Picture 2)
  3. Connect the other end of the Power(Red wire) to the 5V Power pin of the Arduino board (Picture 2)
  4. Connect the other end of the SDA wire(Green wire) to SDA/Analog pin 4 of the Arduino Nano board (Picture 2)
  5. Connect the other end of the SCL wire(Yellow wire) to SCL/Analog pin 5 of the Arduino Nano board (Picture 2)
  6. Picture 3 shows where are the Ground, 5V Power, SDA/Analog pin 4, and SCL/Analog pin 5 pins of the Arduino Nano

Двухпроводная шина обмена данными I2C

I²C (I2C) — двунаправленная шина передачи данных, разработанная еще в 1980х годах компанией Philips для осуществления связи между разными схемами и устройствами.

Передача данных осуществляется по двум проводам — SDA (Serial Data) и SCL (Serial Clock). На одной такой двухпроводной линии связи можно держать до 127 различных устройств и модулей которые умеют работать с шиной I²C.

Рис. 1. Подключение устройств к шине I2C.

Режимы работы шины:

  • Скоростной — 400 кбит/с;
  • Обычный — 100 кбит/с;
  • С пониженной скоростью — 10 кбит/с.

В самом начале своего становления спецификация шины I2C была сфокусирована на логике, которая питается от напряжения +5V. В следующей своей спецификации 2.0 (1998 год) уровень опорного напряжения был уменьшен до 2V.

Линии SCL и SDA шины I2C являются двунаправленными, что делает невозможным подключение устройств с разными напряжениями питания. Для выхода из такой ситуации нужно использовать конвертеры уровней напряжения!

Существует достаточно много различных модулей и микросхем, которые управляются через шину I²C, приведу несколько примеров:

  • Микросхема TDA7448 — 6-ти канальный регулятор громкости для аудио-аппаратуры;
  • Микросхема TDA7313 — цифровой стерео аудио-процессор (регулировка громкости по каналам, эффект пространственного звучания, предусилитель, регулировка высоких и низких частот, приглушение, тонкомпенсация);
  • Микросхема TEA6420 — электронный переключатель аудио-сигналов (5 стерео-входов и 4 стереовыхода);
  • Микросхема TEA5767 — FM радиоприемник на диапазон частот 76…108 МГц;
  • Микросхема DS1307 — часы реального времени;
  • Микросхема PCF8591 — аналогово<->цифровой преобразователь (4 аналоговых входа, 1 аналоговый выход);
  • и другие…

Подобные микросхемы и модули применяются в автомагнитолах, музыкальных центрах, компьютерной электронике и автоматике, в электронных игрушках (квадрокоптеры, радиоуправляемые автомобили и другие), в системах контроля и охраны, а также во многих других промышленных и бытовых устройствах.

Работа с шиной I²C поддерживается в таких операционных системах как GNU Linux, FreeBSD, OpenBSD. Данная шина отлично подходит для связывания модулей в различных встраиваемых устройствах, как самодельных, так и промышленных.

Example

For a quick example of how this all hangs together, here is how you
would define in PCF

    plus =
      fix rec  nat -> nat -> nat in
        λ m  nat.
        λ n  nat.
          ifz m {
             Zero  => n
           | Suc x => Suc (rec x n)
          }

For this library we’d write this AST as

    let lam x e = Lam Nat $ abstract1 x e
        fix x e = Fix (Arr Nat (Arr Nat Nat)) $ abstract1 x e
        ifz i t x e = Ifz i t (abstract1 x e)
        plus = fix 1 $ lam 2 $ lam 3 $
                 ifz (V 2)
                     (V 3)
                     4 (Suc (App (V 1) (V 4) `App` (V 3)))
    in App (App plus (Suc Zero)) (Suc Zero)

We can then chuck this into the compiler and it will spit out the
following C code

    tagged_ptr _21(tagged_ptr * _30)
    {
        tagged_ptr _31 = dec(_30);
        tagged_ptr _35 = EMPTY;
        if (isZero(_30))
        {
            _35 = _30;
        }
        else
        {
            tagged_ptr _32 = apply(_30[], _31);
            tagged_ptr _33 = apply(_32, _30);
            tagged_ptr _34 = inc(_33);
            _35 = _34;
        }
        return _35;
    }
    tagged_ptr _18(tagged_ptr * _36)
    {
        tagged_ptr _37 = mkClos(_21, 2, _36[], _36);
        return _37;
    }
    tagged_ptr _16(tagged_ptr * _38)
    {
        tagged_ptr _39 = mkClos(_18, 1, _38[]);
        return _39;
    }
    tagged_ptr _29(tagged_ptr * _40)
    {
        tagged_ptr _41 = mkClos(_16, );
        tagged_ptr _42 = fixedPoint(_41);
        tagged_ptr _43 = mkZero();
        tagged_ptr _49 = inc(_43);
        tagged_ptr _50 = apply(_42, _49);
        tagged_ptr _51 = mkZero();
        tagged_ptr _56 = inc(_51);
        tagged_ptr _57 = apply(_50, _56);
        return _57;
    }
    int main()
    {
        call(_29);
    }

Which when run with pasted on top it prints out . As
you’d hope.

Описание протокола I2C

Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.

I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips. В основе i2c  протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.

Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.

Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.

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

  • Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
  • Подключение большого количества ведущих приборов.
  • Уменьшение времени разработки.
  • Для управления всем набором устройств требуется только один микроконтроллер.
  • Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
  • Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
  • Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
  • Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.

Недостатки:

  • Существует емкостное ограничение на линии – 400 пФ.
  • Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
  • При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.

Регистр Часов (04h)

Начальная установка после сброса – 00000000b 

7

6

5

4

3

2

1

HM

AM/PM

DH1

DH0

H3

H2

H1

H0

  • H0-H3 – единицы часов в BCD формате
  • DH0-DH1 – десятки часов
  • AM/PM – флаг до и после полудня.
  • HM – режим работы регистра часов (0 – 24-часовой формат AM/PM не задействован, 1 – 12-часовой формат с установкой флага AM/PM). 

Регистр Дата (05h)

Начальная установка после сброса – 00000001b 

7

6

5

4

3

2

1

Y1

Y0

DD1

DD0

D3

D2

D1

D0

  • D0-D3 – единицы дней в BCD формате
  • DD0-DD1 – десятки дней
  • Y0-Y1 – год. В случае установки флага Mask данные биты читаются как 0 

Регистр Месяц (06h)

Начальная установка после сброса – 00000001b 

7

6

5

4

3

2

1

W2

W1

W0

DM0

M3

M2

M1

M0

  • M0-M3 – единицы номера месяца в BCD формате
  • DM0 – десятки номера месяца
  • W0-W2 – номер недели в месяце. В случае установки флага Mask данные биты читаются как 0 

В режиме часов можно запустить таймер (07h). Он включается, если в регистре состояния записывается комбинация ХХ0Х Х1ХХb. Таймер имеет диапазон счета от 0 до 99. В случае переполнения таймера устанавливается флаг Timer в регистре состояния. Сброс этого флага осуществляется программно, путем обнуления соответствующих битов. Выбор функции счета  таймера выполняется в регистре тревог — Alarm Control (08h). В этом же регистре возможно подключить выход таймера к выводу INT микросхемы. 

Step 5: Software

Download and add in your IDE the library LiquidCrystal_I2C.h from

restart the IDE and upload this test code

#include

#include

//create an object called lcd, with address 0x38, wich is a display with 4 lines and 20 chars per line

LiquidCrystal_I2C lcd(0x38,20,4);

void setup()

{

lcd.init();

lcd.setBacklight(LOW);

lcd.print(«20×4 LCD I2C adapter»);

}

void loop()

{

lcd.setCursor(0,2);

lcd.print(» @instructables.com»);

}

SMALL ISSUE: I’ve used a npn transistor for backlight, the library is written for a pnp transistor. This means that the command lcd.setBaclight(LOW) turns the backlight on and lcd.setBacklight(HIGH) switchs the backlight off.

It’s not a big issue, and it’s easy to change in header file of library. Do it if you can.

Подключение LCD 1602A к Arduino (4-битном режиме)

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.
► Потенциометр 10 кОм x 1 шт.
► Разъем PLS-16 x 1 шт.
► Макетная плата MB-102 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
Для подключения будем использовать макетную плату, схема и таблица подключение LCD1602a к Arduino в 4-битном режиме можно посмотреть на рисунке ниже.

Подключение дисплея к макетной плате будет осуществляться через штыревые контакты PLS-16 (их необходимо припаять к дисплею). Установим модуль дисплея в плату breadboard и подключим питание VDD (2-й контакт) к 5В (Arduino) и VSS (1-й контакт) к GND (Arduino), далее RS (4-й контакт) подключаем к цифровому контакту 8 (Arduino). RW (5-й контакт) заземляем, подключив его к GND (Arduino), затем подключить вывод E  к контакту 8 (Arduino). Для 4-разрядного подключения необходимо четыре контакта (DB4 до DB7). Подключаем контакты DB4 (11-й контакт), DB5 (12-й контакт), DB6 (13-й контакт) и DB7 (14-й контакт) с цифровыми выводами Arduino 4, 5, 6 и 7. Потенциометр 10K используется для регулировки контрастности дисплея, схема подключения LCD дисплея 1602а, показана ниже

Библиотека уже входит в среду разработки IDE Arduino и нет необходимости ее устанавливать. Скопируйте и вставьте этот пример кода в окно программы IDE Arduino и загрузите в контроллер.

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 20.09.2016г.
*/

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup()
{
lcd.begin(16, 2); // Инициализирует LCD 16×2
}

void loop()
{
lcd.setCursor(0,0); // Установить курсор на первыю строку
lcd.print(«Hello, world»); // Вывести текст
lcd.setCursor(0,1); // Установить курсор на вторую строку
lcd.print(«www.robotchip.ru»); // Вывести текст
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 20.09.2016г.
*/
 
#include <LiquidCrystal.h>
 

LiquidCrystal lcd(7,6,5,4,3,2);

voidsetup()

{

lcd.begin(16,2);// Инициализирует LCD 16×2

}
 

voidloop()

{

lcd.setCursor(,);// Установить курсор на первыю строку

lcd.print(«Hello, world»);// Вывести текст

lcd.setCursor(,1);// Установить курсор на вторую строку

lcd.print(«www.robotchip.ru»);// Вывести текст

}

Немного о программе.
Для облегчения связи между Arduino и LCD дисплеем, используется встроенный в библиотеке в IDE Arduino «LiquidCrystal.h« — которая написана для LCD дисплеев, использующих HD44780 (Hitachi) чипсет (или совместимые микросхемы). Эта библиотека может обрабатывать как 4 — битном режиме и 8 — битном режиме подключение LCD.

Ссылки  Документация к LCD1602A

Купить на Aliexpress  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  LCD-дисплей 1602A

Купить в Самаре и области  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  LCD-дисплей 1602A

Datasheets

ProductFolder Sample &Buy Support &Community Tools &Software TechnicalDocuments PCF8574SCPS068J – JULY 2001 – REVISED MARCH 2015 PCF8574 Remote 8-Bit I/O Expander for I2C Bus1 Features 1 3 DescriptionThis 8-bit input/output (I/O) expander for the two-linebidirectional bus (I2C) is designed for 2.5-V to 6-VVCC operation. Low Standby-Current Consumption of 10 ОјA MaxI2C to Parallel-Port ExpanderOpen-Drain Interrupt OutputCompatible With Most MicrocontrollersLatched Outputs With High-Current DriveCapability for Directly Driving LEDsLatch-Up Performance Exceeds 100 mAPer JESD 78, Class II The PCF8574 device provides general-purposeremote I/O expansion for most microcontrollerfamilies by way of the I2C interface .The device features an 8-bit quasi-bidirectional I/Oport (P0–P7), including latched outputs with highcurrent drive capability for directly driving LEDs. Each …

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector