Серия недорогих микроконтроллеров Atmega8, Atmega48, Atmega88 могут стать отличной заменой сильно подорожавших плат Arduino Nano. Большое кол-во проектов создаваемых на платах Arduino Nano часто используют небольшое объем памяти и применять Arduino Nano в данных проектах нецелесообразно. В Atmega8, Atmega48, Atmega88 имеют 8 кБ программируемой Flash памяти, 1кБ SRAM памяти и 512 байта EEPROM.
Микроконтроллеры Atmega8, Atmega48, Atmega88 поддерживаются средой программирования Arduino IDE, так же большинство библиотек совместимы с этими контроллерами.
На этой странице будет рассмотрен пример подключения дисплей LCD1602 оснащенным модулем на PCF8574, который позволяет подключить символьный дисплей 1602 к микроконтроллеру ATmega88 всего по двум проводам SDA и SCL (I2C). Будет использована нестандартная библиотека Lcd1602_i2c_low, она имеет основные функции для работы с дисплеем LCD1602_I2C и меньший размер по сравнению со стандартной библиотекой.
Atmega88
Для использования Atmega8, Atmega48, Atmega88 в Arduino IDE Вам необходимо собрать следующую схему:
Как добавить микроконтроллер Atmega88 в среду программирования Arduino IDE и прошивать микроконтроллер можно узнать из статьи http://rcl-radio.ru/?p=113040.
Для запуска LCD1602 c I2C модулем на PCF8574, Вам понадобятся две библиотеки:
- Wire_low — библиотека для работы с шиной I2C (тестовая версия)
- Lcd1602_i2c_low — библиотека для работы с LCD1602 I2C на PCF8574
Загрузите тестовый скетч:
// ATMEGA8 ATMEGA48 ATMEGA88 ATMEGA168 ATMEGA328 #include <avr/io.h> #include <util/delay.h> #include <Wire_low.h> #include <Lcd1602_i2c_low.h> Lcd1602_i2c_low lcd(0x27);// адрес I2C int main(){ wire_set(12000000,100000); // тактовая частота контроллера, частота шины I2C lcd.setInit(); lcd.Clear(); // очистка экрана lcd.led(1); // включение и отключение подсветки экрана // собственные символы, 0...7 lcd.Write(0, 0b11111, 0b00000, 0b10001, 0b10001, 0b10001, 0b10001, 0b00000, 0b11111); lcd.Write(1, 0b11111, 0b10001, 0b11111, 0b10001, 0b11111, 0b10001, 0b11111, 0b00000); while(1){ lcd.Curs(0,0); // номер строки, положение курсора lcd.PrintString("ATMEGA88 ");// вывод String lcd.PrintFloat(1.227,3); // вывод Float lcd.Curs(1,4); // номер строки, положение курсора lcd.PrintInt(-30125); // вывод int lcd.PrintChar(0); // вывод собственного символа 0 lcd.PrintChar(1); // вывод собственного символа 1 _delay_ms(100); }}
Скетч использует 3600 байт (43%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 14 байт (1%) динамической памяти, оставляя 1010 байт для локальных переменных. Максимум: 1024 байт.
После загрузки скетча на дисплее LCD1602 Вы увидите следующее:
Функции библиотеки Lcd1602_i2c_low
- Lcd1602_i2c_low lcd(0x27) — подключение библиотеки, указание адреса модуля I2C
- wire_set(12000000,100000) — тактовая частота контроллера, частота шины I2C (функция библиотеки Wire_low)
- lcd.setInit() — инициализация
- lcd.Clear() — очистка дисплея
- lcd.led(1) — включение (1) и отключение (0) подсветки дисплея
- lcd.Write(а, b) — функция собственных символов (8 символов)
- а — номер символа
- b — массив символа
- lcd.Curs(0,0) — номер строки, положение курсора
- lcd.PrintString() — вывод String
- lcd.PrintFloat(a, b) — вывод Float
- a — число Float
- b — кол-во чисел после запятой
- lcd.PrintInt() — вывод int
- lcd.PrintChar() — вывод собственного символа
Далее показан скетч со стандартной библиотекой который выводит на экран ту же информацию что и предыдущий скетч:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей byte v1[8]={ 0b11111, 0b00000, 0b10001, 0b10001, 0b10001, 0b10001, 0b00000, 0b11111}; byte v2[8]={ 0b11111, 0b10001, 0b11111, 0b10001, 0b11111, 0b10001, 0b11111, 0b00000}; void setup(){ lcd.init(); lcd.backlight();// Включаем подсветку дисплея lcd.createChar(1, v1);lcd.createChar(2, v2); } void loop(){ lcd.setCursor(0, 0); lcd.print("ATMEGA88 "); lcd.print(1.227,3); lcd.setCursor(4, 1); lcd.print(-30125); lcd.write((uint8_t)1);lcd.write((uint8_t)2); delay(100); }
Скетч использует 5280 байт (64%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 295 байт (28%) динамической памяти, оставляя 729 байт для локальных переменных. Максимум: 1024 байт.
Как видно библиотека Lcd1602_i2c_low использует меньшее кол-во памяти, что позволяет более оптимально использовать микроконтроллеры Atmega8, Atmega48, Atmega88.
Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=5511#p5511