Первый проект на микроконтроллере AVR Tiny

После того как мы описали все элементы и компоненты проекта для микроконтроллеров AVR, предлагаем простой проект для иллюстрации. В схеме имеется два светодиода и две кнопки, а также кнопка сброса. Задача устройства — изменять состояние светодиодов при нажатии и отпускании кнопок. Проект имеет такое название потому, что вводит вас в мир микроконтроллеров tinyAVR. Данная схема собрана на микроконтроллере ATtiny13, который питается от двух батареек АА-типа.

Давайте рассмотрим элементы схемы. Схема питается от двух щелочных батареек размера АА. Как упоминалось ранее, такие батареи имеют номинальное напряжение на выводах 1,5 В. Две батареи дают напряжение 3 В. Рабочее напряжение Tiny13V составляет от 1,8 до 5,5 В, так что 3 В вполне подходит. По мере разряда батарей напряжение будет падать, но схема будет продолжать работать до тех пор, пока напряжение питания не снизится до 1,8 В. Светодиоды видимого света (в отличие от инфракрасных) имеют определенное напряжение включения, которое зависит от цвета (1,8В— для красного и 3,5 В— для белого). Таким образом, для этого проекта следует выбрать красные светодиоды. На рисунке показана компоновка платы со стороны компонентов и со стороны пайки. Вы видите, что плата в основном разведена в слое пайки (со стороны компонентов есть только одна перемычка). Ее легко изготовить при помощи фрезерования, описанного в предыдущем разделе. Внешний вид собранного образца устройства показан на фото.

Печатная плата  Собранное на печатной плате устройство

Код программы был написан таким образом, что левая кнопка включает левый светодиод, а правая — правый. То есть если правый светодиод выключен, и вы нажимаете и отпускаете правую кнопку, то она включает правый светодиод. Код программы для микроконтроллера Tiny13V на языке С приведен ниже:

//Include Files
#include<avr/io.h>
#define F_CPU 128000UL
#include<util/delay.h>
int main(void)
{
DDRB |= 1<<2|1<<3;//сделать выходами
PORTB |= 1<<2|1<<3;
//Switch off the LEDs
DDRB &= ~(1<<0|1<<1);//Сделать входами
PORTB |= (1<<0|1<<1);//Включить подтяжку к + питания
while(1)
{
//Первое условие
if(!(PINB&(1<<0))) //Если нажата, то...
{
_delay_ms(10); //задержка для защиты от дребезга
while(!(PINB&(1<<0)));
//Ждем, когда отпустят кнопку
_delay_ms(10); //задержка для защиты от дребезга
PORTB^= (1<<3);//Toggle
}
//Второе условие
if(!(PINB&(1<<1)))//Если нажата
{
_delay_ms(10); //задержка для защиты от дребезга
while(!(PINB&(1<<1)));
//Ждем
_delay_ms(10); //задержка для защиты от дребезга
PORTB^= (1<<2); //Переключение состояния ножки
}
}
}

Установка fuse-битов микроконтроллера

Листинг программы демонстрирует общий стиль программирования. Файлы, заголовков специфичны для компилятора AVR-GCC. Макрос f_cpu используется для передачи в компилятор значения рабочей частоты. Программа работает в бесконечном цикле. Для каждой кнопки есть один блок if, который сначала проверяет нажатие кнопки. Если кнопка нажата, то происходит ожидание ее отпускания, и при отпускании выполняется нужное действие (переключение светодиода). Задержка в 10 мс после каждого нажатия и отпускания кнопки предназначена для подавления дребезга контактов. Тем, кто только начинает программировать на языке С для микроконтроллеров AVR, рекомендуется прочитать приложение 1, чтобы лучше понять приведенный код.

AVR программируется через STK500 в режиме ISP. Установка fuse-битов показана на рисунке. Tiny 13 настроен для работы на частоте 128 кГц внутреннего RC- генератора. Идея состоит в том, чтобы тактировать AVR самой низкой частотой, поскольку потребление энергии цифровыми схемами AVR (схема типа CMOS) прямо пропорционально рабочей тактовой частоте, а мы хотим свести затраты энергии к минимуму.

В данной статье описан простейший проект, для которого мы предоставили полный исходный код и компоновку печатной платы. Создание более интересных устройств на основе контроллеров tinyAVR начнется в следующих статьях. Для всех остальных проектов мы не приводим в тексте полный исходный код и разводку печатной платы. Все это можно получить по ссылкам, указанным для каждого проекта. Однако для самых важных фрагментов кода даны пояснения. В следующей главе мы рассмотрим несколько простых проектов со светодиодами.

Откомпилированный исходный код вместе с файлом MAKEFILE можно скачать по ссылке.
Данная статья из книги «Занимательные проекты на базе микроконтроллеров tinyAVR».

Похожие записи