- Hvad er sikringer i AVR - en detaljeret forklaring
- Sikringsbits i Arduino
- Komponenter, der er nødvendige for at teste sikringer i AVR
- Skematisk afprøvning af sikringsbits i AVR
- Test af sikringerne i AVR
I denne vejledning skal vi tale om sikringer. Da jeg var på college og lærte om alle de seje ting inden for elektronik, hørte jeg udtrykket sikring i AVR for første gang, min første tanke om emnet var, åh! der er noget inde i AVR'en, der vil blæse, hvis jeg gjorde noget forkert. Dengang var der ikke meget tilgængelige ressourcer på Internettet at gennemgå. Jeg søgte en hel del for at finde ud af, at disse sikringer henviste til nogle specielle bits inde i AVR Microcontroller. Disse bits er som små kontakter inde i AVR, og ved at tænde / slukke for dem kan vi tænde / slukke for nogle specielle funktioner i AVR. At tænde og slukke for det betyder indstilling og nulstilling.
Vi vil benytte lejligheden til at diskutere alt, hvad der er om Fuse bits i AVR. For enkelheds skyld vil vi tage eksemplet på et Arduino-kort, der huser den populære ATmega328P Microcontroller. Her lærer du, hvordan du indstiller disse sikringer til at tænde og slukke for nogle af disse funktioner, som kommer rigtig godt i applikationer i det virkelige liv. Så lad os komme lige ind i det.
I vores tidligere indlæg har vi bygget mange AVR-mikrocontrollerprojekter som Interfacing GSM-modulet med AVR-microcontroller og Interfacing HC-05 med AVR-microcontroller. Du kan tjekke dem ud, hvis du vil lære mere om disse projekter.
Hvad er sikringer i AVR - en detaljeret forklaring
Som vi diskuterede tidligere, er sikringer i mikrokontrolleren som små kontakter, der kan tændes og slukkes for at aktivere og deaktivere forskellige funktioner i AVR-mikrocontrolleren. Dette er den del, hvor vores næste spørgsmål opstår, så hvordan indstiller eller nulstiller vi disse sikringer? Svaret på dette spørgsmål er simpelt: Vi gør det ved hjælp af sikringsregistre.
I ATmega328P IC er der i alt 19 sikringsbits, og de er opdelt i tre sikringsbyte. Disse er defineret som "udvidede sikringsbytes", "høj sikringsbyte" og "lav sikringsbyte".
Hvis du ser på tabel 27 i ATmega328 / P databladet Rev: 7810D – AVR – 01/15, kan du finde ud af alle de små detaljer om sikringsbits. Men nedenstående billede giver dig en bedre idé om fuse bits sektionen i databladet.
Nu, da du har lært lidt om sikringsbitene, lad os gå gennem databladet og finde ud af alle de nødvendige detaljer om denne IC.
De udvidede sikringsbits:
Når du klikker på fanen Sikringsbits og ruller lidt ned, finder du Tabel 27-5: som viser tabellen for “Udvidet sikringsbyte”, almindeligvis kendt som “ EFUSE”. Billedet nedenfor viser nøjagtigt det.
I denne tabel er der kun tre anvendelige bits, og de andre tre er reserveret. Disse tre bits beskæftiger sig med Brownout Detection-niveauet. Som du kan se i noten, hvis vi ser på tabel 28-5, kan vi finde flere detaljer om den.
Som du kan se i ovenstående tabel, har vi tabellen til detektering af brownout. Brownout-detektion er en funktion, der nulstiller mikrocontrolleren, når forsyningsspændingen falder under et bestemt spændingsniveau. I ATmega328P IC kan vi helt deaktivere brownout-detekteringen, eller vi kan indstille den til de niveauer, der er vist i ovenstående tabel.
De høje sikringsbytes:
Som du kan se på billedet nedenfor, viser tabel 27-6: i databladet de højere sikringsbits på ATmega328P IC.
Den høje sikring beskæftige sig med forskellige opgaver inde i ATmega328 Microcontroller. I dette afsnit vil vi tale om de højere sikringsbits og deres funktion. Lad os starte med BOOTRST-, BOOTSZ0- og BOOTSZ1-bitene. Disse tre bits er ansvarlige for indstilling af startstørrelse; boot størrelse refererer til den mængde hukommelse, der er reserveret til installation af bootloader.
En bootloader er et specielt stykke software, der kører oven på mikrocontrolleren og styrer forskellige opgaver. Men i tilfældet med Arduino bruges bootloaderen til at uploade Arduino-skitsen inde i mikrocontrolleren. I en af vores tidligere artikler har vi vist dig, hvordan du brænder bootloaderen i ATmega328P ved hjælp af Arduino. Du kan tjekke det ud, hvis du er interesseret i emnet. Når vi vender tilbage til vores emne, gøres formålet med andre bits i den høje byte med rimelighed klar, EESAVE-biten er at bevare EEPROM-hukommelsen, mens der udføres en chipsletningscyklus. WDTON-bit er at aktivere eller deaktivere Watchdog Timer.
Watchdog-timeren er en speciel timer i ATmega328P IC, som har sit separate ur og kører uafhængigt. Hvis vagthundtimeren er aktiveret, skal du rydde den med en bestemt periode, ellers nulstiller vagthundtimeren mikrokontrolleren. Dette er en nyttig funktion, der kommer inden for mange mikrokontrollere, hvis processoren sidder fast; vagthunden nulstiller den for at forhindre skader på slutapplikationen.
DWEN-biten er der for at aktivere fejlfindingstråden; dette er en forberedende protokol, der er indbygget internt i deres hardware, der bruges til at programmere og debugge processorer. Med denne funktion aktiveret kan du blinke og fejle processoren med en enkelt ledning tilsluttet. Men for at bruge det skal du bruge særlig hardware, der er forberedende til Atmel.
De resterende to bits er de bits, som du skal undgå, medmindre du nøjagtigt ved, hvad du laver. Disse er RSTDISBL bit-7 og SPIEN bit-5. RSTDISBL (External Reset Disable) deaktiverer, som navnet antyder, den eksterne hardware-nulstillingsstift, og SPIEN-bit bruges til at deaktivere SPI-programmeringsgrænsefladen. Deaktivering af en af disse to bits kan fuldstændigt blokere din AVR; så det er en god idé at lade dem være alene.
De lave sikringsbytes:
Som du kan se på billedet nedenfor, viser tabel 27-7: i databladet de nedre sikringsbits på ATmega328P IC.
Denne sikringsbyte er ansvarlig for at indstille urkilden og nogle andre parametre for uret inde i AVR. I dette afsnit vil vi lære om alt dette.
Den 7. bit eller CKDIV8-flaget kan indstilles til at dividere urkilden med 8, dette kommer meget praktisk, som du måske allerede ved, hvis du selv har prøvet at programmere AVR. Den næste bit er CKOUT-biten, og den er den 6. bit i Low Fuse Byte. Programmering af det vil udsende det interne ursignal på PORTB0 på mikrocontrolleren.
Bits-5 og bit-4 SUT1 og SUT0 styrer starttiden for mikrokontrolleren. Dette forhindrer opstart, som måske eller måske ikke finder sted, før forsyningsspændingen kan nå et acceptabelt minimums tærskelspændingsniveau. Og de sidste fire CKSEL0 - 4 bits bruges til at vælge mikrokontrollerens urkilde. Tabellen vist nedenfor giver dig en bedre forståelse af disse fire bits, der er ansvarlige for opsætning af urkilden. Du kan finde denne tabel i urkildeafsnittet i databladet.
Nu, inden vi kommer videre, er der en ting mere, som jeg skal gennemgå, er tabellen for forsinkelse af oscillatorens opstart. Ved opstartsforsinkelse henviser vi til bit 4 og 5 i den nedre sikringsbyte. Forsinkelserne skal indstilles afhængigt af den tilstand, kredsløbet fungerer i, og hvilken type oscillator du bruger. Standardværdierne er indstillet til langsom stigende effekt med 6 urcyklusser, når en opstarts- eller nedlukningssekvens udføres. Dernæst er der en anden forsinkelse på 14 urcyklusser med 65 ms forsinkelse efter opstart.
Pis! Det var en masse information at fordøje. Men inden vi fortsætter, lad os afslutte dette afsnit med en hurtig note.
Bemærk:
Hvis du har kigget på databladet nøje, skal du have lagt mærke til, at programmering af en sikringsbit betyder at sætte den lavt, dvs. 0 (nul), hvilket er det modsatte af det, vi generelt gør for at gøre en port høj eller lav. Du skal huske det, mens du konfigurerer dine sikringer.
Sikringsbits i Arduino
Vi har talt meget om sikringer i ovenstående afsnit, men i dette afsnit, lad os tale om, hvordan man konfigurerer dem, og hvordan man skriver dem i en mikrocontroller. Til det har vi brug for et værktøj kaldet Avrdude. Det er et værktøj, der kan bruges til at læse, skrive og ændre hukommelse i AVR-mikrocontrollere. Det fungerer med SPI, og det har en lang liste med support til forskellige typer programmerere. du kan downloade værktøjet fra nedenstående link. Vi bruger også vores yndlingsmikrocontroller Arduino.
- Download Avrdude version 6.3 Windows-ming32
Nu hvor du har Avrdude, skal du udtrække det og åbne et kommandovindue i den mappe. Hvis du planlægger at bruge det senere, kan du også tilføje mappestien til din Windows-miljøvariabelsektion. Men jeg vil lægge det på mit skrivebord og åbne et kommandovindue der. Når vi har gjort det, vil vi forbinde USBasp-programmøren til vores pc, og vi vil sikre os, at vi har den rette driver til vores USBasp-programmør. Når vi gør det, er vi klar til at gå, og vi læser først standardværdien for sikring. For at gøre det skal du køre følgende kommando.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Hvis alt er i orden, vil denne kommando læse sikringsbyte og placere dem i tre separate tekstfiler. Billedet nedenfor giver dig en bedre idé om processen.
Som du kan se, læste Avrdude gennem sikringsbitene på Arduino nano og gemte dem i tre separate tekstfiler. Nu åbnede vi dem og fik tre værdier; til EFUSE: 0xFD, til HFUSE: 0XDA, til LFUSE: 0xFF. Dette var den standard sikringsværdi, vi fik for en Arduino nano. Lad os nu konvertere disse bits til binære og sammenligne dem med deres standardværdi fra databladet. Tabellen nedenfor viser nøjagtigt det.
For nemheds skyld er sikringsbitene skrevet i hexadecimale værdier, men hvis vi konverterer dem til binære værdier og sammenligner dem med databladet, ved vi, hvad der sker. Lad os starte med den lavere sikringsbyte. Som du kan se fra ovenstående streng, er den indstillet til 0XFF, og den binære værdi ville være 0B11111111.
Sammenligning af lager lavere sikringsbytes med Arduino:
Lav sikringsbyte |
Bit nr. |
Standardværdi i AVR |
Standardværdi af Arduino |
CKDIV8 |
7 |
0 (programmeret) |
1 (ikke programmeret) |
CKOUT |
6 |
1 (ikke programmeret) |
1 (ikke programmeret) |
SUT1 |
5 |
1 (ikke programmeret) |
1 (ikke programmeret) |
SUT0 |
4 |
0 (programmeret) |
1 (ikke programmeret) |
CKSEL3 |
3 |
0 (programmeret) |
1 (ikke programmeret) |
CKSEL2 |
2 |
0 (programmeret) |
1 (ikke programmeret) |
CKSEL1 |
1 |
1 (ikke programmeret) |
1 (ikke programmeret) |
CKSEL0 |
0 |
0 (programmeret) |
1 (ikke programmeret) |
Den højere sikringsbyte er indstillet til 0XDA i binær, dvs. 0B11011010.
Højere sikringsbyte i binær:
Høj sikringsbyte |
Bit nr. |
Standardværdi i AVR |
Standardværdi af Arduino |
RSTDISBL |
7 |
1 (ikke programmeret) |
1 (ikke programmeret) |
DWEN |
6 |
1 (ikke programmeret) |
1 (ikke programmeret) |
SPIEN |
5 |
0 (programmeret) |
0 (programmeret) |
WDTON |
4 |
1 (ikke programmeret) |
1 (ikke programmeret) |
SPAR |
3 |
1 (ikke programmeret) |
1 (ikke programmeret) |
BOOTSZ1 |
2 |
0 (programmeret) |
0 (programmeret) |
BOOTSZ0 |
1 |
0 (programmeret) |
1 (ikke programmeret) |
BOOTRST |
0 |
1 (ikke programmeret) |
0 (programmeret)) |
Indstillingen for den udvidede sikringsbyte er indstillet til 0XFD, i binær er den 0B11111101.
Udvidet sikringsbyte i binær:
Udvidet sikringsbyte |
Bit nr. |
Standardværdi i AVR |
Standardværdi af Arduino |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (ikke programmeret) |
1 (ikke programmeret) |
BODLEVEL1 |
1 |
1 (ikke programmeret) |
0 (programmeret) |
BODLEVEL0 |
0 |
1 (ikke programmeret) |
1 (ikke programmeret) |
Dette markerer afslutningen på dette afsnit. Fra nu af har vi lært meget om AVR-mikrocontrolleren og dens sikringsbits. Så lad os afslutte denne artikel ved at sætte vores teori på prøve ved at ændre og eksperimentere med nogle af sikringsbitene i Arduino Nano.
Komponenter, der er nødvendige for at teste sikringer i AVR
Vi har talt meget om sikringerne i ovenstående del. Men for at komme videre i artiklen har vi brug for nogle hardwarekomponenter og nogle softwareværktøjer. I dette afsnit vil vi tale om dem. En liste over nødvendige komponenter med billeder er vist nedenfor.
- Brødbræt - 1
- Arduino Nano - 1
- USBasp AVR-programmerer - 1
- USB-kabel - 1
- AVR 10-pin til 6- pin konverter - 1
- Avrdude (softwareværktøj til programmering af AVR)
- LED - 1
- 330R modstand - 1
- Jumperkabler
Skematisk afprøvning af sikringsbits i AVR
Opsætningen til hardware-test er vist nedenfor i denne opsætning. Vi har tilsluttet Arduino Nano til pc'en med et USB-kabel, og vi har også tilsluttet USBasp-programmøren til pc'en. Formålet med denne artikel er at programmere sikringsbits i AVR. Af den grund har vi tilsluttet USBasp-programmøren til Arduino. Billedet nedenfor giver dig en bedre idé om opsætningen.
Test af sikringerne i AVR
Testopsætningen er vist nedenfor. Som du kan se, har vi tilsluttet Arduino og USBasp-programmøren begge til USB på min bærbare computer.
Lad os nu åbne Arduino IDE og uploade en grundlæggende blinkskitse. Indholdet af den grundlæggende blinkskitse er selvforklarende, så jeg lagde ingen detaljer om det.
Du kan se i videoen, at ledet på pin nr. 13 blinker, som det skal. Lad os nu tilpasse sikringsindstillingerne og indstille den til standardværdierne. Og som vi tidligere har set i databladet; den EFUSE er 0xFF; HFUSE er D9; LFUSE er: 62. Lad os nu konfigurere det med Avrdude, blinke det og se hvad der sker. Koden, vi bruger, er-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Når jeg først har gjort dette, vil du se, at LED'en blinker ekstremt langsomt, fordi vi har beregnet og programmeret værdien til et 16 MHz-ur, og nu efter afbrænding af sikringerne er det kun en 1 MHz intern RC-oscillator. Derfor blinker LED så langsomt. Lad os nu prøve at uploade en skitse igen. Vi ser, at Arduino giver en fejl, og koden uploades ikke. For ved at ændre sikringerne har vi også ødelagt bootloader-indstillingerne. Du kan se det i nedenstående billede.
For at løse dette og sætte Arduino tilbage som det var før, skal vi bare brænde bootloaderen igen til Arduino. For at gøre det skal du gå til Værktøjer -> Programmer - USBasp , og når vi gør det, kan vi igen gå til værktøjer, og vi kan klikke på indstillingen burn bootloader. Dette brænder igen lagerstartloaderen på din Arduino, og alt går tilbage til som det var før.
Efter at bootloaderen blev blinket tilbage til Arduino, gik den tilbage til sin oprindelige tilstand, og det sidste billede viser dig en blinkende LED, efter at bootloaderen blev brændt igen.
Og dette markerer afslutningen på denne artikel. Jeg håber du nød artiklen og lærte noget nyt. Hvis du har spørgsmål vedrørende artiklen, så tøv ikke med at kommentere nedenfor.