Microcontrolere: Arhitectură, Memorie & Periferice
Cum funcționează un calculator complet pe un singur cip de siliciu: diferența dintre MCU și MPU, harta memoriei (Flash/SRAM/EEPROM) și modularea în durată a impulsurilor (PWM).
1. Microcontroler (MCU) vs. Microprocesor (MPU)
Un microprocesor clasic (cum este cel din laptop sau Raspberry Pi) este doar o unitate de calcul brută: nu funcționează fără cipuri externe de memorie RAM DDR, stocare SSD și controllere de alimentare, rulând un sistem de operare complex precum Linux. În schimb, un microcontroler (MCU) integrează pe o singură pastilă de siliciu tot ce are nevoie: procesor, memorie Flash, SRAM, convertoare analog-digitale (ADC) și timere hardware, pornind codul instantaneu în microsecunde (Bare-Metal).
Memorie: 32 KB Flash, 2 KB SRAM, 1 KB EEPROM. Arhitectură Harvard clasică pe 8 biți. Extrem de tolerant la erori electrice (suportă 5V curat și 20mA per pin), ideal pentru începători.
Simulator Interactiv: Modulația PWM (Pulse Width Modulation)
Microcontrolerele digitale nu pot emite tensiuni analogice intermediare (cum ar fi 2.5V). În schimb, comută ultrarapid între 0V și 5V; modificând procentul de timp activ (Duty Cycle), sarcina resimte o tensiune medie proporțională.
2. Triada Memoriei: Flash vs. SRAM vs. EEPROM
Aici se compilează instrucțiunile mașină (.hex / .bin). Datele rămân intacte după deconectarea alimentării. Cicluri de scriere: ~10.000 cicluri.
Memorie ultrarapidă în care rulează variabilele tale. La oprirea alimentării, conținutul dispare instantaneu. Dacă depășești cei 2 KB pe Arduino, apare fenomenul de Stack Overflow.
Poate fi ștearsă și scrisă octet cu octet. Ideală pentru stocarea parolelor Wi-Fi, pragurilor de temperatură sau contorilor de ore de funcționare (100.000 cicluri).
3. Cod Model: Control PWM Hardware
// Control PWM Hardware cu timer intern (Fara functii blocante delay())
const int pwmPin = 9; // Pin cu capabilitate Timer PWM
void setup() {
pinMode(pwmPin, OUTPUT);
}
void loop() {
// Generare semnal analogic simulat (0 - 255 pentru 8-bit PWM)
for (int duty = 0; duty <= 255; duty += 5) {
analogWrite(pwmPin, duty); // Modifica factorul de umplere (Duty Cycle)
delay(20);
}
for (int duty = 255; duty >= 0; duty -= 5) {
analogWrite(pwmPin, duty);
delay(20);
}
}