Всем привет! В этом статье продолжим знакомство с микроконтроллерами семейства ATtiny. В прошлой статье мы собирали удобный модуль для программирования ATtiny.
Сейчас на примере ATtiny85 я расскажу, как данный микроконтроллер может обмениваться информацией с другими устройствами, в частности с Arduino UNO, и как выводить эту информацию в монитор порта Arduino IDE.
Для отладки различных процессов, получения основных или промежуточных результатов работы различных функций, а так же получения информации с разных датчиков, в среде разработки Arduino IDE очень удобно использовать монитор порта. Но как быть с микроконтроллерами семейства ATtiny?
Если мы возьмем скетч Blink, проведем инициализацию серийного порта и добавим 2 функции, первая из которых будет выводить "led on", когда светодиод загорается, а вторая "led off", когда светодиод гаснет, то загрузив данный скетч в Arduino UNO и открыв монитор порта, мы увидим соответствующий результат.
Но, если мы переводим Arduino UNO в режим программатора, прошиваем нашу ATtiny (если она еще не прошита), и попробуем загрузить тот же скетч Blink в ATtiny, то еще на этапе компиляции, появится ошибка. Дело в том, что ATtiny, в отличие от Arduino UNO, не имеет аппаратного UART (UART - протокол приёма и передачи данных между устройствами по двум проводам). И нам придется реализовывать работу с ним программно, через стандартную для Arduino IDE библиотеку SoftwareSerial.
Обмен данными с Arduino UNO мы будем реализовывать через порты RX-TX. Это нулевой и первый пин Arduino UNO.
Добавляем к нашему скетчу Blink библиотеку SoftwareSerial.
Определяем 3 пин как RX, а 4-й пин как TX. Если смотреть даташит на ATtiny – физически, это второй и третий пины соответственно.
В функции Setup(), определяем режим работы RX на вход, а TX на выход.
И далее, проводим инициализацию нашего программного серийного порта, на той же скорости что и аппаратный в Arduino UNO, т.е. 9600.
А в теле функции loop() меняем обращение к аппаратному порту, на обращение к программному порту.
[решетка]include <SoftwareSerial.h>
[решетка]define LED_BUILTIN 0
[решетка]define rx 3
[решетка]define tx 4
SoftwareSerial softSerial(rx,tx);
// the setup function runs once when you press reset or power the board
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(rx, INPUT);
pinMode(tx, OUTPUT);
softSerial.begin (9600);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
softSerial.println("led on");
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
softSerial.println("led off");
delay(1000); // wait for a second
}
Загружаем скетч в ATtiny. Светодиод, как и положено, мигает раз в секунду. Кстати, обратите внимание, что наш скетч занимает более 2 КБ flash-памяти ATtiny.
Это всё из-за подключения библиотеки SoftwareSerial. Т.е. в данном случае, использовать ATtiny13 не получится, просто не хватит памяти. Поэтому я и использую ATtiny85. Еще можно использовать ATtiny45. У него 4 КБ flash-памяти. Вполне достаточно для размещения этого скетча.
Теперь отсоединяем нашу плату от Arduino UNO.
Если Вы собирали программатор на макетной плате, как я своей первой статье о ATtiny - ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino, то нужно не забыть удалить конденсатор.
Выводим Ардуино UNO из режима программатора, выбрав в примерах и загрузив пустой скетч.
Далее соединяем второй пин ATtiny с нулевым пином Ардуино (rx), а третий пин ATtiny с первым пином Ардуино (tx). Важный момент, при соединении двух устройств по данной схеме, т.е. с использованием rx-tx портов, нужно запитать оба устройства от одного источника питания. Т.е. у нас не получится отдельно запитать Ардуино через USB-порт компьютера, а ATtiny через usb-порт нашего самодельного программатора. Придется отключить наш светодиод и соединить соответствующие пины ATtiny, а именно четвертый и восьмой, с пинами GND и 5В Ардуино, соответственно.
Возвращаемся к скетчу Blink, открываем монитор порта и видим появляющиеся раз в секунду записи о включении и выключении светодиода.
Чтобы у нас еще и синхронно мигал светодиод, соединим его ножку с припаянным резистором на 220 ом со свободным пином GND Ардуино. А другую ножку с 5 пином ATtiny.
Светодиод мигает и выводится информация о его состоянии в монитор порта.
В дальнейшем, мы будем использовать информацию из этой статьи, для вывода отладочных данных, а так же сигнала от разных датчиков, которые будем подключать к ATtiny.
Ниже размещено видео по материалам данной статьи.
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- ATtiny13 и ATtiny85. Обзор и программирование с помощью Arduino.
- Что такое фоторезистор? Подключение фоторезистора к ATtiny13 и управление светодиодом.
- Создаем удобный модуль для программирования микроконтроллеров ATtiny.
- Регулируемое фотореле на ATtiny13 для уличного освещения своими руками.