Microcontrolere - Notiuni de baza PDF

Summary

Microcontrolerul este un circuit integrat care functioneaza ca un "computer mic". Acesta are o structura complexa ce include CPU, memorie si dispozitive periferice pentru a interaciona cu mediul exterior. Este utilizat in aplicatii embedded.

Full Transcript

Un **microcontroler** este un circuit integrat (IC) care funcționează ca un \"computer mic\". Are o structură complexă și include: 1. **CPU** (unitatea de procesare) -- pentru execuția instrucțiunilor. 2. **Memorie** -- pentru stocarea programelor și datelor. 3. **Periferice** -- componente pe...

Un **microcontroler** este un circuit integrat (IC) care funcționează ca un \"computer mic\". Are o structură complexă și include: 1. **CPU** (unitatea de procesare) -- pentru execuția instrucțiunilor. 2. **Memorie** -- pentru stocarea programelor și datelor. 3. **Periferice** -- componente pentru interacțiunea cu exteriorul (ex: intrări/ieșiri digitale, ADC, timere). **Caracteristici principale:** - **Pini** -- pentru conectarea la alte dispozitive (intrări/ieșiri). - **Alimentare** -- funcționează la o anumită tensiune (ex: 3.3V sau 5V) și consumă un curent specific. - **Utilizare** -- folosit în sisteme embedded (ex: electrocasnice, mașini, drone). **Componente incluse:** 1. **Memorii**: - **RAM** -- pentru stocarea temporară a datelor. - **ROM** -- pentru stocarea programului (codul firmware). - **EEPROM** -- pentru stocarea permanentă a datelor (se păstrează și după oprire). 2. **Dispozitive periferice**: - **Timere/Numărătoare** -- pentru măsurarea timpului sau evenimentelor. - **Blocuri analogice** (ex: ADC -- convertor analog-digital) -- pentru citirea semnalelor de la senzori. - **Interfețe de comunicație** (ex: UART, SPI, I2C) -- pentru comunicarea cu alte dispozitive. - **Porturi de intrare-ieșire (I/O)** -- pentru conectarea la senzori, actuatori sau - alte componente externe. **Caracteristici principale:** - **Dimensiune redusă a memoriei** -- memoria program (ROM) și memoria de date (RAM) sunt limitate, dar suficiente pentru aplicații specifice. - **Interfațare digitală și analogică** -- poate comunica atât cu senzori/actuatori digitali, cât și analogici. - **Răspuns rapid la evenimente** -- poate reacționa rapid la semnale externe, fiind ideal pentru aplicații în timp real. **Diferența fundamentală între un microcontroler și un circuit integrat analogic/digital:** Un microcontroler **nu poate funcționa fără un program software**. El are nevoie de cod pentru a executa sarcini, spre deosebire de circuitele analogice sau digitale care funcționează bazându-se doar pe configurația lor hardware. **Cum funcționează programarea unui microcontroler:** 1. **Scrierea programului**: - Programul se scrie într-un editor de text sau mediu de dezvoltare (IDE). - Există mai multe opțiuni de limbaje: - **Cod mașină** (hexadecimal) -- limbaj direct înțeles de microcontroler. - **Limbaj de asamblare** -- folosește mnemonice (scurtături ușor de reținut). - **Limbaj de nivel înalt** (C, Pascal, Basic) -- mai ușor de scris și înțeles. 2. **Compilarea programului**: - Limbajele de asamblare și cele de nivel înalt trebuie convertite în **cod mașină** (hexadecimal) folosind un **compilator**. - Compilatorul este un software oferit de producătorii de microcontrolere. 3. **Transferul programului în microcontroler**: - Codul mașină este transferat în memoria **ROM** (memoria program) a microcontrolerului folosind un **programator**. - Programatorul constă din: - Un modul electronic pentru conectarea microcontrolerului la calculator (PC **Comparație între montaj cu microcontroler și montaj cu tranzistori:** 1. **Număr redus de componente**: - Microcontrolerul integrează multiple funcții într-un singur chip, reducând numărul de componente necesare (ex: 10 componente vs 5 componente). 2. **Dimensiuni reduse ale PCB**: - Placa de circuit (PCB) este mai mică și mai simplă, ceea ce o face mai ieftină de produs. 3. **Consum energetic scăzut**: - Microcontrolerele moderne sunt optimizate pentru un consum redus de energie. 4. **Flexibilitate și ușurință în modificare**: - Parametrii funcționali (ex: timpi, logici) pot fi modificați prin reprogramare, fără a fi nevoie de componente hardware noi. **Avantajele montajului cu tranzistori:** 1. **Preț mai mic**: - Costul inițial al componentelor (ex: tranzistori) poate fi mai mic decât al unui microcontroler (ex: 2,75 lei vs 3,40 lei). 2. **Tehnologie simplificată**: - Nu este nevoie de programare sau compilatoare, ceea ce reduce complexitatea. 3. **Robustețe**: - Montajele bazate pe tranzistori sunt adesea mai rezistente la condiții extreme (ex: temperaturi, vibrații). 4. **Gabarit redus**: - În unele cazuri, montajele cu tranzistori pot ocupa mai puțin spațiu decât cele cu microcontrolere. **Microprocesor vs. Microcontroler: Diferențe și utilizări** **Microprocesor:** 1. **Utilizare**: - Folosit pentru aplicații care necesită **performanță ridicată** de procesare. - Este **CPU-ul** principal al calculatoarelor de uz general (PC, laptop, servere). 2. **Componente externe necesare**: - Are nevoie de **memorie externă** (RAM, ROM) și **interfețe I/O** externe pentru a funcționa. **Microcontroler:** 1. **Utilizare**: - Proiectat pentru a fi **compact**, **ieftin** și **eficient**. - Folosit în aplicații **embedded** (încorporate) unde dimensiunea și costul sunt importante. 2. **Componente integrate**: - Conține pe același chip: - **CPU** (unitatea de procesare). - **Memorie** (RAM, ROM, EEPROM). - **Interfețe I/O** (intrări/ieșiri). - Nu necesită componente externe suplimentare pentru funcționarea de bază. **Diferențe cheie:** **Caracteristică** **Microprocesor** **Microcontroler** -------------------- ----------------------------- ------------------------------------ **Componente** Necesită componente externe Totul este integrat pe chip **Performanță** Performanță ridicată Performanță moderată **Cost** Mai scump Mai ieftin **Flexibilitate** Foarte flexibil Specializat pe aplicații specifice **Aplicații** PC, servere, laptop-uri Sisteme embedded, IoT, control **Microcontrolerul ATMega16: Caracteristici și detalii** **Familia AVR:** - ATMega16 face parte din familia **AVR** de la Microchip. - Are o **arhitectură pe 8 biți** și un **set redus de instrucțiuni (RISC)**. - Acest lucru îl face rapid și eficient în execuția instrucțiunilor. **Memorii integrate:** 1. **ROM (Flash)**: - Stochează programul (codul scris de utilizator). - ATMega16 are **16 kB de memorie ROM** (cifra \"16\" din nume indică această capacitate). 2. **EEPROM**: - Folosită pentru stocarea permanentă a datelor (păstrează date chiar și după oprire). 3. **SRAM**: - Memorie volatilă pentru stocarea temporară a datelor în timpul execuției programului. **Performanță:** - Majoritatea instrucțiunilor se execută într-un **singur ciclu de ceas**, ceea ce îl face foarte rapid. - Aceasta este o caracteristică cheie a arhitecturii **RISC**. **Avantaje:** 1. **Toate componentele sunt integrate**: - Nu este nevoie de memorie sau componente externe suplimentare. 2. **Compact și eficient**: - Ideal pentru aplicații embedded (ex: control motoare, senzori, dispozitive IoT). 3. **Ușor de programat**: - Suportă limbaje de nivel înalt (ex: C) și are un set de instrucțiuni simplu. 1. **Unitatea Centrală de Prelucrare (CPU)**: - Este „creierul" microcontrolerului, responsabil pentru prelucrarea datelor și executarea instrucțiunilor. 2. **Memoria ROM (Read-Only Memory) -- Flash**: - Această memorie este folosită pentru a stoca codul programului, adică instrucțiunile care sunt executate de microcontroler 3. **Memoria RAM (Random Access Memory)**: - Aceasta este folosită pentru stocarea datelor temporare care sunt necesare în timpul execuției programului, cum ar fi variabilele și datele de intrare/ieșire. - RAM-ul este folosit de CPU pentru a citi și scrie rapid datele care sunt utilizate în calcule. - Acesta furnizează semnalul de ceas necesar pentru sincronizarea operațiunilor procesorului. Oscilatorul definește frecvența de lucru a microcontrolerului (de exemplu, 16 MHz sau 32 MHz). - Este esențial pentru a asigura coordonarea temporară între diversele componente ale microcontrolerului. 4. **Dispozitive periferice I/O (Porturi I/O)**: - Porturile de intrare/ieșire sunt folosite pentru a comunica microcontrolerul cu lumea exterioară. Aceste porturi permit microcontrolerului să citească semnale de la senzori sau să controleze diverse dispozitive externe, cum ar fi LED-uri, motoare sau alte circuite. - Aceste porturi pot fi configurate pentru a funcționa în moduri de intrare (input) sau ieșire (output), iar microcontrolerul poate trimite semnale pe ele pentru a controla dispozitivele sau pentru a citi informații de la senzori. 5. **Bus de Date, Adrese, Control**: - **Bus-ul de date** transportă informațiile între CPU, memoria RAM, memoria Flash și perifericele I/O. - **Bus-ul de adrese** specifică locațiile de memorie sau registrele cu care CPU-ul dorește să interacționeze. - **Bus-ul de control** trimite semnale pentru a coordona operațiunile între diferitele componente ale microcontrolerului (de exemplu, semnale de citire/scriere, semnale de activare a unui dispozitiv periferic etc.). Un **oscilator** este un circuit electronic care generează un semnal periodic (oscilație) de tipul unui **semnal de ceas**. Acest semnal de ceas este folosit pentru a sincroniza toate operațiunile unui sistem digital, cum ar fi un microcontroler sau un procesor. Oscilatorul creează un semnal electric de frecvență constantă, care este utilizat pentru a marca momentele în care trebuie să se execute instrucțiuni sau operațiuni. **Tipuri de Oscilatoare:** - **Oscilatoare cu cristal (Quartz)**: Acestea sunt cele mai folosite în microcontrolere, datorită stabilității și preciziei frecvenței. Un cristal de cuarț oscilează la o frecvență specifică atunci când este alimentat cu energie, iar această frecvență este foarte precisă. - **Oscilatoare RC**: Utilizate uneori în microcontrolere pentru aplicații unde nu este necesară o precizie mare. - **Oscilatoare LC**: Folosite pentru generarea semnalelor de frecvență mai înaltă, dar sunt mai puțin comune în microcontrolerele moderne. **Cum funcționează:** Oscilatorul transformă energia electrică într-un semnal periodic (de obicei un semnal pătratic sau sinusoidal) care este utilizat pentru a marca perioadele de timp. De exemplu, într-un microcontroler, semnalul generat de oscilator este folosit pentru a sincroniza pașii de execuție ai procesorului, cum ar fi citirea unei instrucțiuni sau efectuarea unei operațiuni aritmetice. **2. Ceasul sistemului (Clock):** **Ceasul sistemului** este semnalul generat de oscilator și folosit pentru a controla timpul și sincronizarea tuturor componentelor unui sistem digital. Acesta asigură faptul că fiecare componentă lucrează într-un ritm comun, astfel încât operațiunile să se efectueze în ordinea corectă. **Cum funcționează:** - **Frecvența ceasului** este măsurată în **Hertz (Hz)** și reprezintă numărul de cicluri de ceas pe secundă. De exemplu, un microcontroler cu o frecvență de 16 MHz înseamnă că ceasul efectuează 16 milioane de cicluri de ceas pe secundă. - Fiecare ciclu de ceas reprezintă o unitate de timp în care procesorul poate efectua o instrucțiune sau poate realiza o acțiune (de exemplu, citirea unui registru, efectuarea unui calcul etc.). **Rolul ceasului în sistem:** - **Sincronizarea operațiunilor**: Fiecare componentă a unui microcontroler (CPU, memorie, periferice) lucrează pe baza semnalului de ceas, astfel încât toate să se desfășoare într-o ordine bine definită. - **Determinarea performanței**: Frecvența ceasului este direct legată de performanța unui sistem. Cu cât frecvența ceasului este mai mare, cu atât mai multe instrucțiuni pot fi executate într-o unitate de timp. A screenshot of a computer Description automatically generatedDesigur! Tabelul din josul paginii reprezintă valorile pentru registrul de prescaler al microcontrolerului **ATMega328**. Acest registru permite configurarea divizării frecvenței ceasului sistemului printr-un factor prestabilit. **Explicația tabelului:** - **CLKPS3, CLKPS2, CLKPS1, CLKPS0** → Acești patru biți controlează factorul de divizare al ceasului sistemului. - **Clock Division Factor** → Valoarea cu care este împărțită frecvența de ceas a microcontrolerului (f\_clock), determinând frecvența efectivă a sistemului (f\_system). **Cum funcționează:** - Dacă toți biții sunt **0 (0000)**, factorul de divizare este **1**, ceea ce înseamnă că f\_system = f\_clock (frecvența rămâne neschimbată). - Dacă biții sunt **0001**, factorul de divizare devine **2**, adică f\_system = f\_clock / 2. - Pe măsură ce valoarea crește, frecvența sistemului scade: - **0010** → divizare cu 4 - **0011** → divizare cu 8 - **0100** → divizare cu 16 - **0101** → divizare cu 32 - **0110** → divizare cu 64 - **0111** → divizare cu 128 - **1000** → divizare cu 256 Acest mecanism este util pentru **reducerea consumului de energie** atunci când microcontrolerul nu trebuie să ruleze la frecvență maximă. a, în majoritatea microcontrolerelor (inclusiv **ATMega328**), pentru utilizarea unui **oscilator extern** sunt disponibili **doi pini**: - **XTAL1 (intrare)** → Primește semnalul de ceas de la un cristal de cuarț sau alt generator extern. - **XTAL2 (ieșire)** → Oferă semnalul oscilatorului către circuitul intern de ceas al microcontrolerului. **Moduri de utilizare:** 1. **Cristal de cuarț** → Se conectează un cristal între **XTAL1** și **XTAL2**, împreună cu două condensatoare la masă (de obicei 22pF) pentru stabilitate. 2. **Resonator ceramic** → Similar cristalului de cuarț, dar mai puțin precis. 3. **Generator extern de ceas** → Se aplică un semnal de ceas direct pe **XTAL1**, iar **XTAL2** rămâne neconectat. Această metodă permite utilizarea unei **frecvențe precise și stabile**, necesară în aplicații unde sincronizarea este importantă (ex. comunicare serială, temporizatoare precise). Cristalul de cuarț se conectează între pinii **XTAL1** și **XTAL2** deoarece microcontrolerul are un **amplificator oscilator intern**. **Motivul conectării cristalului între XTAL1 și XTAL2:** 1. **Circuit oscilator intern**: - Microcontrolerul include un **amplificator inversor** între **XTAL1** și **XTAL2**. - Cristalul acționează ca un element de rezonanță, menținând oscilația prin bucla de reacție a acestui amplificator. 2. **Stabilitatea și precizia frecvenței**: - Cristalul de cuarț are o **frecvență naturală de rezonanță**, care determină frecvența semnalului de ceas. - Spre deosebire de oscilatoarele RC (rezistor-condensator), cristalul oferă **o frecvență mult mai precisă și stabilă**, esențială pentru temporizări exacte și comunicare serială. 3. **Rolul condensatoarelor** (de obicei 22pF la masă): - Ele ajută la stabilizarea oscilatorului și la setarea punctului de funcționare corect. 4. **Dacă se folosește un generator extern de ceas**: - Se aplică direct un semnal de ceas pe **XTAL1**, iar **XTAL2 rămâne neconectat**, deoarece în acest caz nu este necesar oscilatorul intern al microcontrolerului. **Concluzie:** Cristalul este plasat între **XTAL1** și **XTAL2** pentru a închide bucla oscilatorului intern, permițând generarea unui semnal de ceas precis pentru microcontroler. ![A screenshot of a computer Description automatically generated](media/image2.png) **Explicația tabelului privind Fuse Bits pentru microcontrolerul ATmega8** Acest tabel conține două secțiuni, **Fuse High Byte** și **Fuse Low Byte**, care definesc opțiunile de configurare hardware ale microcontrolerului **ATmega8**, inclusiv **selecția sursei semnalului de ceas**. **1. Fuse High Byte** Această parte a tabelului include biți de configurare pentru diverse funcționalități hardware ale microcontrolerului. Printre cei mai importanți sunt: **Bit** **Nume** **Descriere** **Valoare Implicită** --------- ------------------ ----------------------------------------------------------- ---------------------------------------------- **7** OCDEN Activează **On-Chip Debugging (OCD)** **1 (dezactivat)** **6** JTAGEN Activează **JTAG** (interfață de testare) **0 (activat)** **5** SPIEN Activează **SPI Programming** (necesar pentru programare) **0 (activat)** **4** **CKOPT** Opțiuni pentru oscilator **1 (neprogramat)** **3** EESAVE Protejează memoria EEPROM la ștergere **1 (neprogramat, EEPROM nu este protejat)** **2,1** BOOTSZ1, BOOTSZ0 Selectează dimensiunea zonei de boot **0 (default)** **0** BOOTRST Activează bootloaderul la resetare **1 (neprogramat, bootloader dezactivat)** **Observație:** - Bitul **CKOPT** controlează comportamentul oscilatorului și trebuie configurat în funcție de tipul de cristal folosit. **2. Fuse Low Byte** Această parte a tabelului include biți legați de **configurarea oscilatorului** și **start-up time** (timpul de inițializare al oscilatorului): **Bit** **Nume** **Descriere** **Valoare Implicită** --------- ------------ ---------------------------------------------------------------- ----------------------- **7** BODLEVEL Pragul de activare pentru Brown-Out Detector **1 (dezactivat)** **6** BODEN Activează **Brown-Out Detector** (protecție la tensiune joasă) **1 (dezactivat)** **5** SUT1 Selectează **start-up time** **1 (neprogramat)** **4** SUT0 Selectează **start-up time** **0 (programat)** **3** **CKSEL3** Selectează sursa de ceas **1 (programat)** **2** **CKSEL2** Selectează sursa de ceas **1 (programat)** **1** **CKSEL1** Selectează sursa de ceas **0 (programat)** **0** **CKSEL0** Selectează sursa de ceas **1 (neprogramat)** **Observații:** - Biții **CKSEL3\...CKSEL0** controlează sursa semnalului de ceas: - Cuart extern, oscilator RC intern, ceas extern etc. - Biții **SUT1, SUT0** determină **timpul de pornire al oscilatorului**, ceea ce influențează stabilitatea inițială. **Concluzie** - **Fuse Bits** sunt esențiali pentru configurarea corectă a microcontrolerului și trebuie setați cu atenție pentru a alege **sursa de ceas corectă**. - Biții **CKSEL3\...CKSEL0** determină tipul oscilatorului utilizat. - Bitul **CKOPT** influențează comportamentul oscilatorului. - **SUT1 și SUT0** ajustează timpul de stabilizare al oscilatorului. - Cristalele de cuarț și oscilatoarele ceramice au nevoie de timp pentru a ajunge la frecvența stabilă. - Dacă timpul de start-up este prea scurt, microcontrolerul poate porni înainte ca oscilatorul să fie complet stabilizat, ceea ce poate cauza funcționare defectuoasă. -- -- -- -- -- -- -- -- - **6 CK (cicluri de ceas)** -- Microcontrolerul pornește aproape imediat. Potrivit pentru oscilatoare RC interne care nu necesită stabilizare. - **4.1 ms** -- Recomandat pentru cristale de cuarț comune, deoarece acestea au nevoie de timp să oscileze stabil. - **65 ms** -- Se folosește pentru cristale mai lente sau pentru aplicații unde stabilitatea este critică, evitând resetări false. 1. **Dacă se folosește oscilator RC intern** → se alege un timp scurt (**6 CK**). 2. **Dacă se folosește cristal de cuarț extern** → se alege un timp mediu (**4.1 ms** sau mai mult). 3. **Dacă se folosește un cristal sensibil la temperatură** → se recomandă **65 ms** pentru stabilizare completă. A screenshot of a computer Description automatically generated**Explicația tabelelor pentru selecția semnalului de ceas în ATmega16** Aceste tabele prezintă configurarea biților **CKSEL\[3:0\], SUT\[1:0\] și CKOPT**, care controlează sursa și parametrii de pornire ai oscilatorului în microcontrolerul **ATmega16**. **Primul tabel -- Selectarea sursei de ceas (CKSEL\[3:0\])** Acest tabel arată diferitele opțiuni de ceas disponibile și valorile corespunzătoare ale biților CKSEL\[3:0\]: **Device Clocking Option** **CKSEL\[3:0\]** ------------------------------------ ------------------ External Crystal/Ceramic Resonator 1111 - 1010 External Low-frequency Crystal 1001 External RC Oscillator 1000 - 0101 Calibrated Internal RC Oscillator 0100 - 0001 External Clock 0000 - **Cristal / rezonator ceramic extern (1111 - 1010):** Folosit pentru oscilatoare precise. - **Cristal de frecvență joasă (1001):** Utilizat pentru consum redus de energie. - **Oscilator RC extern (1000 - 0101):** Se poate configura manual cu rezistențe/capacitori externi. - **Oscilator RC intern calibrat (0100 - 0001):** Configurație implicită, mai puțin precisă. - **Semnal de ceas extern (0000):** Acceptă un semnal de tact generat de un alt circuit. **Al doilea tabel -- Timpul de pornire al oscilatorului (Start-up Time)** Aceasta determină întârzierea dintre alimentarea microcontrolerului și începerea execuției codului. **CKSEL0** **SUT1..0** **Start-up Time from Power-down and Power-save** **Additional Delay from Reset (Vcc = 5.0V)** **Recommended Usage** ------------ ------------- -------------------------------------------------- ---------------------------------------------- ----------------------------------------- \- 00 258 CK \- Ceramic resonator, fast rising power \- 01 258 CK 65 ms Ceramic resonator, slowly rising power \- 10 1K CK 4.1 ms Ceramic resonator, BOD enabled \- 11 1K CK 65 ms Ceramic resonator, slowly rising power \- 00 16K CK \- Crystal Oscillator, BOD enabled \- 01 16K CK 65 ms Crystal Oscillator, slowly rising power - **CKSEL0 determină tipul de oscilator** (ceramic, cristal, RC extern etc.). - **SUT\[1:0\] determină timpul de pornire**: - **00 (258 CK)** → Pornire rapidă pentru rezonatori ceramici. - **01 (258 CK + 65 ms)** → Pornire lentă, utilă dacă alimentarea crește lent. - **10 (1K CK + 4.1 ms)** → Stabilizare mai bună, recomandată cu **BOD** (Brown-Out Detection). - **11 (1K CK + 65 ms)** → Pentru alimentare instabilă. - **16K CK** → Necesită cel mai mult timp, ideal pentru cristale de precizie. **Al treilea tabel -- Frecvența și capacitoarele recomandate** Acest tabel asociază biții **CKOPT și CKSEL\[3:1\]** cu gama de frecvențe și capacitoarele recomandate pentru stabilizarea oscilatorului. **CKOPT** **CKSEL\[3:1\]** **Frequency Range (MHz)** **Recommended Capacitors (pF)** ----------- ------------------ --------------------------- --------------------------------- 1 101 0.4 - 0.9 12 - 22 1 110 0.9 - 3.0 12 - 22 1 111 3.0 - 8.0 12 - 22 0 101, 110, 111 1.0 - 16 12 - 22 - **CKOPT = 1** → Setare normală, frecvență mai mică. - **CKOPT = 0** → Activează un \"full swing oscillator\" pentru stabilitate mai bună la frecvențe mari. - **Capacitorii (C1, C2)** ajută la stabilizarea cristalului. **Concluzie** - **Dacă folosești un cristal extern de 8 MHz:** Setează **CKSEL = 111**, **SUT = 00** (16K CK), iar **CKOPT = 0** pentru o stabilitate bună. - **Dacă folosești un rezonator ceramic:** Setează **CKSEL = 1010**, **SUT = 10** (1K CK + 4.1ms). - **Dacă folosești RC intern:** Nu este nevoie de condensatori, doar selectezi **CKSEL = 0100**. Aceste setări sunt importante pentru a asigura pornirea corectă și stabilitatea microcontrolerului în funcție de sursa de ceas utilizată. **Ce sunt fuse biții într-un microcontroler?** **Fuse biții** (sau **biții de configurare**) sunt biți speciali de memorie într-un microcontroler care definesc setările hardware de bază, inclusiv: - **Sursa și configurația oscilatorului** (ex.: cristal, rezonator ceramic, RC intern/extern). - **Protecția memoriei flash** (ex.: blocarea rescrierii codului). - **Activarea unor funcții speciale** (ex.: detectorul Brown-Out (BOD), debug prin JTAG, reset extern). Acești biți sunt **programabili o singură dată** (sau de foarte puține ori) și nu se modifică în timpul rulării programului. Se configurează **prin programatoare externe** (ex. AVRISP, USBasp) înainte de a încărca firmware-ul. **Cum funcționează fuse biții?** - Fiecare fuse bit poate avea **două stări:** - **0 (programat)** → Funcția asociată este activată. - **1 (neprogramat)** → Funcția asociată este dezactivată. 📌 **Atenție!** Dacă setezi greșit fuse biții, microcontrolerul poate deveni inaccesibil (ex. dezactivarea oscilatorului), necesitând un **high-voltage programmer** pentru recuperare. **Exemplu de fuse biți în ATmega** 1. **CKSEL\[3:0\]** -- Selectează sursa de tact (oscilator). 2. **SUT\[1:0\]** -- Configurarea timpului de pornire a oscilatorului. 3. **CKOPT** -- Activează un oscilator mai puternic (\"full swing mode\"). 4. **BODLEVEL, BODEN** -- Activează/determinează pragul detectorului de cădere a tensiunii (Brown-Out). 5. **SPIEN** -- Permite programarea prin SPI (dacă e dezactivat, programarea devine dificilă). 6. **JTAGEN** -- Activează interfața JTAG pentru debugging. 7. **BOOTRST, BOOTSZ** -- Configurează locația vectorului de reset pentru bootloader. **Ce sunt fuse biții într-un microcontroler? (Explicație simplă)** Fuse biții sunt **setări speciale** care controlează modul în care microcontrolerul funcționează la nivel hardware. Ei sunt ca niște **\"butoane invizibile\"** care setează lucruri importante, cum ar fi:\ ✅ Ce tip de ceas (oscillator) folosește microcontrolerul.\ ✅ Cât timp să aștepte până pornește oscilatorul.\ ✅ Dacă permite programarea prin SPI sau JTAG.\ ✅ Dacă activează protecția memoriei pentru a nu fi ștearsă accidental. **Cum funcționează fuse biții?** - Fiecare fuse bit poate avea **două stări:** - **0 (programat)** = Funcția este activată. - **1 (neprogramat)** = Funcția este dezactivată. Odată setați, fuse biții **nu se schimbă în timpul funcționării** microcontrolerului. Ei trebuie configurați înainte să încarci programul tău. 📌 **Atenție!** Dacă setezi fuse biții greșit (de exemplu, alegi o sursă de ceas inexistentă), microcontrolerul poate înceta să funcționeze și vei avea nevoie de un programator special ca să-l resetezi. **Exemplu concret (ATmega)** 1. **CKSEL** -- Alege ceasul microcontrolerului (cristal extern, oscilator intern, ceas extern etc.). 2. **SUT** -- Definește cât timp să aștepte oscilatorul înainte să înceapă lucrul. 3. **CKOPT** -- Controlează puterea oscilatorului (folosit pentru cristale mai mari). 4. **BODLEVEL și BODEN** -- Protejează microcontrolerul dacă tensiunea scade prea mult. 5. **SPIEN** -- Permite programarea prin SPI (dacă îl dezactivezi, nu mai poți programa ușor microcontrolerul). **Cum setezi fuse biții?** 1. **Calculezi valorile potrivite** cu un calculator online (ex. AVR Fuse Calculator). 2. **Folosești un programator** (ex. USBasp) și un software precum avrdude pentru a-i seta. Exemplu de comandă pentru setarea fuse biților: sh CopierModifier avrdude -c usbasp -p m16 -U lfuse:w:0xFF:m -U hfuse:w:0xC9:m 📌 Dacă nu ești sigur ce faci, **nu modifica fuse biții la întâmplare**! **Pe scurt:** 👉 Fuse biții sunt setări hardware speciale ale microcontrolerului.\ 👉 Ei controlează sursa de ceas, protecția memoriei și modul de programare.\ 👉 Odată setați, nu se pot schimba decât cu un programator special.\ 👉 Dacă îi setezi greșit, microcontrolerul poate deveni inutilizabil. ![](media/image4.png) Tabelul din imagine oferă detalii despre diferitele opțiuni de configurare pentru semnalul de ceas al microcontrolerului ATmega328. Aceste setări sunt controlate prin programarea unor biți specifici numiți **fuse bits**: CKSEL (pentru selecția sursei de ceas), SUT (setarea timpului de pornire) și CKDIV8 (împărțirea frecvenței ceasului). **1. Tipurile de surse de ceas și CKSEL** CKSEL controlează ce sursă de ceas este folosită de microcontroler: - **Oscilator cristal cu putere redusă (Low Power Crystal Oscillator):** Potrivit pentru consum redus de energie. - **Oscilator cristal full swing (Full Swing Crystal Oscillator):** Potrivit pentru aplicații care necesită mai multă putere. - **Oscilator cristal cu frecvență joasă (Low Frequency Crystal Oscillator):** Pentru frecvențe mai mici. - **Oscilator RC intern calibrat (Calibrated Internal RC Oscillator):** Fără cristal extern, folosește un oscilator intern. - **Ceas extern (External Clock):** Se folosește o sursă externă de semnal de ceas. - **Rezervat (Reserved):** Nu este utilizat. **2. Frecvențe și capacitori recomandați** Pentru fiecare opțiune de cristal oscilator, există un interval recomandat de frecvențe și valori pentru condensatori: - De exemplu, pentru frecvențe de **8-16 MHz**, condensatorii recomandați sunt de **12-22 pF**. **3. Timpul de pornire (Startup Time) și întârzierea suplimentară (Additional Delay)** - **Startup Time:** Timpul necesar microcontrolerului pentru a începe să funcționeze după o oprire sau o stare de economisire a energiei. Este măsurat în cicluri de ceas (CK). - **Additional Delay:** Întârzierea suplimentară este timpul necesar microcontrolerului pentru a finaliza resetarea și pentru a porni complet. Exemple: - Pentru un oscilator RC calibrat, timpul de pornire este de **1K CK**, iar întârzierea suplimentară este de **14CK**. - Pentru oscilatorul cu cristal full swing, timpul de pornire este de **16K CK**, iar întârzierea suplimentară poate varia în funcție de condiții (4,1 ms, 65 ms).

Use Quizgecko on...
Browser
Browser