Уроки программирования микроконтроллеров с нуля

Уроки программирования микроконтроллеров с нуля

Решил забабахать небольшой курс по программированию в форме видеоуроков. Конструктивная критика и предложения приветствуются.

Урок 0. Введение.

Урок 1. Изучение свойств элементов формы

Урок 2. Изменение свойств, при помощи событий.

Урок 3. Изучение условного оператора if.

Урок 4. Изучение циклов и массивов.

Урок 5. Изучение функций.

Урок 6. Практическое занятие.

12 комментариев: Уроки программирования с нуля.

как можна управлят avr через сет

вероятно использовать ethernet платы, большего сказать не могу, не юзал

Осилил ваш урок 0 и 1 )) Правда начал читать и изучать книгу по С++)) хДД но все равно интересно для сравнения)

поищите по ютубу, таких уроков, даже лучше — море

Здравствуйте, подскажите, пожалуйста, как объединить две двумерные массивы чтобы было так:
x [][] = <<1, 2, 3, 4>
<5, 6, 7, 8>>;

сначала записываете массив x в z, а потом в конец z дописываете y. любым циклом while/for

а нет ли какой-то простой конкатенаций или через логические элементы, или через str(объединение строк), на худой конец готовой функций работы с массивами. Гугл выдаёт чрезмерно научные подходы на изучение которых не хватает времени (или извилин))). Спасибо !

думаю array.copy скорее всего то что нужно.

а в codevision-не каую библиотеку нужно добавить для array.copy

извиняюсь за назойливость, а можно просто так записать z[][]= < > ;

оу, вы спрашиваете про cavr, тогда memcpy вам в помощь. записать так как вы это сделали нельзя, вы же копируете несколько элементов. ройте в сторону memcpy

Подскажите, пожалуйста, в чем ошибка. Попробовал добавить ползунок (trackbar), а он работает как-то не правильно по uart. Когда перемещаю его, яркость на лампе добавляется и убавляется, но с морганием на каждом делении, а когда останавливаю ползунок лампа вообще тухнет. Т.е работает нормально только в движении.

private void Form1_Load(object sender, EventArgs e)
<
serialPort1.Open();
trackBar1.Maximum = 255;
trackBar1.Minimum = 0;
>

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
<
serialPort1.Close();
>

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

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

Обновлено: добавлены файлы.

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

Читайте также:  Как удаленно включить камеру на телефоне

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(в панели инструментов).

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

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

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

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

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

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

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

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

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

Читайте также:  Терморегулятор rex c100 инструкция

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

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

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

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

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

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

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

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

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

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

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

Обновлено: добавлены файлы.

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

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

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

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

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

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

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

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

Читайте также:  Как изменить файл хост в виндовс 10

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

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

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

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

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

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

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

(в панели инструментов).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылка на основную публикацию
Уравнение плоскости по двум пересекающимся прямым
УСЛОВИЕ: Составить уравнение плоскости, проходящей через две параллельные прямые x-2/3=y+1/2=z-3/-2 x-1/3=y-2/2=z+3/-2 Добавил yelymcheav , просмотры: ☺ 1976 ⌚ 2019-05-14 15:35:56....
Тест соловея штрассена c
Символ Якоби отличается от символа Лежандра тем, что в первом знаменатель – составное число, а во втором – простое. Алгоритм...
Тест стиральной машины bosch maxx 5
Самодиагностика – это очень важная функция, которая отличает современные стиральные машины с электронным управлением от старой аналоговой техники. Запустив сервисный...
Уравнение баланса мощностей формула
При решений электротехнических задач, часто нужно проверить правильность найденных значений. Для этого в науке ТОЭ, существует так называемый баланс мощностей....
Adblock detector