Съдържание:

Първи стъпки с Bascom AVR: 5 стъпки
Първи стъпки с Bascom AVR: 5 стъпки

Видео: Първи стъпки с Bascom AVR: 5 стъпки

Видео: Първи стъпки с Bascom AVR: 5 стъпки
Видео: Първи стъпки с Дрона! За малко да стане фал! 2024, Юли
Anonim
Първи стъпки с Bascom AVR
Първи стъпки с Bascom AVR

Това е началото на поредица, която ще ви научи да програмирате вашия AVR микроконтролер с Bascom AVR.

Защо правя това.

Повечето примерни програми от тази серия можете да направите с Arduino.

Някои по -лесни и други по -трудни, но в края и двете ще работят на един и същ контролер.

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

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

но защо правя тази поредица. от една страна спестява много пари. Не е нужно да купувам дъска arduino за всеки проект. Например: A noname Arduino uno струва около 12 €, контролерът, който е на него, струва само 2,5 € с минималните схеми, необходими за стабилна функция, струва около 4 €. от друга страна имате пълния избор на поддържани AVR чипове. atmegas 8 до 256 и attiny 8 до 2313 и много xmega типове, за които нямам опит. Ако просто искате да използвате серво и ултразвуков сензор, който може да разпознае ръка например и след това да отворите капак на кофата за боклук, можете да използвате възможно най -малкия чип. Така че има много причини да научите втори език.

Така че нека започнем

Консумативи

Това е списък на минимално необходимите части за стабилна работа на чипа и програмиране.

Платформа за тестване

Atmega 8-16PU (по-добре купувайте 2 или 3, ако ги убиете по погрешка)

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

10Kohm резистор

100nF филмов кондензатор

10 μF електролитен кондензатор

100 μF електролитен кондензатор

някои проводници за макет

Windows PC 7/8/8.1/10

ISP програмист (тук ще използвам USBasp, който можете да го купите в Amazon за малко пари)

Bascom AVR (можете да изтеглите тук DEMO. Всички функции са отключени, но можете да пишете код само до 4Kb размер, който е достатъчен за много код).

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

Светодиоди с резистори

бутони за натискане

части, специфични за проекта

Стъпка 1: Инсталиране на Bascom и настройка

Инсталиране на Bascom и настройка
Инсталиране на Bascom и настройка
Инсталиране на Bascom и настройка
Инсталиране на Bascom и настройка
Инсталиране на Bascom и настройка
Инсталиране на Bascom и настройка

Изтеглете файла и инсталирайте Bascom AVR. Инсталирайте всички части от него, включително последното квадратче за отметка след инсталирането.

След това рестартирайте компютъра си, в противен случай bascom няма да стартира.

След рестартирането стартирайте bascom.

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

Използвайте тази програма, за да инсталирате usbasp. След това рестартирайте компютъра отново. Сега свържете USBasp с вашия компютър и стартирайте диспечера на устройства. USBasp трябва да се появи на устройствата libusb.

Stat Bascom отново и създайте нов файл. Запишете го на вашия компютър и натиснете бутона F7 на клавиатурата.

Компилаторът стартира и компилира празната програма. Сега можете да тествате функционалността на програмиста.

Натиснете бутона F4 на клавиатурата, за да стартирате прозореца на програмиста. Сега отидете на чип -> идентифицирайте, за да започнете взаимодействие. Светодиодите от USBasp сега трябва да мигат кратко. Трябва да получите съобщение като идентификатор на чип FFFFFF не може да прочете устройството. Това е добър знак, че програмистът работи, но не намери чип.

Сега можем да започнем да изграждаме първата верига.

Стъпка 2: Нека разгледаме по -отблизо чипа

Нека разгледаме по -отблизо чипа
Нека разгледаме по -отблизо чипа

Ако погледнете разклонението на чипа, изглежда, че чипът няма сходство с платката arduino. Разбира се, ние използваме Atmega8, а на Arduino uno е Atmega328. Но Pinout е почти същият, но чипът на платката Arduino Uno има повече функции. Ето имената на щифтовете. VCC и GND са щифтовете за захранване.

AREF и AVCC са изводи за референтно напрежение и захранване за аналогово -цифров преобразувател.

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

reset pin е това, което името казва. За да рестартирате чипа. Редът над името за нулиране означава отрицание. Това означава, че за да нулирате чипа, трябва да го издърпате до 0V.

За следните пинове скоро ще се появят отделни инструкции.

RXD TXD са хардуерни щифтове за серийна комуникация UART.

INT0 INT1 са хардуерни прекъсвания

XCK /T0 UART източник на часовник /таймер /брояч 0 източник на часовник

Пиновете XTAL /TOSC са за външен кристал до 16MHz (различни модели до 20MHz) /кристални щифтове за вътрешен RTC

T1 е подобен на T0

AIN щифтовете са за аналоговия сравнител

ICP1 е подобен на T0/T1

OC1A е хардуерният изходен щифт за pwm timer1 канал A

SS / OC2 чип за избор на чип за SPI / като OC1B, но канал B

MOSI MISO SCK / OC2 са хардуерните SPI щифтове и щифтовете за програмиране / ШИМ изходен таймер2

ADC0 до ADC5 са аналоговите входове

SDA SCL са щифтовете за хардуерен I2C

Нормалният чип може да работи от 4, 5V до 5, 5V, Atmega 8L може да работи с много по -ниско напрежение.

Виждате, че дори този чип може да направи повече, отколкото Arduino Uno изглежда не може. Но Arduino също може да го направи, трябва само да го програмирате.

Стъпка 3: Първата верига

Първата верига
Първата верига
Първата верига
Първата верига

Сега е време да изградите първата си верига.

Каква е обикновено първата верига? Точно така! Нека премигнем светодиода.

Светодиодът е свързан с PB0. Резисторът до чипа има 10k Ohms.

Резисторът до светодиода има 470 ома.

Сега можете да свържете USBasp с Atmega, както е показано на снимката.

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

Стъпка 4: Напишете първата програма

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

Създайте нов файл в Bascom и въведете следния текст.

$ regfile "m8def.dat"

$ кристал = 1000000 конфигурационен портb.0 = изход до портb.0 = 1 изчакване 1 портb.0 = 0 изчакване 1 цикъл

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

Сега можем да програмираме чипа чрез натискане на F4. Появява се прозорецът на програмиста. Сега е време да включите захранването от дъската. Трябва да приложите нещо между 6 и 12 волта.

Сега отидете на чип -> автопрограма. Ако прозорецът на програмиста се затвори автоматично, програмирането е било успешно.

Светодиодът трябва да мига с една секунда честота.

Сега разгледайте по -отблизо програмата, за да разберете синтаксиса.

$ regfile "m8def.dat"

$ кристал = 1000000

с $ regfile казваме на компилатора вида на използвания чип името на чипа Arduino ще бъде "m328pdef.dat"

с $ crystal му казваме скоростта на процесора около 1MHz.

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 500. (waitus означава изчакване в наносекунди)

Portb.0 = 0 казва на чипа да превключи изхода PB0 на 0V.

Стъпка 5: Добавете бутон, за да използвате входове

Добавете бутон, за да използвате входове
Добавете бутон, за да използвате входове

Сега добавяме бутон, за да светне светодиода, ако бутонът е натиснат.

Поставете бутона, както е показано на снимката.

сега въведете следната програма.

$ regfile "m8def.dat"

$ кристал = 1000000 конфигурация portb.0 = изход конфигурация portd.7 = вход Portd.7 = 1 направете ако pind.7 = 0 тогава portb.0 = 1 else портb.0 = 0 цикъл

Ако качите тази програма на чипа, светодиодът светва само при натискане на бутона. Но защо?

програмата стартира идентично като последната до

config portd.7 = вход. Това означава, че пин PD7, който е свързан с бутон, действа като вход.

Portd.7 = 1 не превключва щифта към висок, но активира вътрешния резистор за изтегляне на Atmega.

Ако Statemend изглежда малко странно, ако сте свикнали с arduino.

ако използвате оператора if, трябва да използвате израза "then". В тази извадка операторът if се използва за операции с единична команда. Ако искате да използвате повече команди, трябва да го напишете така.

ако pind.7 = 0 тогава

портb.0 = 1 някакъв код някакъв код друг код друг портb.0 = 0 край ако

за това използване на оператора if трябва да използвате израза "end if" в края.

това, което все още е важно. Може би вече сте го виждали. входовете не се запитват с portx.x, а с pinx.x. Можете лесно да запомните това. Изходите имат "o" (порт) в думата, а входовете имат "i" (щифт).

Сега е ваш ред да поиграете малко.

Следващата ми инструкция ще дойде скоро (стандартни изявления като while, изберете регистър, за и променливи.)

Ако ви харесва моята инструкция и искате повече, кажете ми в коментарите.

Препоръчано: