- Què són els fusibles a AVR: una explicació detallada
- Fuse Bits a Arduino
- Components necessaris per provar fusibles a AVR
- Esquema per provar els fusibles en AVR
- Provant els fusibles a AVR
En aquest tutorial, parlarem de fusibles. Quan era a la universitat i aprenia de totes les coses interessants de l’electrònica, vaig sentir el terme fusionar-se a AVR per primera vegada, el meu pensament inicial sobre el tema era, oh! hi ha alguna cosa dins de l'AVR que explotarà si he fet alguna cosa malament. Aleshores, a Internet no hi havia gaire recursos disponibles. He buscat força per saber que aquests fusibles feien referència a alguns bits especials dins del microcontrolador AVR. Aquests bits són com petits interruptors dins de l'AVR i, en activar-los / apagar-los, podem activar / desactivar algunes funcions especials de l'AVR. Activar-lo i apagar-lo significa configurar i restablir.
Aprofitarem aquesta oportunitat per discutir tot el que hi ha sobre els bits de fusibles a AVR. Per simplicitat, prendrem l’exemple d’una placa Arduino que alberga el popular microcontrolador ATmega328P. Aquí, aprendreu a configurar aquests fusibles per activar i desactivar algunes d’aquestes funcions, cosa que resulta molt útil en aplicacions de la vida real. Per tant, anem-hi directament.
En les nostres publicacions anteriors, hem creat molts projectes de microcontroladors AVR com el mòdul Interfacing GSM amb microcontrolador AVR i Interfacing HC-05 amb microcontrolador AVR. Podeu consultar-los si voleu obtenir més informació sobre aquests projectes.
Què són els fusibles a AVR: una explicació detallada
Com hem comentat anteriorment, els fusibles del microcontrolador són com petits interruptors que es poden activar i desactivar per habilitar i desactivar diverses funcions del microcontrolador AVR. Aquesta és la part en què sorgeix la nostra següent pregunta, de manera que com configurem o restablim aquests fusibles? La resposta a aquesta pregunta és senzilla: ho fem amb l’ajut de registres de fusibles.
A l’IC ATmega328P, hi ha un total de 19 bits de fusibles i es divideixen en tres bytes de fusibles. Aquests es defineixen com a " Byte de fusible estès", "Byte de fusible alt" i "Byte de fusible baix".
Si mireu la Taula-27 del full de dades ATmega328 / P Rev: 7810D – AVR – 01/15, podreu conèixer tots els petits detalls sobre els bits de fusibles. Però la imatge següent us donarà una millor idea sobre la secció de bits de fusible del full de dades.

Ara, ja que heu après una mica sobre els bits de fusibles, anem a revisar el full de dades i descobrim tots els detalls necessaris sobre aquest CI.
Els bits de fusibles ampliats:
Un cop feu clic a la pestanya Bits de fusibles i desplaceu-vos una mica cap avall, trobareu la taula 27-5: que mostra la taula del "Byte de fusible estès" conegut habitualment com " EFUSE". La imatge següent mostra exactament això.

En aquesta taula, només hi ha tres bits utilitzables i els altres tres estan reservats. Aquests tres bits tracten el nivell de detecció Brownout. Com podeu veure a la nota, si observem la taula 28-5, en podem trobar més detalls.

Com podeu veure a la taula anterior, tenim la taula per a la detecció de marró. La detecció de marró és una característica que restableix el microcontrolador quan la tensió d'alimentació cau per sota d'un determinat nivell de tensió. A l’IC ATmega328P, podem desactivar completament la detecció d’enfosquiment o configurar-la als nivells que es mostren a la taula anterior.
Els bytes de fusibles elevats:
Com podeu veure a la imatge següent, la taula 27-6: del full de dades mostra els bits de fusibles més alts de l'IC ATmega328P.

El fusible alt tracta de diverses tasques dins del microcontrolador ATmega328. En aquesta secció, parlarem dels bits de fusibles més alts i del seu funcionament. Comencem pels bits BOOTRST, BOOTSZ0 i BOOTSZ1. Aquests tres bits s’encarreguen d’establir la mida d’arrencada; La mida d’arrencada fa referència a la quantitat de memòria reservada per instal·lar el carregador d’arrencada.
Un carregador d’arrencada és un programari especial que s’executa a sobre del microcontrolador i gestiona diferents tasques. Però en el cas de l’Arduino, el carregador d’arrencada s’utilitza per carregar l’esbós d’Arduino dins del microcontrolador. En un dels nostres articles anteriors, us hem mostrat com gravar el carregador d’arrencada a ATmega328P mitjançant Arduino. Podeu comprovar-ho si esteu interessat en el tema. Tornant al nostre tema, els propòsits d'altres bits en el byte alt es deixen raonablement clars, el bit EESAVE és preservar la memòria EEPROM mentre es realitza un cicle d'esborrat de xip. El bit WDTON és habilitar o desactivar el temporitzador Watchdog.
El temporitzador de gos de vigilància és un temporitzador especial de l’ATmega328P IC que té un rellotge separat i funciona independentment. Si el temporitzador de vigilància està habilitat, haureu d'esborrar-lo amb un període determinat; en cas contrari, el temporitzador de vigilància restablirà el microcontrolador. Aquesta és una característica útil que inclou molts microcontroladors si el processador queda atrapat; el gos de vigilància el restablirà per evitar danys a l'aplicació final.
El bit DWEN hi és per habilitar el cable de depuració; es tracta d’un protocol preparatori que s’incorpora internament al seu maquinari, que s’utilitza per programar i depurar els processadors. Amb aquesta funció activada, podeu fer flash i depurar el processador amb un únic cable connectat. Però per utilitzar-lo, necessitareu un maquinari especial que sigui preparatiu per a Atmel.
Els dos bits restants són aquells que heu d’evitar tret que sàpiga exactament el que esteu fent. Aquests són el bit RSTDISBL-7 i el bit-5 SPIEN. El RSTDISBL (External Reset Disable), com el seu nom indica, desactiva el pin de restabliment de maquinari extern i el bit SPIEN s’utilitza per desactivar la interfície de programació SPI. Desactivar qualsevol d'aquests dos bits pot completar tot el vostre AVR; per tant, deixar-los en pau és una bona idea.
Els bytes de fusible baix:
Com podeu veure a la imatge següent, la taula 27-7: del full de dades mostra els bits de fusible inferior de l'IC ATmega328P.

Aquest byte de fusible s’encarrega de configurar la font del rellotge i alguns altres paràmetres del rellotge dins de l’AVR. En aquesta secció, aprendrem tot això.
El setè bit o el senyal CKDIV8 es pot configurar per dividir la font del rellotge per 8, això és molt útil, cosa que ja sabríeu si heu intentat programar l'AVR vosaltres mateixos. El següent bit és el bit CKOUT i és el sisè bit del byte de fusible baix. Programant-lo sortiria el senyal de rellotge intern al PORTB0 del microcontrolador.
Els bits-5 i bit-4 SUT1 i SUT0 controlen el temps d’inici del microcontrolador. D’aquesta manera s’eviten accions d’arrencada que poden tenir lloc o no abans que la tensió d’alimentació pugui assolir un nivell de voltatge mínim acceptable. I els quatre darrers CKSEL0 - 4 bits s’utilitzen per seleccionar la font del rellotge del microcontrolador. La taula que es mostra a continuació us proporciona una millor comprensió d’aquests quatre bits que s’encarreguen de configurar la font del rellotge. Podeu trobar aquesta taula a la secció Font del rellotge del full de dades.

Ara, abans d’arribar més enllà, hi hauria una altra cosa que hauria de passar: la taula de retard en l’arrencada de l’oscil·lador. Per retard d’inici, ens referim als bits 4 i 5 del byte de fusible inferior. Cal establir els retards en funció de les condicions en què funcionarà el circuit i del tipus d’oscil·lador que utilitzeu. Els valors predeterminats s’estableixen per reduir la potència de pujada amb 6 cicles de rellotge quan es realitza una seqüència d’encesa o apagada. A continuació, hi ha un altre retard de 14 cicles de rellotge amb 65 ms de retard després de l’arrencada.

Uf! Allò era molta informació per digerir. Però abans de continuar, acabem aquesta secció amb una nota ràpida.
Nota:
Si heu mirat atentament el full de dades, us haureu adonat que programar un bit de fusible significa establir-lo baix, és a dir, 0 (zero), que és el contrari del que generalment fem per fer que un port sigui alt o baix. Cal tenir-ho en compte mentre es configuren els fusibles.
Fuse Bits a Arduino
A la secció anterior hem parlat molt de fusibles, però en aquesta secció parlem de com configurar-los i com escriure-los en un microcontrolador. Per a això, necessitarem una eina anomenada Avrdude. És una eina que es pot utilitzar per llegir, escriure i modificar memòria en microcontroladors AVR. Funciona amb SPI i té una llarga llista de suport per a diferents tipus de programadors. podeu descarregar l'eina des de l'enllaç que es mostra a continuació. A més, farem servir el nostre microcontrolador preferit Arduino.
- Descarregueu Avrdude versió 6.3 Windows-ming32
Ara, ja que teniu Avrdude, haureu d'extreure-ho i obrir una finestra d'ordres en aquesta carpeta. A més, si teniu previst utilitzar-lo més endavant, podeu afegir el camí de la carpeta a la secció de variable d'entorn de Windows. Però el posaré al meu escriptori i hi obriré una finestra d’ordres. Un cop fet això, connectarem el programador USBasp al nostre PC i ens assegurarem que tinguem el controlador adequat per al nostre programador USBasp. Un cop ho fem, ja estem bé i llegirem primer el valor de fusible per defecte. Per fer-ho, heu d'executar l'ordre següent.
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
Si tot està bé, aquesta ordre llegirà els bytes dels fusibles i els col·locarà en tres fitxers de text separats. La imatge següent us donarà una millor idea del procés.

Com podeu veure, l'Avrdude va llegir els bits de fusibles de l'Arduino nano i els va desar en tres fitxers de text separats. Ara els vam obrir i vam obtenir tres valors; per a EFUSE: 0xFD, per a HFUSE: 0XDA, per a LFUSE: 0xFF. Aquest era el valor de fusible per defecte que obteníem per a un Arduino nano. Ara convertim aquests bits a binaris i els comparem amb el seu valor per defecte del full de dades. La taula següent mostra exactament això.
Per comoditat, els bits de fusibles s’escriuen en valors hexadecimals, però si els convertim en valors binaris i els comparem amb el full de dades, sabrem què passa. Comencem pel byte de fusible inferior. Com podeu veure a la cadena anterior, s'estableix a 0XFF i el valor binari seria 0B11111111.
Comparació de bytes de fusibles inferiors amb Arduino:
|
Byte de fusible baix |
Bit núm. |
Valor per defecte a AVR |
Valor per defecte d'Arduino |
|
CKDIV8 |
7 |
0 (programat) |
1 (sense programar) |
|
COMPRA |
6 |
1 (sense programar) |
1 (sense programar) |
|
SUT1 |
5 |
1 (sense programar) |
1 (sense programar) |
|
SUT0 |
4 |
0 (programat) |
1 (sense programar) |
|
CKSEL3 |
3 |
0 (programat) |
1 (sense programar) |
|
CKSEL2 |
2 |
0 (programat) |
1 (sense programar) |
|
CKSEL1 |
1 |
1 (sense programar) |
1 (sense programar) |
|
CKSEL0 |
0 |
0 (programat) |
1 (sense programar) |
El byte de fusible superior està definit a 0XDA en binari, és a dir, 0B11011010.
Byte de fusible superior en binari:
|
Byte de fusible alt |
Bit núm. |
Valor per defecte a AVR |
Valor per defecte d'Arduino |
|
RSTDISBL |
7 |
1 (sense programar) |
1 (sense programar) |
|
DWEN |
6 |
1 (sense programar) |
1 (sense programar) |
|
SPIEN |
5 |
0 (programat) |
0 (programat) |
|
WDTON |
4 |
1 (sense programar) |
1 (sense programar) |
|
EESAVE |
3 |
1 (sense programar) |
1 (sense programar) |
|
BOOTSZ1 |
2 |
0 (programat) |
0 (programat) |
|
BOOTSZ0 |
1 |
0 (programat) |
1 (sense programar) |
|
BOOTRST |
0 |
1 (sense programar) |
0 (programat)) |
El paràmetre del byte de fusible ampliat està definit a 0XFD, en binari és 0B11111101.
Byte de fusible estès en binari:
|
Byte de fusible ampliat |
Bit núm. |
Valor per defecte a AVR |
Valor per defecte d'Arduino |
|
- |
7 |
1 |
1 |
|
- |
6 |
1 |
1 |
|
- |
5 |
1 |
1 |
|
- |
4 |
1 |
1 |
|
- |
3 |
1 |
1 |
|
BODLEVEL2 |
2 |
1 (sense programar) |
1 (sense programar) |
|
BODLEVEL1 |
1 |
1 (sense programar) |
0 (programat) |
|
BODLEVEL0 |
0 |
1 (sense programar) |
1 (sense programar) |
Ara, això marca el final d'aquesta secció. A hores d’ara, hem après moltes coses sobre el microcontrolador AVR i els seus bits de fusible. Per tant, acabem aquest article posant a prova la nostra teoria alterant i experimentant alguns dels bits de fusibles de l’Arduino Nano.
Components necessaris per provar fusibles a AVR
Hem parlat molt dels fusibles a la part anterior. Però per continuar amb l'article, necessitem alguns components de maquinari i algunes eines de programari. En aquesta secció, en parlarem. A continuació es mostra una llista de components necessaris amb imatges.

- Taula de pa: 1
- Arduino Nano - 1
- Programador USBasp AVR - 1
- Cable USB: 1
- Convertidor AVR de 10 pins a 6 pins: 1
- Avrdude (eina de programari per a la programació de AVR)
- LED - 1
- Resistència 330R - 1
- Cables de pont
Esquema per provar els fusibles en AVR
A continuació, es mostra la configuració de les proves de maquinari. Hem connectat l'Arduino Nano al PC amb un cable USB i també hem connectat el programador USBasp al PC. L'objectiu d'aquest article és programar els bits de fusibles en AVR. Per aquest motiu, hem connectat el programador USBasp amb l'Arduino. La imatge següent us donarà una millor idea de la configuració.

Provant els fusibles a AVR
A continuació es mostra la configuració de les proves. Com podeu veure, hem connectat l'Arduino i el programador USBasp a l'USB del meu portàtil.

Ara obrim l'IDE d'Arduino i carreguem un esbós bàsic de parpelleig. El contingut de l’esbós bàsic de parpelleig s’explica per si mateix, de manera que no hi vaig posar cap detall.

Veureu al vídeo que el led del pin no 13 parpelleja com hauria de ser. Ara ajustem la configuració del fusible i la configurem als valors predeterminats. I com hem vist anteriorment al full de dades; l' EFUSE és 0XFF; el HFUSE és D9; El LFUSE és: 62. Ara ho configurem amb Avrdude, el flaixem i veiem què passa. El codi que farem servir és
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m

Un cop ho faci, veureu que el LED parpellejarà extremadament lentament, ja que hem calculat i programat el valor d’un rellotge de 16 MHz i ara, després de cremar els fusibles, només és un oscil·lador RC intern de 1 MHz. Per això, el LED parpelleja tan lentament. Ara intentem tornar a penjar un esbós. Veurem que l’Arduino produeix un error i no es penja el codi. Perquè en alterar els fusibles, també hem desordenat la configuració del carregador d’arrencada. Ho podeu veure a la imatge següent.

Per solucionar-ho i tornar a posar l'Arduino com era abans, només hem de tornar a gravar el carregador d'arrencada per a l'Arduino. Per fer-ho, aneu a Eines -> Programador- USBasp i, un cop ho fem, podem tornar a anar a les eines i podem fer clic a l’opció Grava el carregador d’arrencada. Això tornarà a cremar el carregador d’arrencada del vostre Arduino i tot tornarà a ser com era abans.

Després que el carregador d'arrencada es tornés a Arduino, tornà al seu estat original i l'última imatge mostra un LED parpellejant després que el carregador d'arrencada s'hagi tornat a cremar.

I això marca el final d’aquest article. Espero que us hagi agradat l'article i hàgiu après alguna cosa nova. Si teniu cap pregunta sobre l'article, no dubteu a fer un comentari a continuació.
