Оглавление:

Начало работы с Bascom AVR: 5 шагов
Начало работы с Bascom AVR: 5 шагов

Видео: Начало работы с Bascom AVR: 5 шагов

Видео: Начало работы с Bascom AVR: 5 шагов
Видео: Как просто научиться программировать микроконтроллеры PIC и AVR / Бегущие огни за 8 минут! 2024, Июнь
Anonim
Начало работы с Bascom AVR
Начало работы с Bascom AVR

Это начало серии, которая научит вас программировать микроконтроллер AVR с помощью Bascom AVR.

Зачем я это делаю.

Большинство примеров программ из этой серии можно создать с помощью Arduino.

Некоторые из них проще, а некоторые сложнее, но в конце концов оба будут работать на одном контроллере.

Но способ программирования разный в каждой среде разработки. Arduino нужна библиотека для всего, кроме основных функций. Bascom также работает с библиотеками, но мне редко приходится их включать. В Arduino все аппаратные настройки выполняются через библиотеки. у вас очень мало влияния на фактическую мощность микроконтроллера. Начиная с таймеров, которые есть в контроллере. с ардуино вам снова нужна библиотека. если у вас есть таймер, пока он не сработает, возможно, другая библиотека противоречит вашим настройкам. В bascom у вас есть свободный доступ ко всему оборудованию, включая загрузочный сектор, который занимает arduino. например, некоторые библиотеки bascom спрашивают вас, какой таймер вы хотите использовать. с другой стороны, поскольку arduino позволяет очень легко создать библиотеку самостоятельно, это, естественно, делает ее платформой, на которой новое оборудование и датчики обычно имеют библиотеку напрямую. то, что часто связано с большим количеством исследований в bascom, и функции, которые обычно берет на себя библиотека, затем должны быть тщательно включены в программный код. но хорошие новости: сообщество bascom также очень велико, поэтому есть решение для каждой идеи.

Таким образом, это частично зависит от проекта, что используется для среды разработки, а частично от ноу-хау программиста.

но зачем я делаю эту серию. с одной стороны, это экономит много денег. Мне не нужно покупать плату Arduino для каждого проекта. Например: noname Arduino uno стоит около 12 евро, контроллер на нем стоит всего 2,5 евро с минимальной схемой, необходимой для стабильной работы, он стоит около 4 евро. с другой стороны, у вас есть полный набор поддерживаемых микросхем AVR. atmegas 8 до 256 и attiny 8 до 2313 и многие типы xmega, о которых у меня нет опыта. Если вы просто хотите использовать сервопривод и ультразвуковой датчик, который, например, может распознавать руку, а затем открыть крышку мусорного ведра, вы можете использовать микросхему минимального размера. Итак, есть много причин выучить второй язык.

Итак, приступим

Запасы

Это список минимально необходимых деталей для стабильной работы микросхемы и программирования.

Макет для тестирования

Атмега 8-16ПУ (лучше купите 2 или 3, если по ошибке убьете)

7805 регулятор напряжения 5В

Резистор 10 кОм

Пленочный конденсатор 100 нФ

Электролитический конденсатор 10 мкФ

Электролитический конденсатор 100 мкФ

несколько проводов для макета

ПК с Windows 7/8 / 8.1 / 10

Программист ISP (я буду использовать здесь USBasp, вы можете купить его на Amazon за небольшие деньги)

Bascom AVR (вы можете скачать здесь ДЕМО. Все функции разблокированы, но вы можете писать код только размером до 4 КБ, что достаточно для большого количества кода).

Дополнительные части:

Светодиоды с резисторами

нажимные переключатели

части проекта

Шаг 1. Установка Bascom и настройка

Установка Bascom и настройка
Установка Bascom и настройка
Установка Bascom и настройка
Установка Bascom и настройка
Установка Bascom и настройка
Установка Bascom и настройка

Загрузите файл и установите Bascom AVR. После установки установите все его части, включая последний флажок.

После этого перезагрузите компьютер, иначе bascom не запустится.

После перезагрузки запустите bascom.

Перейдите в Параметры -> Программист и выберите из списка USBasp, сохраните настройки и закройте Bascom.

Используйте эту программу для установки usbasp. После этого снова перезагрузите компьютер. Теперь подключите USBasp к компьютеру и запустите диспетчер устройств. USBasp должен появиться на устройствах libusb.

Статую еще раз Bascom и создайте новый файл. Сохраните его на свой компьютер и нажмите кнопку F7 на клавиатуре.

Компилятор запускается и компилирует пустую программу. Теперь вы можете протестировать работоспособность программатора.

Нажмите кнопку F4 на клавиатуре, чтобы открыть окно программатора. Теперь перейдите к чипу -> определить, чтобы начать взаимодействие. Светодиоды USBasp должны кратковременно мигать. Вы должны получить сообщение о том, что идентификатор микросхемы FFFFFF не может прочитать устройство. Это хороший знак, что программист работает, но не нашел чипа.

Теперь мы можем приступить к созданию первой схемы.

Шаг 2: давайте внимательнее посмотрим на чип

Давайте внимательнее посмотрим на чип
Давайте внимательнее посмотрим на чип

Если вы посмотрите на распиновку чипа, кажется, что он не похож на плату Arduino. Конечно, мы используем Atmega8, а на Arduino uno - Atmega328. Но распиновка почти такая же, но у микросхемы платы Arduino Uno больше функций. Вот названия контактов. VCC и GND - контакты для источника питания.

AREF и AVCC - это контакты для опорного напряжения и источника питания аналого-цифрового преобразователя.

PB 0-7 PC 0-6 PD 0-7 - контакты ввода-вывода общего назначения с многократным использованием.

Пин сброса - это то, что написано в названии. Для перезапуска чипа. Строка над названием сброса означает отрицание. Это означает, что для сброса микросхемы необходимо сбросить ее до 0 В.

Для следующих контактов скоро появятся отдельные инструкции.

RXD TXD - это аппаратные контакты для последовательной связи UART.

INT0 INT1 - выводы аппаратного прерывания

XCK / T0 Источник тактовой частоты UART / Таймер / Счетчик0 Источник тактовой частоты

Выводы XTAL / TOSC предназначены для внешнего кристалла до 16 МГц (различные модели до 20 МГц) / выводы кристалла для внутреннего RTC

T1 похож на T0

Контакты AIN предназначены для аналогового компаратора.

ICP1 похож на T0 / T1

OC1A - аппаратный выходной контакт для канала A ШИМ-таймера1.

Вывод выбора микросхемы SS / OC2 для SPI / как OC1B, но канал B

MOSI MISO SCK / OC2 - это аппаратные выводы SPI и выводы для программирования / таймера вывода PWM2.

ADC0 - ADC5 - аналоговые входы

SDA SCL - это контакты для аппаратного I2C.

Обычный чип может работать от 4,5 В до 5,5 В, Atmega 8L может работать с гораздо более низким напряжением.

Вы видите, что даже этот чип может сделать больше, чем Arduino Uno, похоже, не может. Но Arduino тоже может это делать, вам только нужно его запрограммировать.

Шаг 3: Первый контур

Первый круг
Первый круг
Первый круг
Первый круг

Пришло время построить вашу первую схему.

Что обычно представляет собой первый контур? Верно! Давайте мигать светодиодом.

Светодиод подключен к PB0. Резистор рядом с микросхемой на 10кОм.

Резистор рядом со светодиодом имеет 470 Ом.

Теперь вы можете подключить USBasp к Atmega, как показано на рисунке.

Но прежде чем включать питание, напишем программу.

Шаг 4: напишите первую программу

Напишите первую программу
Напишите первую программу

Создайте новый файл в Bascom и введите следующий текст.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = output do portb.0 = 1 wait 1 portb.0 = 0 wait 1 loop

после этого скомпилируйте его, нажав F7 на клавиатуре.

Теперь мы можем запрограммировать чип, нажав F4. Появится окно программатора. Теперь пора включить питание от макета. Вы должны подать напряжение от 6 до 12 вольт.

Теперь переходим в чип -> автопрограмма. Если окно программатора закрывается автоматически, программирование прошло успешно.

Светодиод должен мигать с частотой 1 секунду.

Теперь присмотримся к программе поближе, чтобы разобраться в синтаксисе.

$ regfile "m8def.dat"

$ кристалл = 1000000

с помощью $ regfile мы сообщаем компилятору тип используемой микросхемы, имя микросхемы Arduino будет "m328pdef.dat"

с помощью $ crystal мы сообщаем ему скорость процессора около 1 МГц.

config portb.0 = Вывод

это означает, что PB0 должен действовать как выход.

Кстати, аббревиатура PB0 означает порт B бит 0. Чип разделен на несколько портов. Каждому порту дается буква для четкой идентификации. и каждый вывод порта - бит от 0 до 7. Например, я могу записать полный байт в выходной регистр порта, который будет выводиться через отдельные выводы порта.

делать

петля

Это то, что означает в Arduino оператор void loop. Все, что находится между этими двумя командами, будет повторяться вечно. (за некоторыми исключениями, но об этом позже)

Portb.0 = 1

ждать 1 портb.0 = 0 ждать 1

Здесь мы вызываем мигание светодиода.

Portb.0 = 1 указывает микросхеме переключить выход PB0 на 5V

команда wait 1 позволяет чипу подождать одну секунду. Если вы хотите переключить светодиод быстрее, вам нужно заменить команду ожидания на waitms, теперь вы можете ввести некоторое время в миллисекундах, например. waitms 500. (waitus означает ожидание в наносекундах)

Portb.0 = 0 указывает микросхеме переключить выход PB0 на 0 В.

Шаг 5: добавьте кнопку для использования входов

Добавить кнопку для использования входов
Добавить кнопку для использования входов

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

Вставьте кнопку, как показано на картинке.

теперь введите следующую программу.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 do if pind.7 = 0 then portb.0 = 1 else portb.0 = 0 loop

Если вы загрузите эту программу в чип, светодиод загорится только при нажатии кнопки. Но почему?

программа запускается идентично предыдущей, пока

config portd.7 = ввод. Это означает, что контакт PD7, подключенный к кнопке, действует как вход.

Portd.7 = 1 не переключает вывод на высокий уровень, но активирует внутренний подтягивающий резистор Atmega.

Исправление if выглядит немного странно, если вы привыкли к Arduino.

если вы используете оператор if, вы должны использовать оператор «then». В этом примере оператор if используется для одиночных командных операций. Если вы хотите использовать больше команд, вы должны написать это так.

если pind.7 = 0, то

portb.0 = 1 некоторый код некоторый код некоторый код еще portb.0 = 0 конец, если

для этого использования оператора if вы должны использовать оператор «end if» в конце.

что еще важно. Может, вы это уже видели. входы запрашиваются не с помощью portx.x, а с помощью pinx.x. Вы легко запомните это. Выходы имеют в слове «o» (порт), а входы - «i» (контакт).

Теперь ваша очередь немного поиграть.

Скоро выйдет моя следующая инструкция (стандартные инструкции, такие как while, select case, for и variables.)

Если вам нравятся мои инструкции и вы хотите больше, расскажите мне в комментариях.

Рекомендуемые: