Программировать будем на С.
Кварц можно взять любой – главное рассчитать по формуле значение параметра UBRR (UBRR0L).
Провёл тесты с кварцами – 4 МГц, 10 МГц, 12 МГц – все отлично работают! Код для всех них приведу ниже.
Будем управлять микроконтроллером с компьютера. Самое простое решение – это воспользоваться UART.
Для примера возьмем два светодиода и с компьютера через терминал будем включать и выключать их.
Если мы вводим в терминале цифру:
1, то включается светодиод на PC5 (28 ножка),
2, то выключается светодиод на PC5 (28 ножка),
3, то включается светодиод на PC4 (27 ножка),
4, то выключается светодиод на PC4 (27 ножка),
Схема устройства подключения Atmega88 (кварц любой, нужно только рассчитать по формуле):
Собранная:
———-
USB-TTL (USB-UART) преобразователь использовал – USB-UART для Адуино – HW-597 (на микросхеме CH340).
Но можно сделать его самому на Atmega88 (и других Atmega: ATtiny45/85, ATtiny2313/AT90S2313 и ATmega8/48/88/168), вот писал в одной из своей предыдущей записи:
А также можно собрать COM-TTL преобразователь – на микросхеме max232 – более подробно здесь – схема и как работает:
Последовательная передача по UART с pic16f690 на ПК (max232)
—————
Код на С для кварца 4 МГц (UBRR0L в комментах рассчитан на 10 МГц, 12 МГц и 14745600 Гц):
#include <avr/io.h> #include "delay.h" #include "delay.c" #include <util/delay.h> //*** Инициализация UART ***// void uart_init(void) { //скорость обмена данными UBRR0H = 0; //старший байт UBRR0L = 25; //младший байт 9600 и кварц 4 МГц //UBRR0L = 64; //младший байт 9600 и кварц 10 МГц //UBRR0L = 77; //младший байт 9600 и кварц 12 МГц //UBRR0L = 95; //младший байт 9600 и кварц 14745600 Гц //8 бит данных, 1 стоп бит, без контроля четности UCSR0B = (1<<RXEN0)| (1<<TXEN0);// 1 - разрешщаем прием 2 разрешаем передачу UCSR0C = (1<<UCSZ01)| (1<<UCSZ00); // Асинхронная передача, Без режима четности, 1 стоп бит. 8 бит размер данных } //*** Прием данных по UART ***// unsigned char uart_receive(void) { while ( !(UCSR0A & (1<<RXC0)) ); return UDR0; } //*** Передача данных по UART ***// void uart_transmit(unsigned char data) { while( !(UCSR0A & (1<<UDRE0))); UDR0 = data; } //*** Главная программа ***// int main(void) { DDRD = 0x00; //установим все порты DDRD как входы PORTD = 0x00; //установим логический 0 на все порты DDRD DDRC = (1 << 5) | (1 << 4); //установим порты PC5 и PC4 регистра DDRC на выход PORTC &= ~(1 << 5) | ~(1 << 4); //установим сигнал низкого уровня (логическай 0) на выводы PC5 и PC4 регистра DDRC char data; uart_init(); while(1) { data=uart_receive(); if(data=='1') { PORTC |= 1 << 5; //устанавливаем логическую 1 на порт PC5 регистра DDRC } if(data=='2') { PORTC &= ~(1 << 5); //устанавливаем логический 0 на порту PC5 регистра DDRC } if(data=='3') { PORTC |= 1 << 4; //устанавливаем логическую 1 на порт PC4 регистра DDRC } if(data=='4') { PORTC &= ~(1 << 4); //устанавливаем логический 0 на порту PC4 регистра DDRC } uart_transmit(data); } }
Скачать прошивки для разны кварцев:
———————————-
Фьюзы для прошивки следующие (Atmega88):
В программе PonyProg и AVR8_Burn-O-Mat, как и в даташите – запрограммированный фьюз равен 0.
Если в PonyProg стоит галочка, значит фьюз запрограммирован.
Всегда обращайте на фьюз SPEIN – он всегда запрограммирован!!!
Фьюзы прошивал следующие в PonyProg2000 будут выглядеть так:
Фьюзы прошивал следующие в AVR8_Burn-O-Mat будут выглядеть так:
———————————-
———————
Кварц 4 МГц)
Скачать файл прошивки hex и файл на С для кварца 4 МГц:
– скачать в zip архиве
https://gameforstreet.ru/wp-content/uploads/2025/03/4.tar.gz” rel=”noopener” target=”_blank”>- скачать в tar.gz архиве.
———————
Кварц 10 МГц)
Скачать файл прошивки hex и файл на С для кварца 10 МГц:
– скачать в zip архиве
https://gameforstreet.ru/wp-content/uploads/2025/03/10.tar.gz” rel=”noopener” target=”_blank”>- скачать в tar.gz архиве.
———————
Кварц 12 МГц)
Скачать файл прошивки hex и файл на С для кварца 12 МГц:
– скачать в zip архиве
https://gameforstreet.ru/wp-content/uploads/2025/03/12.tar.gz” rel=”noopener” target=”_blank”>- скачать в tar.gz архиве.
——————-
Кварц 14745600 Гц (14,7456 МГц)
Скачать файл прошивки hex и файл на С для кварца 14745600 Гц:
– скачать в zip архиве
– скачать в tar.gz архиве.
——————
Как рассчитывается UBRRL
Выбранный вами генератор может быть любой! Это делается путем установки значения UBRRL. Формула для этого здесь:
Примеры расчётов:
Если выбрать Кварц -12 МГц
Для начала необходимо рассчитать скорости обмена по UART с учетом использования наших данных:
img
кварцевый резонатор = 12 Mhz;
скорость передачи = 9600;
количество бит данных = 8;
количество стоп-бит = 1;
контроль четности = запрещен.
За настройку скорости отвечает регистр UBRR.
Рассчитать его можно по формуле:
img
UBRR = ( F /( B * 16 ) ) — 1
где: F — тактовая частота МК (частота кварца в Hz); B — требуемая скорость (бит/с).
подставив наши данные получим:
img
UBRR = (12000000/(9600*16))-1 = (12000000/153600)-1 = 78,125 — 1 = 77,125 (берём 77,тогда ошибка передачи будет в 1-2% (на результат работы схемы никак не сказывается) и нужно будет поменять в коде UBRR0L = 77;))
Аналогично рассчитывается для других значений кварца.
———————————-
Терминал использовал Cutecom (можно использовать putty)
Как его установить для Linux и Windows написал здесь:
Подключаем микроконтроллер PIC к USB (UART) на Linux и Windows
———————————-
Примечание – для точной передачи данных:
——————–
Важно определить скорость последовательной связи . Это зависит от частоты вашего генератора! Я сказал, что использовал генератор 14,7465 МГц. Во-первых, требуется кварцевый или керамический генератор поверх внутреннего RC-генератора, потому что внутренний RC-генератор недостаточно точен для последовательной связи. Кварц стоит 14,7465 МГц. (Можно взять любой другой, например 12 МГц,тогда ошибка передачи будет в 1-2% (на результат работы схемы никак не сказывается) и нужно будет поменять в коде UBRR0L = 77;).Если Вы хотите просто идеальную передачу (без ошибок), то генератор должен быть кратным 1,8432 МГц.
Выбранный вами генератор может быть любой! Это делается путем установки значения UBRRL. Формула для этого здесь:
В техническом описании вашего микроконтроллера (даташит) может быть указано множество распространенных частот кристалла, полос пропускания и соответствующих им значений UBRR. Однако в моем техническом описании (даташит) не было записи для кристалла 14,7465 МГц, поэтому мне пришлось делать расчеты самостоятельно. Я поискал в Яндексе, но никакой «таблицы» не оказалось! Почему бы не сделать ее? (рисунок ниже). В любом случае, для моего случая я определил, что если установить значение UBRR равным 95, то я смогу передавать данные со скоростью 9600 бод (бит/сек).
—————————————–