AVR. Träningskurs. Arkitektur. AVR programmering. Programmering av AVR-mikrokontroller för nybörjare Parametrar för avr-familjens mikrokontroller

Enkelchips mikrokontroller används i stor utsträckning inom en mängd olika områden: från mätinstrument, kameror och videokameror, skrivare, skannrar och kopiatorer till elektroniska underhållningsprodukter och alla typer av hushållsapparater.

Sedan introduktionen av de första mikroprocessorerna på 1970-talet har deras komplexitet ständigt ökat med introduktionen av nya hårdvarulösningar och tillägg av nya instruktioner utformade för att lösa nya problem. Så utvecklades gradvis arkitekturen, som senare fick namnet CISC (Complete Instruction Set Computers – datorer med en komplex uppsättning instruktioner). Därefter dök en annan riktning upp och fann aktiv utveckling: RISC-arkitekturen (Reduced Instruction Set Computers - datorer med en reducerad uppsättning instruktioner). Det är denna arkitektur som inkluderar AVR-mikrokontroller från Atmel och PIC från Microchip, som den här boken är tillägnad.

Den största fördelen med RISC-processorer är att de är enkla, utför en begränsad uppsättning instruktioner och som ett resultat är de mycket snabba. Detta minskar kostnaderna och komplexiteten för deras programmering.

Nackdelen med RISC-arkitekturen var behovet av att skapa ytterligare instruktioner i assemblerspråk, som är implementerade i hårdvara för CISC-enheter. Till exempel, istället för att helt enkelt anropa en divisionsinstruktion, vilket är typiskt för CISC-enheter, måste en designer som arbetar med en RISC-processor använda flera sekventiella subtraktionsinstruktioner. Denna nackdel kompenseras dock mer än väl av priset och hastigheten på RISC-enheter. Dessutom, om du skapar program i C, slutar sådana problem att ha någon som helst betydelse för utvecklaren, eftersom de löses av kompilatorn, som automatiskt genererar all saknad assembly-kod.

I början av mikroprocessorer, utvecklingen programvara skedde uteslutande på ett eller annat monteringsspråk inriktat på specifik enhet. I huvudsak var sådana språk symboliska mnemonics av ​​motsvarande maskinkoder, och översättningen av mnemonics till maskinkod utfördes av en översättare. Men den största nackdelen med monteringsspråk är att var och en av dem är knuten till en specifik typ av enhet och logiken i dess funktion. Dessutom är assembler svår att lära sig, vilket kräver ganska mycket ansträngning att lära sig, vilket dessutom visar sig vara bortkastat om man senare behöver gå över till att använda mikrokontroller från andra tillverkare.

C-språket, som är ett högnivåspråk, saknar sådana brister och kan användas för att programmera vilken mikroprocessor som helst som det finns en C-kompilator för. I C-språket presenteras alla lågnivåoperationer som utförs av datorer i formen av abstrakta konstruktioner, vilket gör att utvecklare kan koncentrera sig på att programmera endast en logik utan att oroa sig för maskinkod. När du väl har lärt dig C kan du enkelt flytta från en familj av mikrokontroller till en annan, och spendera mycket mindre tid på utveckling.


AVR och PIC mikrokontroller arkitektur

I allmänhet är alla mikrokontroller byggda enligt samma schema. Styrsystemet, som består av en programräknare och en avkodningskrets, utför läs- och avkodningsinstruktioner från programminnet och driftenheten ansvarar för att utföra aritmetik och logiska operationer; I/O-gränssnitt låter dig utbyta data med kringutrustning; och slutligen måste du ha en lagringsenhet för att lagra program och data (Fig. 1.1).

Ris. 1.1. Generaliserad mikrokontrollerstruktur

Vi kommer att överväga mikrokontroller i allmänhet, utan att vara bundna till någon specifik typ av AVR-mikrokontroller, så nedan kommer vi bara att överväga funktioner i minnesarkitektur som är gemensamma för de flesta mikrokontroller, problem med ingång/utgång, avbrottshantering, återställning, etc.

AVR mikrokontroller minne

I AVR-mikrokontroller implementeras minne enligt Harvard-arkitekturen, vilket innebär separation av instruktions- och dataminne. Detta innebär att kommandon nås oberoende av dataåtkomst. Fördelen med denna organisation är ökningen av minnesåtkomsthastigheten.

Dataminne

Dataminne är utformat för att skriva/läsa data som används av program. Den är flyktig, det vill säga om strömmen till mikrokontrollern stängs av, kommer all data som lagras i den att gå förlorad. I AVR-mikrokontroller har dataminnet en mer utvecklad struktur jämfört med PIC-mikrokontroller, som visas i Fig. 2.1.


Ris. 2.1. Dataminnesstruktur i AVR- och PIC-mikrokontroller

SRAM-området (Static Random Access Memory) visas i fig. 2.1 är prickad, eftersom den inte används av alla AVR-mikrokontroller (detta gäller både intern och extern SRAM). Dess startadress är 0x060, och dess toppadress varierar från enhet till enhet.

I vissa AVR-mikrokontroller kan du öka SRAM-minnesutrymmet genom att ansluta externa minnesblock upp till 64 KB, men detta kräver att du offra portarna A och C, som i det här fallet används för att överföra data och adresser.

Register för allmänna ändamål

Registrera område generell mening(arbetsregister) är avsedd för tillfällig lagring av variabler och pekare som används av processorn för att exekvera program. I AVR-mikrokontroller består den av 32 åttabitarsregister (adressintervall 0x000 - 0x01F). I PIC-mikrokontroller är register för allmänna ändamål också åttabitar, men deras antal och adressintervall beror på den specifika typen av enhet.

I program skrivna i C är direkt tillgång till allmänna register vanligtvis inte nödvändig om inte assembly-språkkod används.

PIC mikrokontroller specialfunktionsregister

Specialfunktionsregister används i PIC-mikrokontroller för att styra olika operationer. Precis som med register för allmänna ändamål skiljer sig deras nummer och adressering från enhet till enhet. I program skrivna i C krävs vanligtvis inte direkt tillgång till speciella funktionsregister om inte assemblerspråksfragment används.

I/O-område för AVR-mikrokontroller

I/O-området för AVR-mikrokontroller innehåller 64 register som används för att styra eller lagra data från kringutrustning. Vart och ett av dessa register kan nås med en I/O-adress (som börjar på 0x000) eller av en SRAM-adress (i vilket fall 0x020 bör läggas till I/O-adressen). C-program använder vanligtvis konventionella I/O-registernamn, och adresser är bara meningsfulla för assemblerprogram.

Namn, I/O och SRAM-adresser, och kort beskrivning register från ingångs-/utgångsområdet för AVR-mikrokontroller presenteras i tabellen. 2.1. Det bör noteras att i olika modeller mikrokontroller, vissa av de listade registren används inte och adresser är inte listade i tabellen. 2.1 är reserverade av Atmel för framtida bruk.

Tabell 2.1. Beskrivning av register från I/O-området

Registrera namn I/O-adress SRAM-adress Beskrivning
ACSR 0x08 0x28 Analog komparatorkontroll och statusregister
UBRR 0x09 0x29 UART Baud Rate Register
UCR 0x0A 0x2A UART Transceiver Control Register
USR 0x0V 0x2V UART Transceiver Status Register
UDR 0х0С 0x2С UART Transceiver Data Register
SPCR 0x0D 0x2D SPI Interface Control Register
SPSR 0x0E 0x2E SPI Interface Status Register
SPDR 0x0F 0x2F SPI Data I/O Register
PIND 0x10 0x30 Port D-stift
DDRD 0x11 0x31 Port D Data Riktningsregister
PORTD 0x12 0x32 Port D Data Register
PINC 0x13 0x33 Port C-stift
DDRC 0x14 0x34 Port C datariktningsregister
PORTC 0x15 0x35 Port C dataregister
PINB 0x16 0x36 Port B-stift
DDRB 0x17 0x37 Port B Data Riktningsregister
PORTB 0x18 0x38 Port B Dataregister
PINA 0x19 0x39 Port A-stift
DDRA 0x1A 0x3A Port A datariktningsregister
PORTA 0x1V 0x3V Port A-dataregister
EECR 0x1С 0x3С EEPROM minneskontrollregister
EEDR 0x1D 0x3D EEPROM-dataregister
EARL 0x1E 0x3E EEPROM minnesadressregister (låg byte)
EEARH 0x1F 0x3F EEPROM-minnesadressregister (hög byte)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Timer/Counter Capture Register T/C1 (låg byte)
OCR1BL 0x28 0x48 Jämförelseregister B för timer T/C1 (låg byte)
OCR1BH 0x29 0x49 Jämförelseregister B för timer T/C1 (hög byte)
OCR1AL 0x2A 0x4A Jämförelseregister A för timer T/C1 (låg byte)
OCR1AH 0x2V 0x4V Jämförelseregister A för timer T/C1 (hög byte)
TCNT1L 0x2С 0х4С Räkneregister för timer/räknare T/C1 (låg byte)
TCNT1H 0x2D 0x4D Räkneregister för timer/räknare T/C1 (hög byte)
TCCR1B 0x2E 0x4E Styrregister B för timer/räknare T/C1
TCCR1A 0x2F 0x4F Styrregister A för timer/räknare T/C1
TCNT0 0x32 0x52 Räkneregister för timer/räknare T/C0
TCCR0 0x33 0x53 Timer/räknare kontrollregister T/C0
MCUCR 0x35 0x55 Kontrollregister för mikrokontroller
TIFR 0x38 0x58 Timer/Counter Interrupt Flag Register
TIMSK 0x39 0x59 Timer Interrupt Masking Register
GIFR 0x3A 0x5A General interrupt flag register
GIMSK 0x3V 0x5V Allmänt avbrottsmaskeringsregister
SPL 0x3D 0x5D Stackpekare (låg byte)
SPH 0x3E 0x5E Stackpekare (hög byte)
SREG 0x3F 0x5F Statusregister

SREG-statusregister för AVR-mikrokontroller

Statusregistret innehåller tillståndsflaggor för AVR-mikrokontroller och är beläget i I/O-området på adressen $3F (SRAM-adressen är $5F). Efter att återställningssignalen har givits initialiseras den till nollor.

Mikrokontroller (nedan kallade MK) har kommit in i våra liv, på Internet kan du hitta många intressanta kretsar som körs på MK. Vad du inte kan montera på en MK: olika indikatorer, voltmetrar, hushållsapparater (skyddsanordningar, växlingsanordningar, termometrar ...), metalldetektorer, olika leksaker, robotar, etc. Listan kan ta väldigt lång tid. Jag såg den första kretsen på en mikrokontroller för 5-6 år sedan i en radiotidning och vände nästan omedelbart på sidan och tänkte för mig själv "Jag kommer fortfarande inte att kunna montera den." På den tiden var MKs en mycket komplex och missförstådd enhet för mig; jag hade ingen aning om hur de fungerade, hur man flashade dem och vad man skulle göra med dem i händelse av felaktig firmware. Men för ungefär ett år sedan satte jag ihop min första krets på MK för första gången, det var en krets digital voltmeter på 7 segmentindikatorer och en ATmega8 mikrokontroller. Det hände så att jag köpte en mikrokontroller av en slump, när jag stod på radiokomponentavdelningen köpte killen framför mig en MK, och jag bestämde mig också för att köpa den och försöka sätta ihop något. I mina artiklar kommer jag att berätta om AVR mikrokontroller, jag ska lära dig hur du arbetar med dem, vi kommer att titta på program för firmware, vi kommer att göra en enkel och pålitlig programmerare, vi kommer att titta på firmwareprocessen och, viktigast av allt, de problem som inte kan uppstå endast för nybörjare.

Grundläggande parametrar för vissa mikrokontroller i AVR-familjen:

Mikrokontroller

Flashminne

RAM-minne

EEPROM-minne

I/O-portar

U makt

Ytterligare parametrar för AVR mega mikrokontroller:

Drifttemperatur: -55…+125*С
Förvaringstemperatur: -65…+150*С
Spänning vid RESET-stiftet i förhållande till GND: max 13V
Max matningsspänning: 6,0V
Max I/O linjeström: 40mA
Maximal strömförsörjningsström VCC och GND: 200mA

ATmega 8X modell pinouts

Pinouts för ATmega48x, 88x, 168x modeller

Stiftlayout för ATmega8515x-modeller

Stiftlayout för ATmega8535x-modeller

Stiftlayout för ATmega16, 32x-modeller

Stiftlayout för ATtiny2313-modeller

Ett arkiv med datablad för vissa mikrokontroller bifogas i slutet av artikeln.

MK AVR installation FUSE bits

Kom ihåg att en programmerad säkring är 0, en oprogrammerad är 1. Du bör vara försiktig när du ställer in säkringar, en felaktigt programmerad säkring kan blockera mikrokontrollern. Om du inte är säker på vilken säkring du behöver programmera är det bättre att blinka MK utan säkringar för första gången.

De mest populära mikrokontrollerna bland radioamatörer är ATmega8, följt av ATmega48, 16, 32, ATtiny2313 och andra. Mikrokontroller säljs i TQFP- och DIP-paket; för nybörjare rekommenderar jag att köpa i DIP. Om du köper TQFP blir det mer problematiskt att flasha dem; du måste köpa eller löda brädan eftersom deras ben är placerade mycket nära varandra. Jag råder dig att installera mikrokontroller i DIP-paket på speciella uttag, det är bekvämt och praktiskt, du behöver inte löda upp MK om du vill återställa den eller använda den för en annan design.

Nästan alla moderna MKs har förmågan att in-circuit ISP-programmering, d.v.s. Om din mikrokontroller är lödd till kortet behöver vi inte avlöda den från kortet för att ändra firmware.

6 stift används för programmering:
ÅTERSTÄLLA- Logga in MK
VCC- Plus strömförsörjning, 3-5V, beror på MK
GND- Gemensam tråd, minus ström.
MOSI- MK-ingång (informationssignal i MK)
MISO- MK-utgång (informationssignal från MK)
SCK- MK-ingång (klocksignal i MK)

Ibland använder de också stiften XTAL 1 och XTAL2; kvarts är fäst vid dessa stift om MK drivs av en extern oscillator; i ATmega 64 och 128 används inte MOSI- och MISO-stiften för ISP-programmering; istället är MOSI-stiften ansluten till stift PE0 och MISO till stift PE1. När du ansluter mikrokontrollern till programmeraren ska anslutningskablarna vara så korta som möjligt, och kabeln som går från programmeraren till LPT-porten bör inte heller vara för lång.

Mikrokontrollerns märkning kan innehålla konstiga bokstäver med siffror, till exempel Atmega 8L 16PU, 8 16AU, 8A PU etc. Bokstaven L betyder att MK:n arbetar på en lägre spänning än MK utan bokstaven L, vanligtvis 2,7V. Siffrorna efter bindestrecket eller mellanslag 16PU eller 8AU indikerar den interna frekvensen för generatorn som finns i MK. Om säkringarna är inställda för att fungera från en extern kvarts, bör kvartsen ställas in på en frekvens som inte överstiger maxvärdet enligt databladet, detta är 20 MHz för ATmega48/88/168, och 16 MHz för andra atmegas.

AVR mikrokontroller. Grunderna i programmering

Struktur och huvudsakliga egenskaper hos AVR-mikrokontroller

I den här artikeln kommer vi att försöka beskriva i allmänna termer, huvuddragen, vad är "inuti det", vad som behövs för att börja arbeta med AVR-mikrokontroller, etc.

Vad är Tiny, Mega?

Företag Atmel producerar en omfattande linje av åttabitars mikrokontroller baserade på AVR-kärnan, uppdelade i flera underfamiljer, som skiljer sig i tekniska specifikationer, användningsområden, pris:

  • ATtiny– familj AVR mikrokontroller optimerad för applikationer som kräver relativt hög prestanda (upp till 1,0 MIPS och kan arbeta vid frekvenser upp till 20,0 MHz), energieffektivitet (ATtiny är den enda familjen som kan arbeta från 0,7 V matningsspänning!) och kompakthet (det finns mikrokontroller i SOT23 -6 paket - endast 6 stift, och varje stift har flera funktioner, till exempel: I/O-port, ADC-ingång, PWM-utgång, etc.). Det är här deras tillämpningsområde framträder: enheter som är kritiska för pris, energiförbrukning, storlek etc.
  • ATmega– AVR-familjen av mikrokontroller designade för användning inom en mängd olika områden, tack vare den mycket stort set kringutrustning, en stor mängd programminne, in-/utgångsportar etc. Med ett ord finns det utrymme att utöka.
  • ATxmega– en ny familj av AVR-mikrokontroller med mer stort set kringutrustning än ATmega (tillagd enhet för direkt minnesåtkomst, DAC, CRC-modul, full USB-gränssnitt, snabbare ADC, etc.), med arbetsfrekvenser upp till 32,0 MHz.

Det är värt att notera huvud funktion alla ovanstående enheter: de har alla en enda arkitektur, och detta gör det enkelt att överföra kod från en mikrokontroller till en annan.
Mikrokontroller finns i både DIP- och SMD-paket (var och en med sina egna för- och nackdelar).

De mest populära förpackningsfodral är:

  • DIP (Dual Inline Package) - hölje med två rader av kontakter
  • QFP (Quad Flat Package) - platt paket med fyra rader av kontakter
  • SOIC (Small-Outline Integrated Circuit) – små integrerade kretsar (liten yta)

När det gäller amatörradioövningar är mikrokontroller, naturligtvis, av största intresse för DIP-paket, eftersom de är lättast att arbeta med - de har en ganska stor delning mellan stiften och dessutom kan du använda uttag för dem (detta är en speciell kontakt där du kan installera mikrokretsar utan lödning).
I allmänhet är ett uttag en extremt bekväm uppfinning - stiften är alltid intakta och du kan upprepade gånger ta bort och sätta in en mikrokrets, och det är mycket lättare att göra prototyper av framtida enheter.

Strömförsörjning och klockning av AVR-mikrokontroller

AVR mikrokontroller byggd med CMOS-teknik, vilket säkerställer mycket låg strömförbrukning. I praktiken strömförbrukning linjärt och direkt proportionell mot driftsfrekvensen (ju högre frekvens, desto högre strömförbrukning).



Matningsspänningen för AVR-mikrokontroller sträcker sig från 2,7 till 5,5V(6.0V är max, även om min AVR på något sätt fungerade på 7V - och ingenting, den lever fortfarande än i dag). Detta innebär att AVR direkt kan styra, utbyta data osv. Med olika enheter(både 3,3V-tolerant och 5V-tolerant) utan att behöva använda några logiska nivåomvandlare. För mer exakt bearbetning av analoga signaler tillhandahåller AVR separata stift för att driva den analoga delen av mikrokontrollern, som inkluderar enheter som en ADC, DAC och Analog komparator. Dessutom har AVR-mikrokontroller flera "vilolägen" för att ge bästa möjliga energibesparing.

Varje stift på mikrokontrollern (beroende på driftfrekvens och matningsspänning) kan också driva externa enheter nuvarande upp till 40,0 mA(max!), men allt kan "laddas ner/laddas ner" från mikrokontrollern upp till 200,0 mA(maximal!).

Frekvensområdet för klocksignaler skiljer sig beroende på "familjens senioritet" (ATtiny är den yngsta familjen av AVR-mikrokontroller och ATxMega den äldsta). För vissa representanter, särskilt ATtiny-familjen, kan driftsfrekvensen nå 20,0 MHz, för ATmega det inte överstiger 16,0 MHz, medan ATxMega inte överstiger 32,0 MHz. Dessutom har varje AVR-mikrokontroller en intern RC-oscillator upp till 8,0 MHz, vilket gör att du kan klara dig utan extern källa tidsignal.

Atmel producerar mikrokontroller med maximala driftsfrekvenser som är halva standarden (för att öka energibesparingen), så du bör vara uppmärksam på kodningen av mikrokontroller när du köper dem. Detaljerad information om vilken mikrokontroller som fungerar vid vilka frekvenser och matningsspänningar, vilka typer av kodningar och förpackningar som finns för denna mikrokontroller osv. finns i avsnittet "Beställningsinformation" i varje datablad.

Nedan finns en exempeltabell från databladet för mikrokontrollern ATtiny13. I kolumnen "Beställningskod" kan du se skillnaderna mellan kodningarna och det är inte svårt att gissa vad de är kopplade till.



Vad finns inuti AVR-mikrokontrollern?

Som redan nämnts i förordet, AVR mikrokontroller har Harvard-arkitektur ( huvudkaraktär Denna arkitektur är att programminne och RAM, såväl som deras åtkomstbussar, separeras för att öka hastigheten på instruktionsexekveringen: medan en instruktion exekveras, hämtas nästa från programminnet) med en RISC-processor, med en hastighet på 1,0 MIPS. Alla mikrokontroller, oavsett modell och layout, har samma centralenhet (processor/kärna). En enda kärna gör ett program skrivet på vilket språk som helst mer universellt och kan, om så önskas, ersättas i vilket projekt som helst, till exempel en dyrare styrenhet med en annan billigare, med minimala ändringar i koden.

RISC(Reduced Instruction Set Computer) – en processor med en uppsättning enkla monteringsinstruktioner (lägg till, subtrahera, skift vänster/höger, "logisk AND", etc.), alla instruktioner har en fast längd, processorn innehåller ett stort antal allmänna ändamålsregister etc. För att till exempel kunna beräkna någon slags genomsnittlig matematisk ekvation måste processorn utföra flera enkla monteringsinstruktioner, till skillnad från en CISC-processor som har instruktioner "för alla tillfällen." Men AVR är inte riktigt RISC -processor, eftersom inte alla monteringsinstruktioner har ett fast format. De flesta har ett 16-bitars format, resten är 32-bitar. Detta innebär att varje instruktion upptar 16 eller 32 bitar i programminnet. Förresten, den icke-fixade längden på monteringsinstruktionerna är det som gör den till en processor: Advanced Virtual RISC-processor (AVR).

MIPS(Miljon instruktioner per sekund) - AVR-mikrokontroller kan exekvera (ungefär) en miljon instruktioner vid 1,0 MHz, eller enkelt uttryckt, de flesta monteringsinstruktioner exekveras i en enda klockcykel.



Hjärnan i en AVR-mikrokontroller är dess centrala bearbetningsenhet (CPU/kärna).

Några komponenter i processorn:

Aritmetisk logikenhet

Programräknare

Stackpekare

  • Statusregister
  • Flash-programminne
  • Dataminne

Register för allmänna ändamål

Perifera register (I/O-register)

RAM-minne

Klocksystem. Detta system kan jämföras med det kardiovaskulära systemet

Avbrottsenhet

Kringutrustning, jag kommer att lista några av dem:

I/O-portar

EEPROM-minne

USB (endast xMega), USART, I2C, SPI, JTAG-gränssnitt

Watchdog, Timer/Counter (med PWM-oscillator, fånga/jämföra, etc.)

ADC, DAC (endast xMega), Analog komparator

Externa avbrottsmoduler

Uppsättningen av kringutrustning i olika familjer (Tiny, Mega och xMega) och olika mikrokontroller i dessa familjer är olika. Det finns mikrokontroller packade med en mängd olika kringutrustning, men även, för kostnadskritiska utvecklingar, finns det mikrokontroller med en liten (nödvändig) uppsättning kringutrustning.

En av fördelarna med AVR-mikrokontroller är möjligheten att använda kringutrustning i olika gemensamma driftslägen, vilket mycket ofta förenklar utvecklarens uppgift. AVR har även ett inbyggt system för återställning och övervakning av matningsspänningsnivån (System Control and Reset), vilket säkerställer normal start av mikrokontrollern och vid behov tillförlitlig avstängning.

De perifera kontroll-/statusregistren är placerade i dataminnesområdet, mellan de allmänna registren och Bagge, vilket säkerställer hög prestanda vid arbete med kringutrustning. Utvecklaren har naturligtvis full tillgång till dessa register (I/O-register).

Vad krävs för att mikrokontrollern ska fungera?

  • skriva ett program (program). För att skriva ett program/algoritm som mikrokontrollern kommer att fungera för behöver du en integrerad utvecklingsmiljö för AVR-mikrokontroller, som inkluderar en kod/textredigerare, kompilator, länkare och andra verktyg.
  • kretsdesign. Programmet ensamt räcker inte för att mikrokontrollern ska fungera; det kräver också ett minimalt bodykit (en uppsättning externa elektroniska apparater), för att förse mikrokontrollern med matningsspänning och en klocksignal så att åtminstone mikrokontrollerns kärna fungerar.
Följande bild visar den "klassiska" mikrokontrollersatsen som krävs för normal drift.


Bilden visar minimikretskraven för ATmega16 mikrokontroller. Med detta omkopplingsschema börjar AVR-mikrokontrollerns kärna att fungera, du kan använda alla in-/utgångsportar, etc. kringutrustning. Kort sagt, mikrokontrollern är i full stridsberedskap. För att till exempel börja använda en ADC eller Analog Comparator, bör du först programmässigt konfigurera kringutrustningen med hjälp av dess kontroll-/övervakningsregister för att ställa in det driftläge du behöver, etc., och sedan applicera de undersökta signalerna till ingångarna på motsvarande kringutrustning.

- Kvarts och kondensatorer C1, C2 (22 pF vardera) förser mikrokontrollern och alla dess kringutrustning med en högkvalitativ klocksignal (maximal frekvens - 16,0 MHz).

Motstånd R1(10K), ger en hög nivå vid RESET-ingången, nödvändig för stabil drift av mikrokontrollern. Om, under drift av mikrokontrollern, spänningen på detta stift faller under en viss nivå, kommer mikrokontrollern att återställas och driften av den avsedda algoritmen kan störas.

- ISP-kontakt används för in-circuit programmering, det vill säga det är nödvändigt att skriva programmet du skrev in i mikrokontrollerns minne direkt på kortet (utan att ta bort mikrokontrollern från enheten).

- Gasreglage L1 och kondensatorerna C3, C4 tillhandahåller matningsspänning till analoga perifera enheter, såväl som vissa register över I/O-portar. Om mikrokontrollern inte har en analog del, finns det inga analoga strömstift, som ett resultat av dessa komponenter behövs inte. Den förenklade kabeldragningen för mikrokontrollern är som följer: för det första, eftersom mikrokontrollern berövades extern klockning, bör det indikera att klockningen kommer från den interna RC-oscillatorn genom att ställa in lämpliga säkringsbitar (en slags begränsande driftsparametrar för mikrokontrollern) ).
Den maximala frekvensen för den interna oscillatorn är 8,0 MHz, vilket innebär att mikrokontrollern inte kommer att kunna arbeta vid sin maximala frekvens (prestanda).
För det andra har den analoga delen av mikrokontrollern (liksom vissa register för ingångs-/utgångsportarna) ingen strömkälla, vilket utesluter deras användning.
För det tredje finns det ingen kontakt för programmering i kretsar, så för att skriva fast programvaran i mikrokontrollerns minne måste du ta bort den från enheten, skriva den någonstans och sedan återställa den till sin plats. Som du själv förstår är detta inte särskilt bekvämt (ta bort/sätta in, löda/avlöda), och kan leda till skador på både mikrokontrollern själv (benen kan gå sönder, överhettas från lödning etc.) och närliggande enheter - kontakt, spår ombord osv.

Mikrokontroller det här är, kan man säga, en liten dator. som har sin egen CPU (register, styrenhet och aritmetisk logikenhet), minne, samt olika periferi, tycka om I/O-portar, timers, avbrottskontroller, olika pulsgeneratorer och till och med analoga omvandlare. Du kan inte lista allt. Det är omöjligt att lista alla applikationer för mikrokontroller.

Men om vi förenklar allting mycket, är mikrokontrollerns huvudfunktion att "hoppa i benen". De där. den har flera stift (från 6 till flera dussin beroende på modell) och på dessa stift kan den ställa in antingen 1 (högspänningsnivå, till exempel +5 volt) eller 0 (lågspänningsnivå, ca 0,1 volt) beroende på programvaran algoritm inkopplad i dess minne. Mikrokontrollern kan också bestämma tillståndet för signalen på dess ben (för detta måste de konfigureras som en ingång) - om spänningen där är hög eller låg (noll eller en). Moderna mikrokontroller har också nästan universellt en Analog-till-Digital-omvandlare ombord - det här är en sak som liknar en voltmeter, den låter dig inte bara spåra 0 eller 1 vid ingången, utan att helt mäta spänningen från 0 till referensen (vanligtvis är referensen lika med matningsspänningen) och presentera den som ett tal från 0 upp till 1024 (eller 255, beroende på ADC-bitstorleken)

Av det kan du göra smart hus, och hjärnan för en hemrobot, ett intelligent akvariekontrollsystem eller bara en vacker LED-display med löpande text. Bland MK elektroniska komponenter är detta en av de mest mångsidiga enheterna. Till exempel, när jag utvecklar nästa enhet, föredrar jag att inte bry mig om olika typer av kretsdesignperversioner, utan att koppla alla in- och utgångar till en mikrokontroller och göra all driftlogik i mjukvara. Det sparar dramatiskt både tid och pengar, vilket innebär att du får pengar.

Det finns väldigt, väldigt många mikrokontroller. Nästan varje företag med självrespekt som producerar radiokomponenter producerar sin egen styrenhet. Det finns dock ordning och reda i denna mångfald. MKs är indelade i familjer, jag kommer inte att lista dem alla, men jag kommer bara att beskriva de mest grundläggande åttabitarsfamiljerna.

MSC-51
Den mest omfattande och utvecklade är MSC-51, den äldsta av alla, kommer från intel 8051 och nu produceras av många företag. Ringer ibland kort C51. Detta är en 8-bitars arkitektur, skiljer sig från de flesta andra åtta-bitars arkitekturer genom att den CISC arkitektur. De där. Ett kommando kan ibland utföra en ganska komplex åtgärd, men kommandon exekveras över ett stort antal klockcykler (vanligtvis 12 eller 24 klockcykler, beroende på typ av kommando), har olika längd och det finns många av dem, för alla tillfällen . Bland arkitekturkontrollerna MSC-51 träffas som dinosaurier AT89C51, med ett minimum av kringutrustning, litet minne och oviktig prestanda, och monsterliknande produkter Silicon Laboratories ha ombord en mycket köttig färs av kringutrustning i olika storlekar, enorma fack med RAM och permanent minne, kraftfulla gränssnitt från enkla UART'ett före USB Och BURK, och även brutalt snabb kärna, som levererar upp till 100 miljoner operationer per sekund. När det gäller mig personligen avgudar jag C51-arkitekturen för dess jävligt trevliga assembler, vilket bara är kul att skriva. Gigabyte kod har redan skrivits för denna arkitektur, alla tänkbara och otänkbara algoritmer har skapats.

Atmel AVR
Min andra favoritfamilj är AVR från företaget Atmel. Alls Atmel producerar och MSC-51 kontroller, men ändå fokuserar de på AVR. Dessa kontroller har redan 8-bitars RISC arkitektur och exekvera ett kommando i en klockcykel, men till skillnad från den klassiska RISC kärnorna har ett mycket omfattande kommandosystem, även om det inte är lika bekvämt som det i C51, vilket är anledningen till att jag inte gillar dem. Men AVR alltid utrustad som för krig och helt enkelt fylld med olika kringutrustning, särskilt kontroller av underfamiljen ATMega. De är också mycket lätta att flasha, detta kräver inte specialiserade programmerare eller någon annan komplex utrustning. Allt du behöver är fem sladdar och en dator med LPT hamn. Lättheten att lära sig har gjort det möjligt för den här handkontrollen att falla fast i hjärtat på många, många radioamatörer runt om i världen.

Mikrochip PIC.
Ännu en 8-bitars RISC Mikrokontrollern kännetecknas av ett mycket perverterat kommandosystem, bestående av endast ett par dussin kommandon. Varje kommando exekveras i fyra klockcykler. det finns ett antal fördelar, främst låg strömförbrukning, och snabb start. Genomsnitt BILD kontrollern har inte lika många kringutrustning som i AVR, utan själva modifieringarna BILD Det finns så många kontroller att du alltid kan välja en kristall med kringutrustning som passar just uppgiften, varken mer eller mindre. På BILD'yx traditionellt byggda omborddatorer för bilar, samt många hushållslarm.

Vilken familj ska du välja? Åh, det är en svår fråga. På många forum och konferenser pågår det fortfarande hårda strider om vilken familj som är bäst, fans AVR bråka med följare MSC-51, längs vägen, inte glömma att sparka njurarna BILD'får, som de svarar in natura på.

Situationen här är som i Starcraft :) Vem är coolare? Människor? Zerg? Protoss? Allt handlar om applikationen, omfattningen av uppgifterna och en mängd andra parametrar. Varje familj har sina egna fördelar och nackdelar. Men personligen skulle jag välja AVR och av dessa skäl:

  • 1. Tillgänglighet i Ryssland. Dessa kontroller är välförtjänt populära och älskade av folket, vilket betyder att våra handlare är villiga att bära dem. Men som PIC. Med MSC-51 är situationen värre. Det är inte ett problem att få föråldrade AT89C51, men vem behöver dem? Men moderna silabs är redan exklusiva.
  • 2. Lågt pris. Generellt sett är PIC känd för sitt låga pris i världen, men ironin är att freebies bara startar om du köper den i bil. Faktum är att på en riktig räknare blir AVR 30-40 procent billigare än PIC med lite mer funktionalitet. Med MSC-51 är situationen klar på den första punkten. Exklusivitet är inte bara sällsynt, utan också dyrt.
  • 3. Mycket kringutrustning på en gång. För en seriell enhet är detta snarare en nackdel. Det är mycket bättre att bara ha det som behövs för den aktuella uppgiften och låta resten inte komma i vägen och slösa energi. Detta är vad PIC är känt för med sin spridning modellutbud, där du kan hitta en kontroller som har det du behöver och inte det du inte behöver. Men vi ska plugga och göra det själva! Så det är bättre för oss att ha allt på en gång och i reserv. Och här är AVR huvud och axlar över PIC och rullar ut fler och fler fyllda kontroller om och om igen. Jag köpte mig lite AtMega16A och det är det, du kan studera hela familjen.
  • 4. Enkel kärna. Faktum är att alla moderna AVR:er har samma kärna med enhetligt system kommandon Det finns bara några skillnader på perifer nivå (och de är små). De där. kod från någon liten ATTiny13 kan enkelt kopieras och klistras in i ATMega64 och fungerar nästan utan modifieringar. Och vice versa nästan utan begränsningar. Det är sant att äldre AVR-modeller (alla sorters AT90S1200) har begränsad kompatibilitet uppifrån och ner - de har ett lite mindre kommandosystem. Men det är upp med råge. Microchip har ett helt gäng familjer. PIC12/16/18 med olika kommandosystem. Den 12:e familjen är vanligtvis en liten liten sak (som Tiny i AVR), och 18 är redan mer seriösa kontroller (analogt med Mega AVR) Och om koden från 12 kan dras till 18, sedan tillbaka fig.
  • 5. Omfattande kommandosystem för AVR-styrenheter. AVR har cirka 130 kommandon, medan Microchip PIC bara har 35. Det verkar som att PIC är en vinnare - färre kommandon, lättare att lära sig. Tja, ja, det är precis vad sloganen för mikrochip låter som, ungefär som "Bara 35 lag!" Bara detta är faktiskt skitsnack. När allt kommer omkring, vad är ett processorkommando? Det är ett verktyg! Föreställ dig bara två miniräknare - en vanlig, en redovisnings- och en teknisk. Bokföring är mycket lättare att lära sig än teknik. Men försök att räkna ut sinus på det? Eller logaritm? Nej, det kan du, jag argumenterar inte, men hur många knapptryckningar och mellanliggande beräkningar kommer det att krävas? Samma sak! Det är mycket bekvämare att arbeta när du har en massa olika åtgärder till hands. Därför, ju större kommandosystem, desto bättre.
  • 6. Tillgång till gratis plattformsoberoende C-kompilatorer. Naturligtvis kan du alltid hitta en spricka. Var var, men i vårt land har detta aldrig varit ett problem. Men varför stjäla något om du har något gratis? ;)
  • 7. Tja, det sista argumentet är vanligtvis det mest kraftfulla. Närvaron av någon som skulle undervisa och ge råd. Hjälpte till med råd och ledde mig på rätt väg. Jag valde AVR för mig själv och på denna sida (av minst för nu) kommer just den här familjen att förstås ordentligt, vilket betyder att du inte har så mycket val :))))))

Åh, men det finns en hel massa av samma AVR. Vilken ska jag ta???
Intresse Fråga. I allmänhet är det bättre att välja MK för uppgiften. Men för att studera det är det bättre att ta något fyllt.

Låt oss först titta på markeringarna så att du omedelbart kan förstå från prislistan vilken typ av djur som finns framför dig. Här är ett exempel för dig

ATmega16A - 16PI

  • - tillverkad i Atmel
  • Mega- typ av familj. Det finns också Tiny och Xmega (den nya är hemska grejer, en komplett helikopter). I allmänhet trodde man att Tiny var, liksom, lågbudget med en liten mängd köttfärs och allmänt bristfällig, och Mega tvärtom var allt på en gång. I verkligheten är skillnaden mellan familjerna Tini och Mega när det gäller köttfärs nu minimal, men Tini har mindre minne och fodral kommer den med ett antal stift från 6 till 20.
  • 16 — mängd flashminne i kilobyte. Egentligen är det inte så enkelt. Minnesnumret är en potens av två. Så Mega162 är inte en kontroller med 162KB flash, utan en sorts Mega16 modifiering2 med 16KB minne. Eller Mega88 är inte 88kb, utan 8kb flash, och den andra 8:an är en antydan om att detta är en vidareutveckling av Mega8. Likaså Mega48 eller Mega168. Detsamma gäller Tinis familj. Till exempel Tini2313 - 2 kilobyte flash. Vad är 313? Vem fan vet vad de menade :) Eller Tiny12 - 1kb Flash. I allmänhet rensades chippet.
  • A— Energiförbrukningsprefix (vanligtvis). Det här brevet kanske inte finns, men i den nya serien finns det nästan överallt. Till exempel är V- och L-serierna lågspänningar och kan arbeta från 2,7 volt. Det är sant att du måste betala mindre frekvens för låg spänning. Men överklockning är möjlig även här, inget mänskligt är oss främmande :) A och P har nya AVR-serier med PicoPower-teknik d.v.s. extremt ekonomiskt. Det finns ingen skillnad i fyllningen och den interna strukturen med deras icke-indexmodeller, den enda skillnaden är i driften av alla vilolägen och strömförbrukning. De där. Mega16A kan enkelt ändras till Mega16 utan A. Och inget annat behöver ändras.
  • 16 — Begränsa klockfrekvens i megahertz. I verkligheten kan du överklocka den till 20 ;)
  • P- typ av skal. Viktig funktion. Faktum är att inte alla fall kan lödas hemma utan hemorrojder. För nu rekommenderar jag att du är uppmärksam på P-DIP-huset. Detta är ett skrymmande monster, men det är lätt att löda, och viktigast av allt, det sticker lätt in i en speciell sockel och tas ut ur den igen. Det är bättre att lägga SOIC (index S) eller TQFP (index A) höljen åt sidan för nu. Utan god erfarenhet av lödning och förmåga att etsa högkvalitativt tryckt kretskort Det är bättre att inte blanda sig i dem.
  • jag— Typ av förtenning av ledningar. I - blylod. U - blyfri. Det är absolut ingen skillnad för dig. Ta den som är billigare.

Jag rekommenderar följande modeller:

  • ATMega16A-16PU - billigt (cirka 100-150 rubel), många stift, mycket kringutrustning. Finns i olika höljen. Det är enkelt, min utbildning och alla ytterligare exempel är skräddarsydda för den.
  • ATTiny2313-20SU är ett idealiskt alternativ för att tillverka alla typer av klockor/väckarklockor och annan liten hemautomation. Billigt (40 rubel), kompakt. Nackdelen är att det inte finns någon ADC.
  • ATmega48/88/168 någon av dessa kontroller. Kompakt (i tqfp-fallet är det den tunnaste och minsta av AVR), billig (100-150 rubel), fylld till brädden.
  • ATmega128 för den erfarna. Stort, kraftfullt, massor av minne. Dyrt (cirka 400r)

Anta att du får en uppgift - att få en lysdiod att blinka.
Låt oss diskutera hur man löser detta problem:

Alternativ 1 är det enklaste, ta en vippbrytare/knapp, placera en slav bredvid honom, som kommer att tända/släcka lysdioden med vippströmbrytaren. I Ryssland brukar de flesta problemen lösas på detta sätt. Och vad blinkar?)))
Alternativ 2 - montera en multivibrator. Redan mer intressant. För att blinka räcker det med en lysdiod bra beslut. Dessutom är det enkelt, billigt och pålitligt.
Alternativ 3 - montera på en mikrokontroller. Dyrare än att montera en multivibrator, men enligt mig enklare. Jag skrev ett program, körde det och fick resultatet. Ingen installation. Naturligtvis är detta ett idealiskt fall.

Låt oss nu komplicera uppgiften. Till exempel, 5 lysdioder och 5 alternativ för deras blinkning (hastigheten och ordningen för deras blinkning ändras). Det första alternativet försvinner omedelbart; metod 2 kan göras, men storleken på enheten kommer att öka kraftigt. Alternativ 3 kommer att förbli ungefär lika stor, lägg bara till ett par rader kod. Därför finns det olika fall, där det är omöjligt utan en mikrokontroller, och där det är överflödigt. Beräkna därför alltid arbetskostnader, tid och ekonomiska kostnader.

Så, en mikrokontroller tillåter oss att flexibelt hantera system, processer etc., den har små dimensioner och funktionsmässigt är den en minidator. Mikrokontroller tillverkas av olika företag. En av varianterna av AVR-mikrokontroller från Atmel. Varför dem? De är ganska lätta att hitta i butiken, exempel är lätta att hitta redo kod, med inbyggd funktionalitet kan du lösa även komplexa problem.

För att mikrokontrollern ska förstå vad vi vill ha av den måste vi ladda in den fasta programvaran i den - en sekvens av åtgärder som den behöver utföra. Firmware är en sekvens av ettor och nollor. För att göra det bekvämare uppfanns programmeringsspråk. Till exempel skriver vi slå på, och kompilatorn själv omvandlar den till en sekvens av ettor och nollor som är förståelig för mikrokontrollern. Bilden visar HEX firmware om du öppnar den med anteckningsblock.

Mikrokontroller är vanligtvis programmerade i C eller assemblerspråk. I det stora hela är det ingen skillnad på vad man ska skriva på. På grund av det stora antalet färdiga exempel gjorde jag mitt val till förmån för C. Dessutom finns det flera program som låter dig skriva i C. Till exempel gratis, proprietär AVR Studio, CodeVision, WinAVR, etc. Även om jag skriver i CodeVision använder jag väldigt aktivt AVR Studio som felsökare.

Jag hoppas åtminstone en del av detta blev tydligt för dig. Enligt mig är det svåraste att ta första steget. Den som gör det, övervinner sin rädsla och sin lättja, kommer definitivt att uppnå resultat. Lycka till med att lära dig mikrokontroller.