Добавить в корзинуПозвонить
Найти в Дзене
Старый радиолюбитель

Ардуино. Осваиваю I2C.

Пришло время вернуться к Ардуино, так как появились идеи и соответствующий КПЕ. Я уже писал о подключении к Ардуино двухстрочного дисплея. Все работало хорошо, но проводов ...... Конечно, для начала здорово, но в дальнейшем, если использовать дисплей в трансивере, то тащить к нему жгут из 8-ми проводников .... Вот я и решил освоить последовательный интерфейс I2C. Не буду углубляться в принцип его работы, но вместо 8-ми проводников нужно только 4: два - питание и два для передачи данных. Для того, чтобы сделать обычный дисплей 1602 (две строки по 16 символов), потребуется адаптер, которых полно на Али и стоят они не дорого. У меня такой уже был. Вот он вблизи. Гребенка из 16-ти пинов - для подсоединения к LCD, четыре вывода - для подсоединения к Ардуино, есть возможность отключить присутствующий на плате светодиод индикатора напряжения питания. Здорово, что есть подстроечник регулировки контрастности, но жаль, что нет регулировки яркости подсветки. Думаю, что разберусь потом. Предварите

Пришло время вернуться к Ардуино, так как появились идеи и соответствующий КПЕ.

Я уже писал о подключении к Ардуино двухстрочного дисплея. Все работало хорошо, но проводов ......

Рис. 1.
Рис. 1.

Конечно, для начала здорово, но в дальнейшем, если использовать дисплей в трансивере, то тащить к нему жгут из 8-ми проводников ....

Вот я и решил освоить последовательный интерфейс I2C. Не буду углубляться в принцип его работы, но вместо 8-ми проводников нужно только 4: два - питание и два для передачи данных.

Для того, чтобы сделать обычный дисплей 1602 (две строки по 16 символов), потребуется адаптер, которых полно на Али и стоят они не дорого.

Рис. 2.
Рис. 2.

У меня такой уже был.

Рис. 3.
Рис. 3.

Вот он вблизи.

Рис. 4. Вид адаптера сверху.
Рис. 4. Вид адаптера сверху.
Рис. 5. Вид адаптера снизу.
Рис. 5. Вид адаптера снизу.

Гребенка из 16-ти пинов - для подсоединения к LCD, четыре вывода - для подсоединения к Ардуино, есть возможность отключить присутствующий на плате светодиод индикатора напряжения питания. Здорово, что есть подстроечник регулировки контрастности, но жаль, что нет регулировки яркости подсветки. Думаю, что разберусь потом.

Предварительно залудив пины гребенки, сажаем ее на спину индикатору.

Рис. 6. LCD - индикатор с адаптером.
Рис. 6. LCD - индикатор с адаптером.

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

Для соединения индикатора и Ардуино я купил набор коннекторов, которые для этого предназначены.

Рис. 7. Набор коннекторов.
Рис. 7. Набор коннекторов.

Как видите, там есть папа-мама, мама-мама и папа-папа (не даром у них раскраска такая :) )

Теперь нужно скачать библиотеку для оживления девайса. Она называется LiquidCrystal_I2C_V112.Напоминаю, что скачиваете себе папку архива, затем открываете Arduino IDE, заходите в Скетч, выбираете "Подключить библиотеку", а затем "добавить .zip библиотеку". Указываете путь к месту, куда вы скачали архив, выбираете и жмете Open.

Рис. 8.
Рис. 8.

Скетч очень простой:

// Перед Include должна быть решеточка.

#include <Wire.h> //подключаем библиотеку для передачи данных по i2C

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

//Устанавливаем параметры дисплея: адрес дисплея, количество символов в строке, количество строк

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()

{

lcd.init(); //Инициируем дисплей

lcd.backlight();// Включаем подсветку дисплея

lcd.print("I2C to LCD");//будет выводится текст, заключенный в кавычки (в верхней строке, начиная с нулевого знакоместа)

lcd.setCursor(8, 1); //Устанавливаем позицию курсора во второй (нижней)
//строке, в 8-е знакоместо

lcd.print("Time");//Там будет выводиться то, что в кавычках

}

void loop()

{

// Устанавливаем курсор на вторую строку и нулевой символ.

lcd.setCursor(1, 1);

// Выводим на экран количество секунд, которое функция millis()

//отсчитывает от запуска программы в миллисекундах (1 с = 1000 мс)

lcd.print(millis()/1000);

}

При подключении Ардуино к компьютеру не забудьте проверить виртуальный порт, к которому плата подключена.

Рис. 8.
Рис. 8.

У меня в данный момент подключено к СОМ4. Не забудьте поставить галочку !. Если вы подключитесь к другому USB разъему, то у вас будет другой порт. Не забывайте об этом, иначе при загрузке скетча программа будет ругаться.

Итак скетч залит и вот результат:

Рис. 8.
Рис. 8.
Рис. 9 Вот под таким углом лучше.
Рис. 9 Вот под таким углом лучше.

Если вы уберете одну строку,

-12

то подсветки дисплея не будет.

Рис. 10.
Рис. 10.

Теперь применим полученные знания в моем частотомере.

Вот как изменился скетч при переходе на I2C.

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

#include <Wire.h> // подключаем библиотеку для обмена данными по I2C

#include <LiquidCrystal_I2C.h // подключаем библиотеку дисплея для I2C

LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем параметры дисплея

//Определяем переменные для хранения результата измерения и результата вычислений

long int frq1;

long int frq2;

void setup() {

lcd.begin(16, 2);// устанавливаем количество столбцов и строк на дисплея:

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

}

void loop() {

FreqCounter::start(1000); // устанавливаем измеряемый интервал 1000 мс

while (FreqCounter::f_ready == 0); // если счетчик готов, начинается счет

frq1 = FreqCounter::f_freq; // считываем результат в переменную

frq2 = frq1*4*1.001343; // вычисляем истинное значение частоты

// Печатаем сообщение на LCD.

lcd.setCursor(1, 0);//устанавливаем курсор на вторую позицию в верхней строке

lcd.print("Frequency");// выводим то, что в скобках и кавычках

lcd.setCursor(2, 1); //устанавливаем курсор на третью позицию в нижней строке

lcd.print(frq2);// выводим то, что в скобках

lcd.setCursor(11, 1);//устанавливаем курсор на 12-ю позицию в нижней строке

lcd.print("Hz");// выводим то, что в скобках и кавычках

delay(500);// устраняем дрожание текста

}

Скетч стал существенно короче, а работает также.

Рис. 11.
Рис. 11.

Теперь можно идти дальше.

Всем здоровья и успехов!