Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

В каждом языке программирования есть такое понятие «Hello World». Это первая программа, дающая общие понятия о структуре программы. Для микроконтроллеров первая программа мигание светодиода. Это самое простое и наглядное.

Сначала нужно написать программу, используя CodeVision (C avr). Далее есть 2 варианта:
1. Прошить виртуальный микроконтроллер (используя программы симуляторы).
2. Прошить реальный микроконтроллер.

1. Схема собирается в симуляторе Proteus. Чтобы прошить виртуальный микроконтроллер, нужно указать где у вас на жестком диске хранится файл прошивки.
Плюсы: бесплатно, быстро, просто, достаточно наглядно, не требующий навыков сборки схемы. Минусы: результат не подкреплен практикой, значит есть шанс что все быстро забудется.

2. Тут множество вариантов, но как минимум нужен:
2.1. программатор AVR микроконтроллеров,
2.2. ATmega8-16PU (PDIP28 в дип корпусе),
2.3. резистор 1к,
2.4. светодиод,
2.5. проводки,
2.6. 5В стабилизированный источник (блок питания на 5В, питание usb компьютера),
2.7. много свободного времени и желания.
По желанию:
2.8. макетная плата (можно попробовать навесным монтажом),
2.9. паяльник (можно извратиться и без него),
2.10. разъем (можно извратиться и без него),
Минус только один — денежные вложения, которые я считаю в дальнейшем отобьются. Остальное все плюсы. Самое дорогое это программатор. Как решать задачу ваше дело, я покажу оба варианта.

Схема нашего устройства.

Ищем, качаем свежий Proteus. В пакете протеуса нас интересует только ISIS 7. Если вы решили собирать все руками, идем на ближайший радиорынок или магазин электроники и покупаем все, что нужно. Купили, скачали, поставили. Как создать проект в CAVR можно узнать тут

1. Запускаем CodeVisionAVR

2. В окне мастера настроек, переходим на вкладку Ports и устанавливаем значение Bit 0 = Out. Создаем, сохраняем проект.

  

3. Вычищаем код:

#include <mega8.h>
 
void main(void)
{
PORTB=0x00;
DDRB=0x01;
 
while (1)
{
 
};
}

4. Теперь можно писать наш код.

#include <delay.h> позволяет использовать временные задержки, например делать паузы между зажиганием светодиода
delay_ms(100);
delay_us(100);
позволяет сделать задержку в программе 100мс, позволяет сделать задержку в программе 100мкс
PORTB.0=1;
PORTB.0=0;
включает ножку 0 порта В (напряжение +5В), включает ножку 0 порта В (напряжение 0В)

5. Добавляем в наш бесконечный цикл программы мигания светодиодом

#include <mega8.h>
#include <delay.h>
 
void main(void)
{
PORTB=0x00;
DDRB=0x01;
 
while (1)
{
   PORTB.0=1; //включаем 0 ножку порта В
   delay_ms(100); // ждем 100 мс
   PORTB.0=0; //выключаем 0 ножку
   delay_ms(100); //ждем 100 мс
 
};
};

6. Компилируем, прошиваем (как прошить можно почитать тут). Фьюзы для данного урока должны быть выставлены так:

Данная конфигурация фьюзов позволяет запустить микроконтроллер от внутреннего генератора на 2МГц. После прошивки светодиод будет мигать.

Запилил видео, чтобы был более понятен сам процесс, удачи в ваших начинаниях.

Update: Добавлен тест, в котором вы можете проверить на сколько хорошо вы усвоили материал урока

This movie requires Flash Player 9

112 комментариев: Урок 1. Первый проект на AVR

  • Евгений, как минимум в if(chislo= 100 ) либо ошибка, либо это весьма странный код. Может быть, Вы имели ввиду if(chislo==100)? В Си знак «=» обозначает не сравнение, а присваивание.Сравнение — «==».

  • И, к тому же, в начале три пустых #include, вряд ли существуют функции cli() и sei() (быть может, #asm(«cli») и #asm(«sei»)), также настораживает массив char digits[B]. Сначала исправьте ошибки, а потом и проблема может отпасть.

  • Можете посоветовать? Задача в следующем, запускать по очереди 3 канала, но при этом нужен watchdog и желательно на минимальной, для таких операций частоте.
    Есть набросок
    #include
    #include

    void main(void)
    {

    DDRB=(1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
    PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

    WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (1<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (0<<WDP0);
    WDTCR=(0<<WDTIF) | (0<<WDTIE) | (0<<WDP3) | (0<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (0<<WDP0);

    while (1)
    {
    PORTB.0=1;
    delay_ms(200);
    PORTB.0=0;
    PORTB.1=1;
    delay_ms (200);
    PORTB.1=0 ;
    PORTB.2=1;
    delay_ms (200);
    PORTB.2=0 ;
    }
    Подскажите что можно добавить, либо убавить? Что можно в CodeWizard изменить для этих целей?

  • У watchdogа единственная настройка это предделитель, ставьте максимальный, будет самая низкая частота

  • Т.е. галочку на OSC\1024k?

  • если для 8 меги то OSC/2048

  • Понравился вопрос в флеш тесте насчет резистора и светодиода. Я считал что резистор нужен чтобы НЕ СПАЛИТЬ ПОРТ КОНТРОЛЛЕРА, улыбнуло.

  • в вопросе нигде нет написано, что светодиод подключен к порту

  • Что должно получиться если от переменной signed int x=0; отнять 1.
    Не понятно как должен я увидеть что число с минусом?
    У меня получается 65535.

  • значит что то не так делаете

  • PORTD = 0b11111111; //Зажигаем все светодиоды
    for (i=0;i>= 1; //Сдвигаем биты вправо
    }
    как можно сделарь чтоб работал этот код

    PORTD = 0b00000000; //гасим все светодиоды
    for (i=0;i>= 1; //Сдвигаем биты вправо
    }

  • PORTD = 0b00000000; //гасим все светодиоды
    for (i=0;i<7;i++) //Сдвигаем биты вправо
    {
    PORTD = (1 << i); }

  • как можно выполнить эту операцию delay?
    PORTD.0=1;delay_ms(300);PORTD.0=0;delay_ms(300);
    PORTD.1=1;delay_ms(300);PORTD.1=0;delay_ms(300);
    PORTD.2=1;delay_ms(300);PORTD.2=0;delay_ms(300);
    PORTD.3=1;delay_ms(300);PORTD.3=0;delay_ms(300);
    PORTD.4=1;delay_ms(300);PORTD.4=0;delay_ms(300);

  • Спасибо огромное разобрался

  • У важаемый Админ у меня такая ситуациыя PORTD.4=1 через 3часа надо обнулить и через 2 секунды включить PORTC.3 как обойтись без deleya

  • осваивайте таймер, это 5 урок

  • Админ, а скажите пожалуйста сложно ли реализовать, что-бы светодиод мигал под музыку? Если можно небольшой пример.

  • все зависит от того как он должен мигать.

  • Например такой алгоритм подается сигнал с частотой от 0 до 3000гц загорается 1-й светодиод , подается сигнал с частотой 3000-5000Гц загорается второй,

  • Если вы говорите о музыке, то там смесь сигналов, вполне реально что от начала до конца будет от 0 до 5000Гц что то играть непрерывно, тогда оба светодиода будут весь трек просто гореть.

  • Да вы правы, не могу подобрать правильный алгоритм, попробую изучить преобразование фурье и прикрутить к atmega, спасибо вам за ваши уроки!!!

  • Почему at90s1200 отказывается работать с библиотекой Delay.h ?

  • его даже в списке поддерживаемых чипов нет, где вы откопали такой мк?

  • Возможно вопрос не по теме. Почему у меня не получается объявить переменных типа bit больше 16 шт. (остальные не проверял). Компилятор сообщает об ошибке. И как это можно обойти. Заранее спасибо.

  • настраивается в свойствах проекта. кто то уже писал что bit переменные все равно занимают 8бит, так что можно не париться и использовать char

  • Спасибо нашел.

  • Здравствуйте!
    У меня в proteus 7 нет компонента ATmega8-PU
    Подскажите как можно добавить в библиотеку ATmega8-PU?
    Пожалуйста помогите!!

  • там должна быть атмега8, другие индексы не важны

  • Доброго времени суток.
    То ли руки настолько кривые, то ли не все установлено, но при {PORTB.B0=~PORTB.B0;} или {PORTB.0=~PORTB.0;} или даже {PORTB.PB0=~PORTB.PB0;} при эмуляции получаю: «error: request for member ‘B0’ in something not a structure or union».
    (Proteus 8 Pro 8.1 SP1, компилятор WinAVR).
    Не могу продвинуться ни на шаг, поскольку не могу понять почему обращение к конкретной ноге МК не получается, хотя {PORTB=~PORTB;} отрабатывает, но это же целый порт…
    Имею реальную схему на Атмега162 для реализации БК в авто. Рабочий исходник не хочу брать, поскольку там другой МК и интерпретация полученной посылки от компа авто требует правок. Пробовал с нуля создавать пример из урока на Атмега8. Результат тот же. При чем как на домашнем ноуте с WinXP так и на рабочем с Win10.
    Пробовал читать io.h, portpins.h, iom162.h — там вроде как обращение через (по аналогии с примером) PORTB0 или PB0. Короче сам уже пару дней ищу разные примеры, но разобраться не могу. Помогите…

  • Статьи написаны для Codevision, хотя по сути разницы нет, пишите сразу число в порт

  • Реализовать мигание светодиода (моделирование в Proteus) получилось только через команду PORTB ^= 0x01. Но чувствую, что при глубжем изучении, а тем более, при попытке принять посылку из 50 байт на вход Rx (у меня это PORTB.1) — у меня шансов нет. Останется только вариант с нуля изучать C или Asm. Проект затягивается на неопределенное время…

  • Да что же такое? в интернете нет ни одного нормального урока именно для НАЧИНАЮЩИХ. Думал этот подойдет, купил все по списку, а потом оказалось, что в этот пункт «2.1. программатор AVR микроконтроллеров» было тяжело дописать, что только не USBASP так как теряется вся суть урока, если codevision не работает. Снимите нормальное видео, или хотя бы сфотографируйте с фокусом собранную схему, так как картинка в уроке с протеуса не совпадает с ножками, в статье «как прошить МК». Ужас.

  • Так и не понял, что у вас по картинкам не совпадает, вроде все ок. С usbasp тоже не понял, находишь hex — заливаешь, через khazama, проблемы то нет. Программаторов для авр большое количество, вы предлагаете каждый из них проверять?

  • Где можно почитать о всех встроенных библиотеках Codevision?

  • codevision user manual

  • Жаль на английском, а на русском совсем нечего нет?

  • учите инглиш

  • да, енглиш учить надо полюбом 🙁 . Админ, снова я 🙁 . Хочел спросить, вы не знакомы с микроконтроллеры PIC ? просто смотрю много их в серёзных проэктах ставят, читал что по питанию выносливые, к помехам лутше чем авр. Что думаете по этому поводу?

  • давно делал проект на pic16, принципиальной разницы с атмегами не заметил

  • скажите пожалуйста пытаюсь прошить атмега 8 с usbasp. программа khazama выдает ошибку. помогите решить проблему

    program enable Target doesn’t answer 1
    initialization failed, rc=-1
    AVR device initialization and ready to accept instructions
    Devise signature=0x000000
    yikes! invalid device signature.
    expected signature for Atmega8 is 1e 93 07

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика