Innehållsförteckning:

AVR Microcontroller Säkringsbitskonfiguration. Skapa och ladda upp i flashminnet för mikrokontroller LED -blinkande program: 5 steg
AVR Microcontroller Säkringsbitskonfiguration. Skapa och ladda upp i flashminnet för mikrokontroller LED -blinkande program: 5 steg

Video: AVR Microcontroller Säkringsbitskonfiguration. Skapa och ladda upp i flashminnet för mikrokontroller LED -blinkande program: 5 steg

Video: AVR Microcontroller Säkringsbitskonfiguration. Skapa och ladda upp i flashminnet för mikrokontroller LED -blinkande program: 5 steg
Video: Введение в AVR микроконтроллеры 2024, Juni
Anonim
Image
Image

I det här fallet kommer vi att skapa ett enkelt program i C -kod och bränna det i mikrokontrollerns minne. Vi kommer att skriva vårt eget program och sammanställa hex -filen med Atmel Studio som integrerad utvecklingsplattform. Vi kommer att konfigurera säkringsbitar och ladda upp hexfil till minnet på AVR ATMega328P mikrokontroller, med hjälp av vår egen programmerare och programvara AVRDUDE.

AVRDUDE - är ett program för nedladdning och uppladdning av chipminnen från Atmels AVR -mikrokontroller. Den kan programmera Flash och EEPROM, och där den stöds av det seriella programmeringsprotokollet kan den programmera säkringar och låsa bitar.

Steg 1: Skrivprogram och kompilera Hex -filen med hjälp av Atmel Studio

Skrivprogram och kompilera Hex -filen med hjälp av Atmel Studio
Skrivprogram och kompilera Hex -filen med hjälp av Atmel Studio
Skrivprogram och kompilera Hex -filen med hjälp av Atmel Studio
Skrivprogram och kompilera Hex -filen med hjälp av Atmel Studio

Om du inte har Atmel Studio bör du ladda ner och installera det:

Detta projekt kommer att använda C, så välj alternativet GCC C Executable Project från mallistan för att skapa ett körbart projekt med bara ben.

Därefter är det nödvändigt att ange vilken enhet projektet ska utvecklas för. Detta projekt kommer att utvecklas för AVR ATMega328P mikrokontroller.

Skriv programkoden i huvudkällredigeringsområdet i Atmel Studio. Huvudkällredigeraren - Det här fönstret är huvudredigeraren för källfilerna i det aktuella projektet. Redaktören har stavningskontroll och automatiska kompletteringsfunktioner.

1. Vi måste berätta för kompilatorn med vilken hastighet vårt chip går till att det kan beräkna förseningar korrekt.

#ifndef F_CPU

#define F_CPU 16000000UL // berättar styrenhetens kristallfrekvens (16 MHz AVR ATMega328P) #endif

2. Vi inkluderar ingressen, det är där vi lägger vår inkludera information från andra filer, som definierar globala variabler och funktioner.

#include // header för att möjliggöra dataflödeskontroll över stift. Definierar stift, portar etc.

#include // header för att aktivera fördröjningsfunktion i programmet

3. Efter ingressen kommer huvudfunktionen ().

int main (void) {

Huvudfunktionen () är unik och skiljer sig från alla andra funktioner. Varje C -program måste ha exakt en huvudfunktion (). Main () är där AVR: n börjar köra din kod när strömmen först går på, så det är programmets ingångspunkt.

4. Sätt stift 0 på PORTB som utgång.

DDRB = 0b00000001; // Ställ in PORTB1 som utgång

Vi gör detta genom att skriva ett binärt tal till datariktningsregistret B. Datariktningsregistret B låter oss göra bitarna av registret B in- eller utdata. Om du skriver en 1 får de utmatning, medan en 0 ger dem inmatning. Eftersom vi ansluter en lysdiod för att fungera som utgång, skriver vi ett binärt tal, vilket gör stiftet 0 på PORT B som utgång.

5. Slinga.

medan (1) {

Detta uttalande är en loop, ofta kallad huvudslingan eller händelsekretsen. Denna kod är alltid sann; därför körs den om och om igen i en oändlig slinga. Det upphör aldrig. Därför kommer lysdioden att blinka i oändlighet, såvida inte strömmen stängs av från mikrokontrollern eller koden raderas från programminnet.

6. Slå på lysdioden som är ansluten till port PB0

PORTB = 0b00000001; // tänder lysdioden som är ansluten till port PB0

Denna rad ger 1 till PB0 för PortB. PORTB är ett hårdvaruregister på AVR-chipet som innehåller 8 stift, PB7-PB0, som går från vänster till höger. Att sätta en 1 i slutet ger en 1 till PB0; detta sätter PB0 högt som slår på det. Därför tänds lysdioden som är ansluten till stift PB0 och tänds.

7. Fördröjning

_fördröjning_ms (1000); // skapar en fördröjning på 1 sekund

Detta uttalande skapar en fördröjning på 1 sekund, så att lysdioden tänds och lyser i exakt 1 sekund.

8. Stäng av alla B -stift, inklusive PB0

PORTB = 0b00000000; // Stänger av alla B -stift, inklusive PB0

Denna linje stänger av alla 8 Port B -stiften, så att även PB0 är avstängd, så att lysdioden släcks.

9. Ytterligare en försening

_fördröjning_ms (1000); // skapar ytterligare en sekund fördröjning

Den stängs av exakt i 1 sekund, innan slingan startas om igen och stöter på linjen, som slår på den igen, och upprepar processen om och om igen. Detta händer oändligt så att lysdioden konstant blinkar på och av.

10. Returförklaring

}

retur (0); // den här raden nås faktiskt aldrig}

Den sista raden i vår kod är ett returseddelande (0). Även om denna kod aldrig körs, eftersom det finns en oändlig slinga som aldrig tar slut, för våra program som körs på stationära datorer är det viktigt för operativsystemet att veta om de körde korrekt eller inte. Av den anledningen vill GCC, vår kompilator, att varje huvud () ska sluta med en returkod. Returkoder är onödiga för AVR -kod, som kör fristående alla operativsystem som stödjer; Ändå kommer kompilatorn att varna om du inte avslutar huvudet med retur ().

Det sista steget är att bygga projektet. Det betyder att man sammanställer och slutligen länkar alla objektfiler för att generera den körbara filen (.hex). Denna hex -fil genereras inuti mappen Debug som finns i Project -mappen. Denna hex -fil är redo att laddas in i mikrokontrollerchipet.

Steg 2: Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar

Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar
Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar
Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar
Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar
Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar
Ändra standardkonfigurationen för mikrostyrenhetens säkringsbitar

Det är viktigt att komma ihåg att några av säkringsbitarna kan användas för att låsa vissa aspekter av chipet och eventuellt kan tegla det (göra det oanvändbart)

Det finns totalt 19 säkringsbitar som används i ATmega328P, och de är uppdelade i tre olika säkringsbyte. Tre av säkringsbitarna finns i "Extended Fuse Byte", åtta finns i "Säkringshög byte" och åtta till finns i "Säkring låg byte". Det finns också en fjärde byte som används för att programmera låsbitarna.

Varje byte är 8 bitar och varje bit är en separat inställning eller flagga. När vi pratar om inställning, inte inställning, programmerade, inte programmerade säkringar använder vi faktiskt binärt. 1 betyder inte inställd, inte programmerad och en noll betyder inställd, programmerad. När du programmerar säkringarna kan du använda binär notation eller vanligare hexadecimal notation.

ATmega 328P -chips har en inbyggd RC -oscillator som har en 8 MHz frekvens. Nya chips levereras med denna uppsättning som klockkälla och CKDIV8 -säkring aktiv, vilket resulterar i en 1 MHz systemklocka. Starttiden är inställd på max och tidsgränsen är aktiverad.

Nya ATMega 328P -chips har i allmänhet följande säkringsinställningar:

Låg säkring = 0x62 (0b01100010)

Hög säkring = 0xD9 (0b11011001)

Förlängd säkring = 0xFF (0b11111111)

Vi kommer att använda ATmega 328 -chip med en extern 16MHz kristall. Därför måste vi programmera bitar av "Fuse Low Byte" i enlighet därmed.

1. Bit 3-0 styr oscillatorns val, och standardinställningen 0010 är att använda den kalibrerade interna RC-oscillatorn, som vi inte vill ha. Vi vill ha lågeffektkristalloscillatoroperationen från 8,0 till 16,0 MHz, så bitarna 3-1 (CKSEL [3: 1]) bör ställas in på 111.

2. Bit 5 och 4 styr starttiden, och standardinställningen 10 är för en startfördröjning på sex klockcykler från strömavstängning och strömbesparing, plus en ytterligare startfördröjning på 14 klockcykler plus 65 millisekunder från återställning.

För att vara på den säkra sidan för en lågeffektkristalloscillator vill vi ha en maximal fördröjning på 16 000 klockcykler från avstängning och energibesparing, så SUT [1] bör ställas in på 1, plus en ytterligare startfördröjning av 14 klockcykler plus 65 millisekunder från återställning, så SUT [0] bör ställas in på 1. Dessutom bör CKSEL [0] ställas in på 1.

3. Bit 6 styr klockutgången till PORTB0, vilket vi inte bryr oss om. Så bit 6 kan lämnas till 1.

4. Bit 7 styr dividera med 8-funktionen och standardinställningen 0 har funktionen aktiverad, vilket vi inte vill ha. Så bit 7 måste ändras från 0 till 1.

Därför bör den nya Fuse Low Byte vara 11111111 som i hexadecimal notering är 0xFF

För att programmera bitar av "Fuse Low Byte" kan vi använda vår programmerare (https://www.instructables.com/id/ISP-Programmer-fo…) och programvaran AVRDUDE. AVRDUDE är ett kommandoradsverktyg som används för att ladda ner från och ladda upp till Atmel-mikrokontroller.

Ladda ner AVRDUDE:

Först måste vi lägga till beskriv vår programmerare till konfigurationsfilen för AVRDUDE. I Windows är konfigurationsfilen vanligtvis på samma plats som den körbara filen för AVRDUDE.

Klistra in texten i konfigurationsfilen avrdude.conf:

# ISPProgv1

programmerare id = "ISPProgv1"; desc = "seriell port slår, reset = dtr sck = rts mosi = txd miso = cts"; typ = "serb"; anslutningstyp = seriell; återställ = 4; sck = 7; mosi = 3; miso = 8;;

Innan AVRDUDE startas måste vi ansluta mikrokontrollern till programmeraren, enligt schemat

Öppna DOS -promptfönstret.

1. För att visa listan över programmerare som avrdude stöds skriver du kommandot avrdude -c c. Om allt är bra bör listan ha programmerar -id "ISPProgv1"

2. Om du vill visa listan över Atmel -enheter som avrdude stöds skriver du kommandot avrdude -c ISPProgv1. Listan ska ha enhet m328p för Atmel ATMega 328P.

Skriv sedan avrdude -c ISPProgv1 –p m328p, kommandot berättar för avrdude vilken programmerare som används och vilken Atmel -mikrokontroller är ansluten. Den presenterar ATmega328P -signaturen i hexadecimal notation: 0x1e950f. Den presenterar säkringsbitprogrammeringen för närvarande i ATmega328P också i hexadecimal notation; i detta fall är säkringsbyte programmerade per fabriksinställning.

Skriv därefter avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Det är ett kommando för att berätta för avrdude vilken programmerare som används och vilken Atmel -mikrokontroller är ansluten och för att ändra säkringens låga byte till 0xFF.

Nu ska klocksignalen komma från lågeffektkristalloscillator.

Steg 3: Bränna programmet i minnet hos ATMega328P -mikrokontrollern

Att bränna programmet i minnet hos ATMega328P mikrokontroller
Att bränna programmet i minnet hos ATMega328P mikrokontroller
Att bränna programmet i minnet hos ATMega328P mikrokontroller
Att bränna programmet i minnet hos ATMega328P mikrokontroller

Kopiera först hex -filen för programmet vi gjorde i början av instruktionen till AVRDUDE -katalogen.

Skriv sedan in DOS -promptfönstret kommandot avrdude –c ISPProgv1 –p m328p –u –U flash: w: [namn på din hex -fil]

Kommandot skriver hex -fil till mikrokontrollerns minne. Nu fungerar mikrokontrollern i enlighet med instruktionerna i vårt program. Låt oss kolla upp det!

Steg 4: Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program

Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program
Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program
Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program
Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program
Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program
Kontrollera att mikrokontroller fungerar i enlighet med instruktionerna i vårt program

Anslut komponenter enligt schematisk bild av AVR blinkande LED -krets

Först behöver vi ström, som alla AVR -kretsar gör. Cirka 5 volt effekt är tillräcklig för drift av AVR -chipet. Du kan få detta antingen från batterier eller en likström. Vi ansluter +5V ström till stift 7 och ansluter stift 8 till jord på brödbrädet. Mellan båda stiften placerar vi en 0,1 μF keramisk kondensator för att jämna ut strömmen till strömförsörjningen så att AVR -chipet får en smidig kraftledning.

10KΩ -motståndet används för att tillhandahålla Power On Reset (POR) till enheten. När strömmen slås på är spänningen över kondensatorn noll så att enheten återställs (eftersom återställningen är aktiv låg), sedan laddas kondensatorn till VCC och återställningen inaktiveras.

Vi ansluter anoden på vår LED till AVR -stift PB0. Detta är stift 14 i ATMega328P. Eftersom det är en LED vill vi begränsa strömmen till LED så att den inte bränner ut. Det är därför vi placerar ett 330Ω motstånd i serie med lysdioden. Lysdiodens katod ansluts till jord.

16 MHz kristall används för att tillhandahålla klocka för Atmega328 mikrokontroller och 22pF kondensatorer används för att stabilisera kristallens funktion.

Dessa är alla anslutningar som är nödvändiga för att tända lysdioden. Strömförsörjning.

Ok. Lysdioden blinkar med en sekund fördröjning. Mikrocontrollerns arbete motsvarar våra uppgifter

Steg 5: Slutsats

Det var visserligen en lång process för att bara blinka en LED, men sanningen är att du framgångsrikt har rensat stora hinder: att skapa en hårdvaruplattform för programmering av en AVR -mikrokontroller, använda Atmel Studio som den integrerade utvecklingsplattformen, använda AVRDUDE som programvara för konfigurera och programmera en AVR -mikrokontroller

Om du vill hålla dig uppdaterad om mina grundläggande mikrokontrollerprojekt, prenumerera på min YouTube! Att titta på och dela mina videor är ett sätt att stödja det jag gör

Prenumerera på YouTube FOG -kanal

Rekommenderad: