Inhoudsopgave:

AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het flashgeheugen van de microcontroller: 5 stappen
AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het flashgeheugen van de microcontroller: 5 stappen

Video: AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het flashgeheugen van de microcontroller: 5 stappen

Video: AVR Microcontroller Zekering Bits Configuratie. Het LED-knipperprogramma maken en uploaden in het flashgeheugen van de microcontroller: 5 stappen
Video: AVR Microcontroller. Chip fuse bits configuration. Creating and uploading the LED blinking program. 2024, November
Anonim
Image
Image

In dit geval zullen we een eenvoudig programma in C-code maken en dit in het geheugen van de microcontroller branden. We zullen ons eigen programma schrijven en het hex-bestand compileren, waarbij we de Atmel Studio als geïntegreerd ontwikkelplatform gebruiken. We zullen fuse-bits configureren en een hex-bestand uploaden naar het geheugen van de AVR ATMega328P-microcontroller, met behulp van onze eigen programmeur en software AVRDUDE.

AVRDUDE - is een programma voor het downloaden en uploaden van de on-chip geheugens van Atmel's AVR-microcontrollers. Het kan de Flash en EEPROM programmeren, en waar ondersteund door het seriële programmeerprotocol, kan het zekering- en vergrendelingsbits programmeren.

Stap 1: Programma schrijven en het Hex-bestand compileren, met behulp van de Atmel Studio

Programma schrijven en het Hex-bestand compileren, met behulp van de Atmel Studio
Programma schrijven en het Hex-bestand compileren, met behulp van de Atmel Studio
Programma schrijven en het Hex-bestand compileren, met behulp van de Atmel Studio
Programma schrijven en het Hex-bestand compileren, met behulp van de Atmel Studio

Als je Atmel Studio niet hebt, moet je het downloaden en installeren:

Dit project gebruikt C, dus selecteer de optie GCC C Executable Project uit de lijst met sjablonen om een eenvoudig uitvoerbaar project te genereren.

Vervolgens moet worden gespecificeerd voor welk apparaat het project zal worden ontwikkeld. Dit project zal worden ontwikkeld voor de AVR ATMega328P microcontroller.

Typ de code van het programma in het gebied Hoofdbroneditor van Atmel Studio. De hoofdbroneditor – Dit venster is de hoofdeditor voor de bronbestanden in het huidige project. De editor heeft functies voor spellingcontrole en automatisch aanvullen.

1. We moeten de compiler vertellen met welke snelheid onze chip draait, zodat hij vertragingen goed kan berekenen.

#ifndef F_CPU

#define F_CPU 16000000UL // vertellende controller kristalfrequentie (16 MHz AVR ATMega328P) #endif

2. We nemen de preambule op, waar we onze include-informatie uit andere bestanden plaatsen, die globale variabelen en functies definieert.

#include //header om gegevensstroomcontrole over pinnen in te schakelen. Definieert pinnen, poorten, enz.

#include //header om de vertragingsfunctie in het programma in te schakelen

3. Na de preambule komt de main() functie.

int main(void) {

De functie main() is uniek en onderscheidt zich van alle andere functies. Elk C-programma moet precies één main()-functie hebben. Main() is waar de AVR begint met het uitvoeren van uw code wanneer de stroom voor het eerst wordt ingeschakeld, dus het is het startpunt van het programma.

4. Stel pin 0 van de PORTB in als uitgang.

DDRB=0b00000001; //Stel PORTB1 in als uitvoer

We doen dit door een binair getal naar het Data Direction Register B te schrijven. Het Data Direction Register B stelt ons in staat om de bits van register B in- of uit te voeren. Het schrijven van een 1 zorgt ervoor dat ze worden uitgevoerd, terwijl een 0 ze invoert. Omdat we een LED bevestigen om als uitvoer te fungeren, schrijven we een binair getal, waardoor pin 0 van POORT B als uitvoer wordt gemaakt.

5. Lus.

terwijl (1) {

Deze instructie is een lus, vaak de hoofdlus of gebeurtenislus genoemd. Deze code is altijd waar; daarom wordt het keer op keer uitgevoerd in een oneindige lus. Het houdt nooit op. Daarom zal de LED oneindig knipperen, tenzij de microcontroller wordt uitgeschakeld of de code uit het programmageheugen wordt gewist.

6. Schakel de LED in die is aangesloten op poort PB0

PORTB= 0b00000001; // schakelt de LED in die is aangesloten op poort PB0

Deze regel geeft een 1 aan de PB0 van PortB. PORTB is een hardwareregister op de AVR-chip met 8 pinnen, PB7-PB0, van links naar rechts. Als u een 1 aan het einde zet, krijgt u een 1 voor PB0; dit stelt PB0 hoog in, waardoor het wordt ingeschakeld. Daarom gaat de LED die op pin PB0 is bevestigd aan en oplichten.

7. Vertraging

_delay_ms(1000); // creëert een vertraging van 1 seconde

Deze verklaring zorgt voor een vertraging van 1 seconde, zodat de LED precies 1 seconde aangaat en blijft branden.

8. Schakel alle B-pinnen uit, inclusief PB0

PORTB= 0b00000000; // Schakelt alle B-pinnen uit, inclusief PB0

Deze lijn schakelt alle 8 Port B-pinnen uit, zodat zelfs PB0 uit is, dus de LED gaat uit.

9. Nog een vertraging

_delay_ms(1000); // creëert nog een vertraging van 1 seconde

Het schakelt precies 1 seconde uit, voordat de lus helemaal opnieuw begint en de lijn tegenkomt, die het weer aanzet en het proces helemaal herhaalt. Dit gebeurt oneindig zodat de LED constant aan en uit knippert.

10. Retourverklaring

}

retour (0); //deze regel wordt nooit echt bereikt}

De laatste regel van onze code is een return (0) statement. Ook al wordt deze code nooit uitgevoerd, omdat er een oneindige lus is die nooit eindigt, voor onze programma's die op desktopcomputers draaien, is het belangrijk dat het besturingssysteem weet of ze correct draaiden of niet. Om die reden wil GCC, onze compiler, dat elke main() eindigt met een retourcode. Retourcodes zijn overbodig voor AVR-code, die los van elk ondersteunend besturingssysteem draait; desalniettemin zal de compiler een waarschuwing geven als je main niet beëindigt met return().

De laatste stap is het bouwen van het project. Het betekent het compileren en uiteindelijk koppelen van alle objectbestanden om het uitvoerbare bestand (.hex) te genereren. Dit hex-bestand wordt gegenereerd in de map Debug die zich in de map Project bevindt. Dit hex-bestand is klaar om in de microcontroller-chip te worden geladen.

Stap 2: De standaardconfiguratie van de microcontroller-zekeringbits wijzigen

De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen
De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen
De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen
De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen
De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen
De standaardconfiguratie van de zekeringbits van de microcontroller wijzigen

Het is belangrijk om te onthouden dat sommige zekeringbits kunnen worden gebruikt om bepaalde aspecten van de chip te vergrendelen en deze mogelijk kunnen blokkeren (onbruikbaar maken)

Er zijn in totaal 19 fuse-bits die worden gebruikt in de ATmega328P, en ze zijn gescheiden in drie verschillende fuse-bytes. Drie van de zekeringbits bevinden zich in de "Extended Fuse Byte", acht bevinden zich in de "Fuse High Byte" en nog acht in de "Fuse Low Byte". Er is ook een vierde byte die wordt gebruikt om de slotbits te programmeren.

Elke byte is 8 bits en elke bit is een aparte instelling of vlag. Als we het hebben over instellen, niet instellen, geprogrammeerde, niet geprogrammeerde zekeringen, gebruiken we eigenlijk binair. 1 betekent niet ingesteld, niet geprogrammeerd en een nul betekent ingesteld, geprogrammeerd. Bij het programmeren van de zekeringen kunt u binaire notatie of meer algemeen hexadecimale notatie gebruiken.

ATmega 328P-chips hebben een ingebouwde RC-oscillator met een frequentie van 8 MHz. Nieuwe chips worden geleverd met deze set als klokbron en de CKDIV8-zekering actief, wat resulteert in een 1 MHz systeemklok. De opstarttijd is ingesteld op maximum en de time-outperiode is ingeschakeld.

Nieuwe ATMega 328P-chips hebben over het algemeen de volgende zekeringinstellingen:

Lage zekering = 0x62 (0b01100010)

Hoge zekering = 0xD9 (0b11011001)

Verlengde zekering = 0xFF (0b11111111)

We zullen de ATmega 328-chip gebruiken met een extern 16MHz-kristal. Daarom moeten we bits van "Fuse Low Byte" dienovereenkomstig programmeren.

1. Bits 3-0 bepalen de keuze van de oscillator, en de standaardinstelling van 0010 is om de gekalibreerde interne RC-oscillator te gebruiken, wat we niet willen. We willen dat de kristaloscillator met laag vermogen werkt van 8,0 tot 16,0 MHz, dus bits 3-1 (CKSEL[3:1]) moeten worden ingesteld op 111.

2. Bits 5 en 4 regelen de opstarttijd en de standaardinstelling van 10 is voor een opstartvertraging van zes klokcycli vanaf uitschakelen en stroombesparing, plus een extra opstartvertraging van 14 klokcycli plus 65 milliseconden vanaf reset.

Om zeker te zijn van een kristaloscillator met laag vermogen, willen we de maximaal mogelijke vertraging van 16.000 klokcycli vanaf het uitschakelen en de stroombesparing, dus SUT[1] moet worden ingesteld op 1, plus een extra opstartvertraging van 14 klokcycli plus 65 milliseconden vanaf reset, dus SUT[0] moet worden ingesteld op 1. Bovendien moet CKSEL[0] worden ingesteld op 1.

3. Bit 6 regelt de klokuitvoer naar PORTB0, wat ons niet uitmaakt. Dus bit 6 kan op 1 blijven staan.

4. Bit 7 regelt de bewerking van delen door 8 en de standaardinstelling van 0 heeft de functie ingeschakeld, wat we niet willen. Dus bit 7 moet van 0 naar 1 worden veranderd.

Daarom moet de nieuwe Fuse Low Byte 11111111 zijn, wat in hexadecimale notatie 0xFF is

Om bits van de "Fuse Low Byte" te programmeren, kunnen we onze programmeur (https://www.instructables.com/id/ISP-Programmer-fo…) en software AVRDUDE gebruiken. AVRDUDE is een opdrachtregelprogramma dat wordt gebruikt om te downloaden van en te uploaden naar Atmel-microcontrollers.

AVRDUDE downloaden:

Eerst moeten we een beschrijving van onze programmeur toevoegen aan het configuratiebestand van AVRDUDE. Op Windows bevindt het configuratiebestand zich meestal op dezelfde locatie als het uitvoerbare bestand van AVRDUDE.

Plak de tekst in het configuratiebestand avrdude.conf:

# ISPProgv1

programmeur-id = " ISPProgv1"; desc = "seriële poort bonkt, reset=dtr sck=rts mosi=txd miso=cts"; type = "Servisch"; verbindingstype = serieel; reset = 4; sck = 7; mosi = 3; miso = 8;;

Voordat we de AVRDUDE starten, moeten we de microcontroller volgens het schema op de programmeur aansluiten

Open het DOS-promptvenster.

1. Om de lijst met programmeurs te bekijken die door avrdude worden ondersteund, typt u het commando avrdude -c c. Als alles goed is, zou de lijst programmer-ID "ISPProgv1" moeten hebben

2. Om de lijst met Atmel-apparaten te bekijken die door avrdude worden ondersteund, typt u het commando avrdude -c ISPProgv1. De lijst moet apparaat m328p voor Atmel ATMega 328P hebben.

Typ vervolgens avrdude -c ISPProgv1 –p m328p, het commando vertelt avrdude welke programmer wordt gebruikt en welke Atmel-microcontroller is aangesloten. Het presenteert de ATmega328P-handtekening in hexadecimale notatie: 0x1e950f. Het presenteert de fuse-bit-programmering die momenteel in de ATmega328P is, ook in hexadecimale notatie; in dit geval zijn de zekeringbytes geprogrammeerd volgens fabrieksinstellingen.

Typ vervolgens avrdude -c ISPProgv1 –p m328p –U lfuse:w:0xFF:m. Het is een opdracht om avrdude te vertellen welke programmer wordt gebruikt en welke Atmel-microcontroller is aangesloten en om de Fuse Low Byte te wijzigen in 0xFF.

Nu moet het kloksignaal afkomstig zijn van een kristaloscillator met laag vermogen.

Stap 3: Het programma in het geheugen van de ATMega328P-microcontroller branden

Het programma in het geheugen van de ATMega328P-microcontroller branden
Het programma in het geheugen van de ATMega328P-microcontroller branden
Het programma in het geheugen van de ATMega328P-microcontroller branden
Het programma in het geheugen van de ATMega328P-microcontroller branden

Kopieer eerst het hex-bestand van het programma dat we aan het begin van de instructie hebben gemaakt naar de AVRDUDE-directory.

Typ vervolgens in het DOS-promptvenster het commando avrdude –c ISPProgv1 –p m328p –u –U flash:w:[naam van uw hex-bestand]

De opdracht schrijft een hex-bestand naar het geheugen van de microcontroller. Nu werkt de microcontroller volgens de instructies van ons programma. Laten we het bekijken!

Stap 4: Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma

Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma
Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma
Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma
Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma
Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma
Controleer of de microcontroller werkt in overeenstemming met de instructies van ons programma

Sluit componenten aan volgens schema van de AVR Knipperende LED Circuit

Ten eerste hebben we stroom nodig, zoals alle AVR-circuits. Ongeveer 5 volt stroom is voldoende voor de werking van de AVR-chip. U kunt dit krijgen van batterijen of een gelijkstroomvoeding. We verbinden +5V stroom met pin 7 en verbinden pin 8 met aarde op het breadboard. Tussen beide pinnen plaatsen we een keramische condensator van 0,1 F om de stroomtoevoer af te vlakken, zodat de AVR-chip een soepele stroomlijn krijgt.

De 10KΩ-weerstand wordt gebruikt om het apparaat Power On Reset (POR) te geven. Wanneer de stroom is ingeschakeld, is de spanning over de condensator nul, zodat het apparaat wordt gereset (aangezien reset actief laag is), waarna de condensator wordt opgeladen naar VCC en de reset wordt uitgeschakeld.

We verbinden de anode van onze LED met AVR pin PB0. Dit is pin 14 van de ATMega328P. Omdat het een LED is, willen we de stroom die naar de LED vloeit beperken, zodat deze niet doorbrandt. Daarom plaatsen we een weerstand van 330Ω in serie met de LED. De kathode van de LED wordt verbonden met aarde.

16 MHz-kristal wordt gebruikt om de Atmega328-microcontroller te klokken en 22pF-condensatoren worden gebruikt om de werking van kristal te stabiliseren.

Dit zijn alle aansluitingen die nodig zijn om de LED te laten branden. Stroomvoorziening.

OK. LED knippert met een vertraging van één seconde. Het werk van de microcontroller komt overeen met onze taken

Stap 5: Conclusie

Toegegeven, dat was een lang proces om alleen maar een LED te laten knipperen, maar de waarheid is dat je met succes grote hindernissen hebt genomen: het creëren van een hardwareplatform voor het programmeren van een AVR-microcontroller, het gebruik van de Atmel Studio als het geïntegreerde ontwikkelplatform, het gebruik van AVRDUDE als software voor configureren en programmeren van een AVR-microcontroller

Als je op de hoogte wilt blijven van mijn basis-microcontrollers-projecten, abonneer je dan op mijn YouTube! Het bekijken en delen van mijn video's is een manier om te ondersteunen wat ik doe

Abonneer je op het YouTube FOG-kanaal

Aanbevolen: