1. Ders Giriş Hazırlayan: Arş. Gör. Hakan ÜÇGÜN Mikroişlemcili Sistem Uygulamaları Dikkat ettiniz mi: Etrafımızdaki akıllı cihazların sayısı ne kadar da arttı. Cep telefonlarımız artık sadece iletişim sağlamakla kalmıyor, müzik çalıyor, fotoğraf, video çekiyor, bilgilerimizi saklıyor. Çamaşır makinalarımız bile akıllı artık. Kendi bilgisayarlarını barındırıyorlar. Çevremizdeki cihazlara bir bakarsak artık birçoğunun tamamen olmasa da elektronik birimler barındırdığını görürüz: 2
Kişisel bilgisayar Yazıcı Tarayıcı (Scanner) Hesap makinesi Cep telefonu Cep bilgisayarı Televizyon Video kamera DVD oynatıcı CD çalar Alarmlı Saat Fotoğraf Makinesi Hırsız alarmı- Mikrodalga fırın Bulaşık makinesi Buzdolabı- Mutfak robotu Çamaşır makinesi Tansiyon ölçme cihazı Elektronik oyuncaklar v.b. 3 Mikroişlemci Nedir? Mikroişlemci aritmetik ve mantıksal işlemler yapabilen ve bu işlemlerin sonucuna göre çalışmasını yönlendirebilen tümleşik bir devre elemanıdır. Mikroişlemciler en basit halleriyle bilgisayarlardır ve 3 temel bölümde incelenirler. CPU(Merkezi İşlem Birimi) Hafıza (Memory) Donanım (Giriş çıkış birimleri) 4
Mikroişlemci iç yapısı ALU: Aritmetik ve mantıksal hesaplamalardan, transferlerden, kaydırmalardan sorumlu olan işlemcinin en önemli birimidir. ALU içerisindeki yazmaçlar ile mikroişlemcinin kaç bitlik bir işlemci olduğu belirlenir. Kontrol birimi: Tüm işlemlerin sırasını belirler ve gerekli denetim işaretlerini üretir. Aynı zamanda bellekten okunan kodların çözümü de bu birimde yapılır Kaydediciler: Mikroişlemci içerisindeki veri yada adres bilgileri kaydedicilerde (register, yazmaç ) tutulur. Sayıları her mikroişlemci ailesi için farklı olabilir. 5 Mikrodenetleyici Nedir? CPU çevresinde yapılandırılmış, bellek (Eprom, Flash), programlanabilir giriş ve çıkışlar (input-output) analog-dijital dönüştürücü, sinyal üretici, sayıcı, iletişim arabirimi, kristal salınım üretici, gibi çevre birimlerinin tümleşik bir biçimde yani tek bir yonga şeklinde üretildiği bir mikro bilgisayardır. 6
Mikroişlemci vs. Mikrodenetleyici Mikroişlemci Sadece CPU içerir, RAM, ROM, I/O, timer vb. ayrıca bağlanır. Tasarımcı ROM, RAM ve I/O portlarının büyüklerini kendisi belirler ve ona göre tasarımı gerçekleştirir. Pahalıdır. Çok yönlüdür. Genel amaçlıdır. Bilgisayarlarda kullanılmaktadır. Mikrodenetleyici CPU, RAM, ROM, I/O, timer vb. birimler tek bir çip içerine konulmuştur. Dahili ROM, RAM ve I/O portları mevcuttur, ayrıca bir tasarım gerektirmez. Ucuzdur. Tek (özel) amaçlıdır. Alarmlı saatlerde, mikrodalga fırınlarda, bulaşık makinelerinde, buzdolaplarında v.b. Gibi elektronik kontrol gerektiren birçok cihazda kullanılmaktadırlar. 7 Gömülü Sistemler Bir ana ya da alt sistem olarak bir görevin yerine getirilmesini sağlayan entegre sistemlere Gömülü Sistem adı verilir. Herhangi bir sistem içerisinde yer alarak, o sistemi akıllı hale getiren elektronik donanım ve yazılım ile oluşmuş entegre sisteme gömülü sistem denir. 8
Gömülü Sistem Bileşenleri 9 Mikroişlecili Sistemler Lab. Dersi İçeriği UNİ-DS6 Board Tanıtımı Pic16f877 Mikroişlemcisi Pic16f877 GPIO Portları Pic16f877 Kesme Birimleri Pic16f877 Timer Birimleri LCD/GLCD/TFT Uygulamaları PWM, DAC, ADC Birimleri I2C, SPI, USART, USB İletişim Birimleri 10
Kullanılacak Donanım ve Program 11 Mikroişlemcili Sistemler Ders Kaynakları MikroC ve Pic18F4550, Hikmet Şahin ve K. Serkan Dedeoğlu, Altaş Yayıncılık. MikroC PRO for PIC Derleyici Kütüphaneleri. 12
PIC Mikrodenetleyicilerin kullanımı yaygınlaştıkça Atmel, Philips, Renesas, NEC, Microchip gibi firmalar mikrodenetleyicilerle piyasa çıkmaya başladılar. Microchip, 1990 yılından itibaren 8-bit lik mimari üzerine yaptığı özel donanım eklentileri ile günümüzde onlarca çeşit mikrodenetleyici üretmektedir. Microchip firması tarafından üretilen mikrodenetleyicilerde Harvard mimarisi (RISC yapısı) kullanılmaktadır. Bu nedenle PIC mikrodenetleyicilerinin program ve veri belleği birbirinden ayrıdır. RISC yapısı nedeniyle PIC ler oldukça az komut (35 komut) ile programlanmaktadır. 13 PIC PIC kelimesi, Peripheral Interface Controller-Çevresel Arabirim Denetleyicisi den türetilmiş olsa da farklı kaynaklarda Programmable Interface Controller - Programlanabilir Arabirim Denetleyicisi veya Programmable Intelligent Computer - Programlanabilir Akıllı Bilgisayar olarak adlandırılmıştır. PIC Mikro denetleyicilerinin birçok çeşidi vardır, veri yolu genişliği baz alınarak PIC mikro denetleyicileri; 8- bit(pic10,pic12,pic16,pic18), 16-bit(PIC24) ve 32-bit(PIC32) olarak sınıflandırabiliriz. PIC serisi entegreler, Assembly, Basic veya C dili ile programlanabilir. Kolaylık ve arayüz bakımından C dili tercih edilse de, Assembly profesyonel anlamda daha çok kullanım alanına sahiptir. 14
PIC AİLESİ PIC10 ve PIC12 Ailesi: 8-bit veriyolu, 12-bit yazılım mimarisi PIC 16 Ailesi: 14-bit yazılım mimarisi, gelişmiş iletişim ve ADC özellikleri PIC18 Ailesi:16-bit yazılım mimarisi, 16-bit veriyolu PIC24 Ailesi: 24-bit yazılım mimarisi dspic: PIC24 tabanlı, artı DSP ( sayısal sinyal işleme ) fonksiyonları PIC32-bit Ailesi: 32-bit veriyolu PIC32MX Ailesi: MIPS Mimarisi tabanlı, 32- bit veriyolu Bir MCU çip dışındaki harici ünitelerle veri alışverişini kaç bitle yapıyorsa buna veri yolu bit sayısı denir. 15 Neden PIC Mikroişlemcisi Piyasada kolay bulunabilmeleri ve birçok çeşidinin olması. Programlama için gerekli donanımların çok basit olması ve ücretsiz devre şemalarının kolaylıkla bulunabilmesi Programlama için gerekli olan yazılım geliştirme araçlarının Microchip tarafından ücretsiz olarak sunulması Sahip olduğu RISC mimarisinin, az sayıda komut ile kolayca programlanmasına olanak sağlaması Basic, C gibi yüksek ve orta seviyeli dillerde programlanmalarını sağlayan ücretli/ücretsiz yazılımlarının bulunması. Yaygın kullanımın bir sonucu olarak çok miktarda örnek uygulama ve kaynağın bulunması Microchip tarafından yazılan uygulama notlarının uygulama geliştirmede kolaylıklar sağlaması 16
Pic16f877 Özellikleri PIC 16F877 yüksek performanslı, CMOS, full-statik, 8 bit mikrodenetleyicidir. Flash Bellek ve EEPROM bellek çeşitleri kullanırlar. İçerisinde değişkenleri saklamak için ise rastgele erişimli hafıza (RAM) kullanırlar. Komut işleme tekniği olarak hızlı çalışmasından dolayı RISC mimarisini temel alan işlemci kullanırlar (RISC: Reduced Instruction Set Computing). 40 pinlidir (yani 40 bacağı bulunur). 33 tane pini giriş/çıkış (I/O), 7 pin ise besleme gerilimi, osilatör, reset(mclr) gibi mikrodenetleyicinin çalışması için gerekli donanıma pinleridir. Bellek organizasyon mimarisi olarak HARWARD mimarisini kullanırlar. Bu mimarinin özelliği program ve veri saklama bellekleri ayrı yapıdadır. En yüksek kristal hızı olarak 20 MHz ile çalışılabilmektedir. Flash program belleği ise 8Kx14 boyutundadır. 17 18 PIC16F87X İç Mimarisinin Blok diyagramı
PIC16F877 Pin Diyagramı PIC16F877 'nin 40 pininden 33 tanesi I/O ( input/output - giriş/çıkış ) pinleridir. PIC16F877; 6 bitlik A portu, her biri 8 bitlik B,C ve D portları ve 3 bitlik E portu olmak üzere 5 porta sahiptir. I/O pinlerinin gerekli konfigürasyonlar yapılarak başka amaçlarla kullanılması da mümkündür. 19 PIC16F877 Pin Diyagramı 20
PIC16F877 Pin Diyagramı 21 PIC16F877 Pin Diyagramı 22
PIC16F877 ile Yapılabilecek Uygulamalar RTC Uygulamaları, USB İletişim, USART İletişim, DAC ve Ses Uygulamaları, ADC Uygulamaları, I2C İletişimi, SPI İletişimi, GPIO Uygulamaları (Led, Buton, v.b.) PWM/TIMER Uygulamaları, Motor ve Sensör Uygulamaları, LCD/GLCD Uygulamaları 23 Mikroişlemci Programlama Mikroişlemcili Sistemlerde Kullanılan Diller Makine kodu (Machine Code) Düşük seviyeli diller Low level language (assembly) Yüksek seviyeli diller (High Level Language) (c, c++, java) Uygulama Düzeyi Diller (Visual Basic, Access) 24
MikroC PRO for PIC 25 Örnek MikroC for Pic Kodu void main() { ANSEL = 0; ANSELH = 0; C1ON_bit = 0; C2ON_bit = 0; // Configure AN pins as digital // Disable comparators TRISA = 0x00; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00; // set direction to be output // set direction to be output // set direction to be output // set direction to be output do { PORTA = 0x00; // Turn OFF LEDs on PORTA PORTB = 0x00; // Turn OFF LEDs on PORTB PORTC = 0x00; // Turn OFF LEDs on PORTC PORTD = 0x00; // Turn OFF LEDs on PORTD Delay_ms(1000); // 1 second delay PORTA = 0xFF; // Turn ON LEDs on PORTA PORTB = 0xFF; // Turn ON LEDs on PORTB PORTC = 0xFF; // Turn ON LEDs on PORTC PORTD = 0xFF; // Turn ON LEDs on PORTD Delay_ms(1000); // 1 second delay } while(1); // Endless loop } 26