# Mikrodenetleyici
Mikrodenetleyici (mikrodenetleyiciye İngilizcede kısaca MCU, MC, UC veya μC de denir) bir VLSI entegre devre çipinde küçük bir bilgisayar'dır. Mikrodenetleyici, bellek ve programlanabilir giriş/çıkış çevre birimleri ile birlikte bir veya daha fazla CPU (işlemci çekirdeği'ni) kapsar.
Çipte genellikle Ferroelektrik RAM, NOR flaş veya OTP ROM biçiminde program belleği ve ayrıca biraz da RAM bellek vardır. Mikrodenetleyiciler kişisel bilgisayarlarda kullanılan mikroişlemcilerin veya çeşitli ayrı ayrı çiplerden oluşan diğer genel amaçlı uygulamaların aksine gömülü uygulamalar için tasarlanır.
Kısıtlı miktarda olmakla birlikte, yeterince hafıza birimlerine ve giriş – çıkış uçlarına sahip olmaları sayesinde tek başlarına çalışabildikleri gibi, donanımı oluşturan diğer elektronik devrelerle irtibat kurabilir, uygulamanın gerektirdiği fonksiyonları gerçekleştirebilirler. Üzerlerinde analog-dijital çevirici gibi tümleşik devreler barındırmaları sayesinde algılayıcılardan her türlü verinin toplanması ve işlenmesinde kullanılabilmektedirler. Ufak ve düşük maliyetli olmaları gömülü uygulamalarda tercih edilmelerini sağlamaktadır. Mikrodenetleyiciler sıradan mikroişlemcilere nazaran aşağıda listelenen 4 temel avantajları sayesinde elektronik sanayinde günümüzde oldukça büyük bir uygulama alanına sahiptirler:
  - oldukça küçük boyutludurlar,
  - çok düşük güç tüketimine sahiptirler,
  - düşük maliyetlidirler, 
  - yüksek performansa sahiptirler.
Örneğin en basit elektronik saatlerden otomatik çamaşır makinelerine, robotlardan fotoğraf makinelerine, LCD monitörlerden biyomedikal cihazlara ve endüstriyel otomasyondan elektronik bilet uygulamalarına kadar pek çok elektronik uygulamada mikrodenetleyiciler kullanım alanı bulmuşlardır.


## Yaygın türler.
  - 6800
  - 8051
  - PSoC
  - PIC
  - AVR


## Gömülü tasarım.
Mikrodenetleyici işlemci, bellek ve çevre birimleri ile bağımsız bir sistemdir ve gömülü sistem olarak kullanılabilir. Günümüzdeki mikrodenetleyicilerin çoğu otomobil, telefon, çeşitli cihazlar ve bilgisayar sistemleri için çevre birimleri gibi diğer makinelerde gömülüdür.
Bazı gömülü sistemler çok karmaşık olsa da birçoğunun bellek ve program uzunluğuna minimum gereksinimi vardır, işletim sistemi yoktur ve yazılımı nispeten sadedir. Tipik giriş ve çıkış cihazları arasında elektrik anahtarları, röle'ler, solenoid'ler, LED'ler, küçük veya özel sıvı kristal ekran'lar, radyo frekans cihazları ve sıcaklık, nem, ışık seviyesi vb. veri sensörleri bulunur. Gömülü sistemlerde genellikle klavye, ekran, disk, yazıcı veya kişisel bilgisayar gibi diğer tanınabilir I/O cihazlar yoktur ve insanla etkileşimli her türlü cihaz da olmayabilir.


### Kesintiler.
Mikrodenetleyiciler, kontrol ettikleri gömülü sistemdeki olaylara gerçek zamanlı (öngörülebilir ama illa hızlı olmasa da) tepki vermelidir. Belirli olaylar olduğunda kesme sistemi, işlemciye mevcut komut dizisini işlemeyi durdurmasını ve asıl komut dizisine dönmeden önce kesme kaynağında kesme hizmeti rutinini (ISR veya "kesme işleyicisi") başlatması için sinyal verebilir. Olası kesme kaynakları cihaza bağlıdır ve genellikle dahili zamanlayıcı taşması, analogdan dijitale dönüştürmenin tamamlanması, bir düğmeye basılması gibi girişte mantık düzeyindeki bir değişiklik ve iletişim bağlantısında alınan veri gibi olayları içerir. Batarya cihazlarında olduğu gibi güç tüketiminin önemli olduğu yerlerde, kesintiler ayrıca bir mikro denetleyiciyi, işlemcinin çevresel bir olay tarafından bir şey yapması gerekene kadar durdurulduğu az güçlü uyku durumundan uyandırabilir.


### Programlar.
Harici, genişletilebilir bellekli bir sistemi sağlamak pahalı olacağından, genellikle mikrodenetleyici programları çipin belleğine sığmalıdır. Derleyiciler ve birleştiriciler, hem yüksek seviye hem de assembly dil kodlarını mikrodenetleyicinin belleğine depolamak için küçük bir makine kodu'na dönüştürmede kullanılır. Cihaza bağlı olarak, program belleği kalıcı olabilir, yalnızca fabrikada programlanabilen sadece okunur bellek veya sahada değiştirilebilir flaş bellek veya silinebilir salt okunur bellek olabilir.
Üreticiler, hedef sistemin donanımına ve yazılım geliştirmesine yardımcı olmak için genellikle mikro denetleyicilerinin özel çeşitlerini ürettiler. Başlangıçta bunlar cihazın üstünde program belleğinin ultraviyole ışıkla silinebildiği programlama ("yakma") ve test döngüsünden sonra yeniden programlamaya hazır "pencere"li EPROM sürümleriydi. 1998'den beri EPROM sürümleri nadirdir ve yerini kullanımı daha kolay (elektronik olarak silinebilir) ve üretimi daha ucuz olan EEPROM ve flaş ile değiştirdi.
ROM'a dahili bellek yerine harici bir cihaz olarak erişilen diğer sürümler de var olabilir ama bunlar ucuz mikrodenetleyici programcılarının yaygın bulunduğundan nadir hale gelmektedir.
Mikrodenetleyicide sahada programlanabilir cihazların kullanılması, donanım yazılımının sahada güncellenmesine veya monte edilmiş ancak henüz sevk edilmemiş ürünlerde geç fabrika revizyonlarına imkan verebilir. Programlanabilir bellek yeni bir ürünün devreye alınması için gereken hazırlık süresini de azaltır.
Yüzbinlerce aynı cihazın gerekli olduğu durumlarda, üretim sırasında programlanmış parçaların kullanılması ekonomik olabilir. Bu "maske programlanmış" parçalar aynı zamanda çipin mantığıyla aynı şekilde ortaya konan programa sahiptir.
Özelleştirilmiş bir mikrodenetleyici, uygulamanın gereksinimlerine uyarlanmış çevre birimleri ve arayüzleri için kişiselleştirilebilen bir dijital mantık bloku içerir. Buna bir örnek, Atmel firmasının AT91CAP'idir.


### Diğer mikrodenetleyici özellikleri.
Mikrodenetleyicilerin genellikle birkaç ila düzinelerce genel amaçlı giriş/çıkış pini (GPIO) vardır. GPIO pinleri giriş veya çıkış durumuna göre yapılandırılabilen yazılımlardır. GPIO pinleri giriş durumuna yapılandırıldığında genellikle sensörleri veya harici sinyalleri okumak için kullanılır. Çıkış durumuna göre yapılandırılan GPIO pinleri LED veya motor gibi harici cihazları harici güç elektronik devresi aracılığıyla dolaylı olarak çalıştırırır.
Birçok gömülü sistemin analog sinyal veren sensörleri okuması gerekir. Analog dijital dönüştürücü'nün (ADC) amacı budur. İşlemciler 1 ve 0 gibi dijital verileri yorumlamak ve işlemek için yapıldığından kendisine cihaz tarafından gönderilebilecek analog sinyallerle hiçbir şey yapamazlar. Böylece analog dijital dönüştürücü gelen veriyi işlemcinin tanıyabileceği şekle dönüştürmek için kullanılır. Bazı mikrodenetleyicilerde işlemcinin analog sinyal veya voltajı vermesini sağlayan Dijital Analog Dönüştürücü (DAC) vardır.
Dönüştürücülere ek olarak, birçok gömülü mikroişlemci, çeşitli zamanlayıcıları da içerir. En yaygın zamanlayıcı türlerinden biri (PIT) Programlanabilir Aralıklı Zamanlayıcıdır. PIT ya bir değerden sıfıra kadar geri sayım ya da sıfıra taşarak sayım kaydının kapasitesine kadar sayım yapar. Sıfıra ulaştığında, işlemciye sayımın bittiğini belirten bir kesme gönderir. Bu özellik, klimayı, ısıtıcıyı vb. açmaları gerekip gerekmediğini görmek için çevresindeki sıcaklığı periyodik olarak kontrol eden termostat gibi cihazlar için kullanışlıdır.
Özel Darbe Genişlik Modülasyon (PWM) bloku CPU'nun kısa zamanlayıcı döngülerinde CPU kaynağını kullanmadan CPU'nun güç dönüştürücüleri, direnç yükünü, motorları vb. kumanda etmesini mümkün kılar.
Evrensel Asenkron Alıcı/Verici (UART) bloku, CPU üzerinde çok az yük ile seri hat üzerinden veri alıp iletmeyi mümkün kılar. Adanmış çip üstü donanımı, Inter-Integrated Circuit (I²C), Seri Çevre Birimi Arayüzü (SPI), Evrensel Seri Veriyolu (USB) ve Ethernet gibi dijital biçimlerde diğer cihazlarla (yongalar) iletişim kurma yeteneklerini de kapsar.


## Daha çok entegrasyon.
Mikrodenetleyiciler, CPU ile aynı çipte RAM ve kalıcı olmayan belleği birleştikleri için harici bir adres veya veriyolu uygulayamayabilirler. Daha az pin kullanılarak çip çok daha küçük ve daha ucuz bir pakete yerleştirilebilir.
Belleği ve diğer çevre birimlerini tek bir çipde tümleştirmek ve bunları bir birim olarak denemek o çipin maliyetini artırır ama genellikle bütün olarak gömülü sistemin net maliyetinin düşmesine neden olur. Entegre çevre birimli bir CPU'nun maliyeti, bir CPU ve harici çevre birimlerinin maliyetinden biraz daha fazla olsa bile, daha az çipe sahip olmak daha küçük ve daha ucuz devre kartına yol açar ve bitmiş montaj için hata oranını düşürme eğiliminin yanı sıra devre kartını takmak ve denemek için gereken işçiliği azaltır.
Mikrodenetleyici, genellikle aşağıdaki özellikleri olan tek bir entegre devre'dir:
  - küçük ve basit 4-bit işlemcilerden karmaşık 32-bit veya 64-bit işlemcilere kadar merkezi işlem birimi YÖNLENDİRME 
  - veri depolama için geçici bellek (RAM)
  - program ve çalışma parametresi depolaması için ROM, EPROM, EEPROM veya flaş bellek 
  - bireysel bir paket piminin mantık durumunun kontrolüne veya algılanmasına izin veren ayrı giriş ve çıkış bitleri
  - seri bağlantı noktaları (Üniversal Asenkron Alıcı Verici (UART)'ler) gibi seri giriş/çıkış
  - sistem ara bağlantısı için I²C, Serial Peripheral Interface ve Controller Area Network gibi diğer seri iletişim arayüzleri
  - zamanlayıcılar, olay sayaçları, PWM üreteçleri ve bekçi köpeği gibi çevresel cihazlar
  - saat üreteci YÖNLENDİRME genellikle bir kuvars zamanlama kristali, rezonatör veya RC devresi için bir osilatör
  - birçoğu analogdan dijitale dönüştürücüler içerir, bazıları dijitalden analoğa dönüştürücüler içerir
  - devre içi programlama ve devre içi hata ayıklama desteği
Bu entegrasyon, ayrı çipler kullanarak eşdeğer sistemler üretmek için gerekli olacak çip sayısını ve kablolama miktarını ve devre kart alanını çok azaltır. Ayrıca, özellikle az pinli cihazlarda, her bir pin, yazılım tarafından seçilen pin işlevi ile birkaç dahili çevre birimine arayüz oluşturabilir. Bu, bir parçanın, pimlerin özel işlevlere sahip olmasına göre daha geniş bir uygulama yelpazesinde kullanılmasına imkan verir.
Mikrodenetleyiciler, 1970'lerde piyasaya sürüldüklerinden bu yana gömülü sistemlerde oldukça popüler olduklarını kanıtladılar.
Bazı mikrodenetleyiciler Harvard mimarisi kullanır: talimatlar ve veriler için ayrı bellek veriyolları, erişimlerin eşzamanlı olarak gerçekleşmesine izin verir. Harvard mimarisinin kullanıldığı durumlarda, işlemci için talimat sözcükleri, dahili bellek ve yazmaçların uzunluğundan farklı bir bit boyutunda olabilir; örneğin: 8 bitlik veri kayıtları ile kullanılan 12 bitlik komutlar.
Hangi çevre biriminin entegre edileceğine karar vermek genellikle zordur. Mikrodenetleyici satıcıları genellikle müşterilerinin pazara sunma süresi gereksinimlerine ve genel olarak daha az sistem maliyetine karşı çalışma frekanslarını ve sistem tasarım esnekliğini takas eder. Üreticiler, çip boyutunu en aza indirme ihtiyacını ek işlevsellik ile dengelemek zorundadır.
Mikrodenetleyici mimarileri çok çeşitlidir. Bazı tasarımlar, pakete entegre edilmiş bir veya daha çok ROM, RAM veya I/O işlevli genel amaçlı mikroişlemci çekirdekleri içerir. Diğer tasarımlar, kontrol uygulamaları amacına yöneliktir. Bir mikro denetleyici talimat setinde genellikle, kontrol programlarını daha küçültmek için bit manipülasyonu (bit tabanlı işlemler) için tasarlanmış birçok talimat bulunur. Örneğin genel amaçlı bir işlemci, mikrodenetleyicinin yaygın olarak gerekli işlevi sağlamak için tek bir yönergeye sahip olabileceği durumda, bit ayarlanmışsa bir kayıtta ve dalda bir biti test etmek için birkaç talimat gerektirebilir.
Mikrodenetleyicilerin geleneksel olarak bir matematik yardımcı işlemcisi yoktur, bu nedenle kayan nokta aritmetiği yazılım tarafından gerçekleştirilir. Ancak, bazı yeni tasarımlar bir FPU ve DSP için optimize edilmiş özellikler içerir. Microchip'in PIC32 MIPS tabanlı hattı buna bir örnek olabilir.


## Programlama ortamları.
Mikrodenetleyiciler orijinal olarak yalnızca Assembly dili ile programlanmıştır ama C, Python ve JavaScript gibi çeşitli yüksek seviyeli programlama dilleri de şimdi mikrodenetleyicileri ve gömülü sistemleri hedeflemek için yaygın kullanılmaktadır.
Genel amaçlı diller için Derleyiciler, mikrodenetleyicilerin benzersiz özelliklerini daha iyi desteklemek için bazı kısıtlamalara ve geliştirmelere sahiptir. Bazı mikrodenetleyiciler, belirli uygulama türlerinin geliştirilmesine yardımcı olacak ortamlara sahiptir. Mikrodenetleyici satıcıları, donanımlarını benimsemeyi kolaylaştırmak için bu araçları genellikle ücretsiz olarak sunar.
Özel donanıma sahip mikrodenetleyiciler, donanım özellikleriyle ilgisi olmayan kodlar için bile standart araçların (kod kitaplıkları veya statik analiz araçları gibi) kullanılmasını engelleyen Small Device C Compiler(8051 için SDCC) gibi kendi standart olmayan C lehçelerine ihtiyaç duyabilir.
CircuitPython çatalı, donanım bağımlılıklarını kitaplıklara taşımaya ve dili daha CPython standardına uygun hale getirmeye çalışsa da yorumlayıcılar, MicroPython gibi standart olmayan özellikler de içerebilir.
Bazı mikrodenetleyiciler için tercüman sabit yazılımı da mevcuttur. Örneğin, ilk mikrodenetleyicilerde Intel 8051 BASIC; Zilog Z8'de BASIC ve FORTH yanı sıra bazı modern cihazlardaki gibi. Genellikle bu tercümanlar etkileşimli programlamayı destekler.
Simülatörler, bazı mikrodenetleyiciler için mevcuttur. Bunlar, geliştiricinin, gerçek kısmı kullanıyorlarsa mikrodenetleyicinin ve programlarının davranışının ne olması gerektiğini analiz etmesine olanak tanır. Bir simülatör dahili işlemci durumunu ve ayrıca çıkışların durumunu gösterecek ve ayrıca giriş sinyallerinin üretilmesine izin verir. Bir yandan çoğu simülatör, sistemdeki diğer pek çok donanımı simüle edememekle sınırlı olacak olsa da, aksi takdirde fiziksel uygulamada istendiğinde yeniden üretilmesi zor olabilecek koşulları uygulayabilir ve hata ayıklama ve problemleri analiz etmenin en hızlı yolu olabilir.
Yeni mikrodenetleyiciler genellikle, bir devre içi emulator (ICE) tarafından JTAG aracılığıyla erişildiğinde, bir hata ayıklayıcı ile sabit yazılımın hata ayıklamasına imkan veren çip üzerinde Hata ayıklama devresi ile entegre edilmiştir. Gerçek zamanlı bir ICE, çalışırken dahili durumların görüntülenmesine ve/veya değiştirilmesine izin verebilir. Bir izleyici ICE, bir tetikleme noktasından önce/sonra yürütülen programı ve MCU durumlarını kaydedebilir.