Содержание
Урок 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

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

  • булат, к сожалению у меня нет usbasp. судя по описанию камень не отвечает, проверяйте физическое подключение.

  • булат- Вы победили данную ошибку на программаторе?

  • Уважаемый автор подскажите можно ли используя данный пример (delay_ms) включить и выключить порт МК несколько раз с разными временными задержками без цикла (while (1))

  • можно

  • Как правильно реализовать такое условие и как закончить выполнение программы без (while (1))
    так :
    {
    PORTB.0=1; //включаем 0 ножку порта В
    delay_ms(100,500); // ждем
    PORTB.0=0; //выключаем 0 ножку
    delay_ms(100,200); //ждем

    };
    или так :
    {
    PORTB.0=1; //включаем 0 ножку порта В
    delay_ms(100); // ждем 100 мс
    PORTB.0=0; //выключаем 0 ножку
    delay_ms(100); //ждем 100 мс
    PORTB.0=1; //включаем 0 ножку порта В
    delay_ms(500); // ждем 500 мс
    PORTB.0=0; //выключаем 0 ножку
    delay_ms(200); //ждем 200 мс

    };
    и какое максимальное значение может иметь delay_ms()
    П.С.из самоучителей так понял что while () такой-же неотъемлемый атрибут программы как и #include

  • delay может быть 65535, while это просто цикл, обычно чтобы программа постоянно что то выполняла, нужно чтобы она крутилась по кругу

  • Спасибо огромное! А после одноразового передергивания ножками дальше можно включить основной цикл программы? Не получается… а понять почему не могу.

  • выполняете дрыганье до while, а потом делаете внутри что угодно

  • Ага! Запустить еще один while () внури этого чтоб он крутился бесконечно и не давал закончить (или начать) основной.У меня последний вопрос в этой теме: где можно посмотреть реализацию такого алгоритма?

  • установил 2 светодиода на PB0 и PB1 тепер как сделать пример 1 светодиод мигал 3 секунда а 2 ой 1 сек каждий порт сдаелал свое работу?

  • с помощью таймера, смотри 5 урок

  • Вопрос к автору: а если предположить, что мне необходимо управлять светодиодом не на 0 выводе порта В, а на 3, или на 7? как тогда будет выглядить код? я пытался написать так не не пошло:

    PORTB=3×00;
    DDRB=3×01;
    while (1)
    {
    PORTB.3=1;
    delay_ms(100);
    PORTB.3=0;
    delay_ms(10);
    Как это реализовать? просто мне надо управлять 20-30 группами светодиодов! и тут одних только 0 выводов портов недостаточно! Заранее Спасибо!

  • Ув. автор, КАКОЙ вы применяли «программатор AVR микроконтроллеров»?
    Дайте ссылку на схему программатора!
    Как сделать чобы Code vision увидел этот программатор ?

  • Я использовал практически с самого начала AVRISPII. Схем программаторов полно, беда их в том, что для того чтобы сделать программатор, нужен другой программатор. Codevision видит только AVRISP, STK500, JTAGICE. По факту, берите USBASP и шейте через khazama, запорете пару мк, зато опыт получите :)

  • Такая проблема: создал визардом проект, прописал программу, при компиляции ошибка
    все строки типа DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    вылетает ошибка Error: C:\Users\ADMIN\Desktop\VAW16x4\VAW16x4.c(49): ';' expected
    Получается, что визард недоволен тем, что сам написал.

  • Если закоментировать эту строку — вылезает следующая. Не видит точку с запятой!!!
    CVAVR ver 3.12 system Win 7 32

  • Здравствуй админ ))
    Подскажите какой версией CVAVR вы пользуетесь, вы гдето об этом говорили, но никак не могу найти…
    Я пользовался версией 3.12, но там постоянно какие-то глюки, особенно с генераторами кода, и она не поддерживает кирилицу…
    подскажите что по вашему мнению удобнее.

  • 1.25

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие записи
Последние комментарии
  • Загрузка...
Архивы
Счетчик
Яндекс.Метрика