Taula de continguts:

Introducció a Bascom AVR: 5 passos
Introducció a Bascom AVR: 5 passos

Vídeo: Introducció a Bascom AVR: 5 passos

Vídeo: Introducció a Bascom AVR: 5 passos
Vídeo: Tutorial Install Bascom AVR 2024, Desembre
Anonim
Introducció a Bascom AVR
Introducció a Bascom AVR

Aquest és el començament d’una sèrie per ensenyar-vos a programar el vostre microcontrolador AVR amb Bascom AVR.

Per què faig això?

La majoria de les mostres de programes d'aquesta sèrie es poden fer amb Arduino.

Alguns més fàcils i d'altres més difícils, però al final tots dos funcionaran amb el mateix controlador.

Però la forma de programar és diferent en tots els entorns de desenvolupament. Arduino necessita una biblioteca per a tot, excepte les funcions bàsiques. Bascom també funciona amb biblioteques, però poques vegades n’he d’incloure cap. Amb Arduino, totes les configuracions específiques del maquinari es fan a través de les biblioteques. teniu molt poca influència sobre la potència real del microcontrolador. Començant pels temporitzadors que té el controlador. amb arduino necessiteu una biblioteca de nou. si teniu el temporitzador fins que funcioni, pot ser que una altra biblioteca xoqui amb la vostra configuració. A bascom teniu accés gratuït al maquinari complet, inclòs el sector d’arrencada que ocupa arduino. per exemple, algunes biblioteques de bascom us pregunten quin temporitzador voleu utilitzar. d'altra banda, atès que arduino facilita la creació d'una biblioteca per vosaltres mateixos, naturalment la converteix en una plataforma on el maquinari i els sensors nous solen tenir una biblioteca directament. el que sovint s’associa amb moltes investigacions a bascom i les funcions que normalment assumiria una biblioteca s’ha d’incorporar minuciosament al codi del programa. però una bona notícia és que la comunitat bascom també és molt gran, per això hi ha una solució per a totes les idees.

Per tant, depèn en part del projecte del que s’utilitzi per a un entorn de desenvolupament i en part del coneixement de la persona que programa.

però per què faig aquesta sèrie? per una banda, estalvia molts diners. No he de comprar una placa arduino per a cada projecte. Per exemple: Un Arameu no oneame costa uns 12 € el controlador que hi ha costa només 2,5 € amb el circuit mínim necessari per a una funció estable, costa al voltant de 4 €. d'altra banda, teniu disponible la selecció completa de xips AVR compatibles. atmegas 8 a 256 i attiny 8 a 2313 i molts tipus xmega sobre els quals no tinc experiència. Si només voleu utilitzar un servo i un sensor d’ultrasons que pugui reconèixer una mà, per exemple, i després obrir una tapa d’una paperera, podeu utilitzar el xip més petit possible. Per tant, hi ha moltes raons per aprendre un segon idioma.

Comencem doncs

Subministraments

Aquesta és una llista de les parts mínimes necessàries per a un funcionament estable del xip i la programació.

Taula de pa per provar

Atmega 8-16PU (millor que en compris 2 o 3 si els mates per error)

Regulador de voltatge 7805 5V

Resistència de 10 Kohm

Condensador de pel·lícula 100nF

Condensador electrolític de 10µF

Condensador electrolític 100µF

alguns cables per a la taula de pa

PC amb Windows 7/8 / 8.1 / 10

Programador ISP (faré servir el USBasp aquí, el podeu comprar a Amazon per pocs diners)

Bascom AVR (podeu descarregar aquí una DEMO. Totes les funcions estan desbloquejades, però només podeu escriure codi fins a una mida 4Kb suficient per a molts codis).

Parts opcionals:

LEDs amb resistències

polsadors

parts específiques del projecte

Pas 1: Instal·lació de Bascom i configuració

Instal·lació de Bascom i Setup
Instal·lació de Bascom i Setup
Instal·lació de Bascom i Setup
Instal·lació de Bascom i Setup
Instal·lació de Bascom i Setup
Instal·lació de Bascom i Setup

Descarregueu el fitxer i instal·leu Bascom AVR. Instal·leu-ne totes les parts, inclosa la darrera casella de selecció després de la instal·lació.

Després d'això, reinicieu el vostre PC, en cas contrari, bascom no s'iniciarà.

Després del reinici, inicieu bascom.

Aneu a Opcions -> Programador i trieu USBasp de la llista, deseu la configuració i tanqueu Bascom.

Utilitzeu aquest programa per instal·lar usbasp. Després, reinicieu el PC de nou. Ara connecteu l'USBasp amb el vostre PC i inicieu el gestor de dispositius. USBasp hauria d'aparèixer als dispositius libusb.

Stat Bascom de nou i creeu un fitxer nou. Deseu-lo al vostre ordinador i premeu el botó F7 del teclat.

El compilador inicia i compila el programa buit. Ara podeu provar la funcionalitat del programador.

Premeu el botó F4 del teclat per iniciar la finestra del programador. Ara aneu a xip -> identifiqueu-vos per iniciar una interacció. Els LEDs de l'USBasp ara haurien de parpellejar breument. Hauríeu de rebre un missatge com l'identificador de xip FFFFFF que no podia llegir el dispositiu. És un bon senyal que el programador funciona però no ha trobat cap xip.

Ara podem començar a construir el primer circuit.

Pas 2: fem una ullada més detallada al xip

Vegem de prop el xip
Vegem de prop el xip

Si mireu el pinout del xip, sembla que el xip no té cap semblança amb la placa arduino. Per descomptat, fem servir un Atmega8 i a l’Arduino uno hi ha un Atmega328. Però el Pinout és gairebé el mateix, però el xip de la placa Arduino Uno té més funcions. Aquí els noms dels pins. VCC i GND són els pins per a la font d'alimentació.

AREF i AVCC són pins per a la tensió de referència i la font d'alimentació del convertidor analògic a digital.

PB 0-7 PC 0-6 PD 0-7 són pins d'entrada d'ús general amb ocupació múltiple.

el pin de restabliment és el que diu el nom. Per reiniciar el xip. La línia que hi ha a sobre del nom del restabliment significa negació. Això vol dir que per restablir el xip l’heu de baixar a 0V.

Per als següents pins, els instructius separats properament.

RXD TXD són pins de maquinari per a la comunicació en sèrie UART.

INT0 INT1 són pins d'interrupció de maquinari

XCK / T0 UART Font del rellotge / Temporitzador / Contador0 Font del rellotge

Els pins XTAL / TOSC són per a un vidre extern de fins a 16 MHz (diferents models fins a 20 MHz) / Pins de cristall per a un RTC intern

T1 és similar a T0

Els pins AIN són per al comparador analògic

ICP1 és similar a T0 / T1

OC1A és el pin de sortida de maquinari per al canal A del temporitzador pwm1

Pin de selecció de xip SS / OC2 per SPI / com OC1B però canal B.

MOSI MISO SCK / OC2 són els pins SPI de maquinari i els pins per a la programació / temporitzador de sortida PWM2

ADC0 a ADC5 són les entrades analògiques

SDA SCL són els pins per al maquinari I2C

El xip normal pot funcionar de 4, 5V a 5, 5V, l'Atmega 8L pot funcionar amb un voltatge molt inferior.

Veureu que fins i tot aquest xip pot fer més del que sembla que Arduino Uno no pot fer. Però l’Arduino també ho pot fer, només heu de programar-lo.

Pas 3: el primer circuit

El primer circuit
El primer circuit
El primer circuit
El primer circuit

Ara és hora de construir el vostre primer circuit.

Quin és normalment el primer circuit? Dret! Parpelleguem un LED.

El LED està connectat amb PB0. La resistència al costat del xip té 10k Ohms.

La resistència al costat del LED té 470 Ohms.

Ara podeu connectar l'USBasp amb l'Atmega tal com es mostra a la imatge.

Però abans d’engegar-lo, deixeu-nos escriure el programa.

Pas 4: escriviu el primer programa

Escriu el primer programa
Escriu el primer programa

Creeu un fitxer nou a Bascom i escriviu el text següent.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = sortida portb.0 = 1 espera 1 portb.0 = 0 espera 1 bucle

després, compileu-lo prement F7 al teclat.

Ara podem programar el xip prement F4. Apareix la finestra del programador. Ara és hora d’engegar l’alimentació de la placa. Hauríeu d'aplicar entre 6 i 12 volts.

Ara aneu a xip -> autoprograma. Si la finestra del programador es tanca automàticament, la programació ha estat correcta.

El LED hauria de parpellejar en una freqüència d’un segon.

Ara mireu de prop el programa per entendre la sintaxi.

$ regfile "m8def.dat"

$ cristall = 1000000

amb $ regfile li diem al compilador el tipus de xip utilitzat, el nom del xip Arduino seria "m328pdef.dat"

amb $ crystal li expliquem la velocitat de la CPU sobre 1 MHz.

config portb.0 = Sortida

això vol dir que PB0 hauria d'actuar com a sortida.

Per cert, l’abreviatura PB0 significa el port B bit 0. El xip es divideix en diversos ports. A cada port se li dóna una carta per a una identificació clara. i cada portpin una mica de 0 a 7. Per exemple, puc escriure un byte complet al registre de sortida del port, que es transmetrà mitjançant els pins de port individuals.

fer

bucle

Això és el que significa a Arduino la declaració de bucle buit. Tot entre aquestes dues ordres es repetirà per sempre. (amb algunes excepcions, però més endavant sobre això)

Portb.0 = 1

espera 1 portb.0 = 0 espera 1

Aquí gernerem el parpelleig del led.

Portb.0 = 1 indica al xip que commuti la sortida PB0 a 5V

l'ordre wait 1 permet que el xip esperi un segon. Si voleu canviar el led més ràpidament, heu de substituir l’ordre wait per waitms ara podeu introduir un temps en mil·lisegons, per exemple. waitms 500. (waitus significa esperar en nanosegons)

Portb.0 = 0 indica al xip que canviï la sortida PB0 a 0V.

Pas 5: afegiu un botó per utilitzar les entrades

Afegiu un botó per utilitzar les entrades
Afegiu un botó per utilitzar les entrades

Ara afegim un botó per il·luminar el led si es prem el botó.

Inseriu el botó tal com es mostra a la imatge.

ara escriviu el programa següent.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = sortida config portd.7 = entrada Portd.7 = 1 fer si pind.7 = 0 llavors portb.0 = 1 altre portb.0 = 0 bucle

Si pengeu aquest programa al xip, el led només s’encén quan es prem el botó. Però perquè?

el programa s'inicia de la mateixa manera que l'últim fins

config portd.7 = entrada. Això vol dir que el pin PD7 que es va connectar amb el botó actua com a entrada.

Portd.7 = 1 no canvia el pin a alt, però activa la resistència interna de tracció cap amunt de l'Atmega.

El statemend if es veu una mica més estrany si estàs acostumat a arduino.

si utilitzeu la sentència if heu d'utilitzar la sentència "llavors". En aquest exemple, la sentència if s'utilitza per a operacions de comandament únic. Si voleu utilitzar més ordres, heu d'escriure-la així.

si pind.7 = 0 llavors

portb.0 = 1 algun codi algun codi algun codi altre portb.0 = 0 final si

per a aquest ús de la sentència if, heu d'utilitzar la sentència "end if" al final.

el que encara és important. Potser ja ho heu vist. les entrades no es consulten amb portx.x, sinó amb pinx.x. Ho podeu recordar fàcilment. Les sortides tenen la "o" (port) a la paraula i les entrades tenen la "i" (pin).

Ara és el vostre torn de jugar una mica.

La meva pròxima instrucció es publicarà aviat (enunciats estàndard com mentre que, seleccioneu majúscules, minúscules i variables).

Si us agrada la meva instrucció i voleu més, digueu-me als comentaris.

Recomanat: