Elektronik Atölyem

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

Arduino Uno
Arduino Uno

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.

blink.inodurdu

ARDUINO UNO

sanal kart

L (D13)
LED · D13

Register'lar (bit 7 solda)

––D13D12D11D10D9D8
DDRB000000000x00
PORTB000000000x00
PINB000000000x00
D7D6D5D4D3D2D1D0
DDRD000000000x00
PORTD000000000x00
PIND000000000x00

Seri monitör (9600 baud)

Serial.println() ile yazdıkların burada görünür.

🔌 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.

USBDCATmega328PUNOLGND131211109876543210DIGITAL (PWM ~ 3 5 6 9 10 11)IOREFRST3V35VGNDGNDVINA0A1A2A3A4A55VGNDD13220ΩLED

Neden register seviyesine inelim?

  • Hız: digitalWrite birkaç 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 →
İlerlemeni kaydetmek için ücretsiz üye ol.Üye ol