Урок 4
Смотрим результаты работы
Сегодня мы продолжим начатое дело и попытаемся увидеть результаты работы нашего кода в живом отладчике — в протеусе. Здесь уже симуляция происходит наглядно. Вот его ярлык на рабочем столе
Где найти данную программу, я рассказыать не буду, вы сами её найдёте без труда. Расскажу, как ею пользоваться. Запустим его и создадим новый проект
Имя проекта у нас будет такое же, как имя проекта в Atmel Studio — Test01 и создадим мы его в папке нашего проекта
Идем дальше, всё везде оставляем по умолчанию
Далее всё по умолчанию
В конце жмём «Finish»
Проект создан.
Давайте добавим в него какой-нибудь элемент. Для этого нажмём на кнопку «P» в левой панели и из списка выберем элемент. Сверху в строке поиска можно вводить наименование или часть наименования элемента. Попробуем добавить наш микроконтроллер Atmega8. Здесь контроллеры без букв. Выберем именно Atmega8 и нажмем «ОК» либо приеним двойной щелчок по строке с элементом (нажмите на картинку для увеличения размера)
Элемент появится в левой панели
Если мы только что добавили элемент, то, чтобы его установить в рабочем пространстве, выбирать его не нужно, достаточно щёлкнуть по тому месту рабочего пространства, куда мы хотели бы установить данный элемент. По первому щелчку элемент установится, но ещё не «прилипнет» к пространству, то есть мы ещё можем его позиционировать. После второго щелчка наш контроллер жёстко установится.
Мы вижим с вами, что это не совсем тот тип контроллера, который мы будем использовать. Нам нужен вариант в корпусе DIP с 28 ножками. Чтобы изменить тип корпуса, щёлкнем двойным щелчком по контроллеру и изменим его тип в следующем выпадающем списке. Также заодно в поле «Program File» мы добавим файл с прошивкой с помощью кнопочки с папкой справа от поля. В качестве прошивки у нас будет файл, созданный на прошлом занятии с помощью Atmel Studio. Путь к нему вы видите в поле на рисунке, у вас, соответственно, он может отличаться
и нажмем «ОК»
Теперь мы видим, что это именно тот контроллер
Приблизительно тем же способом мы добавим резистор и светодиод на площадку. Резистор нужен для того, чтобы ограничить ток, протекающий через светодиод для того, чтобы не сгорели ни светодиод, ни контроллер.
Только для токоограничения светодиода 10 килоом будет слишком много. Чтобы изменить номинал, щёлкнем двойным щелчком по надписи «10к» либо по самому резистору и заменим значение на 220 ом. При 5 вольтах это будет оптимально
Ещё нам нужно будет добавить контакт для общего провода (массу). Для этого нажмём в левой панели определённый значок и выберем из списка «GROUND». Затем таким же образом, как и любые элементы, добавим его в нужное место
Ну вот наши элементы на месте. Осталось их соединиить. Делается это с помощью мыши. Сначала мы щёлкаем одиночным щелчком по одному контакту соединения, а затем по другому. Таким образом мы соединим все элементы
Наши элементы соединены, можно попробовать схему в работе. Питание подводить к контроллеру необязательно. Это подразумевается само собой. Для запуска в нижней панели нажмём кнопочку в виде зелёного треугольника. Кнопочка станет ярко-зелёной
Если сделано всё правильно, то светодиод будет светиться
Таким образом мы увидели результат того, чего мы добились в результате кода. Наша программа работает. Чтобы остановить процесс, нажимаем на кнопочку с синим квадратом.
Следующая задача урока — посмотреть результат работы программы в железе — на живом контроллере. Для этого воспользуемся отладочной платой, которая есть у меня.
Данная плата была взята здесь на этом сайте.
Подключать к компьютеру эту отладочную плату мы будем вот таким программатором
На данный программатор у меня есть обзор. Там есть информация, как данный программатор подсоединить, как установить на него драйвер и как с помощью него прошивать контроллеры. В данном обзоре мы прошиваем три различных контроллера. Также используем мы несколько программ для прошивки. В данном уроке мы будем использовать программу avrdude33.
Подключим отладочную плату к программатору, а программатор подключим к шине USB компьютера. Драйвер должен быть установлен.
Теперь Запустим прошивочную программу и выберем там наш контроллер
Попытаемся считать конфигурационные ячейки контроллера, нажав для этого кнопку «Чтение». Если всё подключено и установлено правильно, то мы должны увидеть вот такое вот сообщение
Дальше открываем закладку Fuses. Фьюзы — это настроечные биты контроллера, эксперементировать с которыми — занятие опасное. Поэтому внимательно изучите техническую документацию на тот контроллер, который программируете, прежде чем их устанавливать и прошивать. В нашем конкретном случае пока просто запомните установки на рисунке и обязательно выставите точно такие же, если конечно вы используете такой же контроллер и он у вас также сконфигурирован, то есть у вас нет кварцевого резонатора и вы пользуетесь именно встроенным генератором тактовой частоты. Фьюзы должны быть именно «инверсные», поэтому кнопочка должна быть установлена именно возле данной опции
Данные настройки фьюзов заставят работать контроллер Atmega8A от внутреннего генератора тактовых импульсов с частотой 8 мегагерц. Чтобы сохранить настройки в контроллер, нажимаем «Программироване», ещё несколько раз перед этим хорошенько подумав, иначе можно получить кирпич.
Микроконтроллер Atmega8a может с равным успехом работать на частоте 1, 2, 4, 8 мегагерц от внутреннего генератора, также он может работать от внешнего генератора, а также с использованием кварцевого резонатора. В последнем случае обеспечивается более стабильная работа внутреннего тактового генератора и также контроллер уже сможет работать ещё и на частоте 16 мегагерц.
Теперь вернёмся в закладку «Program». Также перед тем, как заливать нашу прошивку, я бы советовал вам стирать информацию в контроллере нажатием кнопки «Стереть всё». Поэтому нажимаем эту кнопочку
Теперь выбираем нашу прошивку — именно ту, которую мы испытывали в протеусе
Теперь нажимаем «Программирование»
Наша прошивка залита в контроллер. Перезагрузка происходит автоматически.
Как мы видим, наша программа работает и светодиод светится
Питается данная плата от напряжения 5 вольт, идущего с программатора, программатор данное напряжение берёт от порта USB. То есть отдельно на данную плату при условии небольшой нагрузки на порты питание подводить на требуется, что очень удобно для учебных целей.
Ну и ещё давайте попробуем добиться программирования нашего контроллера не через постороннюю программу, а напрямик из Atmel Studio. Вообще я предпочитаю программировать именно из Avrdude, но вообще напрямую удобнее, если мы не меняем фьюзы и не выбираем какой-то другой контроллер. Это именно такой случай, когда наш программатор не имеет поддержки драйверной в Atmel Studio. Зайдём в студию, откроем наш проект и зайдём в меню Tools -> External Tools
Назовём наше новое меню «Atmega8a». В строку «Command» через обзорную кнопку выбираем файл с программой Avrdude, только не тот файл, которым мы запускаем данную программу, вернее её графическую оболочку, а тот файл, который используется непосредственно для команд командной строки. В следующей строке «Arguments» вписываем строку с параметрами «-c usbasp -p m8 -B12 -U flash:w:$(ProjectDir)Debug\$(ItemFileName).hex:a» только без кавычек. Жмем «Apply» и «OK».
На всякий случай ещё раз соберём наш проект и попробуем с помощью нашей команды прошить контроллер, воспользовавшить появившемся новым пунктом меню Atmega8a в меню Tools.
В результате должен загореться светодиод. Такой вариант намного удобнее, но только он не позволяет редактировать фьюзы (оно и не часто требуется) и также не очищает флеш-память контроллета (но без этого также всё нормально прошивается и работает).
Предыдущий урок Программирование МК AVR Следующий урок
Приобрести программатор USBASP USBISP с адаптером можно здесь USBASP USBISP 3.3 с адаптером
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Спасибо за статьи, мне нравится Ваша манера изложения материала, все последовательно, все разжевано и есть примеры что и как делать. Супер.
Огромное спасибо за внимание к ресурсу и к каналу!
$(TargetName) вместо $(ItemFileName). Интересно Почему у вас работает так? Быть может вы как то иначе компилируете?
Спасибо за проделанную работу!
И Вам спасибо за внимание к ресурсам!
Хочу поделиться своим опытом. Я создал проект с названием Testing. После сборки проекта у меня создавался фаил прошивки с названием Testing.HEX (E:\AVR Studio\C\Test\Testing\Testing\Debug\Testing.hex), если я вводил этот параметр "-c usbasp -p m8 -B12 -U flash:w:$(ProjectDir)Debug\$(ItemFileName).hex:a" , то авр дуде заходил в папку дебаг и искал там фаил "main.hex", такого файла там не было, соответсвенно была ошибка. Вот с этим параметром у меня было всё норм -c usbasp -p m16 -B12 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i
* отличие в поиске хекс файла $(TargetName) вместо $(ItemFileName)
если кому-то помогло то это хорошо!
Верно, тоже долго мучился, не прошивалось через Студию, пока не заменил $(TargetName) вместо $(ItemFileName)
Теперь интересно, почему у автора работает через $(ItemFileName). Может он компилирует как то иначе?
mixaDD, помогло. Тлько в конце не ":i"
Странно, только в 7 протеусе горит не D0, а D1.
А по команде PORTD = 0b00000111 загоряются все три диодика правильно ).
Все изложено последовательно, доступно к пониманию начинающим.
На мой взгляд, главное, что материал подкреплен практическим примером.
Давно хотел получить такую конкретику.
Огромное спасибо.
Успехов и благополучия.
И Вам спасибо за внимание и интерес к ресурсу. Я рад, что мои статьи и видео, которым практически уже скоро 2 года, до сих пор популярны и актуальны. Честно говоря, когда я это дело начинал, я не знал, что так будет. Удачи Вам в освоении программирования!
Здравствуйте! вот какая у меня строка аргумента получилась , -p m8 -c stk500v2 -P COM8 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:a , может кому пригодиться , и не придется тратить время на понимание. данная строка генерируется в AVRDUDE в начале процесса загрузки данных в микроконтроллер, внизу в окошке для просмотра хода событий , как я понял команда -p m8 это сокращенное названия микроконтроллера , -c stk500v2 это названия программатора , -P COM8 это порт , так же можно указать скорость передачи данных с помощью команды -B 115200 , -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:a это путь к файлу .hex. Если что не так указал то буду рад пояснению , только начал изучать эту тему. Огромное Спасибо !!!! автору этих курсов. Сегодня наткнулся на такую статью, как через программу arduino заливают скетч на прямую через программатор в atmega8a. Хотел попробовать проделать это , но увы не чего , не вышло, так как arduino стала уже arduino-1.8.5 и возможно в файле boards нужны другие настройки , еще у меня программатор китайский utk 500 , а в статье был другой . Если кто справился с это проблемой, было бы не плохо если бы поделились ссылкой на статью или видео . Это всё нужно для того , что в интернете много скетчей под arduino которые в свободном доступе , и с одной среды разработки , переделывать на си ++ очень хлопотно , а так очень удобно, нашел скетч и загрузил через программатор в МК
Здравствуйтею И мне тоже очень интересно как можно через среду Ардуино ИДЕ заливать скетчи в МК ?
Очень прошу сообщить, что это за статья ?
Добрый День! Купил ATmega8a, но мой программатор USBTinyisp v2.0
в упор его не видит, attiny2313 шьется без проблем. Подключаю программатор через макетку: MOSI — 17,MISO — 18, SCK -19, RESET — 1, VCC — 7 и 20, GND — 8 и 22. Смотрел в youtube Ваш ролик с обзором программатора, все паяные соединения, которые видны совпадают за исключением XTAL1 и XTAL2. Уменьшал ск-сть соединения до 100kB в Sinaprog — Fail! В AVRDUDE пишет все ок, но калибровочные по нулям. И тишина в Google. ШО робить, шо робить? Может кто подскажет? Выудил из ардуинки atmega328p — тоже калибровочные 00.
Добрый день, может кто знает, установил протеус, но на нём судя по всему нет библиотек, никакую деталь нельзя вывести на макет, пишет library not found, что делать?
Попробуй запустить от имени администратора. У меня сработало.
В свойствах екзешника поставь чтобы запускался от имени админа. Ну или каждый раз через контекстное мену запускай от имени администратора.
Спасибище огромное!
И Вам спасибо за интерес к ресурсу!
При запуске проекта в Proteus у меня возникает такая ошибка:
ISIS Release 8.09.00 (Build 27865) (C) Labcenter Electronics 1990- 2019.
Compiling design 'C:\Atmel\diodled\diodled.pdsprj'.
Netlist compilation completed OK.
Netlist linking completed OK.
Partition analysis completed OK.
Simulating partition [5AF5522F]
PROSPICE 8.08.00 (Build 27367) (C) Labcenter Electronics 1993-2019.
Loaded netlist 'C:\Users\48C4~1\AppData\Local\Temp\LISA5068.SDF' for design 'diodled.pdsprj'
AVR Release 8.3SP0 build 25647 for ATMEGA8. [U1]
AVR: Program property is not defined.
Real Time Simulation failed to start.
Гуглил, ничего не нашел по поводу этой ошибки.
Как решить эту ощибку?
Такое подозрение, что путь на кириллице. У Вас, видимо имя пользователя в Windows на кириллице. Исправьте данную ситуацию и скорее всего всё сработает, либо сохраните проект туда, где в пути не будет кириллицы.
Переимновал и переместил, запустил от имени администратора, не помогло, тоже самая ошибка.
У меня три ошибки
mixed model AVR2.DLL failed to authorize — Missing or invalid Customer Key.. [U1]
Real Time Simulation failed to start.
Simulation FAILED due to fatal simulator errors.
Что это за обзор ? ПРосто выложитьвидео и притянуть аудиторию ?
Вот я все сделал правильно, заинсталировал драйвер программатора, согласно инструкции в Уроке 4 дошел до в AVRDude-Prog до «Чтение» Калибровочные ячейки генератора, и получил сообщение — «ОШИБКА»
И что дальше ???????????
Какая оштбка ???
Что делать дальше???
И какая польза от таких уроков ???
Пробовал запрограммировать и из AVR Studio? Все сделал согласно описания ….. и никаакого эффекта!!!
Даже прочитал комментарии к уроку, пробовал заменить (InemFileName) на (TargetName) и никакого эффекта