Mikrodenetleyicinin içi: CPU, bellek, çevre birimleri
16 dakika · İleri
Simülasyonlar ve testler okunmaz; onlara geldiğinde duraklatıp deneyebilirsin.
Arduino'da digitalWrite(13, HIGH) yazdığında aslında ne oluyor? Bu kursta Arduino kütüphanelerinin altına inip mikrodenetleyiciyi doğrudan, register'lar üzerinden programlayacağız. Önce çipin içinde neler olduğuna bakalım. Örnek olarak Arduino Uno'daki ATmega328P'yi kullanacağız.
📷 Gerçek görünüm

Bir çipin içinde bütün bir bilgisayar
CPU çekirdeği
8 bitlik AVR çekirdeği, 16 MHz. Komutların çoğunu tek saat çevriminde çalıştırır.
Flaş bellek (32 KB)
Programın durduğu yer. Elektrik kesilince silinmez.
SRAM (2 KB)
Değişkenlerin ve yığının (stack) durduğu çalışma belleği.
EEPROM (1 KB)
Kalıcı küçük veriler: ayarlar, en yüksek skor.
GPIO portları
B, C ve D portları; her pin giriş ya da çıkış olabilir.
Zamanlayıcılar
Timer0, Timer1 (16 bit), Timer2: zaman ölçme, PWM, kesmeler.
ADC
10 bitlik analog-dijital dönüştürücü, 6 kanal (A0–A5).
Haberleşme birimleri
USART (seri), SPI ve TWI (I2C) donanımları.
Register nedir?
Çevre birimleri (GPIO, zamanlayıcı, ADC…) bellekteki belirli adreslerde duran küçük 8 bitlik hücrelerle kontrol edilir. Bunlara register denir. Register'ın her biti bir anahtar gibidir: bir biti 1 yapmak bir pini çıkış yapar, bir zamanlayıcıyı başlatır ya da bir kesmeyi açar.
Örneğin D13 pini, B portunun 5. bitidir (PB5). digitalWrite(13, HIGH) çağrısı, arka planda PORTB register'ının 5. bitini 1 yapar. Aşağıdaki simülatörde register panelini aç ve LED yanıp sönerken PORTB'nin 5. bitinin değiştiğini izle.
ARDUINO UNO
sanal kart
Register'lar (bit 7 solda)
| – | – | D13 | D12 | D11 | D10 | D9 | D8 | ||
| DDRB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| PORTB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| PINB | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
| DDRD | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| PORTD | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
| PIND | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 |
Seri monitör (9600 baud)
🔌 Bağlantı şeması: hangi parça hangi pine bağlı?
Gerçek bir Arduino Uno'da bu devreyi kurmak için kabloları çizimdeki gibi bağla. Kırmızı hat 5V, gri hat GND. Kod çalışırken LED'ler, servo ve buzzer burada da tepki verir; çizimdeki butona da basabilirsin.
Neden register seviyesine inelim?
- Hız:
digitalWritebirkaç mikrosaniye sürer; doğrudan register yazmak tek bir komuttur (62,5 ns). - Yetenek: Zamanlayıcı kesmeleri, uyku modları ve donanım PWM'inin ayarları Arduino kütüphanesinde yoktur.
- Taşınabilirlik: ESP32, STM32 ve diğer bütün mikrodenetleyiciler aynı fikirle çalışır; register'ları anlayan herkes datasheet'le yeni bir çipi öğrenebilir.
Kendini test et
1. Program ATmega328P'de nerede durur?
2. D13 pini hangi porta ve bite karşılık gelir?
3. Değişkenler çalışırken nerede tutulur?
4. 16 MHz'de bir saat çevrimi ne kadar sürer?
Bu ders, kursun ücretsiz ilk dersiydi
Mikrodenetleyiciler: Register Seviyesinde Programlama kursunun kalan 7 dersi, simülasyonları ve testleri kurs satın alındığında açılır.
Kursun devamını incele →