Innholdsfortegnelse:

AVR mikrokontroller sikringsbits konfigurasjon. Opprette og laste opp i flashminnet til mikrokontrolleren LED -blinkende program .: 5 trinn
AVR mikrokontroller sikringsbits konfigurasjon. Opprette og laste opp i flashminnet til mikrokontrolleren LED -blinkende program .: 5 trinn

Video: AVR mikrokontroller sikringsbits konfigurasjon. Opprette og laste opp i flashminnet til mikrokontrolleren LED -blinkende program .: 5 trinn

Video: AVR mikrokontroller sikringsbits konfigurasjon. Opprette og laste opp i flashminnet til mikrokontrolleren LED -blinkende program .: 5 trinn
Video: Avr studiо, proteus, программатор | Микроконтроллеры с нуля #2 2024, November
Anonim
Image
Image

I dette tilfellet vil vi lage et enkelt program i C -kode og brenne det inn i minnet til mikrokontrolleren. Vi vil skrive vårt eget program og kompilere hex -filen, ved hjelp av Atmel Studio som den integrerte utviklingsplattformen. Vi vil konfigurere sikringsbiter og laste opp hex -filer til minnet til AVR ATMega328P mikrokontroller, ved hjelp av vår egen programmerer og programvare AVRDUDE.

AVRDUDE - er et program for nedlasting og opplasting av minnene på brikken til Atmels AVR -mikrokontrollere. Den kan programmere Flash og EEPROM, og der den støttes av den serielle programmeringsprotokollen, kan den programmere sikringer og låse biter.

Trinn 1: Skriveprogram og kompiler Hex -filen ved hjelp av Atmel Studio

Skrive program og kompilere hex -filen ved hjelp av Atmel Studio
Skrive program og kompilere hex -filen ved hjelp av Atmel Studio
Skrive program og kompilere hex -filen ved hjelp av Atmel Studio
Skrive program og kompilere hex -filen ved hjelp av Atmel Studio

Hvis du ikke har Atmel Studio, bør du laste ned og installere det:

Dette prosjektet vil bruke C, så velg alternativet GCC C Executable Project fra mallisten for å generere et kjørbart prosjekt med bare bein.

Deretter er det nødvendig å spesifisere hvilken enhet prosjektet skal utvikles for. Dette prosjektet vil bli utviklet for AVR ATMega328P mikrokontroller.

Skriv inn programkoden i området Main Source Editor i Atmel Studio. Hovedkildeditoren - Dette vinduet er hovedredaktøren for kildefilene i det nåværende prosjektet. Redaktøren har stavekontroll og funksjoner for automatisk fullføring.

1. Vi må fortelle kompilatoren med hvilken hastighet brikken vår kjører til at den kan beregne forsinkelser riktig.

#ifndef F_CPU

#define F_CPU 16000000UL // forteller kontrolleren krystallfrekvens (16 MHz AVR ATMega328P) #endif

2. Vi inkluderer innledningen, som er hvor vi setter vår inkludere informasjon fra andre filer, som definerer globale variabler og funksjoner.

#include // header for å aktivere dataflytkontroll over pins. Definerer pinner, porter, etc.

#include // header for å aktivere forsinkelsesfunksjon i programmet

3. Etter innledningen kommer hovedfunksjonen ().

int main (void) {

Hovedfunksjonen () er unik og skilt fra alle andre funksjoner. Hvert C -program må ha nøyaktig én hovedfunksjon (). Main () er der AVR begynner å utføre koden din når strømmen først går på, så det er inngangspunktet for programmet.

4. Sett pin 0 på PORTB som utgang.

DDRB = 0b00000001; // Sett PORTB1 som utgang

Vi gjør dette ved å skrive et binært tall til Data Direction Register B. Data Direction Register B lar oss lage bitene av register B input eller output. Hvis du skriver en 1, får du dem til å skrive ut, mens en 0 gir dem input. Siden vi kobler til en LED for å fungere som utgang, skriver vi et binært tall, noe som gjør pin 0 til PORT B som utgang.

5. Sløyfe.

mens (1) {

Denne uttalelsen er en løkke, ofte referert til som hovedsløyfen eller hendelsesløyfen. Denne koden er alltid sann; derfor utføres den om og om igjen i en uendelig sløyfe. Det opphører aldri. Derfor vil LED blinke i det uendelige, med mindre strømmen slås av fra mikrokontrolleren eller koden slettes fra programminnet.

6. Slå på LED -en som er koblet til port PB0

PORTB = 0b00000001; // slår på LED koblet til port PB0

Denne linjen gir 1 til PB0 for PortB. PORTB er et maskinvareregister på AVR-brikken som inneholder 8 pinner, PB7-PB0, som går fra venstre til høyre. Å sette en 1 på slutten gir en 1 til PB0; dette setter PB0 høyt som slår den på. Derfor vil LED -en festet til pin PB0 slå seg på og lyse.

7. Forsinkelse

_forsinkelse_ms (1000); // oppretter en forsinkelse på 1 sekund

Denne uttalelsen skaper en forsinkelse på 1 sekund, slik at LED-en slås på og forblir på i nøyaktig 1 sekund.

8. Slå av alle B -pinner, inkludert PB0

PORTB = 0b00000000; // Slår av alle B -pinner, inkludert PB0

Denne linjen slår av alle 8 Port B -pinnene, slik at selv PB0 er av, så LED -en slås av.

9. Nok en forsinkelse

_forsinkelse_ms (1000); // oppretter en forsinkelse på 1 sekund

Den slås av nøyaktig i 1 sekund, før sløyfen starter på nytt og støter på linjen, som slår den på igjen, og gjentar prosessen hele veien. Dette skjer uendelig, slik at LED -en konstant blinker av og på.

10. Returoppgave

}

retur (0); // denne linjen er faktisk aldri nådd}

Den siste linjen i koden vår er en retur (0) setning. Selv om denne koden aldri blir utført, fordi det er en uendelig sløyfe som aldri slutter, for programmene våre som kjører på stasjonære datamaskiner, er det viktig for operativsystemet å vite om de kjørte riktig eller ikke. Av den grunn ønsker GCC, vår kompilator, at alle main () skal slutte med en returkode. Returkoder er unødvendige for AVR -kode, som kjører frittstående av ethvert støttende operativsystem; Likevel vil kompilatoren gi en advarsel hvis du ikke avslutter hovedmenyen med retur ().

Det siste trinnet er å bygge prosjektet. Det betyr å kompilere og til slutt koble alle objektfilene for å generere den kjørbare filen (.hex) -filen. Denne hex -filen genereres inne i mappen Debug som er inne i Project -mappen. Denne hex -filen er klar til å lastes inn i mikrokontrollerbrikken.

Trinn 2: Endre standardkonfigurasjonen av sikringsbitene til mikrokontrolleren

Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren
Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren
Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren
Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren
Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren
Endre standardkonfigurasjonen for sikringsbitene til mikrokontrolleren

Det er viktig å huske at noen av sikringsbitene kan brukes til å låse visse aspekter av brikken og potensielt kan mure den (gjøre den ubrukelig)

Det er totalt 19 sikringsbiter som brukes i ATmega328P, og de er delt inn i tre forskjellige sikringsbyte. Tre av sikringsbitene er inneholdt i "Extended Fuse Byte", åtte er inneholdt i "Fuse High Byte", og åtte flere er inneholdt i "Fuse Low Byte". Det er også en fjerde byte som brukes til å programmere låsebitene.

Hver byte er 8 bits og hver bit er en egen innstilling eller et flagg. Når vi snakker om innstilling, ikke innstilling, programmerte, ikke programmerte sikringer, bruker vi faktisk binær. 1 betyr ikke satt, ikke programmert og null betyr sett, programmert. Når du programmerer sikringene, kan du bruke binær notasjon eller oftere heksadesimal notasjon.

ATmega 328P -chips har en innebygd RC -oscillator som har en 8 MHz frekvens. Nye sjetonger sendes med dette settet som klokkekilde og CKDIV8 -sikringen er aktiv, noe som resulterer i en 1 MHz systemklokke. Oppstartstiden er satt til maksimum og tidsavbrudd er aktivert.

Nye ATMega 328P -brikker har vanligvis følgende sikringsinnstillinger:

Lav sikring = 0x62 (0b01100010)

Høy sikring = 0xD9 (0b11011001)

Utvidet sikring = 0xFF (0b11111111)

Vi bruker ATmega 328 -brikken med en ekstern 16MHz krystall. Derfor må vi programmere biter av "Fuse Low Byte" tilsvarende.

1. Bit 3-0 styrer oscillatorvalget, og standardinnstillingen på 0010 er å bruke den kalibrerte interne RC-oscillatoren, som vi ikke ønsker. Vi vil ha lav effekt krystalloscillator operasjon fra 8,0 til 16,0 MHz, så bit 3-1 (CKSEL [3: 1]) bør settes til 111.

2. Bit 5 og 4 styrer oppstartstiden, og standardinnstillingen på 10 er for en oppstartforsinkelse på seks klokkesykluser fra ned- og strømsparing, pluss en ekstra oppstartforsinkelse på 14 klokkesykluser pluss 65 millisekunder fra tilbakestilling.

For å være på den sikre siden for en krystalloscillator med lav effekt, vil vi ha maksimal forsinkelse på 16 000 klokkesykluser fra ned- og strømsparing, så SUT [1] bør settes til 1, pluss en ekstra oppstartforsinkelse på 14 klokkesykluser pluss 65 millisekunder fra tilbakestilling, så SUT [0] bør settes til 1. I tillegg bør CKSEL [0] settes til 1.

3. Bit 6 styrer klokkeutgangen til PORTB0, noe vi ikke bryr oss om. Så bit 6 kan settes til 1.

4. Bit 7 styrer operasjonen divider-med-8, og standardinnstillingen på 0 har funksjonen aktivert, noe vi ikke ønsker. Så bit 7 må endres fra 0 til 1.

Derfor bør den nye Fuse Low Byte være 11111111 som i heksadesimal notasjon er 0xFF

For å programmere biter av "Fuse Low Byte" kan vi bruke programmereren vår (https://www.instructables.com/id/ISP-Programmer-fo…) og programvaren AVRDUDE. AVRDUDE er et kommandolinjeverktøy som brukes til å laste ned fra og laste opp til Atmel mikrokontrollere.

Last ned AVRDUDE:

Først må vi legge til beskriv vår programmerer til konfigurasjonsfilen til AVRDUDE. På Windows er konfigurasjonsfilen vanligvis på samme sted som den kjørbare filen til AVRDUDE.

Lim inn teksten i konfigurasjonsfilen avrdude.conf:

# ISPProgv1

programmerer id = "ISPProgv1"; desc = "seriell port banker, tilbakestiller = dtr sck = rts mosi = txd miso = cts"; type = "serb"; tilkoblingstype = seriell; reset = 4; sck = 7; mosi = 3; miso = 8;;

Før vi starter AVRDUDE, må vi koble mikrokontrolleren til programmereren, i henhold til opplegget

Åpne DOS -promptvinduet.

1. For å se listen over programmerere som avrdude støttes, skriv kommando avrdude -c c. Hvis alt er bra, bør listen ha programmerer -ID "ISPProgv1"

2. For å se listen over Atmel -enheter som avrdude støttes, skriv kommando avrdude -c ISPProgv1. Listen skal ha enhet m328p for Atmel ATMega 328P.

Skriv deretter avrdude -c ISPProgv1 –p m328p, kommandoen forteller avrdude hvilken programmerer som brukes og hvilken Atmel mikrokontroller er festet. Den presenterer ATmega328P -signaturen i heksadesimal notasjon: 0x1e950f. Den presenterer sikringsbitprogrammeringen som for tiden er i ATmega328P også i heksadesimal notasjon; i dette tilfellet er sikringsbyte programmert per fabrikkstandard.

Skriv deretter avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Det er en kommando for å fortelle avrdude hvilken programmerer som brukes og hvilken Atmel -mikrokontroller er tilkoblet og for å endre Fuse Low Byte til 0xFF.

Nå skal klokkesignalet komme fra lav effekt krystalloscillator.

Trinn 3: Brenn programmet inn i minnet til ATMega328P mikrokontroller

Brenner programmet inn i minnet til ATMega328P mikrokontroller
Brenner programmet inn i minnet til ATMega328P mikrokontroller
Brenner programmet inn i minnet til ATMega328P mikrokontroller
Brenner programmet inn i minnet til ATMega328P mikrokontroller

Kopier først hex -filen til programmet vi laget i begynnelsen av instruksjonen til AVRDUDE -katalogen.

Skriv deretter inn DOS -ledetekstvinduet kommandoen avrdude –c ISPProgv1 –p m328p –u –U flash: w: [navn på hex -filen din]

Kommandoen skriver hex -fil til mikrokontrollerens minne. Nå fungerer mikrokontrolleren i henhold til instruksjonene i programmet vårt. La oss sjekke det ut!

Trinn 4: Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt

Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt
Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt
Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt
Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt
Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt
Sjekk at mikrokontroller fungerer i samsvar med instruksjonene i programmet vårt

Koble til komponenter i henhold til skjematisk diagram over AVR -blinkende LED -krets

Først trenger vi strøm, som alle AVR -kretser gjør. Omtrent 5 volt strøm er tilstrekkelig for drift av AVR -brikken. Du kan få dette enten fra batterier eller en likestrømforsyning. Vi kobler +5V strøm til pin 7 og kobler pin 8 til bakken på brødbrettet. Mellom begge pinnene plasserer vi en 0,1 μF keramisk kondensator for å jevne ut strømmen til strømforsyningen slik at AVR -brikken får en jevn strømledning.

10KΩ motstanden brukes til å gi strøm på tilbakestilling (POR) til enheten. Når strømmen slås PÅ, vil spenningen over kondensatoren være null, slik at enheten tilbakestilles (siden tilbakestillingen er aktiv lav), deretter lades kondensatoren til VCC og tilbakestillingen deaktiveres.

Vi kobler anoden til LED -en til AVR -pin PB0. Dette er pin 14 i ATMega328P. Siden det er en LED, ønsker vi å begrense strømmen til LED -en slik at den ikke brenner ut. Det er derfor vi plasserer en 330Ω motstand i serie med LED. Katoden til LED -en blir koblet til bakken.

16 MHz krystall brukes til å skaffe klokke til Atmega328 mikrokontroller og 22pF kondensatorer brukes til å stabilisere driften av krystall.

Dette er alle tilkoblingene som er nødvendige for å lyse opp LED -en. Strømforsyning.

Ok. LED blinker med ett sekund forsinkelse. Mikrokontrollerens arbeid tilsvarer våre oppgaver

Trinn 5: Konklusjon

Det var riktignok en lang prosess for bare å blinke med en LED, men sannheten er at du har lykkes med å fjerne store hindringer: å lage en maskinvareplattform for programmering av en AVR -mikrokontroller, bruke Atmel Studio som den integrerte utviklingsplattformen, bruke AVRDUDE som programvare for konfigurere og programmere en AVR -mikrokontroller

Hvis du vil holde deg oppdatert på mine grunnleggende mikrokontrollerprosjekter, kan du abonnere på YouTube min! Å se og dele videoene mine er en måte å støtte det jeg gjør

Abonner på YouTube FOG -kanal

Anbefalt: