В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS

📆8 декабря 2008   ✒️Spirit   🔎61.522   💬10  
Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS

Эту статью (а точнее цикл статей) я решил полностью посвятить микроконтроллерам фирмы Atmel. Конечно, тема эта избитая. НО! На собственном опыте знаю, что познать истину среди этого, извините, БАРДАКА, очень и очень сложно! Поэтому решил попытаться внести хотя бы какую-нибудь ясность в головы жаждущих познать этого страшного зверя, зовущегося «Микроконтроллер».

Итак, цель этой статьи в том, чтобы описать и по возможности показать весь процесс создания устройства на основе микроконтроллера с «нуля». То есть, от задумки (например, решили мы собрать новогоднюю мигалку, подобную описанной уважаемым alx32 в статье «Анатомия микроконтроллеров ATmega») до воплощения в железе. Разумеется, минуя все промежуточные стадии: постановка задачи, выбор МК, подбор обвязки, формулировка алгоритма, написание программы, отладка, создание платы и, самое долгожданное – запуск!!!
Список всех частей:
Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS
Грызём микроконтроллеры. Урок 2. CodeVision и С
Грызём микроконтроллеры. Урок 3. Циклы, прерывания и массивы
Грызём микроконтроллеры. Урок 4. Мерим температуру или напряжение
Грызём микроконтроллеры. Урок 5. Кодовый замок
Грызём микроконтроллеры. Урок 6. Прошиваем МК
Грызём микроконтроллеры. Урок 7. Подключение к МК кнопок, клавиатуры, энкодера
Грызём микроконтроллеры. Урок 8. Программирование кнопок, клавиатуры, энкодера
Грызём микроконтроллеры. Урок 9. Клавиатура вглубину


Итак, задача: нам нужно создать устройство, способное зажигать в определенном порядке (пусть будет по очереди) , N-ное количество светодиодов (пускай будет 8 штук, это для начала).
Выберем микроконтроллер: на мой взгляд, нам очень подходит МК ATtiny2313, т.к. у него достаточное количество портов ввода-вывода (очень советую почитать о архитектуре микроконтроллеров в статье, написанной alx32, «Анатомия микроконтроллеров ATmega»). Потом он не дорог и легкодоступен.

Теперь, ДО(!) того, как браться за написание программы для микроконтроллера, прикидываем схему в железе, чтобы потом писать программу именно под эту схему (см. выше).

Каждый выход порта микроконтроллера может отдать в нагрузку ток до 20мА, чего вполне достаточно для питания светодиода, поэтому подключаем светодиоды через токоограничительные резисторы прямо к выходам МК.
На этом с железом пока всё.

Теперь можно браться за программирование. Писать можно на чем угодно, но начинающим советую отдать предпочтение языку C, т.к. программировать проще и нагляднее. Лично я пользуюсь компилятором CodeVision AVR (он есть в файловом архиве), дальнейшие листинги программ будут приводиться именно для этого компилятора.

Определимся с алгоритмом. Нам нужно по очереди через определенный промежуток времени активировать один из выходов МК.

Включать/выключать можно разными способами:
- присваивать значения каждому выводу отдельно;
- записывать значения сразу всех выводов.


Значения (последовательность) можно получить:
- набрав все команды вручную;
- из массива;
- математическим методом.


Временной интервал можно задать:
- функциями delay (задержка);
- через таймер.


Поэкспериментируем со всеми этими способами. Но сначала нужна заготовка.
Чтобы создать заготовку программы воспользуемся генератором кода, встроенным в CVAVR. Для этого запускаем программу, нажимаем File -> New, в открывшемся окне выбираем “Project” и жмем OK. На вопрос «Воспользоваться генератором кода?» отвечаем “Yes”.
Появилось окно генератора кода. В нем выбираем тип МК и его тактовую частоту, остальное оставляем как есть:
Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS

Далее переходим на вкладку “Ports” и там в “PortB” и выставляем следующее:

Так мы определили все выводы порта B как выходы, а нолики означают, что при включении питания на них будет устанавливаться логический "0".
Остальные функции нам пока не нужны.

Жмем “File -> Generate, Save and Exit”, выбираем куда сохранить файлы проекта и видим окно с созданным генератором кодом.

Теперь давайте введем в программу наш код.
Простейший вариант реализации (хотя и самы не красивый с точки зрения программирования) – записываем значения каждого вывода, а задержки делаем через функцию delay.

delay_ms(x); - задержка на x миллисекунд

delay_us(x); - задержка на x микросекунд

PORTB - порт, с которым мы работаем.

PORTB.x - обращение к выводу x порта B

Находим в конце текста такие строки

Это бесконечный цикл (т.е.выполняется всё время, пока включено питание) нашей программы . Всё, что перед ним – команды предварительной настройки микроконтроллера. Строки, начинающиеся с “//” – комментарии, их тоже полезно иногда читать.

Вводим вместо слов “// Place your code here” следующие строки:
       PORTB.0=1;
       delay_ms(500);
       PORTB.0=0;
       PORTB.1=1;
       delay_ms(500);
       PORTB.1=0;
       PORTB.2=1;
       delay_ms(500);
       PORTB.2=0;
       PORTB.3=1;
       delay_ms(500);
       PORTB.3=0;
       PORTB.4=1;
       delay_ms(500);
       PORTB.4=0;
       PORTB.5=1;
       delay_ms(500);
       PORTB.5=0;
       PORTB.6=1;
       delay_ms(500);
       PORTB.6=0;
       PORTB.7=1;
       delay_ms(500);
       PORTB.7=0;
       delay_ms(500);


Обратите внимание – каждая строка должна заканчиваться точкой_с_запятой, иначе компилятор будет ругать вас матом.

Жмем кнопочку Make the project
(в панели инструментов).

Матерится? И правильно! Компилятор не знает функции delay_ms(), поэтому надо указать ему файл, в котором эта функция описана.
Для этого в самом начале текста программы нужно вставить строку
#include <delay.h>
(тут точка_с_запятой не нужна!)
Примерно вот так:


Снова жмем волшебную кнопочку.
Проект создан.
Теперь в папке, в которую мы сохранили сам проект, появился файл название_проекта.hex – это и есть прошивка микроконтроллера!
Но подождите, не торопитесь хвататься за паяльник. Мы ведь учимся программировать, а не паять!

Именно поэтому предлагаю проверить нашу программу в виртуальном режиме, а именно – в таком замечательном и любимом мною продукте от Labcenter Electronics - Proteus VSM
Там можно моделировать абсолютно любые схемы (даже примитивы Лапласа есть!). Взять ее можно в прикрепленном архиве, вместе с файлами проекта. Правда версия не совсем крякнутая, поэтому не работает сохранение. Что с этим делать расскажу в отдельной статье.

Итак, запускаем ISIS (среда разработки принципиальных схем). В этом окне нажимам кнопочку “P”.


В строке “Keywords” вводим “attiny2313” и справа получаем:

Выбирать особо не из чего, поэтому щелкаем дважды по этой одинокой строке и видим слева в основном окне:

Это значит, что элемент добавлен.

Теперь введите в поле “Keywords” слова “LED-RED” и “RES”. Добавьте резистор и светодиод в проект и закройте окно выбора элементов.

Пробуем собрать схему (вывод RESET обязательно подключите к +5V, иначе ничего не заработает! и в жизни это тоже желательно!)


Вот небольшая подсказка:


А для редактирования свойств элементов достаточно щелкнуть по ним дважды.
Собрали? Надеюсь, не покалечили при этом себя, близких и окружающие предметы.

Простите за издевательство, просто если разберешься сам – уже не забудешь, так что, постигайте, программа очень мощная и она стоит того, чтобы ее освоить! :laughing:

Когда схема собрана, можно прошить наш виртуальный МК. Для этого щелкаем по нему дважды и видим окно:


В поле “Program file” указываем наш файл прошивки, остальное не трогаем, пока. Жмем кнопку OK. И запускаем анимацию:


Вот и замигала наша мигающая мега-мигалка!!! wink

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

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


Proteus 7.10 Full (104Mb) Проверяйте на вирусы сами!

Схема для ISIS:
🎁migalka.rar  12.19 Kb ⇣ 450

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 18 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL, Евстифеев А.В.... Издательство: Додэка XXI [М.], 560 стр. 2005 г. Книга посвящена вопросам практического применения...
Схема на Датагоре. Новая статья Грызем микроконтроллеры. Урок 6. Прошиваем МК... Ну вот, писать программы для микроконтроллеров мы научились. Работоспособность прошивки тоже...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega - 2... Итак, продолжим издевательство над МК. Что же нам ещё такого сделать? Давайте заставим мигать...
Схема на Датагоре. Новая статья Применение микроконтроллеров AVR. Схемы, алгоритмы, программы... Какой микроконтроллер выбрать? Где найти его описание? Где взять программу, обеспечивающую...
Схема на Датагоре. Новая статья Программирование на языке С для AVR и PIC микроконтроллеров. Шпак Ю.А.... Программирование на языке С для AVR и PIC микроконтроллеров. Шпак Ю.А. Издательство "МК -...
Схема на Датагоре. Новая статья Программирование микроконтроллеров ATmega... Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 1... Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega - 3. Прерывания.... Итак, наши светодиоды мигают, но мы не можем никак повлиять на программу, давайте добавим в схему...
Схема на Датагоре. Новая статья Грызём микроконтроллеры. Урок 2. CodeVision и С... Предлагаю продолжить изучение микроконтроллеров… Второй урок будет посвящен по большей части...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega... Здравствуйте, датагорцы! После публикации моей первой статьи, меня завалили вопросами о...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 2... Пишем первую программу!Большинство начинают с мигания светодиодов, и мы не исключение. Если...
Схема на Датагоре. Новая статья Микроконтроллеры AVR в радиолюбительской практике. А. В. Белов... А. В. Белов Микроконтроллеры AVR в радиолюбительской практике Данная книга представляет собой...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

GALKIN

<
Читатель Датагора

AndrewB

<
Читатель Датагора

Gir

<
Читатель Датагора

Sfift

<
Читатель Датагора

kmVladimir

<
Читатель Датагора

Spirit

<
Читатель Датагора

foxit

<
Читатель Датагора

alex

<
Читатель Датагора

Spirit

<
Читатель Датагора

v9146913279

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой