Пример программы для atmega8

Для программирования микроконтроллера нужно знать хотя бы основы языка Си, ведь именно с помощью него мы будет начинать этот нелегкий путь. И как всегда в этом нам поможет микроконтроллер ATmega8 фирмы Atmel.
Перед началом стоить поговорить о памяти микроконтроллера(далее просто МК). ATmega8 имеет 8 Кб памяти для программы с возможностью перезаписать её до 10 000 раз, неплохо правда? Так же МК имеет 512 байт флеш-памяти для хранения переменных, так называемой EEPROM – проще говоря эта память для каких-либо данных которые не сотрутся после выключения питания, к примеру, если мы сделали кодовый замок, а пароль мы не сможем сохранить в энергонезависимой памяти,значит будем хранить его в еепроме.
Перед началом представлю несколько часто используемых терминов и выражений:
Компилятор — это программа, с помощью которой мы напишем программу.
Прошивка — это скомпилированная программа готовая к записи в МК. Файлы для прошивки имеют расширение 2х типов: .hex(основной) и .еер; .rom; .bin(используется довольно редко). Мы не будем работать с EEPROM регистрами, просто что бы вы знали что это.

ATmega8 bootloader, code, Arduino IDE


Зашить, прошить, залить – это действие означает записать прошивку в память МК.

Расскажу-ка я вам, как работать в довольно простом компиляторе CodeVisionAVR (ссылка на скачивание в конце статьи). Немного о самой программе:
CodeVision представляет собой кросс-компилятор языка С, графическую оболочку и автоматический генератор шаблонов программ, ориентированные на работу с семейством AVR.
Давайте же посмотрим на окно программы и его структуру

Изучаем микроконтроллеры AVR. Первая программа
Изучаем микроконтроллеры AVR. Первая программа

Посмотрели? Пришло время написать первую программу управления светодиодом. Наша задача будет заключаться в том, чтобы подключить светодиод к выводам PD4(«-«),PD5(«+») и, скажем, заставить его мерцать с частотой в 1Гц

Чтобы создать новый проект, жмём File — New, выбираем Project и нажимаем ОК. Далее появится окно, в котором спрашивают, хотим ли мы использовать CodeWizardAVR, нажимаем Yes. Выбираем тип МК AT90,ATtiny,ATmega. и нажимаем ОК. Появится окно, в поле Chip выберите ATmega8,а в поле Clock (тактовая частота) выбираем 8,000000 МГц

Далее нажимаем на значок шестеренки Generate program, save and exit. При этом сохраняя все файлы, к примеру, в какую то отведенную папку.

Изучаем микроконтроллеры AVR. Первая программа

После чего у нас появляется заполненное рабочее поле, это означает что вы создали шаблон программы . Вот что у вас должно было получиться

Далее убираем всю не нужную (пока не нужную. ) инфу до этого состояния (можно просто скопировать). Давайте разберёмся что у нас осталось

How to Program ATMEGA8 / 48 /88 / 168 / 328 P | Arduino As ISP | AVR Microcontroller Programming

Для нашей программы нужна будет библиотека задержки, поэтому дописываем

#include

Мы работаем с портом D, для этого оставили его параметры. В прошлой статье мы говорили про регистры управления портами, вот и они:

PORTD=0x00; DDRD=0x00;

Значение записано в виде 0xXX, 0х — означает что число, которое стоит после — шестнадцатеричное.
Т.к мы уже перевели нужные числа (опять же смотрим прошлую статью) подставляем наши расчеты, должно получится так

PORTD=0x20; DDRD=0x30;

Далее стоит бесконечный цикл, он нужен для того чтобы выполнять бесконечное (пока подключено питание) кол-во действий над нашим светодиодом. Для того что бы заставить светодиод мерцать с частотой в 1Гц нам нужно выключать и включать питание на выводе PD5. Для этого есть команда PORTD.5=0, эта команда работает для всех портов, для этого нужно только сменить имя порта и номер вывода этого порта. Значение после = означает, какое значение будет на этом выводе,»0″-Минус(GND), «1»- Плюс(5В). Для нашей схемы т.к. начальное значение вывода PD5 равно 1(светодиод горит), нужно поставить 0(светодиод выключен).
Теперь о задержке, мы подключили библиотеку задержки и теперь мы можем контролировать, сколько времени наш светодиод будет включен, а сколько выключен, это нам обеспечит команда delay_ms(значение в миллисекундах).
Вот что получится

Читайте также:
Как открыть свою программу на телеканале

PORTD.5=0; //выключили delay_ms(1000); //ждём 1 секунду PORTD.5=1; //включили delay_ms(1000); //ждём 1 секунду

Вроде бы все, давайте соберем нашу программу воедино:

Теперь нужно скомпилировать программу, для этого нажмите на кнопку Build All

Изучаем микроконтроллеры AVR. Первая программа

Заходим в папку, в которую вы сохраняли проект и находим папку Еxe, там и будет наша прошивка (.hex), именно ее и нужно залить в МК.
Скачать CodeVisionAVR 2.05.0 можно тут, а Proteus v.7.7 (понадобится в следующей статье) здесь.

Источник: radioaktiv.ru

Пример программы для atmega8

Работа с UART на ATmega несколько проще чем с таймерами, но на мой взгляд, в целом эта тема более мутная, хотя и более интересная. Зависит от того, с какой стороны посмотреть.

Так же как и с таймерами, для работы c USART имеется набор прерываний:

В книге «Практическое программирование МК Atmel AVR» Ю.Ревич очень не советует использовать прерывания для работы c USART, потому-что, к примеру, чтение из буфера USART подразумевает ожидание когда в этом буфере что-то появится. Если это делать из прерывания, то другие прерывания повиснут в ожидании пока медленый USART не получит свои данные. В то время как цикл ожидания в главном теле программы вполне нормальная вещь и не мешает работе периферии.

Инициализация

Примеры инициализации USART приведены в оффициальном руководстве к ATmega8:

Сначала в регистр UBRRL заносится скорость соединения которая расчитывается по формуле:

скорость=частота_кварца/(16*битрейт -1);

.т.е. для 16МГц кварца и битрейта 9600 будет: 16000000/(16*9600)-1 = 103.1(6)

т.е. 103 если округлить до целого. Скорость также можно посмотреть в таблицах официального руководства:

После уcтановки скорости, следут разрешить прием и передачу по USART установкой флагов TXEN и RXEN в регистре UCSRB:

Последнее, что нужно сделать, это указать режим работы 8N1 установкой флагов UCSZ0, UCSZ1, URSEL в регистре UCSRC:

Простейшая программа для работы с USART:

/* uart.c sends ‘H’ symbol every second via UART for AVR ATmega8 compile: avr-gcc -mmcu=atmega8 -Wall -Os -o uart.elf uart.c avr-objcopy -O ihex uart.elf uart.hex */ #define F_CPU 16000000UL #include #include int main(void) < UBRRL=103; UCSRB=(1<1<1<3<for (;;) < _delay_ms(1000); UDR=’H’; > return 0; >

Здесь каждую секунду, через USART, микроконтроллер посылается символ H.

Этот пример шлет уже строку:

/* send.c sends string every second via UART for AVR ATmega8 compile: avr-gcc -mmcu=atmega8 -Wall -Os -o send.elf send.c avr-objcopy -O ihex send.elf send.hex */ #define F_CPU 16000000UL #include #include #include register unsigned char i asm(«r28»); int writeSerial(char* str) < for(i=0;i//fixed см. коментарии (25.07.2020) < while(!(UCSRA; // wait ready of port UDR = str[i]; > return 0; > int main(void) < UBRRL=103; UCSRB=(1<1<1<3<for (;;) < _delay_ms(1000); writeSerial(«Hello World!n»); > return 0; >

Последний пример сначала читает из USART строку с символом двоеточия на конце, и затем посылает ее обратно уже без двоеточия:

/* serial.c read string via UART with symbol ‘:’ as End-Of-Line and write this string in UART backward compile: avr-gcc -mmcu=atmega8 -Wall -Os -o serial.elf serial.c avr-objcopy -O ihex serial.elf serial.hex */ #define F_CPU 16000000UL #include #include #include /10/#include const unsigned char MAX_STRING=32; register unsigned char i asm(«r28»); int writeSerial(char* str) < for(i=0;(i’:’); i++) < while(!(UCSRA; UDR = str[i]; > return 0; > int readSerial(char* str) < i=0; do < while(!(UCSRA; str[i]=UDR; i++; > while (str[i-1] != ‘:’ i return 0; > int main(void) < UBRRL=103; UCSRB=(1<1<1<3<1<// pinMode(13,OUTPUT); в Wiring for (;;) < char data[MAX_STRING]; _delay_ms(1000); readSerial(data); PORTB ^= (1<// blink _delay_ms(1000); writeSerial(data); PORTB ^= (1<// blink for visual control uint8_t k; // clear array for(k=0; k < MAX_STRING; k++) data[k]=0; > return 0; >

Регистр данных UDR который используется в функциях отправки и приема строки является какбы «сдвоенным». На чтение и на запись, физически это разные регистры.

Читайте также:
Можно ли восстановить удаленную программу 1с

Пример работы последней программы:

Источник: count-zero.ru

Микроконтроллеры Atmega8. Программирование Atmega8 для начинающих

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

Общая информация

atmega8 программирование

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

Первоначально необходимо освоить что-то простое. И в качестве образца будет взят Atmega8. Программирование на нём не является сложным благодаря грамотной архитектуре и дружелюбному интерфейсу. К тому же он является обладателем достаточной производительности, чтобы использовать в большинстве любительских устройств. Более того, они применяются даже в промышленности.

В случае с Atmega8 программирование предусматривает знание таких языков как AVR (C/Assembler). С чего же начать? Освоение этой технологии возможно тремя путями. И каждый выбирает сам, с чего начать работу с Atmega8:

  1. Программирование через Arduino.
  2. Покупка готового устройства.
  3. Самостоятельная сборка микроконтроллера.

Нами будет рассмотрен первый и третий пункт.

Arduino

программирование atmega8 usbasp

Это удобная платформа, выполненная в виде электронного конструктора, что подходит для быстрого создания различных устройств. В плате уже есть всё необходимое в виде самого микроконтроллера, его обвязки и программатора. Пойдя по этому пути, человек получит следующие преимущества:

  1. Низкий порог требований. Не нужно обладать специальными навыками и умениями для разработки технических устройств.
  2. Широкий спектр элементов будет доступен для подключения без дополнительной подготовки.
  3. Быстрое начало разработки. С Arduino можно сразу переходить к созданию устройств.
  4. Наличие большого количества учебных материалов и примеров реализаций различных конструкций.

Но есть и определённые минусы. Так, Arduino программирование Atmega8 не позволяет глубже окунуться в мир микроконтроллера и разобраться во многих полезных аспектах. Кроме этого, придётся изучить язык программирования, что отличается от применяемых AVR (C/Assembler). И ещё: Arduino имеет довольно узкую линейку моделей.

Поэтому рано или поздно возникнет необходимость использовать микроконтроллер, что не используется в платах. А в целом это неплохой вариант работы с Atmega8. Программирование через Arduino позволит получить уверенный старт в мире электроники. И у человека вряд ли опустятся руки из-за неудач и проблем.

Самостоятельная сборка

Благодаря дружелюбности конструкции их можно сделать самими. Ведь для этого нужны дешевые, доступные и простые комплектующие. Это позволит хорошо изучить устройство микроконтроллера Atmega8, программирование которого после сборки будет казаться более лёгким. Также при необходимости можно самостоятельно подобрать иные комплектующие под конкретную задачу.

Правда, здесь есть и определённый минус – сложность. Самостоятельно собрать микроконтроллер, когда нет нужных знаний и навыков, нелегко. Этот вариант мы и рассмотрим.

Что же нужно для сборки?

arduino программирование atmega8

Первоначально необходимо заполучить сам Atmega8. Программирование микроконтроллера без него самого, знаете ли, невозможно. Он обойдётся в несколько сотен рублей – обеспечивая при этом достойный функционал. Также стоит вопрос о том, как будет осуществляться программирование Atmega8. USBAsp – это довольно хорошее устройство, что себя зарекомендовало с лучшей стороны.

Но можно использовать и какой-то другой программатор. Или же собрать его самостоятельно. Но в таком случае существует риск, что при некачественном создании он превратит микроконтроллер в неработающий кусочек пластика и железа. Также не помешает наличие макетной платы и перемычек. Они не обязательны, но позволят сэкономить нервы и время.

И напоследок – нужен источник питания на 5В.

Программирование Atmega8 для начинающих на примере

программирование atmega8 для начинающих

Давайте рассмотрим, как в общих чертах осуществляется создание какого-то устройства. Итак, допустим, что у нас есть микроконтроллер, светодиод, резистор, программатор, соединительные провода, макетная плата и источник питания. Первый шаг – это написание прошивки.

Читайте также:
Как пользоваться программой furmark видео

Под нею понимают набор команд для микроконтроллера, что представлен в качестве конечного файла, имеющего специальный формат. В нём необходимо прописать подключение всех элементов, а также взаимодействие с ними. После этого можно приступать к сборке схемы. На ножку VCC следует подать питание.

К любой другой, предназначенной для работы с устройствами и элементами ,подключается сначала резистор, а потом светодиод. При этом мощность первого зависит от потребностей в питании второго. Можно ориентироваться по такой формуле: R=(Up-Ups)/Is. Здесь p – это питание, а s – светодиод.

Давайте представим, что у нас есть светодиод, потребляющий 2В и требующий ток питания на уровне 10 мА, переводим в более удобный для математических операций вид и получаем 0.01А. Тогда формула будет выглядеть следующим образом: R=(5В-2В)/0.01А=3В/0.01А=300 Ом. Но на практике часто оказывается невозможным подобрать идеальный элемент. Поэтому берётся наиболее подходящий.

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

А что же дальше?

программирование atmega8 встроенные переменные и функции

Итак, у нас есть небольшая схема. Теперь осталось подключить к микроконтроллеру программатор и записать в его память прошивку, что была создана. Здесь есть один момент! Выстраивая схему, необходимо её создавать таким образом, чтобы микроконтроллер можно было прошивать без распайки. Это позволит сберечь время, нервы и продлит срок службы элементов. В том числе и Atmega8.

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

Важные моменты

atmega8 внутрисхемное программирование

Хочется дать новичкам полезные советы про программирование Atmega8. Встроенные переменные и функции не менять! Прошивать устройство созданной программой желательно после её проверки на отсутствие «вечных циклов», что заблокируют любое иное вмешательство, и с использованием хорошего передатчика.

В случае использования самоделки для этих целей следует быть морально готовым к выходу микроконтроллера из строя. Когда будете прошивать устройство с помощью программатора, то следует соединять соответствующие выходы VCC, GND, SCK, MOSI, RESET, MISO. И не нарушайте технику безопасности!

Если техническими характеристиками предусмотрено, что должно быть питание в 5В, то нужно придерживаться именно такого напряжения. Даже использование элементов на 6В может негативно сказать на работоспособности микроконтроллера и сократить срок его службы. Конечно, батареи на 5В имеют определённые расхождения, но, как правило, там всё в разумных рамках. К примеру, максимальное напряжение будет держаться на уровне 5,3В.

Обучение и совершенствование навыков

На счастье, Atmega8 является очень популярным микроконтроллером. Поэтому найти единомышленников или же просто знающих и умеющих людей не составит труда. Если нет желания изобретать заново велосипед, а просто хочется решить определённую задачу, то можно поискать требуемую схему на просторах мировой сети.

Кстати, небольшая подсказка: хотя в русскоязычном сегменте робототехника довольно популярна, но, если нет ответа, то следует его поискать в англоязычном – он содержит на порядок большее количество информации. Если есть определённые сомнения в качестве имеющихся рекомендаций, то можно поискать книги, где рассматривается Atmega8. Благо, компания-производитель берёт во внимание популярность своих разработок и снабжает их специализированной литературой, где опытные люди рассказывают, что и как, а также приводят примеры работы устройства.

Сложно ли начать создавать что-то своё?

atmega8 программирование через arduino

Достаточно иметь 500-2000 рублей и несколько свободных вечеров. Этого времени с лихвой хватит, чтобы ознакомиться с архитектурой Atmega8. После небольшой практики можно будет спокойно создавать свои собственные проекты, выполняющие определённые задачи. К примеру, роботизированную руку. Одного Atmega8 должно с лихвой хватить, чтобы передать основные моторные функции пальцев и кисти.

Конечно, это довольно сложная задача, но вполне посильная. В последующем вообще можно будет создавать сложные вещи, для которых понадобятся десятки микроконтроллеров. Но это всё впереди, перед этим необходимо получить хорошую школу практики на чем-то простом.

Источник: fb.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru