Indholdsfortegnelse:

Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen af mikrokontroller LED -blinkende program .: 5 trin
Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen af mikrokontroller LED -blinkende program .: 5 trin

Video: Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen af mikrokontroller LED -blinkende program .: 5 trin

Video: Konfiguration af AVR -mikrokontroller -sikringsbits. Oprettelse og upload i Flash -hukommelsen af mikrokontroller LED -blinkende program .: 5 trin
Video: LDmicro 8: Intruder Alarm with Timers (Microcontroller PLC Ladder Programming with LDmicro) 2024, November
Anonim
Image
Image

I dette tilfælde vil vi oprette et enkelt program i C -kode og brænde det ind i hukommelsen til mikrokontrolleren. Vi vil skrive vores eget program og kompilere hex -filen ved hjælp af Atmel Studio som den integrerede udviklingsplatform. Vi konfigurerer sikringsbits og uploader hex -filer til hukommelsen til AVR ATMega328P mikrokontroller ved hjælp af vores egen programmør og software AVRDUDE.

AVRDUDE - er et program til at downloade og uploade hukommelseskort på Atmels AVR -mikrokontrollere. Det kan programmere Flash og EEPROM, og hvor det understøttes af den serielle programmeringsprotokol, kan det programmere sikring og låse bits.

Trin 1: Skriveprogram og kompilér hex -filen ved hjælp af Atmel Studio

Skriveprogram og kompilér hex -filen ved hjælp af Atmel Studio
Skriveprogram og kompilér hex -filen ved hjælp af Atmel Studio
Skriveprogram og kompilér hex -filen ved hjælp af Atmel Studio
Skriveprogram og kompilér hex -filen ved hjælp af Atmel Studio

Hvis du ikke har Atmel Studio, skal du downloade og installere det:

Dette projekt bruger C, så vælg indstillingen GCC C Executable Project fra skabelonlisten for at generere et eksekverbart projekt med bare ben.

Dernæst er det nødvendigt at angive, hvilken enhed projektet vil blive udviklet til. Dette projekt vil blive udviklet til AVR ATMega328P mikrokontroller.

Indtast programkoden i området Main Source Editor i Atmel Studio. Hovedkildeditor - Dette vindue er hovededitor for kildefilerne i det aktuelle projekt. Editoren har stavekontrol og automatiske komplette funktioner.

1. Vi skal fortælle kompilatoren med hvilken hastighed vores chip kører til, at den kan beregne forsinkelser korrekt.

#ifndef F_CPU

#define F_CPU 16000000UL // fortæller controller krystalfrekvens (16 MHz AVR ATMega328P) #endif

2. Vi inkluderer præamblen, som er, hvor vi sætter vores inklusive oplysninger fra andre filer, som definerer globale variabler og funktioner.

#include // header for at aktivere dataflowkontrol over pins. Definerer stifter, porte osv.

#include // header for at aktivere forsinkelsesfunktion i programmet

3. Efter præamblen kommer hovedfunktionen ().

int main (void) {

Hovedfunktionen () er unik og adskilt fra alle andre funktioner. Hvert C -program skal have nøjagtigt en hovedfunktion (). Main () er, hvor AVR begynder at eksekvere din kode, når strømmen først går på, så det er programmets indgangspunkt.

4. Indstil pin 0 på PORTB som output.

DDRB = 0b00000001; // Indstil PORTB1 som output

Vi gør dette ved at skrive et binært tal til dataretningsregistret B. Dataretningsregistret B giver os mulighed for at lave bitene af register B -input eller output. Hvis du skriver en 1, får de output, mens en 0 giver dem input. Da vi vedhæfter en LED til at fungere som output, skriver vi et binært tal, hvilket gør pin 0 til PORT B som output.

5. Sløjfe.

mens (1) {

Denne erklæring er en sløjfe, der ofte omtales som hovedsløjfen eller hændelsesløkken. Denne kode er altid sand; derfor udføres den igen og igen i en uendelig loop. Det stopper aldrig. Derfor vil LED'en blinke uendeligt, medmindre strømmen afbrydes fra mikrokontrolleren eller koden slettes fra programhukommelsen.

6. Tænd lysdioden, der er tilsluttet port PB0

PORTB = 0b00000001; // tænder LED tilsluttet port PB0

Denne linje giver 1 til PB0 for PortB. PORTB er et hardware-register på AVR-chippen, der indeholder 8 ben, PB7-PB0, der går fra venstre mod højre. At sætte en 1 for enden giver en 1 til PB0; dette sætter PB0 højt, hvilket tænder det. Derfor vil LED'en, der er fastgjort til pin PB0, tænde og lyse.

7. Forsinkelse

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

Denne erklæring skaber en forsinkelse på 1 sekund, så LED'en tænder og forbliver tændt i præcis 1 sekund.

8. Sluk for alle B -ben, inklusive PB0

PORTB = 0b00000000; // Slukker alle B -ben, inklusive PB0

Denne linje slukker alle 8 Port B -ben, så selv PB0 er slukket, så LED'en slukker.

9. Endnu en forsinkelse

_forsinkelse_ms (1000); // skaber endnu en sekunds forsinkelse

Den slukker nøjagtigt i 1 sekund, inden loop starter igen forfra og støder på linjen, som tænder den igen, og gentager processen hele vejen igennem. Dette sker uendeligt, så LED'en konstant blinker til og fra.

10. Returopgørelse

}

retur (0); // denne linje er faktisk aldrig nået}

Den sidste linje i vores kode er en retur (0) erklæring. Selvom denne kode aldrig udføres, fordi der er en uendelig sløjfe, som aldrig ender, for vores programmer, der kører på stationære computere, er det vigtigt for operativsystemet at vide, om de kørte korrekt eller ej. Af den grund ønsker GCC, vores kompilator, at alle main () slutter med en returkode. Returkoder er unødvendige for AVR -kode, der kører fritstående for ethvert understøttende operativsystem; ikke desto mindre vil kompilatoren give en advarsel, hvis du ikke afslutter main med return ().

Det sidste trin er at bygge projektet. Det betyder at kompilere og endelig forbinde alle objektfiler for at generere den eksekverbare fil (.hex) -fil. Denne hex -fil genereres inde i mappen Debug, som er inde i Project -mappen. Denne hex -fil er klar til at blive indlæst i mikrokontrollerchippen.

Trin 2: Ændring af standardkonfigurationen af mikrokontrollerens sikringsbits

Ændring af standardkonfiguration af mikrokontrollerens sikringsbits
Ændring af standardkonfiguration af mikrokontrollerens sikringsbits
Ændring af standardkonfiguration af mikrokontrollerens sikringsbits
Ændring af standardkonfiguration af mikrokontrollerens sikringsbits
Ændring af standardkonfiguration af mikrokontrollerens sikringsbits
Ændring af standardkonfiguration af mikrokontrollerens sikringsbits

Det er vigtigt at huske, at nogle af sikringsbitene kan bruges til at låse visse aspekter af chippen og potentielt kan tegne den (gøre den ubrugelig)

Der er i alt 19 sikringsbits, der bruges i ATmega328P, og de er opdelt i tre forskellige sikringsbytes. Tre af sikringsbitene er indeholdt i "Extended Fuse Byte", otte er indeholdt i "Fuse High Byte", og otte flere er indeholdt i "Fuse Low Byte". Der er også en fjerde byte, der bruges til at programmere låsebitene.

Hver byte er 8 bit, og hver bit er en separat indstilling eller et flag. Når vi taler om indstilling, ikke indstilling, programmerede, ikke programmerede sikringer, bruger vi faktisk binær. 1 betyder ikke indstillet, ikke programmeret og et nul betyder, programmeret. Når du programmerer sikringerne, kan du bruge binær notation eller mere almindeligt hexadecimal notation.

ATmega 328P chips har en indbygget RC oscillator, der har en 8 MHz frekvens. Nye chips sendes med dette sæt som urkilde, og CKDIV8 -sikringen er aktiv, hvilket resulterer i et 1 MHz systemur. Opstartstiden er sat til maksimum og time-out-periode aktiveret.

Nye ATMega 328P -chips har generelt følgende sikringsindstillinger:

Lav sikring = 0x62 (0b01100010)

Høj sikring = 0xD9 (0b11011001)

Udvidet sikring = 0xFF (0b11111111)

Vi vil bruge ATmega 328 -chip med en ekstern 16MHz krystal. Derfor er vi nødt til at programmere bits af "Fuse Low Byte" i overensstemmelse hermed.

1. Bit 3-0 styrer oscillatorvalget, og standardindstillingen på 0010 er at bruge den kalibrerede interne RC-oscillator, som vi ikke ønsker. Vi vil have laveffekt-krystaloscillatoroperationen fra 8,0 til 16,0 MHz, så bit 3-1 (CKSEL [3: 1]) bør sættes til 111.

2. Bit 5 og 4 styrer opstartstiden, og standardindstillingen på 10 er for en opstartforsinkelse på seks urcyklusser fra nedlukning og strømbesparelse plus en ekstra opstartforsinkelse på 14 urcyklusser plus 65 millisekunder fra nulstilling.

For at være på den sikre side for en krystaloscillator med lav effekt, ønsker vi den maksimale forsinkelse på 16.000 urcyklusser fra nedlukning og strømbesparelse, så SUT [1] bør sættes til 1 plus en ekstra opstartforsinkelse på 14 urcykler plus 65 millisekunder fra nulstilling, så SUT [0] bør sættes til 1. Desuden skal CKSEL [0] sættes til 1.

3. Bit 6 styrer urets output til PORTB0, hvilket vi er ligeglade med. Så bit 6 kan efterlades til 1.

4. Bit 7 styrer divideret med 8-operationen, og standardindstillingen på 0 har funktionen aktiveret, hvilket vi ikke ønsker. Så bit 7 skal ændres fra 0 til 1.

Derfor skal den nye Fuse Low Byte være 11111111, som i hexadecimal notation er 0xFF

Til at programmere bits af "Fuse Low Byte" kan vi bruge vores programmør (https://www.instructables.com/id/ISP-Programmer-fo…) og software AVRDUDE. AVRDUDE er et kommandolinjeværktøj, der bruges til at downloade fra og uploade til Atmel-mikrokontrollere.

Download AVRDUDE:

Først skal vi tilføje beskrive vores programmør til konfigurationsfilen til AVRDUDE. I Windows er konfigurationsfilen normalt på samme sted som den eksekverbare fil for AVRDUDE.

Indsæt teksten i konfigurationsfilen avrdude.conf:

# ISPProgv1

programmør id = "ISPProgv1"; desc = "seriel port banging, reset = dtr sck = rts mosi = txd miso = cts"; type = "serb"; forbindelse_type = seriel; reset = 4; sck = 7; mosi = 3; miso = 8;;

Inden vi starter AVRDUDE, skal vi slutte mikrokontrolleren til programmereren i henhold til skemaet

Åbn DOS -promptvinduet.

1. For at se listen over programmerere, som avrdude understøttes, skal du skrive kommando avrdude -c c. Hvis alt er godt, skal listen have programmerings -id "ISPProgv1"

2. For at se listen over Atmel -enheder, som avrdude understøttes, skal du skrive kommando avrdude -c ISPProgv1. Listen skal have enhed m328p til Atmel ATMega 328P.

Skriv derefter avrdude -c ISPProgv1 –p m328p, kommandoen fortæller avrdude, hvilken programmør der bruges, og hvilken Atmel mikrokontroller er tilsluttet. Det præsenterer ATmega328P -signaturen i hexadecimal notation: 0x1e950f. Det præsenterer sikringsbitprogrammeringen i øjeblikket i ATmega328P også i hexadecimal notation; i dette tilfælde er sikringsbytes programmeret pr. fabriksindstilling.

Skriv derefter avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Det er en kommando for at fortælle avrdude, hvilken programmør der bruges, og hvilken Atmel mikrokontroller der er tilsluttet, og for at ændre Fuse Low Byte til 0xFF.

Nu bør urets signal komme fra laveffekt krystaloscillator.

Trin 3: Brænding af programmet i hukommelsen til ATMega328P mikrokontroller

Brænder programmet ind i hukommelsen til ATMega328P mikrokontroller
Brænder programmet ind i hukommelsen til ATMega328P mikrokontroller
Brænder programmet ind i hukommelsen til ATMega328P mikrokontroller
Brænder programmet ind i hukommelsen til ATMega328P mikrokontroller

Kopier først den hex -fil af programmet, vi lavede i begyndelsen af instruktionen til AVRDUDE -biblioteket.

Indtast derefter kommandoen avrdude –c ISPProgv1 –p m328p –u –U flash i DOS -promptvinduet: w: [navn på din hex -fil]

Kommandoen skriver hex -fil til mikrokontrollerens hukommelse. Nu fungerer mikrokontrolleren i overensstemmelse med instruktionerne i vores program. Lad os tjekke det ud!

Trin 4: Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program

Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program
Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program
Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program
Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program
Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program
Kontroller, at mikrokontroller fungerer i overensstemmelse med instruktionerne i vores program

Tilslut komponenter i overensstemmelse med skematisk diagram over AVR -blinkende LED -kredsløb

For det første har vi brug for strøm, som alle AVR -kredsløb gør. Cirka 5 volt strøm er tilstrækkelig til drift af AVR -chippen. Du kan få dette enten fra batterier eller en DC -strømforsyning. Vi tilslutter +5V strøm til pin 7 og slutter pin 8 til jorden på brødbrættet. Mellem begge stifter placerer vi en 0,1μF keramisk kondensator for at udjævne strømforsyningen, så AVR -chippen får en jævn strømledning.

10KΩ -modstanden bruges til at tilvejebringe strøm til nulstilling (POR) til enheden. Når strømmen er tændt, vil spændingen over kondensatoren være nul, så enheden nulstilles (da nulstilling er aktiv lav), derefter oplades kondensatoren til VCC, og nulstillingen deaktiveres.

Vi forbinder anoden på vores LED til AVR pin PB0. Dette er pin 14 i ATMega328P. Da det er en LED, vil vi begrænse strømmen til LED'en, så den ikke brænder ud. Derfor placerer vi en 330Ω modstand i serie med LED'en. Katoden på LED'en bliver forbundet til jorden.

16 MHz krystal bruges til at levere ur til Atmega328 mikrokontroller og 22pF kondensatorer bruges til at stabilisere krystallens drift.

Disse er alle de forbindelser, der er nødvendige for at tænde LED'en. Strømforsyning.

Okay. LED blinker med et sekund forsinkelse. Mikrocontrollerens arbejde svarer til vores opgaver

Trin 5: Konklusion

Det var ganske vist en lang proces for bare at blinke med en LED, men sandheden er, at du med succes har ryddet store forhindringer: Oprettelse af en hardwareplatform til programmering af en AVR -mikrokontroller, Brug af Atmel Studio som den integrerede udviklingsplatform, brug af AVRDUDE som software til konfiguration og programmering af en AVR -mikrokontroller

Hvis du vil holde dig opdateret om mine basismikrokontrollerprojekter, kan du abonnere på min YouTube! At se og dele mine videoer er en måde at understøtte det, jeg laver

Abonner på YouTube FOG -kanal

Anbefalede: