Innholdsfortegnelse:

Komme i gang med Bascom AVR: 5 trinn
Komme i gang med Bascom AVR: 5 trinn

Video: Komme i gang med Bascom AVR: 5 trinn

Video: Komme i gang med Bascom AVR: 5 trinn
Video: Одна в городе_Рассказ_Слушать 2024, Juli
Anonim
Komme i gang med Bascom AVR
Komme i gang med Bascom AVR

Dette er begynnelsen på en serie for å lære deg å programmere AVR -mikrokontrolleren din med Bascom AVR.

Hvorfor gjør jeg dette.

De fleste programprøvene i denne serien kan du lage med Arduino.

Noen enklere og noen vanskeligere, men på slutten vil begge kjøre på samme kontroller.

Men måten å programmere på er forskjellig i alle utviklingsmiljøer. Arduino trenger et bibliotek for alt unntatt de grunnleggende funksjonene. Bascom jobber også med biblioteker, men jeg trenger sjelden å inkludere et. Med Arduino gjøres alle maskinvarespesifikke innstillinger via bibliotekene. du har veldig liten innflytelse på den faktiske kraften til mikrokontrolleren. Starter med tidtakerne som kontrolleren har. med arduino trenger du et bibliotek igjen. hvis du har timeren til den fungerer, kan det være et annet bibliotek som kolliderer med innstillingene dine. På bascom har du gratis tilgang til den komplette maskinvaren, inkludert boot -sektoren som er okkupert av arduino. for eksempel spør noen biblioteker på bascom deg hvilken tidtaker du vil bruke. På den annen side, siden arduino gjør det veldig enkelt å lage et bibliotek selv, gjør det det naturligvis til en plattform der ny maskinvare og sensorer vanligvis har et bibliotek direkte. det som ofte er forbundet med mye forskning på bascom og funksjonene som et bibliotek normalt ville ha, må deretter omhyggelig inkorporeres i programkoden. men gode nyheter bascom -samfunnet er også veldig stort, og derfor er det en løsning for hver idé.

Så det avhenger delvis av prosjektet hva som brukes til et utviklingsmiljø og delvis av kunnskapen til programmeringspersonen.

men hvorfor gjør jeg denne serien. på den ene siden sparer det mye penger. Jeg trenger ikke kjøpe et arduino -brett for hvert prosjekt. For eksempel: En noname Arduino uno koster omtrent 12 € kontrolleren som er på den, koster bare 2,5 € med minimumskretsen som kreves for en stabil funksjon, den koster rundt 4 €. på den annen side har du det komplette utvalget av avr -brikker som støttes. atmegas 8 til 256 og attiny 8 til 2313 og mange xmega -typer som jeg ikke har erfaring med. Hvis du bare vil bruke en servo og en ultralydssensor som kan gjenkjenne en hånd, for eksempel, og deretter åpne et lokk på en søppelbøtte, kan du bruke den minste mulige brikken. Så det er mange grunner til å lære et andrespråk.

Så la oss komme i gang

Rekvisita

Dette er en liste over minimumskrevende deler for stabil drift av brikken og programmering.

Brødbrett for testing

Atmega 8-16PU (bedre du kjøper 2 eller 3 hvis du dreper dem ved en feil)

7805 5V spenningsregulator

10Kohm motstand

100nF filmkondensator

10µF elektrolytisk kondensator

100µF elektrolytisk kondensator

noen ledninger til brødbrett

Windows PC 7/8/8.1/10

ISP -programmerer (jeg vil bruke USBasp her, du kan kjøpe den på amazon for lite penger)

Bascom AVR (du kan laste ned en DEMO her. Alle funksjoner er ulåste, men du kan bare skrive kode til 4Kb -størrelse som er nok for mye kode).

Valgfrie deler:

LED -er med motstander

trykkbrytere

prosjektspesifikke deler

Trinn 1: Installasjon av Bascom og oppsett

Installasjon av Bascom og oppsett
Installasjon av Bascom og oppsett
Installasjon av Bascom og oppsett
Installasjon av Bascom og oppsett
Installasjon av Bascom og oppsett
Installasjon av Bascom og oppsett

Last ned filen og installer Bascom AVR. Installer alle deler av den, inkludert den siste avmerkingsboksen etter installasjonen.

Etter det starter datamaskinen på nytt, ellers starter ikke bascom.

Etter omstart starter bascom.

Gå til Alternativer -> Programmerer og velg USBasp fra listen, lagre innstillingene og lukk Bascom.

Bruk dette programmet til å installere usbasp. Etter det, start datamaskinen på nytt. Koble nå USBasp med PCen og start enhetsbehandling. USBasp skal vises på libusb -enhetene.

Stat Bascom igjen og lag en ny fil. Lagre den på din PC og trykk på F7 -knappen på tastaturet.

Kompilatoren starter og kompilerer det tomme programmet. Nå kan du teste funksjonaliteten til programmereren.

Trykk på F4 -knappen på tastaturet for å starte programmeringsvinduet. Gå nå til chip -> identifiser for å starte en interaksjon. Lysdiodene fra USBasp skal nå blinke kort. Du bør få en melding som chip Id FFFFFF kunne ikke lese enheten. Det er et godt tegn på at programmereren fungerer, men den fant ingen brikke.

Nå kan vi begynne å bygge den første kretsen.

Trinn 2: La oss se nærmere på brikken

La oss se nærmere på brikken
La oss se nærmere på brikken

Hvis du ser på pinout av brikken, ser det ut til at brikken ikke har noen likhet med arduino -kortet. Jo, vi bruker en Atmega8, og på Arduino uno er en Atmega328. Men Pinout er nesten den samme, men han -brikken på Arduino Uno -kortet har flere funksjoner. Her er navnene på pinnene. VCC og GND er pinnene for strømforsyning.

AREF og AVCC er pinner for referansespenningen og strømforsyningen for den analoge til digitale omformeren.

PB 0-7 PC 0-6 PD 0-7 er inngangsutganger for generelle formål med flere personer.

reset PIN er hva navnet sier. For å starte brikken på nytt. Linjen over tilbakestillingsnavnet betyr negasjon. Det betyr at for å tilbakestille brikken må du trekke den ned til 0V.

For de følgende pinnene kommer separate instruktører snart.

RXD TXD er maskinvarepinner for seriell kommunikasjon UART.

INT0 INT1 er Hardware Interrupt -pinner

XCK /T0 UART Klokke kilde /Timer /Teller 0 Klokke kilde

XTAL /TOSC -pinner er for en ekstern krystall opp til 16MHz (forskjellige modeller opptil 20MHz) /Krystallpinner for en intern RTC

T1 er lik T0

AIN -pinner er for den analoge komparatoren

ICP1 ligner T0/T1

OC1A er maskinvareutgangspinnen for pwm timer1 kanal A

SS / OC2 chip velg pin for SPI / som OC1B, men kanal B

MOSI MISO SCK / OC2 er maskinvarens SPI -pinner og pinnene for programmering / PWM -utgangstimer2

ADC0 til ADC5 er de analoge inngangene

SDA SCL er Pins for maskinvare I2C

Den vanlige brikken kan fungere fra 4, 5V til 5, 5V, Atmega 8L kan fungere med mye lavere spenning.

Du ser at selv denne brikken kan gjøre mer enn en Arduino Uno synes ikke kan gjøre. Men Arduino kan også gjøre det, du trenger bare å programmere det.

Trinn 3: Den første kretsen

Den første kretsen
Den første kretsen
Den første kretsen
Den første kretsen

Nå er det på tide å bygge din første krets.

Hva er vanligvis den første kretsen? Ikke sant! La oss blinke med en LED.

Lysdioden er koblet til PB0. Motstanden ved siden av brikken har 10k ohm.

Motstanden ved siden av LED -en har 470 Ohm.

Nå kan du koble USBasp med Atmega som vist på bildet.

Men før du slår på strømmen, la oss skrive programmet.

Trinn 4: Skriv det første programmet

Skriv det første programmet
Skriv det første programmet

Lag en ny fil i Bascom og skriv inn følgende tekst.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = output gjør portb.0 = 1 vent 1 portb.0 = 0 vent 1 loop

deretter kompilerer du den ved å trykke F7 på tastaturet.

Nå kan vi programmere brikken ved å trykke F4. Programmeringsvinduet vises. Nå er det på tide å slå på strømmen fra brødbrettet. Du bør bruke noe mellom 6 og 12 volt.

Gå nå til chip -> autoprogram. Hvis programmeringsvinduet lukkes automatisk, var programmeringen vellykket.

Lysdioden skal blinke med ett sekund.

Se nå nærmere på programmet for å forstå syntaksen.

$ regfile "m8def.dat"

$ krystall = 1000000

med $ regfile forteller vi kompilatoren hvilken type chip du bruker, navnet på Arduino -brikken ville være "m328pdef.dat"

med $ crystal forteller vi ham CPU -hastigheten om 1MHz.

config portb.0 = Utgang

det betyr at PB0 skal fungere som utgang.

Forresten betyr forkortelsen PB0 port B bit 0. Chippen er delt inn i flere porter. Hver port får et brev for tydelig identifikasjon. og hver portpin litt fra 0 til 7. For eksempel kan jeg skrive en komplett byte inn i portutgangsregisteret, som sendes ut via de enkelte portpinnene.

gjøre

Løkke

Dette er hva i Arduino betyr void loop -setningen. Mellom de to kommandoene vil gjenta seg for alltid. (med noen unntak, men senere mer om det)

Portb.0 = 1

vent 1 portb.0 = 0 vent 1

Her knytter vi blinkingen av LED -en.

Portb.0 = 1 forteller brikken å bytte ut PB0 til 5V

vent 1 -kommandoen la brikken vente i ett sekund. Hvis du vil bytte lysdioden raskere må du bytte ventekommando med waitms nå kan du angi en stund nå i millisekunder f.eks. waitms 500. (waitus betyr vent i nanosekunder)

Portb.0 = 0 forteller brikken å bytte utgang PB0 til 0V.

Trinn 5: Legg til en knapp for å bruke innganger

Legg til en knapp for å bruke innganger
Legg til en knapp for å bruke innganger

Nå legger vi til en knapp for å lyse lysdioden hvis knappen trykkes.

Sett inn knappen som vist på bildet.

skriv inn følgende program.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 gjør hvis pind.7 = 0 så portb.0 = 1 annen portb.0 = 0 loop

Hvis du laster opp programmet til brikken, lyser lysdioden bare når du trykker på knappen. Men hvorfor?

programmet starter på samme måte som den siste til

config portd.7 = input. Det betyr at pinnen PD7 som koblet til knappen fungerer som en inngang.

Portd.7 = 1 bytter ikke pinnen til høy, men den aktiverer den interne opptrekksmotstanden til Atmega.

If statemend ser litt rar ut hvis du er vant til arduino.

Hvis du bruker if -setningen, må du bruke "deretter" -setningen. I denne prøven brukes if -setningen for enkeltkommandooperasjoner. Hvis du vil bruke flere kommandoer, må du skrive det slik.

hvis pind.7 = 0 da

portb.0 = 1 noen kode noen kode noen kode andre portb.0 = 0 ende hvis

For denne bruken av if -setningen må du bruke "end if" -setningen til slutt.

det som fremdeles er viktig. Kanskje du allerede har sett det. inngangene blir ikke spurt med portx.x, men med pinx.x. Du kan enkelt huske det. Utganger har "o" (port) i ordet og innganger har "i" (pin).

Nå er det din tur til å leke litt.

Min neste instruerbare kommer snart (standarduttalelser som while, select case, for og variabler.)

Hvis du liker min instruerbare og vil ha mer, fortell meg det i kommentarene.

Anbefalt: