Cuprins:

Noțiuni de bază cu AVR Bascom: 5 pași
Noțiuni de bază cu AVR Bascom: 5 pași

Video: Noțiuni de bază cu AVR Bascom: 5 pași

Video: Noțiuni de bază cu AVR Bascom: 5 pași
Video: Programare microcontroler 2024, Iulie
Anonim
Noțiuni de bază cu Bascom AVR
Noțiuni de bază cu Bascom AVR

Acesta este începutul unei serii care vă va învăța să vă programați microcontrolerul AVR cu Bascom AVR.

De ce fac asta.

Majoritatea eșantioanelor de programe din această serie le puteți face cu Arduino.

Unele mai ușoare și altele mai dificile, dar la final ambele vor rula pe același controler.

Dar modul de programare este diferit în fiecare mediu de dezvoltare. Arduino are nevoie de o bibliotecă pentru orice, cu excepția funcțiilor de bază. Bascom funcționează și cu biblioteci, dar rareori trebuie să includ una. Cu Arduino, toate setările specifice hardware-ului sunt realizate prin intermediul bibliotecilor. aveți foarte puțină influență asupra puterii reale a microcontrolerului. Începând cu temporizatoarele pe care le are controlerul. cu arduino ai nevoie din nou de o bibliotecă. dacă aveți temporizatorul până când acesta funcționează, este posibil ca o altă bibliotecă să se ciocnească cu setările dvs. La bascom aveți acces gratuit la hardware-ul complet, inclusiv la sectorul de boot care este ocupat de arduino. de exemplu, unele biblioteci de la bascom vă întreabă ce temporizator doriți să utilizați. pe de altă parte, deoarece arduino face foarte ușoară crearea dvs. de o bibliotecă, în mod firesc o platformă în care hardware-ul și senzorii noi au de obicei o bibliotecă direct. ceea ce este adesea asociat cu o mulțime de cercetări la bascom și funcțiile pe care o bibliotecă le-ar lua în mod normal trebuie apoi încorporate cu atenție în codul programului. dar vești bune, comunitatea bascom este, de asemenea, foarte mare, motiv pentru care există o soluție pentru fiecare idee.

Deci, depinde parțial de proiect ce este utilizat pentru un mediu de dezvoltare și parțial de know-how-ul persoanei care programează.

dar de ce fac această serie. pe de o parte, economisește mulți bani. Nu trebuie să cumpăr o placă arduino pentru fiecare proiect. De exemplu: Un noname Arduino uno costă aproximativ 12 € controlerul care este pe acesta costă doar 2,5 € cu circuitele minime necesare pentru o funcție stabilă, costă în jur de 4 €. pe de altă parte, aveți la dispoziție o selecție completă de jetoane avr care sunt acceptate. atmegas 8 la 256 și attiny 8 la 2313 și multe tipuri de xmega despre care nu am experiență. Dacă doriți doar să utilizați un servo și un senzor cu ultrasunete care poate recunoaște o mână, de exemplu, și apoi deschideți un capac al unui coș de gunoi, puteți utiliza cel mai mic cip posibil. Deci, există multe motive pentru a învăța a doua limbă.

Deci sa începem

Provizii

Aceasta este o listă cu piesele minime necesare pentru o funcționare stabilă a cipului și programare.

Panou pentru testare

Atmega 8-16PU (mai bine cumperi 2 sau 3 dacă îi ucizi din greșeală)

7805 Regulator de tensiune 5V

Rezistor de 10Kohm

Condensator de film 100nF

Condensator electrolitic 10µF

Condensator electrolitic 100µF

niște fire pentru panou

Windows PC 7/8 / 8.1 / 10

Programator ISP (voi folosi aici USBasp, îl puteți cumpăra de la Amazon pentru bani puțini)

Bascom AVR (puteți descărca aici un DEMO. Toate funcțiile sunt deblocate, dar puteți scrie cod numai până la dimensiunea 4Kb, care este suficient pentru multe coduri).

Piese opționale:

LED-uri cu rezistențe

comutatoare

părți specifice proiectului

Pasul 1: Instalarea Bascom și Setup

Instalarea Bascom și Setup
Instalarea Bascom și Setup
Instalarea Bascom și Setup
Instalarea Bascom și Setup
Instalarea Bascom și Setup
Instalarea Bascom și Setup

Descărcați fișierul și instalați Bascom AVR. Instalați toate părțile acestuia, inclusiv ultima casetă de selectare după instalare.

După aceea reporniți computerul, altfel bascom nu va porni.

După repornire porniți bascom.

Mergeți la Opțiuni -> Programator și alegeți USBasp din listă, salvați setările și închideți Bascom.

Utilizați acest program pentru a instala usbasp. După aceea, reporniți din nou computerul. Acum conectați USBasp la computer și porniți managerul de dispozitive. USBasp ar trebui să apară pe dispozitivele libusb.

Stat Bascom din nou și creați un fișier nou. Salvați-l pe computer și apăsați butonul F7 de pe tastatură.

Compilatorul pornește și compilează programul gol. Acum puteți testa funcționalitatea programatorului.

Apăsați butonul F4 de pe tastatură pentru a porni fereastra programatorului. Acum mergeți la cip -> identificați pentru a începe o interacțiune. LED-urile de pe USBasp ar trebui să clipească acum scurt. Ar trebui să primiți un mesaj de tipul cipului ID FFFFFF nu a putut citi dispozitivul. Este un semn bun că programatorul funcționează, dar nu a găsit nici un cip.

Acum putem începe să construim primul circuit.

Pasul 2: Să aruncăm o privire mai atentă asupra cipului

Să aruncăm o privire mai atentă asupra cipului
Să aruncăm o privire mai atentă asupra cipului

Dacă vă uitați la pinout-ul cipului, se pare că cipul nu are nicio asemănare cu placa arduino. Sigur, folosim un Atmega8, iar pe Arduino uno este un Atmega328. Dar Pinout este aproape același, dar cipul plăcii Arduino Uno are mai multe funcții. Aici numele pinilor. VCC și GND sunt pinii pentru alimentare.

AREF și AVCC sunt pini pentru tensiunea de referință și sursa de alimentare pentru convertorul analogic digital.

PB 0-7 PC 0-6 PD 0-7 sunt pini de ieșire de intrare de uz general cu ocupare multiplă.

pinul de resetare este ceea ce spune numele. Pentru a reporni cipul. Linia de deasupra numelui de resetare înseamnă negare. Asta înseamnă că pentru a reseta cipul trebuie să îl trageți în jos la 0V.

Pentru următorii pini instructabili separați în curând.

RXD TXD sunt pini hardware pentru comunicații seriale UART.

INT0 INT1 sunt pini de întrerupere hardware

XCK / T0 UART Sursă ceas / Timer / Contor0 Sursă ceas

Pinii XTAL / TOSC sunt pentru un cristal extern de până la 16MHz (diferite modele până la 20MHz) / Pinii de cristal pentru un RTC intern

T1 este similar cu T0

Pinii AIN sunt pentru comparatorul analogic

ICP1 este similar cu T0 / T1

OC1A este pinul de ieșire hardware pentru canalul A pwm timer1

Pinul de selectare a cipului SS / OC2 pentru SPI / ca OC1B, dar canalul B.

MOSI MISO SCK / OC2 sunt pinii SPI hardware și pinii pentru programare / timer de ieșire PWM2

ADC0 la ADC5 sunt intrările analogice

SDA SCL sunt pinii pentru hardware I2C

Cipul normal poate funcționa de la 4, 5V la 5, 5V, Atmega 8L poate funcționa cu o tensiune mult mai mică.

Vedeți chiar că acest cip poate face mai mult decât pare un Arduino Uno că nu poate face. Dar Arduino o poate face, de asemenea, trebuie doar să o programați.

Pasul 3: Primul circuit

Primul circuit
Primul circuit
Primul circuit
Primul circuit

Acum este timpul să construiești primul tău circuit.

Care este de obicei primul circuit? Dreapta! Să clipim un LED.

LED-ul este conectat cu PB0. Rezistorul de lângă cip are 10k Ohm.

Rezistorul de lângă LED are 470 Ohmi.

Acum puteți conecta USBasp la Atmega așa cum se arată în imagine.

Dar, înainte de a porni alimentarea, permiteți-ne să scriem programul.

Pasul 4: Scrieți primul program

Scrie primul program
Scrie primul program

Creați un fișier nou în Bascom și tastați următorul text.

$ regfile "m8def.dat"

$ cristal = 1000000 config portb.0 = ieșire face portb.0 = 1 așteptare 1 portb.0 = 0 așteptare 1 buclă

după aceea compilați-l apăsând F7 pe tastatură.

Acum putem programa cipul apăsând F4. Apare fereastra programatorului. Acum este timpul să porniți alimentarea de pe panou. Ar trebui să aplicați ceva între 6 și 12 volți.

Acum mergeți la cip -> autoprogram. Dacă fereastra programatorului se închide automat, programarea a avut succes.

LED-ul ar trebui să clipească într-o secundă de frecvență.

Acum aruncați o privire mai atentă asupra programului pentru a înțelege sintaxa.

$ regfile "m8def.dat"

$ cristal = 1000000

cu $ regfile îi spunem compilatorului tipul cipului folosit, numele cipului Arduino ar fi „m328pdef.dat”

cu $ crystal îi spunem viteza cpu aproximativ 1MHz.

config portb.0 = Ieșire

asta înseamnă că PB0 ar trebui să acționeze ca ieșire.

Apropo, abrevierea PB0 înseamnă portul B bit 0. Cipul este împărțit în mai multe porturi. Fiecare port primește o scrisoare pentru o identificare clară. și fiecare portpin un pic de la 0 la 7. De exemplu, pot scrie un octet complet în registrul de ieșire al portului, care va fi trimis prin pinii portului individuali.

do

buclă

Aceasta este ceea ce înseamnă în Arduino declarația buclei voide. Toate cele două comenzi se vor repeta pentru totdeauna. (cu câteva excepții, dar mai târziu mai multe despre asta)

Portb.0 = 1

așteptați 1 portb.0 = 0 așteptați 1

Aici gernerăm clipirea ledului.

Portb.0 = 1 spune cipului să comute ieșirea PB0 la 5V

comanda wait 1 lasă cipul să aștepte o secundă. Dacă doriți să comutați ledul mai repede, trebuie să înlocuiți comanda de așteptare cu waitms acum puteți introduce ceva timp acum în milisecunde, de ex. waitms 500. (waitus înseamnă așteptare în nanosecunde)

Portb.0 = 0 spune cipului să comute ieșirea PB0 la 0V.

Pasul 5: Adăugați un buton pentru a utiliza intrările

Adăugați un buton pentru a utiliza intrările
Adăugați un buton pentru a utiliza intrările

Acum adăugăm un buton pentru a aprinde ledul dacă butonul este apăsat.

Introduceți butonul așa cum se arată în imagine.

acum tastați următorul program.

$ 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

Dacă încărcați acel program pe cip, ledul se aprinde numai atunci când butonul este apăsat. Dar de ce?

programul pornește identic cu ultimul până

config portd.7 = intrare. Asta înseamnă că pinul PD7 care s-a conectat cu butonul acționează ca o intrare.

Portd.7 = 1 nu comută pinul la mare, dar activează rezistența de tragere internă a Atmega.

Dacă statemend pare puțin mai ciudat dacă sunteți obișnuit cu arduino.

dacă folosiți declarația if trebuie să folosiți declarația „atunci”. În acest eșantion, instrucțiunea if este utilizată pentru operații de comandă unică. Dacă doriți să utilizați mai multe comenzi, trebuie să o scrieți astfel.

dacă pind.7 = 0 atunci

portb.0 = 1 unele cod unele cod alt cod altceva portb.0 = 0 sfârșesc dacă

pentru această utilizare a instrucțiunii if trebuie să utilizați instrucțiunea „end if” la sfârșit.

ceea ce este încă important. Poate că l-ai văzut deja. intrările nu sunt interogate cu portx.x, ci cu pinx.x. Vă puteți aminti cu ușurință acest lucru. Ieșirile au „o” (port) în cuvânt, iar intrările au „i” (pin).

Acum este rândul tău să joci puțin.

Următorul meu test instructiv va apărea în curând (declarații standard cum ar fi while, selectați caz, pentru și variabile.)

Dacă îți place instructabilul meu și vrei mai mult, spune-mi în comentarii.

Recomandat: