Cuprins:

Configurare microcontroler AVR Fuse Bits. Crearea și încărcarea în memoria flash a microcontrolerului programului LED intermitent .: 5 pași
Configurare microcontroler AVR Fuse Bits. Crearea și încărcarea în memoria flash a microcontrolerului programului LED intermitent .: 5 pași

Video: Configurare microcontroler AVR Fuse Bits. Crearea și încărcarea în memoria flash a microcontrolerului programului LED intermitent .: 5 pași

Video: Configurare microcontroler AVR Fuse Bits. Crearea și încărcarea în memoria flash a microcontrolerului programului LED intermitent .: 5 pași
Video: [RO] Curs 05 Proiectarea cu Microprocesoare - I2C și USB 2024, Iunie
Anonim
Image
Image

În acest caz, vom crea un program simplu în cod C și îl vom inscripționa în memoria microcontrolerului. Vom scrie propriul nostru program și vom compila fișierul hex, folosind Atmel Studio ca platformă de dezvoltare integrată. Vom configura biți de siguranță și vom încărca fișier hexagonal în memoria microcontrolerului AVR ATMega328P, folosind propriul programator și software-ul AVRDUDE.

AVRDUDE - este un program pentru descărcarea și încărcarea memoriei on-chip ale microcontrolerelor AVR ale Atmel. Poate programa Flash și EEPROM și, acolo unde este susținut de protocolul de programare serială, poate programa biți de siguranță și blocare.

Pasul 1: Scrieți programul și compilați fișierul Hex, folosind Atmel Studio

Scrieți programul și compilați fișierul Hex, folosind Atmel Studio
Scrieți programul și compilați fișierul Hex, folosind Atmel Studio
Scrieți programul și compilați fișierul Hex, folosind Atmel Studio
Scrieți programul și compilați fișierul Hex, folosind Atmel Studio

Dacă nu aveți Atmel Studio, ar trebui să îl descărcați și să îl instalați:

Acest proiect va utiliza C, deci selectați opțiunea GCC C Executable Project din lista de șabloane pentru a genera un proiect executabil cu oase goale.

Apoi, este necesar să specificați pentru ce dispozitiv va fi dezvoltat proiectul. Acest proiect va fi dezvoltat pentru microcontrolerul AVR ATMega328P.

Tastați codul programului în zona Editor sursă principal din Atmel Studio. Editorul sursă principală - Această fereastră este editorul principal pentru fișierele sursă din proiectul curent. Editorul are funcții de verificare ortografică și completare automată.

1. Trebuie să îi spunem compilatorului la ce viteză rulează cipul nostru pentru a putea calcula întârzierile în mod corespunzător.

#ifndef F_CPU

#define F_CPU 16000000UL // indicând frecvența cristalului (16 MHz AVR ATMega328P) #endif

2. Includem preambulul, care este locul în care punem informațiile noastre de includere din alte fișiere, care definește variabilele și funcțiile globale.

#include // header pentru a permite controlul fluxului de date peste pini. Definește pini, porturi etc.

#include // header pentru a activa funcția de întârziere în program

3. După preambul apare funcția main ().

int main (nul) {

Funcția main () este unică și separată de toate celelalte funcții. Fiecare program C trebuie să aibă exact o funcție main (). Main () este locul în care AVR începe să vă execute codul atunci când pornește prima dată, deci este punctul de intrare al programului.

4. Setați pinul 0 al PORTB ca ieșire.

DDRB = 0b00000001; // Setați PORTB1 ca ieșire

Facem acest lucru scriind un număr binar în Registrul de direcție a datelor B. Registrul de direcție a datelor B ne permite să realizăm biții din registrul B de intrare sau ieșire. Scrierea unui 1 le face să iasă, în timp ce un 0 le face să intre. Fiind că atașăm un LED pentru a acționa ca ieșire, scriem un număr binar, făcând pinul 0 al PORTULUI ca ieșire.

5. Buclă.

în timp ce (1) {

Această afirmație este o buclă, adesea denumită bucla principală sau buclă de eveniment. Acest cod este întotdeauna adevărat; prin urmare, se execută iar și iar într-o buclă infinită. Nu încetează niciodată. Prin urmare, LED-ul va clipi la infinit, cu excepția cazului în care alimentarea este oprită din microcontroler sau dacă codul este șters din memoria programului.

6. Porniți LED-ul atașat la portul PB0

PORTB = 0b00000001; // aprinde LED-ul atașat la portul PB0

Această linie dă un 1 PB0 al PortB. PORTB este un registru hardware de pe cipul AVR care conține 8 pini, PB7-PB0, care merge de la stânga la dreapta. Punerea unui 1 la final dă un 1 la PB0; aceasta setează PB0 mare, care îl pornește. Prin urmare, LED-ul atașat pinului PB0 se va aprinde și se va aprinde.

7. Întârziere

_delay_ms (1000); // creează o întârziere de 1 secundă

Această declarație creează o întârziere de 1 secundă, astfel încât LED-ul să se aprindă și să rămână aprins exact 1 secundă.

8. Opriți toți pinii B, inclusiv PB0

PORTB = 0b00000000; // Dezactivează toți pinii B, inclusiv PB0

Această linie oprește toți cei 8 pini B, astfel încât chiar și PB0 să fie oprit, astfel încât LED-ul să se stingă.

9. O altă întârziere

_delay_ms (1000); // creează o altă întârziere de 1 secundă

Se oprește exact timp de 1 secundă, înainte de a porni din nou bucla și de a întâlni linia, care o reporni, repetând procesul peste tot. Acest lucru se întâmplă infinit, astfel încât LED-ul să clipească în mod constant aprins și oprit.

10. Declarație de returnare

}

returnare (0); // această linie nu este niciodată atinsă}

Ultima linie a codului nostru este o declarație return (0). Chiar dacă acest cod nu este executat niciodată, deoarece există o buclă infinită care nu se termină niciodată, pentru programele noastre care rulează pe computere desktop, este important ca sistemul de operare să știe dacă au rulat corect sau nu. Din acest motiv, GCC, compilatorul nostru, dorește ca fiecare main () să se încheie cu un cod de returnare. Codurile de returnare sunt inutile pentru codul AVR, care rulează independent de orice sistem de operare suport; totuși, compilatorul va declanșa un avertisment dacă nu terminați main cu return ().

Ultimul pas este construirea proiectului. Înseamnă să compilați și să legați în cele din urmă toate fișierele obiect pentru a genera fișierul executabil (.hex). Acest fișier hexagonal este generat în folderul Debug care se află în folderul Project. Acest fișier hexagonal este gata pentru a fi încărcat în cipul microcontrolerului.

Pasul 2: Schimbarea configurației implicite a bițelor de siguranță ale microcontrolerului

Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului
Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului
Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului
Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului
Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului
Modificarea configurației implicite a bițelor de siguranță ale microcontrolerului

Este important să ne amintim că unele dintre bițele siguranței pot fi folosite pentru a bloca anumite aspecte ale cipului și pot să-l împiedice (să îl facă inutilizabil)

Există un total de 19 biți de siguranță care sunt utilizați în ATmega328P și sunt separați în trei octeți de siguranță diferiți. Trei dintre biții de siguranță sunt conținuți în „Byte Extended Fuse”, opt sunt „Fuse High Byte” și încă opt sunt conținute în „Fuse Low Byte”. Există, de asemenea, un al patrulea octet care este utilizat pentru a programa biții de blocare.

Fiecare octet este de 8 biți și fiecare bit este o setare sau un flag separat. Când vorbim despre setări, nu setări, programate, siguranțe fuzibile programate, folosim de fapt binare. 1 înseamnă nedefinit, neprogramat și zero înseamnă setat, programat. Când programați siguranțele, puteți utiliza notația binară sau mai frecvent notația hexazecimală.

Cipurile ATmega 328P au un oscilator RC încorporat care are o frecvență de 8 MHz. Cipurile noi sunt livrate cu acest set ca sursă de ceas și siguranța CKDIV8 activă, rezultând un ceas de sistem de 1 MHz. Timpul de pornire este setat la maxim și perioada de expirare activată.

Noile cipuri ATMega 328P au în general următoarele setări de siguranță:

Siguranță mică = 0x62 (0b01100010)

Siguranță mare = 0xD9 (0b11011001)

Siguranță extinsă = 0xFF (0b11111111)

Vom folosi cipul ATmega 328 cu un cristal extern de 16 MHz. Prin urmare, trebuie să programăm biți de „Fuse Low Byte” în consecință.

1. Biții 3-0 controlează opțiunea oscilatorului, iar setarea implicită a lui 0010 este de a utiliza oscilatorul RC intern calibrat, ceea ce nu vrem. Vrem ca funcționarea oscilatorului cu cristal de mică putere de la 8,0 la 16,0 MHz, deci biții 3-1 (CKSEL [3: 1]) ar trebui să fie setați la 111.

2. Biții 5 și 4 controlează timpul de pornire, iar setarea implicită de 10 este pentru o întârziere de pornire de șase cicluri de ceas de la oprire și economisire a energiei, plus o întârziere de pornire suplimentară de 14 cicluri de ceas plus 65 de milisecunde de la resetare.

Pentru a fi în siguranță pentru un oscilator cu cristal de mică putere, dorim întârzierea maximă posibilă de 16 000 de cicluri de ceas de la oprire și economisire de energie, astfel încât SUT [1] ar trebui setat la 1, plus o întârziere de pornire suplimentară de 14 cicluri de ceas plus 65 de milisecunde de la resetare, deci SUT [0] trebuie setat la 1. În plus, CKSEL [0] trebuie setat la 1.

3. Bitul 6 controlează ieșirea ceasului către PORTB0, de care nu ne pasă. Deci, bitul 6 poate fi lăsat setat la 1.

4. Bitul 7 controlează operația de divizare la 8, iar setarea implicită 0 are caracteristica activată, pe care nu o dorim. Deci, bitul 7 trebuie schimbat de la 0 la 1.

Prin urmare, noul Fuse Low Byte ar trebui să fie 11111111, care, în notație hexazecimală, este 0xFF

Pentru a programa biți ai „Fuse Low Byte” putem folosi programatorul nostru (https://www.instructables.com/id/ISP-Programmer-fo…) și software-ul AVRDUDE. AVRDUDE este un utilitar de linie de comandă care este folosit pentru a descărca și încărca pe microcontrolerele Atmel.

Descărcați AVRDUDE:

În primul rând, trebuie să adăugăm descrie programatorul nostru în fișierul de configurare al AVRDUDE. Pe Windows, fișierul de configurare se află în mod obișnuit în aceeași locație ca fișierul executabil al AVRDUDE.

Lipiți textul în fișierul de configurare avrdude.conf:

# ISPProgv1

programator id = "ISPProgv1"; desc = "port serial banging, reset = dtr sck = rts mosi = txd miso = cts"; tip = "serbb"; connection_type = serial; reset = 4; sck = 7; mosi = 3; miso = 8;;

Înainte de a începe AVRDUDE, trebuie să conectăm microcontrolerul la programator, conform schemei

Deschideți fereastra de prompt DOS.

1. Pentru a vizualiza lista programatorului care este acceptat avrdude tastați comanda avrdude -c c. Dacă totul este în regulă, lista ar trebui să aibă ID-ul programatorului "ISPProgv1"

2. Pentru a vizualiza lista dispozitivelor Atmel care sunt acceptate avrdude tastați comanda avrdude -c ISPProgv1. Lista ar trebui să aibă dispozitivul m328p pentru Atmel ATMega 328P.

Apoi, tastați avrdude -c ISPProgv1 –p m328p, comanda spune avrdude ce programator este utilizat și ce microcontroler Atmel este atașat. Prezintă semnătura ATmega328P în notație hexazecimală: 0x1e950f. Prezintă programarea de biți de siguranță în prezent în ATmega328P, de asemenea, în notație hexazecimală; în acest caz, octeții siguranței sunt programați conform valorilor implicite din fabrică.

Apoi, tastați avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, este o comandă pentru a spune avrdude ce programator este utilizat și ce microcontroler Atmel este atașat și pentru a schimba Fuse Low Byte la 0xFF.

Acum semnalul de ceas ar trebui să provină de la oscilatorul cu cristal de mică putere.

Pasul 3: Arderea programului în memoria microcontrolerului ATMega328P

Arderea programului în memoria microcontrolerului ATMega328P
Arderea programului în memoria microcontrolerului ATMega328P
Arderea programului în memoria microcontrolerului ATMega328P
Arderea programului în memoria microcontrolerului ATMega328P

Mai întâi, copiați fișierul hexagonal al programului pe care l-am făcut la începutul instrucțiunii în directorul AVRDUDE.

Apoi, tastați în fereastra de prompt DOS comanda avrdude –c ISPProgv1 –p m328p –u –U flash: w: [numele fișierului dvs. hex]

Comanda scrie fișier hexagonal în memoria microcontrolerului. Acum, microcontrolerul funcționează în conformitate cu instrucțiunile programului nostru. Hai să verificăm!

Pasul 4: Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru

Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru
Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru
Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru
Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru
Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru
Verificați funcționarea microcontrolerului în conformitate cu instrucțiunile programului nostru

Conectați componentele în conformitate cu schema circuitului AVR intermitent

În primul rând, avem nevoie de energie, la fel ca toate circuitele AVR. Aproximativ 5 volți de putere sunt suficienți pentru funcționarea cipului AVR. Puteți obține acest lucru fie de la baterii, fie de la o sursă de curent continuu. Conectăm + 5V de putere la pinul 7 și conectăm pinul 8 la masă pe panoul de măsurare. Între ambii pini, așezăm un condensator ceramic de 0,1 μF pentru a netezi puterea sursei de alimentare, astfel încât cipul AVR să obțină o linie de alimentare netedă.

Rezistorul de 10KΩ este utilizat pentru a furniza resetarea la pornire (POR) a dispozitivului. Când alimentarea este pornită, tensiunea pe condensator va fi zero, astfel încât dispozitivul să se reseteze (deoarece resetarea este activă scăzută), atunci condensatorul se încarcă la VCC și resetarea va fi dezactivată.

Conectăm anodul LED-ului nostru la pinul AVB PB0. Acesta este pinul 14 al ATMega328P. Deoarece este un LED, vrem să limităm curentul care curge la LED, astfel încât să nu se ardă. Acesta este motivul pentru care plasăm un rezistor de 330Ω în serie cu LED-ul. Catodul LED-ului este conectat la masă.

Cristalul de 16 MHz este utilizat pentru a furniza ceasul microcontrolerului Atmega328, iar condensatorii 22pF sunt utilizați pentru a stabiliza funcționarea cristalului.

Acestea sunt toate conexiunile necesare pentru aprinderea LED-ului. Alimentare electrică.

Bine. LED-ul clipește cu o întârziere de o secundă. Lucrarea microcontrolerului corespunde sarcinilor noastre

Pasul 5: Concluzie

Desigur, a fost un proces îndelungat doar pentru a aprinde intermitent un LED, dar adevărul este că ați eliminat cu succes obstacolele majore: crearea unei platforme hardware pentru programarea unui microcontroler AVR, utilizarea Atmel Studio ca platformă de dezvoltare integrată, utilizarea AVRDUDE ca software pentru configurarea și programarea unui microcontroler AVR

Dacă doriți să fiți la curent cu proiectele mele de bază de microcontrolere, abonați-vă la YouTube! Vizionarea și partajarea videoclipurilor mele reprezintă o modalitate de a susține ceea ce fac

Abonați-vă la canalul YouTube FOG

Recomandat: