» » Грызем микроконтроллеры. Урок 1.

 
 
 
10

Грызем микроконтроллеры. Урок 1.

Разместил Spirit 8 декабря 2008. Просмотров: 52 831

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

Итак, цель этой статьи в том, чтобы описать и по возможности показать весь процесс создания устройства на основе микроконтроллера с «нуля». То есть, от задумки (например, решили мы собрать новогоднюю мигалку, подобную описанной уважаемым alx32 в статье «Анатомия микроконтроллеров ATmega»…) до воплощения в железе. Разумеется, минуя все промежуточные стадии: постановка задачи, выбор МК, подбор обвязки, формулировка алгоритма, написание программы, отладка, создание платы и, самое долгожданное – запуск!!!


Обновлено: добавлены файлы.
Итак, задача: нам нужно создать устройство, способное зажигать в определенном порядке (пусть будет по очереди) , N-ное количество светодиодов (пускай будет 8 штук).
(это для начала……..)
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

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

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

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


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


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


Поэкспериментируем со всеми этими способами. Но сначала нужна заготовка…

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Но подождите, не торопитесь хвататься за паяльник… Мы ведь учимся программировать, а не паять! bully

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

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


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

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

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

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

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


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


А для редактирования свойств элементов достаточно щелкнуть по ним дважды.

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

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

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

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


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

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

Попробуйте сами найти причину этой неприятной неожиданности… winked



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

Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.
Владимир (Spirit)
Старый Оскол
Профиль Spirit
Электронщик-практик, в основном занимаюсь микроконтроллерами. Есть неплохой опыт и в аналоговой технике (все мы начинали с УМЗЧ =)).
Одержим идеей автоматизации жилища а-ля "Умный дом" =)
 

Понравилось? Палец вверх!

  • всего лайков: 23
Теги: ATMega ATtiny

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

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


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

/ GALKIN

  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
Прямо как в школе: разжевали, в рот положили, осталось проглотить. Статья очень подробно описана ! Если б не обьяснение, то я и не понял-бы ничего, ведь МК для меня "дремучий лес в болоте". Большое спасибо за статью.

<
  • Гражданин
9 декабря 2008 20:51

Андрей Бычков / AndrewB

  • С нами с 28.10.2008
  • Ушёл в реал Пользователь offline
  • 31 комментарий
  • 7 публикаций
 
  • 0
Приятно читать материал такого уровня проработки.
Спасибо!

<
  • Гражданин
9 декабря 2008 23:09

Олег / Gir

  • С нами с 30.09.2012
  • Ушёл в реал Пользователь offline
  • 1 комментарий
  • 0 публикаций
 
  • 0
Огромное спасибо! В этом материале все описано просто и доступно. С нетерпением жду продолжения.

<
  • Гражданин
10 декабря 2008 00:08

Сергей / Sfift

  • С нами с 8.10.2008
  • Ушёл в реал Пользователь offline
  • 1 комментарий
  • 0 публикаций
 
  • 0
Доступно, понятно и с картинками laughing .Только я что-то не вижу прикрепленного архива.

<
  • Гражданин
10 декабря 2008 21:19

Владимир / kmVladimir

  • С нами с 20.06.2008
  • Ушёл в реал Пользователь offline
  • 45 комментариев
  • 5 публикаций
 
  • 0
тема супер laughing
по поводу вопроса о ошибке
PORTB.7=0;
delay_ms(500);
здесь лажа
должно быть так
PORTB.7=0; конец кода

PORTB.0=1; начало кода
delay_ms(500);
PORTB.0=0;
PORTB.1=1;
delay_ms(500);
........

объясняю задержки здесь не должно быть

<
  • Прохожий
11 декабря 2008 20:50

/ Spirit

  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
mrVladimir
В точку!
Садись, + пять к "знания"! bully



<
  • Гражданин
11 декабря 2008 23:30

Николай / foxit

  • С нами с 9.09.2008
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 0 публикаций
 
  • 0
тема супер
Так дальше держать

<
  • Гражданин
12 декабря 2008 12:32

Алексей / alex

  • С нами с 7.01.2012
  • Ушёл в реал Пользователь offline
  • 58 комментариев
  • 4 публикации
 
  • 0
Вот на это, у меня всю дорогу, Code Vision ругался : PORTB.0=1;
Пишет: Left side of '.' requires struct/union. И не компилирует.
Что делать?

<
  • Прохожий
13 декабря 2008 01:56

/ Spirit

  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
alex, проверьте, есть ли в начале прогараммы строка
#include <tiny2313.h>
Именно в этом файле описаны названия портов и регистров МК.
А еще лучше отправьте текст своей программы мне в личку.

<
  • Подписчик
27 декабря 2016 20:55

Вова / v9146913279

  • С нами с 30.03.2016
  • Ушёл в реал Пользователь offline
  • 5 комментариев
  • 0 публикаций
 
  • 0
Если компилятор в своей работе только и делает, что матерится лютым матом, то вы, уважаемый мой тёзка, заслуживаете только благодарности:) Из вас в этом цикле статей получился неплохой "учитель" для "самых маленьких"

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.