Taula de continguts:

Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: 5 passos
Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: 5 passos

Vídeo: Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: 5 passos

Vídeo: Configuració de bits de fusibles del microcontrolador AVR. Creació i càrrega a la memòria flash del microcontrolador del programa LED intermitent: 5 passos
Vídeo: Como clonar microcontrolador AVR con USBASP y programa BUN-O-MAT 2024, De novembre
Anonim
Image
Image

En aquest cas, crearem un programa senzill en codi C i el gravarem a la memòria del microcontrolador. Escriurem el nostre propi programa i compilarem el fitxer hexadecimal, utilitzant Atmel Studio com a plataforma de desenvolupament integrada. Configurarem els fusibles i penjarem fitxer hexadecimal a la memòria del microcontrolador AVR ATMega328P, mitjançant el nostre propi programador i programari AVRDUDE.

AVRDUDE: és un programa per descarregar i penjar les memòries on-chip dels microcontroladors AVR d’Atmel. Pot programar Flash i EEPROM i, si és compatible amb el protocol de programació en sèrie, pot programar fusibles i bloquejar bits.

Pas 1: escriviu el programa i compileu el fitxer hexadecimal amb Atmel Studio

Escriviu un programa i compileu el fitxer hexadecimal amb Atmel Studio
Escriviu un programa i compileu el fitxer hexadecimal amb Atmel Studio
Escriviu un programa i compileu el fitxer hexadecimal amb Atmel Studio
Escriviu un programa i compileu el fitxer hexadecimal amb Atmel Studio

Si no teniu Atmel Studio, haureu de descarregar-lo i instal·lar-lo:

Aquest projecte utilitzarà C, així que seleccioneu l'opció Projecte executable C de GCC a la llista de plantilles per generar un projecte executable a ossos nus.

A continuació, cal especificar per a quin dispositiu es desenvoluparà el projecte. Aquest projecte es desenvoluparà per al microcontrolador AVR ATMega328P.

Escriviu el codi del programa a l'àrea Editor principal de fonts d'Atmel Studio. L'editor de fonts principals: aquesta finestra és l'editor principal dels fitxers d'origen del projecte actual. L'editor té funcions de verificació ortogràfica i de completament automàtic.

1. Hem de dir al compilador a quina velocitat està funcionant el nostre xip perquè pugui calcular correctament els retards.

#ifndef F_CPU

#define F_CPU 16000000UL // indicador de freqüència de cristall (16 MHz AVR ATMega328P) #endif

2. Incloem el preàmbul, que és on posem la nostra informació d’inclusió d’altres fitxers, que defineix variables i funcions globals.

#include // header per habilitar el control de flux de dades sobre pins. Defineix pins, ports, etc.

#include // header per habilitar la funció de retard al programa

3. Després del preàmbul apareix la funció main ().

int main (void) {

La funció main () és única i es diferencia de la resta de funcions. Cada programa C ha de tenir exactament una funció main (). Main () és on l’AVR comença a executar el vostre codi quan s’encén per primera vegada, de manera que és el punt d’entrada del programa.

4. Estableix el pin 0 del PORTB com a sortida.

DDRB = 0b00000001; // Estableix PORTB1 com a sortida

Ho fem escrivint un número binari al registre de direcció de dades B. El registre de direcció de dades B ens permet fer els bits del registre B d’entrada o sortida. Escriure un 1 els fa sortir, mentre que un 0 els farà entrar. Com que estem connectant un LED per actuar com a sortida, escrivim un número binari, fent que el pin 0 de PORT B com a sortida.

5. Bucle.

mentre (1) {

Aquesta afirmació és un bucle, sovint anomenat bucle principal o bucle d'esdeveniments. Aquest codi sempre és cert; per tant, s'executa una i altra vegada en un bucle infinit. No cessa mai. Per tant, el LED parpellejarà infinitament, tret que s’apagui l’alimentació del microcontrolador o s’esborri el codi de la memòria del programa.

6. Enceneu el LED connectat al port PB0

PORTB = 0b00000001; // encén el LED connectat al port PB0

Aquesta línia dóna un 1 al PB0 de PortB. PORTB és un registre de maquinari del xip AVR que conté 8 pins, PB7-PB0, que va d’esquerra a dreta. Posar un 1 al final dóna un 1 a PB0; això fa que PB0 sigui alt, cosa que l'encén. Per tant, el LED connectat al pin PB0 s’encendrà i s’encendrà.

7. Retard

_delay_ms (1000); // crea un retard d'1 segon

Aquesta afirmació crea un retard d’1 segon, de manera que el LED s’encén i es manté encès durant exactament 1 segon.

8. Apagueu tots els pins B, inclòs el PB0

PORTB = 0b00000000; // Desactiva tots els pins B, inclòs PB0

Aquesta línia apaga els 8 pins B del port, de manera que fins i tot PB0 està apagat, de manera que el LED s’apaga.

9. Un altre retard

_delay_ms (1000); // crea un altre retard d'1 segon

S’apaga exactament durant 1 segon, abans de tornar a començar el bucle i trobar-se amb la línia, que la torna a encendre, repetint tot el procés. Això passa infinitament de manera que el LED parpelleja constantment.

10. Declaració de devolució

}

retorn (0); // mai no s'arriba a aquesta línia}

L'última línia del nostre codi és una declaració return (0). Tot i que aquest codi no s’executa mai, perquè hi ha un bucle infinit que no s’acaba mai, per als nostres programes que s’executen en ordinadors d’escriptori, és important que el sistema operatiu sàpiga si s’executen correctament o no. Per aquest motiu, GCC, el nostre compilador, vol que cada main () acabi amb un codi de retorn. Els codis de devolució no són necessaris per al codi AVR, que funciona independent de qualsevol sistema operatiu compatible; tanmateix, el compilador obrirà un avís si no finalitzeu main amb return ().

El darrer pas és la construcció del projecte. Significa compilar i enllaçar finalment tots els fitxers objecte per generar el fitxer executable (.hex). Aquest fitxer hexadecimal es genera a la carpeta Depuració que hi ha a la carpeta Projecte. Aquest fitxer hexadecimal està a punt per carregar-se al xip del microcontrolador.

Pas 2: canviar la configuració per defecte dels bits de fusibles del microcontrolador

Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador
Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador
Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador
Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador
Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador
Canvi de la configuració predeterminada dels bits de fusibles del microcontrolador

És important recordar que alguns dels bits de fusibles es poden utilitzar per bloquejar certs aspectes del xip i que potencialment poden tapar-lo (inutilitzar-lo)

Hi ha un total de 19 bits de fusibles que s’utilitzen a l’ATmega328P i estan separats en tres bytes de fusibles diferents. Tres dels bits de fusible estan inclosos al "Byte de fusible estès", vuit al "Fuse High Byte" i vuit més al "Fuse Low Byte". També hi ha un quart byte que s’utilitza per programar els bits de bloqueig.

Cada byte té 8 bits i cada bit és un paràmetre o una marca separats. Quan parlem de fusibles de configuració, no de configuració, programats, no programats, realment estem utilitzant binari. 1 significa no configurat, no programat i un zero significa establert, programat. En programar els fusibles podeu utilitzar la notació binària o, més comunament, la notació hexadecimal.

Els xips ATmega 328P tenen un oscil·lador RC integrat que té una freqüència de 8 MHz. Es lliuren nous xips amb aquest conjunt com a font de rellotge i el fusible CKDIV8 actiu, donant lloc a un rellotge del sistema d’1 MHz. El temps d'inici s'estableix al màxim i el període de temps d'espera activat.

Els nous xips ATMega 328P solen tenir els següents paràmetres de fusible:

Fusible baix = 0x62 (0b01100010)

Fusible alt=0xD9 (0b11011001)

Fusible ampliat = 0xFF (0b11111111)

Utilitzarem el xip ATmega 328 amb un cristall extern de 16 MHz. Per tant, hem de programar bits de "Fuse Low Byte" en conseqüència.

1. Els bits 3-0 controlen l'elecció de l'oscil·lador i el valor predeterminat de 0010 és utilitzar l'oscil·lador RC intern calibrat, que no volem. Volem que l’oscil·lador de cristall de baixa potència funcioni de 8,0 a 16,0 MHz, de manera que els bits 3-1 (CKSEL [3: 1]) s’han d’establir a 111.

2. Els bits 5 i 4 controlen el temps d’inici i la configuració per defecte de 10 és per a un retard d’arrencada de sis cicles de rellotge des de l’apagat i l’estalvi d’energia, a més d’un retard d’arrencada addicional de 14 cicles de rellotge més 65 mil·lisegons de reinici.

Per estar al costat segur d’un oscil·lador de cristall de baixa potència, volem que el retard màxim de 16.000 cicles de rellotge sigui possible des de l’apagat i l’estalvi d’energia, de manera que SUT [1] s’ha d’establir a 1, més un retard d’arrencada addicional de 14 cicles de rellotge més 65 mil·lisegons des del reinici, de manera que SUT [0] s'hauria d'establir a 1. A més, CKSEL [0] s'hauria d'establir a 1.

3. El bit 6 controla la sortida del rellotge a PORTB0, que no ens importa. Per tant, el bit 6 es pot deixar establert a 1.

4. El bit 7 controla l'operació de divisió per 8 i el paràmetre predeterminat de 0 té la funció habilitada, cosa que no volem. Per tant, el bit 7 s’ha de canviar de 0 a 1.

Per tant, el nou Fuse Low Byte hauria de ser 11111111 que, en notació hexadecimal, és 0xFF

Per programar bits del "Fuse Low Byte" podem utilitzar el nostre programador (https://www.instructables.com/id/ISP-Programmer-fo…) i el programari AVRDUDE. AVRDUDE és una utilitat de línia d'ordres que s'utilitza per descarregar i pujar a microcontroladors Atmel.

Descarregueu AVRDUDE:

En primer lloc, hem d'afegir descriure el nostre programador al fitxer de configuració d'AVRDUDE. Al Windows, el fitxer de configuració normalment es troba a la mateixa ubicació que el fitxer executable d'AVRDUDE.

Enganxeu el text al fitxer de configuració avrdude.conf:

# ISPProgv1

programador id = "ISPProgv1"; desc = "banging port serial, reset = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; tipus_connexió = sèrie; restabliment = 4; sck = 7; mosi = 3; miso = 8;;

Abans d’iniciar AVRDUDE, hem de connectar el microcontrolador al programador, segons l’esquema

Obriu la finestra de sol·licitud DOS.

1. Per veure la llista de programadors que admet avrdude, escriviu l'ordre avrdude -c c. Si tot està bé, la llista hauria de tenir l'identificador de programador "ISPProgv1"

2. Per veure la llista de dispositius Atmel que admet avrdude, escriviu l'ordre avrdude -c ISPProgv1. La llista hauria de tenir el dispositiu m328p per a Atmel ATMega 328P.

A continuació, escriviu avrdude -c ISPProgv1 –p m328p, l'ordre indica avrdude quin programador s'utilitza i quin microcontrolador Atmel està connectat. Presenta la signatura ATmega328P en notació hexadecimal: 0x1e950f. Presenta la programació de bits de fusibles actualment a l'ATmega328P també en notació hexadecimal; en aquest cas, els bytes de fusibles es programen per defecte de fàbrica.

A continuació, escriviu avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, és una ordre per dir a avrdude quin programador s’utilitza i quin microcontrolador Atmel s’adjunta i canviar el fusible de byte baix a 0xFF.

Ara el senyal del rellotge hauria de provenir de l’oscil·lador de cristall de baixa potència.

Pas 3: Gravació del programa a la memòria del microcontrolador ATMega328P

Gravació del programa a la memòria del microcontrolador ATMega328P
Gravació del programa a la memòria del microcontrolador ATMega328P
Gravació del programa a la memòria del microcontrolador ATMega328P
Gravació del programa a la memòria del microcontrolador ATMega328P

Primer, copieu el fitxer hexadecimal del programa que vam fer al principi de la instrucció al directori AVRDUDE.

A continuació, escriviu a la finestra d'indicador DOS l'ordre avrdude –c ISPProgv1 –p m328p –u –U flash: w: [nom del fitxer hexadecimal]

L’ordre escriu un fitxer hexadecimal a la memòria del microcontrolador. Ara, el microcontrolador funciona d’acord amb les instruccions del nostre programa. Ho comprovem!

Pas 4: comproveu que el microcontrolador funcioni d'acord amb les instruccions del nostre programa

Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa
Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa
Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa
Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa
Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa
Comproveu que el microcontrolador funciona d’acord amb les instruccions del nostre programa

Connecteu els components d’acord amb el diagrama esquemàtic del circuit LED parpellejant de l’AVR

En primer lloc, necessitem energia, com fan tots els circuits AVR. Uns 5 volts de potència són suficients per al funcionament del xip AVR. Podeu obtenir-ho amb bateries o bé amb una font d'alimentació de corrent continu. Connectem + 5 V d’alimentació al pin 7 i connectem el pin 8 a terra a la placa. Entre els dos pins, col·loquem un condensador ceràmic de 0,1 μF per suavitzar la potència de la font d'alimentació, de manera que el xip AVR tingui una línia elèctrica suau.

La resistència de 10KΩ s’utilitza per proporcionar un reinici d’encesa (POR) al dispositiu. Quan s’encén l’alimentació, el voltatge del condensador serà zero, de manera que el dispositiu es reinicia (ja que el restabliment està actiu baix), el condensador es carrega a VCC i el restabliment es desactivarà.

Connectem l’ànode del nostre LED al pin AVB PB0. Es tracta del pin 14 de l’ATMega328P. Com que és un LED, volem limitar el flux de corrent al LED perquè no es cremi. Per això, col·loquem una resistència de 330Ω en sèrie amb el LED. El càtode del LED es connecta a terra.

El cristall de 16 MHz s’utilitza per proporcionar rellotge al microcontrolador Atmega328 i s’utilitzen condensadors de 22pF per estabilitzar el funcionament del cristall.

Aquestes són totes les connexions necessàries per encendre el LED. Font d'alimentació.

D'acord. El LED parpelleja amb un retard d’un segon. El treball del microcontrolador correspon a les nostres tasques

Pas 5: Conclusió

És cert que aquell va ser un procés llarg només per parpellejar un LED, però la veritat és que heu esborrat amb èxit els principals obstacles: crear una plataforma de maquinari per programar un microcontrolador AVR, utilitzar Atmel Studio com a plataforma de desenvolupament integrat, utilitzar AVRDUDE com a programari per a configuració i programació d’un microcontrolador AVR

Si voleu estar al dia dels meus projectes bàsics de microcontroladors, subscriviu-vos al meu YouTube. Veure i compartir els meus vídeos és una manera de donar suport al que faig

Subscriu-te al canal YouTube FOG

Recomanat: