- Vad är säkringar i AVR - En detaljförklaring
- Säkringsbitar i Arduino
- Komponenter som krävs för att testa säkringar i AVR
- Schema för testning av säkringsbitar i AVR
- Testa säkringarna i AVR
I den här handledningen ska vi prata om säkringar. Tillbaka när jag gick på college och lärde mig om alla coola saker inom elektronik hörde jag termen säkring i AVR för första gången, min första tanke på ämnet var, åh! det finns något inuti AVR som kommer att blåsa om jag gjorde något fel. Då fanns det inte så mycket resurser på Internet att gå igenom. Jag sökte en hel del för att ta reda på att dessa säkringar hänvisade till några speciella bitar inuti AVR Microcontroller. Dessa bitar är som små omkopplare inuti AVR och genom att slå på / stänga av dem kan vi slå på / stänga av några speciella funktioner i AVR. Att slå på och av det betyder att du ställer in och återställer.
Vi kommer att ta tillfället i akt att diskutera allt som finns där om säkringsbitarna i AVR. För enkelhetens skull tar vi exemplet på ett Arduino-kort som rymmer den populära ATmega328P Microcontroller. Här lär du dig hur du ställer in dessa säkringar för att sätta på och stänga av några av dessa funktioner, vilket är mycket användbart i verkliga applikationer. Så, låt oss gå in i det.
I våra tidigare inlägg har vi byggt många AVR-mikrokontrollprojekt som Interfacing GSM-modulen med AVR-mikrokontroller och Interfacing HC-05 med AVR-mikrokontroller. Du kan kolla in dem om du vill lära dig mer om dessa projekt.
Vad är säkringar i AVR - En detaljförklaring
Som vi diskuterade tidigare är säkringar i mikrokontrollern som små brytare som kan slås på och av för att aktivera och inaktivera olika funktioner i AVR-mikrokontrollen. Det här är den del där vår nästa fråga uppstår, så hur ställer vi in eller återställer dessa säkringar? Svaret på denna fråga är enkelt: Vi gör det med hjälp av säkringsregister.
I ATmega328P IC finns totalt 19 säkringsbitar och de är uppdelade i tre säkringsbyte. Dessa definieras som ”Extended Fuse Bytes”, “High Fuse Byte” och “Low Fuse Byte”.
Om du tittar på tabell-27 i databladet ATmega328 / P Rev: 7810D – AVR – 01/15 kan du ta reda på alla små detaljer om säkringsbitarna. Men bilden nedan ger dig en bättre uppfattning om säkringsbitsavsnittet i databladet.
Nu när du har lärt dig lite om säkringsbitarna, låt oss gå igenom databladet och ta reda på alla nödvändiga detaljer om denna IC.
De utökade säkringsbitarna:
När du väl har klickat på fliken Säkringsbitar och bläddrat lite nedåt, hittar du Tabell 27-5: som visar tabellen för “Utökad säkringsbyte”, allmänt känd som “ EFUSE”. Bilden nedan visar exakt det.
I den här tabellen finns det bara tre användbara bitar, och de andra tre är reserverade. Dessa tre bitar behandlar detekteringsnivån Brownout. Som du kan se i anteckningen om vi tittar på tabell 28-5 kan vi hitta mer information om den.
Som du kan se i ovanstående tabell har vi tabellen för detektering av utbrott. Brownout-detektering är en funktion som återställer mikrokontrollern när matningsspänningen faller under en viss spänningsnivå. I ATmega328P IC kan vi helt inaktivera detekteringen av brownout eller så kan vi ställa in den till de nivåer som visas i ovanstående tabell.
High Fuse Bytes:
Som du kan se i bilden nedan, visar tabell 27-6: i databladet de högre säkringsbitarna på ATmega328P IC.
Den höga säkringsavtal med olika uppgifter inuti ATMEGA328 Microcontroller. I det här avsnittet kommer vi att prata om de högre säkringsbitarna och deras funktion. Låt oss börja med BOOTRST-, BOOTSZ0- och BOOTSZ1-bitarna. Dessa tre bitar är ansvariga för att ställa in startstorleken; startstorlek avser den mängd minne som är reserverat för installation av startladdaren.
En bootloader är en speciell mjukvara som körs ovanpå mikrokontrollern och hanterar olika uppgifter. Men när det gäller Arduino används bootloader för att ladda upp Arduino-skissen inuti mikrokontrollern. I en av våra tidigare artiklar har vi visat dig hur man bränner startladdaren i ATmega328P med Arduino. Du kan kolla in det om du är intresserad av ämnet. Kommer vi tillbaka till vårt ämne, syftena med andra bitar i den höga byten görs rimligt tydliga, EESAVE-biten är att bevara EEPROM-minnet under en kretsradering. WDTON-biten är att aktivera eller inaktivera Watchdog Timer.
Vakthundtimern är en speciell timer i ATmega328P IC som har sin egen klocka och går oberoende. Om vakthundstimern är aktiverad måste du rensa den med en viss period, annars återställer vakthundtimern mikrokontrollern. Detta är en användbar funktion som finns inom många mikrokontroller om processorn fastnar; vakthunden kommer att återställa den för att förhindra skador på slutapplikationen.
DWEN-biten finns där för att aktivera felsökningstråden; detta är ett förberedande protokoll som är internt inbyggt i deras hårdvara, som används för att programmera och felsöka processorerna. Med den här funktionen aktiverad kan du blinka och felsöka processorn med en enda kabel ansluten. Men för att använda den behöver du speciell hårdvara som är förberedande för Atmel.
De återstående två bitarna är de bitarna som du behöver undvika om du inte vet exakt vad du gör. Dessa är RSTDISBL bit-7 och SPIEN bit-5. RSTDISBL (Extern återställning avaktiverad) som namnet antyder inaktiverar den externa hårdvaruåterställningsnålen och SPIEN-biten används för att inaktivera SPI-programmeringsgränssnittet. Om du inaktiverar någon av dessa två bitar kan du stänga din AVR helt. så att lämna dem ensamma är en bra idé.
De låga säkringsbytes:
Som du kan se på bilden nedan, visar tabell 27-7: i databladet de nedre säkringsbitarna på ATmega328P IC.
Denna säkringsbyte är ansvarig för att ställa in klockkällan och några andra parametrar för klockan inuti AVR. I det här avsnittet lär vi oss allt detta.
Den 7: e biten eller CKDIV8-flaggan kan ställas in för att dela klockkällan med 8, det här är mycket praktiskt vilket du kanske redan vet om du själv har försökt programmera AVR. Nästa bit är CKOUT-biten och det är den sjätte biten i Low Fuse Byte. Programmering av den skulle mata ut den interna klocksignalen på mikrokontrollerns PORTB0.
Bits-5 och bit-4 SUT1 och SUT0 styr starttiden för mikrokontrollern. Detta förhindrar uppstartsåtgärder som kan eller inte kan äga rum innan matningsspänningen kan nå en acceptabel minsta tröskelvärde. Och de sista fyra CKSEL0 - 4 bitarna används för att välja mikrokontrollerns klockkälla. Tabellen som visas nedan ger dig en bättre förståelse för dessa fyra bitar som är ansvariga för att ställa in klockkällan. Du hittar den här tabellen i avsnittet Klockkälla i databladet.
Nu, innan vi kommer vidare, finns det en sak till som jag borde gå igenom är tabellen för oscillatorns startfördröjning. Med uppstartsfördröjning hänvisar vi till bitarna 4 och 5 i den nedre säkringsbyten. Fördröjningarna måste ställas in beroende på villkoret att kretsen fungerar och vilken typ av oscillator du använder. Standardvärdena är inställda på långsam stigande effekt med sex klockcykler när en upp- eller avstängningssekvens utförs. Därefter finns det ytterligare en fördröjning på 14 klockcykler med 65 Ms fördröjning efter uppstart.
Few! Det var mycket information att smälta. Men innan vi fortsätter, låt oss avsluta det här avsnittet med en snabb anteckning.
Notera:
Om du har tittat på databladet noga måste du ha lagt märke till att programmera en säkringsbit betyder att du ställer in den låg, dvs. 0 (noll), vilket är motsatsen till vad vi generellt gör för att göra en port hög eller låg. Du måste ha det i åtanke när du konfigurerar dina säkringar.
Säkringsbitar i Arduino
Vi har pratat mycket om säkringar i avsnittet ovan, men i det här avsnittet, låt oss prata om hur man konfigurerar dem och hur man skriver dem i en mikrokontroller. För det behöver vi ett verktyg som heter Avrdude. Det är ett verktyg som kan användas för att läsa, skriva och ändra minne i AVR-mikrokontroller. Det fungerar med SPI och det har en lång lista med stöd för olika typer av programmerare. du kan ladda ner verktyget från länken nedan. Vi kommer också att använda vår favorit mikrokontroller Arduino.
- Ladda ner Avrdude version 6.3 Windows-ming32
Nu när du har Avrdude måste du extrahera det och öppna ett kommandofönster i den mappen. Om du planerar att använda den senare kan du också lägga till mappvägen till din Windows-miljövariabel. Men jag lägger det på skrivbordet och öppnar ett kommandofönster där. När vi har gjort det kommer vi att ansluta USBasp-programmeraren till vår dator och vi kommer att se till att vi har rätt drivrutin för vår USBasp-programmerare. När vi väl har gjort det är vi klara och vi läser först säkringsvärde först. För att göra det måste du köra följande 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
Om allt är rätt kommer detta kommando att läsa säkringsbyten och lägga dem i tre separata textfiler. Bilden nedan ger dig en bättre uppfattning om processen.
Som du kan se, läste Avrdude igenom säkringsbitarna på Arduino nano och sparade dem i tre separata textfiler. Nu öppnade vi dem och fick tre värden; för EFUSE: 0xFD, för HFUSE: 0XDA, för LFUSE: 0xFF. Detta var standardsäkringsvärdet vi fick för en Arduino-nano. Låt oss nu konvertera dessa bitar till binära och jämföra dem med standardvärdet från databladet. Tabellen nedan visar exakt det.
För enkelhets skull är säkringsbitarna skrivna i hexadecimala värden, men om vi konverterar dem till binära värden och jämför dem med databladet vet vi vad som händer. Låt oss börja med lägre säkringsbyte. Som du kan se från ovanstående sträng är den inställd på 0XFF och det binära värdet skulle vara 0B11111111.
Jämföra lager lägre säkringsbytes med Arduino:
Byte med låg säkring |
Bit nr. |
Standardvärde i AVR |
Standardvärde för Arduino |
CKDIV8 |
7 |
0 (programmerad) |
1 (oprogrammerad) |
CKOUT |
6 |
1 (oprogrammerad) |
1 (oprogrammerad) |
SUT1 |
5 |
1 (oprogrammerad) |
1 (oprogrammerad) |
SUT0 |
4 |
0 (programmerad) |
1 (oprogrammerad) |
CKSEL3 |
3 |
0 (programmerad) |
1 (oprogrammerad) |
CKSEL2 |
2 |
0 (programmerad) |
1 (oprogrammerad) |
CKSEL1 |
1 |
1 (oprogrammerad) |
1 (oprogrammerad) |
CKSEL0 |
0 |
0 (programmerad) |
1 (oprogrammerad) |
Higher Fuse Byte är inställd på 0XDA i binär, dvs. 0B11011010.
Högre säkringsbyte i binär:
Hög säkringsbyte |
Bit nr. |
Standardvärde i AVR |
Standardvärde för Arduino |
RSTDISBL |
7 |
1 (oprogrammerad) |
1 (oprogrammerad) |
DWEN |
6 |
1 (oprogrammerad) |
1 (oprogrammerad) |
SPIEN |
5 |
0 (programmerad) |
0 (programmerad) |
WDTON |
4 |
1 (oprogrammerad) |
1 (oprogrammerad) |
EESAVE |
3 |
1 (oprogrammerad) |
1 (oprogrammerad) |
BOOTSZ1 |
2 |
0 (programmerad) |
0 (programmerad) |
BOOTSZ0 |
1 |
0 (programmerad) |
1 (oprogrammerad) |
BOOTRST |
0 |
1 (oprogrammerad) |
0 (programmerad)) |
Inställningen för utökad säkringsbyte är inställd på 0XFD, i binär är den 0B11111101.
Utökad säkringsbyte i binär:
Utökad säkringsbyte |
Bit nr. |
Standardvärde i AVR |
Standardvärde för Arduino |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (oprogrammerad) |
1 (oprogrammerad) |
BODLEVEL1 |
1 |
1 (oprogrammerad) |
0 (programmerad) |
BODLEVEL0 |
0 |
1 (oprogrammerad) |
1 (oprogrammerad) |
Nu markerar detta slutet på detta avsnitt. Från och med nu har vi lärt oss mycket om AVR-mikrokontrollern och dess säkringsbitar. Så låt oss avsluta den här artikeln genom att testa vår teori genom att ändra och experimentera med några av säkringsbitarna i Arduino Nano.
Komponenter som krävs för att testa säkringar i AVR
Vi har pratat mycket om säkringarna i ovanstående del. Men för att gå vidare i artikeln behöver vi några hårdvarukomponenter och några programverktyg. I det här avsnittet kommer vi att prata om dessa. En lista över nödvändiga komponenter med bilder visas nedan.
- Brödbräda - 1
- Arduino Nano - 1
- USBasp AVR-programmerare - 1
- USB-kabel - 1
- AVR 10-stift till 6-stifts omvandlare - 1
- Avrdude (Programvaruverktyg för programmering av AVR)
- LED - 1
- 330R motstånd - 1
- Startkablar
Schema för testning av säkringsbitar i AVR
Installationen av hårdvarutestning visas nedan i denna inställning. Vi har anslutit Arduino Nano till datorn med en USB-kabel och vi har också anslutit USBasp-programmeraren till datorn. Målet med denna artikel är att programmera säkringsbitarna i AVR. Av den anledningen har vi anslutit USBasp-programmeraren till Arduino. Bilden nedan ger dig en bättre uppfattning om installationen.
Testa säkringarna i AVR
Testinställningarna visas nedan. Som du kan se har vi anslutit Arduino och USBasp-programmeraren båda till USB på min bärbara dator.
Låt oss nu öppna Arduino IDE och ladda upp en grundläggande blinkskiss. Innehållet i den grundläggande blinkskissen är självförklarande, så jag lade inga detaljer om det.
Du kommer att se i videon att ledningen på stift nr 13 blinkar som den ska. Låt oss nu justera säkringsinställningarna och ställa in den till standardvärdena. Och som vi tidigare har sett i databladet; den EFUSE är 0xFF; HFUSE är D9; LFUSE är: 62. Låt oss nu konfigurera det med Avrdude, blinka det och se vad som händer. Koden vi ska använda är-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
När jag väl gjort det kommer du att se att lysdioden blinkar extremt långsamt för att vi har beräknat och programmerat värdet för en 16 MHz klocka och nu efter att ha bränt säkringarna är det bara en 1 MHz intern RC-oscillator. Det är därför LED-lampan blinkar så långsamt. Låt oss nu försöka ladda upp en skiss igen. Vi ser att Arduino ger ett fel och koden laddas inte upp. För genom att ändra säkringarna har vi också förstört bootloader-inställningarna. Du kan se det i bilden nedan.
För att åtgärda detta och för att sätta tillbaka Arduino som förut, behöver vi bara bränna startladdaren igen för Arduino. För att göra det, gå till Verktyg -> Programmerare - USBasp , och när vi gör det kan vi igen gå till verktyg och vi kan klicka på alternativet burn bootloader. Detta kommer igen att bränna stock bootloader på din Arduino och allt kommer att gå tillbaka till som det var tidigare.
Efter att startladdaren blinkade tillbaka till Arduino gick den tillbaka till sitt ursprungliga läge och den sista bilden visar en blinkande lysdiod efter att startladdaren brändes igen.
Och detta markerar slutet på denna artikel. Jag hoppas att du gillade artikeln och lärde dig något nytt. Om du har några frågor angående artikeln, tveka inte att kommentera nedan.