İstanbul Teknik Üniversitesi Kontrol Mühendisliği 20 İş Günü Süreli İlk Staj Programı



Benzer belgeler
Adres Yolu (Address Bus) Bellek Birimi. Veri Yolu (Databus) Kontrol Yolu (Control bus) Şekil xxx. Mikrodenetleyici genel blok şeması

2. Mikro denetleyici Nedir?

Arduino nedir? Arduino donanım ve yazılımın kolayca kullanılmasına dayalı bir açık kaynak elektronik platformdur.

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

Paralel ve Seri İletişim. Asenkron/Senkron İletişim. Şekil 2: İletişim Modları

İçİndekİler. 1. Bölüm - Mİkro Denetleyİcİ Nedİr? 2. Bölüm - MİkroDenetleyİcİlerİ Anlamak

PIC 16F877 nin kullanılması

BÖLÜM Mikrodenetleyicisine Giriş

Mikroişlemciler. Microchip PIC

PROJE RAPORU. Proje adı: Pedalmatik 1 Giriş 2 Yöntem 3 Bulgular 6 Sonuç ve tartışma 7 Öneriler 7 Kaynakça 7

EasyPic 6 Deney Seti Tanıtımı

İÇİNDEKİLER ÖNSÖZ...3

BÖLÜM 7 XTAL2 XTAL1. Vss. Şekil Mikrodenetleyicisi osilatör bağlantı şekli. Bir Makine Çevrimi = 12 Osilatör Periyodu

İÇİNDEKİLER. 3 STM32F4 MIKRO-DENETLEYICISI 23 STM32 Ailesi ve STM32F STM32 Ailesi 23 STM32 Mikrodenetleyicileri 30 Numaralandırılması 30

MİLLİ SAVUNMA ÜNİVERSİTESİ KARA HARP OKULU DEKANLIĞI BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DERS TANITIM BİLGİLERİ

5.Eğitim E205. PIC16F628 ve PIC16F877 Hakkında Genel Bilgi IF THEN ELSE ENDIF HIGH-LOW GOTO-END- PAUSE Komutları Tanıtımı ve Kullanımı PIC16F628:

Configuration bitleri ve reset durumları hakkında kavramlar

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

BESLEME KARTI RF ALICI KARTI

TUŞ TAKIMI (KEYPAD) UYGULAMALARI

Proje Teslimi: güz yarıyılı ikinci ders haftasında teslim edilecektir.

B.Ç. / E.B. MİKROİŞLEMCİLER

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

1. Ders Giriş. Mikroişlemcili Sistem Uygulamaları

Doç. Dr. Cüneyt BAYILMIŞ

DENEY 21 IC Zamanlayıcı Devre

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

BÖLÜM 1: MİKRODENETLEYİCİLER

KONTROL VE OTOMASYON KULÜBÜ

Mikroişlemcili Sistemler ve Laboratuvarı 5.HAFTA:BÖLÜM-1

Mikroişlemci Nedir? Mikrodenetleyici Nedir? Mikroişlemci iç yapısı Ders Giriş. Mikroişlemcili Sistem Uygulamaları

BÖLÜM 6 Seri Port Đşlemleri

Analog Sayısal Dönüşüm

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

PIC Programlama. Devrim Çamoğlu

İletişim Protokolleri (Communication Protocols)

DOKUMANLAR

DY-45 OSĐLOSKOP KĐTĐ. Kullanma Kılavuzu

1. PROGRAMLAMA. PDF created with pdffactory Pro trial version

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

NB Ekran Seri Port Üzerinden Veri Okuma/Yazma. Genel Bilgi Protokol Oluşturma Veri Okuma Veri Yazma

Bu dersimizde pic pinlerinin nasıl input yani giriş olarak ayarlandığını ve bu işlemin nerelerde kullanıldığını öğreneceğiz.

4-Deney seti modüler yapıya sahiptir ve kabin içerisine tek bir board halinde monte edilmiştir.

Ad Soyad: Öğrenci No:

FRENIC MEGA ÖZET KULLANIM KLAVUZU

PIC Mikrodenetleyicileri

ADUC841 MİKRODENETLEYİCİ TABANLI GELİŞTİRME KARTININ TANITIMI:

MİKROİŞLEMCİ İLE A/D DÖNÜŞÜMÜ

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

DC motorların sürülmesi ve sürücü devreleri

C-Serisi PLC İleri Seviye Eğitim

DY-45 OSİLOSKOP V2.0 KİTİ

Birol Çapa Özen Özkaya Güz Dönemi Eğitimleri

BM-311 Bilgisayar Mimarisi

Melih Hilmi ULUDAĞ. Yazılım Mühendisi Mekatronik Mühendisi. a aittir.

FBs-serisi. Programlanabilir Kontrol Cihazı. Kullanım Kitabı - II [ İleri Düzey Uygulamalar. Önsöz, İçerik. FBs-PLC Interrupt Fonksiyonu 9

Deney 4. Gerçek Zamanlı Kesme Uygulamaları

FRENIC MEGA ÖZET KULLANIM KLAVUZU

YAPILAN İŞ: Sayfa 1. Şekil 1

DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI İÇERİK

Eğitim - Öğretim Yöntemleri Başlıca öğrenme faaliyetleri Kullanılan Araçlar Dinleme ve anlamlandırma

BEKLEMELĐ ÇALIŞMA VE ZAMAN SINIRLI ĐŞLER. 1. Genel Tanıtım. 2- WAIT işaretinin üretilmesi

KASIRGA 4. GELİŞME RAPORU

Teorik Bilgi DENEY 7: ASENKRON VE SENKRON SAYICILAR

7. Port Programlama. mikroc Dili ile Mikrodenetleyici Programlama Ders Notları -42- Şekil 2.1. Atmega16 mikrodenetleyici pin şeması

HAFTA 1 KALICI OLMAYAN HAFIZA RAM SRAM DRAM DDRAM KALICI HAFIZA ROM PROM EPROM EEPROM FLASH HARDDISK

PIC PROGRAMLAMA STEP MOTOR SÜRÜCÜ VE KONTROL AMAÇ NEDİR? Unipolar Step Motorlar. Uç TESPİTİ NASIL YAPILIR?

FRENIC MULTİ ÖZET KULLANIM KLAVUZU

INVT IVC1. -Kompakt Tip PLC. Marketing 2014 HM

DENEY-2. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

TIMER. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

MPLAB IDE ve ISIS ile ASSEMBLY DİLİNDE UYGULAMA GELİŞTİRMEK

Çalışma Açısından Bilgisayarlar

CPU ONE PLC KULLANMA KLAVUZU

XC8 ile PİC uygulamaları

RF Tabanlı Sayısal Veri Haberleşmesi

MEB YÖK MESLEK YÜKSEKOKULLARI PROGRAM GELİŞTİRME PROJESİ

EEM 419-Mikroişlemciler Güz 2017

MİKROİŞLEMCİLER LABORATUVARI İÇİN PROGRAM DERLEME VE YÜKLEME DOKÜMANI

FPGA İLE UYGULAMA ÖRNEKLERİ FPGA ile Seri Haberleşme (RS232) Uygulaması

Çizgi İzleyen Robot Yapımı

FULMATIC 7 GÜMÜŞ SERİSİ PLC PLC KULLANMA KLAVUZU

İçindekiler FPGA GELİŞTİRME KARTI ENERJİ BESLEMESİ:... 5 ENERJİ SİSTEMİ ŞEMASI:... 5 FPGA GELİŞTİRME KARTINA PROGRAM YÜKLEME:... 6

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BLGM423 Gömülü Sistem Tasarımı

Haftalık Ders Saati Okul Eğitimi Süresi

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

Arduino Temel Bilgiler

Mikroişlemcili Sistemler ve Laboratuvarı 6.Hafta

PIC16F87X te ADC MODÜLÜNÜN KULLANIMI

ELEKTRİK ELEKTRONİK MÜHENDİSLİĞİ SAYISAL TASARIM LABORATUVARI DENEY 6 ANALOG/DİGİTAL DÖNÜŞTÜRÜCÜ. Grup Numara Ad Soyad RAPORU HAZIRLAYAN:

Mikroişlemciler (EE 208) Ders Detayları

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

ACR-Net 100 Kullanım Kılavuzu

Yedi Karat Kullanım Klavuzu. Yedi Karat nedir? Neden Karat?

Deney 6: Ring (Halka) ve Johnson Sayıcılar

Program Kodları. void main() { trisb=0; portb=0; while(1) { portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); } }

Adım Motoru: açıya adım. Şekil 8.2 tekyönlü. Lab 8. Siyah (A) Mavi ( B ) Kırmızı (B)

Transkript:

İstanbul Teknik Üniversitesi Kontrol Mühendisliği 20 İş Günü Süreli İlk Staj Programı İlk staj programı 9 Haziran 2008 Pazartesi günü başlamış olup 20 iş günü sürmüştür. Bu süreç boyunca Uçak Uzay Fakültesi Kontrol ve Aviyonik laboratuarında ATMEL ismi ile anılan mikro denetleyiciler üzerine çalışma yapıldı. Söz konusu stajda adı geçen laboratuarda sürdürülen bir projenin alt parçası olan yukarıda ismi anılan mikro denetleyici için düşünülen çeşitli algoritmalar koda döküldü ve her koda ilişkin uygulamalar yapıldı. Staj ATMEL ailesine ait ATmega16 mikro denetleyicinsin genel özellikleri öğrenilerek başladı. 8 bitlik bir mikro denetleyici olan ATMEL ailesinin bu üyesi ile ATMEL hakkında genel bilgi sahibi olundu. Basit giriş/çıkış işlemlerinden, kesmeler, sayıcılardan zamanlayıcılara, pwm üretilmesinden seri haberleşmeye kadar bir çok modül kullanıldı ve uygulama yapıldı. Bu üyede öğrenilen bir çok özellik parça parça koda dökülüp Proteus Isis devre modelleme programı ile uygulamalar yapıldıktan sonra ATMEL ailesine mensup bir başka mikro denetleyici olan ATmega128 ile çalışmalara devam edildi. ATmega 128 ile daha önce yazılan kodlar ve uygulamalar daha bütünlüklü olarak ele alındı. Kullanılan programlar süre ilerledikçe birleştirilip geliştirildi. Staj sonunda proje amacına uygun kod yazılarak, proje üzerinde denendi ve başarı ile çalıştığı görüldü. Staj boyunca parça parça ilerleyen çalışmalar staj sonunda olumlu sonuçlar verdi. Projede amaç şu idi: Robota USART ile gelen konum bilgisine uygun olarak hareket etmek. Ancak robot bilgiyi aldıktan sonra bilgiye göre hareket edip etmediğini belirli aralıklar ile motorlarına bağlı enkoderlar aracılığı ile kontrol etmelidir. Projede bizden istenilen robotun harekete başlaması için USART tan veri alabilmesi bu bilgiye uygun olarak PI kontrolcüsü kullanarak motorları ile uygun hızda uygun konuma gidebilmek için hareket etmesi ve her 16 milisaniyede bir doğru konuma gidip gitmediğini enkoderları vasıtası ile kontrol ederek meydana gelen hatayı yine PI kontrolcüsü aracılığı ile gidermesi. Bu belgede staj boyunca ATmega16 ile başlayan süreç anlatılacak, ATmega 16 ve ATmega128 mikro denetleyicileri ile ele alınan konular anlatıldıktan sonra konuya uygun kod yazılacak ve ardından Proteus Isis programının ekran çıktıları ile koşturulan programın sonuçları verilecektir. Belgenin sonunca ise projenin stajyerlerden istediği programın tamamı verilecektir. Belgenin genel dökümü aşağıdaki gibidir: 1. ATmega16 2. ATmega128 3. Temel İşlemler 4. Kesmeler 5. Harici Kesmeler 6. Zamanlayıcı, Sayıcı ve PWM Üreticiler 7. USART 1

1. ATmega16 Genel Özellikler ve Bacak (Pin) Diyagramı Aşağıda ATmega16 ya ait bir kısım özellikler görülmektedir. Yüksek performanslı düşük güçlü AVR 8-bit Mikro denetleyici Gelişmiş RISC mimarisi 32 x 8 Genel Amaçlı Çalışan Yazmaçlar (Kütükler-Registers) Tamamıyla Statik (sabit) İşleyiş 16 MHz de 16 MIPS e Kadar Çıkabilme Çip üzerinde 2 çevrimli çarpım Yüksek Dayanıklı Geçici Olmayan (Non-volatile) Bellek Bölümleri 16K Byte Flash Program Belleği 512 Byte EEPROM 1K Byte Dahili SRAM Yaz/Sil Sayısı: 10,000 Flash/100,000 EEPROM (ilgili koşullar üretici bilgi sayfasında) Veri (Data) Saklama: 20 yıl 85 C de/100 yıl 25 C de JTAG (IEEE std. 1149.1 Compliant) Arayüzü Programlanabilir Flash, EEPROM, Sigortalar ve JTAG arayüzünde Kilit Bitleri Arayüz Özellikleri 2 Adet 8-bit Zamanlayıcı/Sayıcı (Timer/Counters) ile Ayrık Prescalers ve Karşılaştırma Modları Bir adet 16-bit Zamanlayıcı/Sayıcı (Timer/Counter with Ayrık Prescaler ve Karşılaştırma Modu ve Capture Modu Ayrık osilatör ile gerçek zamanlı sayaç 4 PWM Kanalı 8 Kanallı, 10-bit ADC 8 Single-ended Kanal Byte-yönelimli 2 kablolu seri arayüz Programlanabilir Seri USART Master/Slave SPI Seri Arayüz Programlanabilir Watchdog Timer ile Ayrık On-chip Osilatörü On-chip Analog Karşılaştırıcı Özel Mikro denetleyici Özellikleri Power-on Reset ve Programlanabilir Brown-out Detection Dahili Ayarlı RC Osilatör Harici ve Dahili Kesme Kaynakları 6 Çeşit Uyku Modu : Idle, ADC Gürültü Azaltma (Noise Reduction), Power-save, Power-down, Standby ve Extended Standby I/O ve Paketler(modüller) 32 Programlanabilir Giriş/Çıkış (I/O) Dizisi 40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF Çalışma Voltajı 2.7-5.5V ATmega16L için 4.5-5.5V ATmega16 için Hız Seviyeleri 0-8 MHz ATmega16L için 0-16 MHz ATmega16 için Güç Tüketimi @ 1 MHz, 3V, ve 25 C ATmega16L için Aktif: 1.1 ma Çalışmazken(Idle Mode): 0.35 ma Kapatıldığında (Power-down Mode): < 1 µa 2

Pin Diyagramı Aşağıda staj süresince üzerinde uygulamalar yapılan ATmega16 ya ait pin diyagramı görülmektedir. Pin Tanımları Şekil 1 VCC: Dijital Besleme Gerilimi GND: Toprak Port A (PA7..PA0): Port A Analog Dijital Çevirici için analog giriş görevini yapar. Port A ayrıca A/D Çevirici kullanılmadığında 8-bitlik iki taraflı Giriş/Çıkış portu olarak görev yapar.port A pinleri seçili tüm bitler için dahili pull-up direncine sahiptir. Port A çıkış kanalları simetrik sürüş karakteri ile high sink ve source capability e sahiptir. PA0 ve PA7 pinleri giriş olarak ayarlanıp, harici olarak pulled-low yapıldığında, eğer dahili pull-up dirençleri aktif ise bu pinler akımı beslerler. Port A pinleri, saat darbeleri olmasa da bir reset durumu meydana geldiğinde tri-stated olurlar. Port B (PB7..PB0): Port B seçilen her biti için dahili pull-up direnci olan 8-bitlik iki yönlü Giriş/ ÇIKIŞ portu olarak görev yapar. bit). Port B çıkış kanalları simetrik sürüş karakteri ile high sink ve source capability e sahiptir.port B giriş olarak ayarlandığında eğer pull-up dirençleri aktif hale getirilmişler ise harici olarak pull low yapılmış pinler akımı beslerler. Port B pinleri, saat darbeleri olmasa da bir reset durumu meydana geldiğinde tristated olurlar. Port B ayrıca ATmega16 için üreticinin bilgi sayfasında yazılı olan çeşitli özelliklere sahiptir. 3

Port C (PC7..PC0): Port C seçilen her bit için dahili pull-up direnci olan 8-bitlik iki yönlü Giriş/Çıkış portudur. Port C çıkış kanalları simetrik sürüş karakteri ile high sink ve source capability e sahiptir.giriş olarak ayarlandıklarında, harici pulled-low yapılmış Port C pinleri eğer pull-up dirençleri aktif hale getirilmiş ise akımı beslerler. Port C pinleri, saat darbeleri olmasa da bir reset durumu meydana geldiğinde tri-stated olurlar. Eğer JTAG arayüzü açık ise, PC5(TDI), PC3(TMS) ve PC2(TCK) pinlerinde bulunan pull-up dirençleri bir reset meydana gelse de aktif olurlar Port D (PD7..PD0): Port D seçilen her bit için dahili pull-up direnci olan 8-bitlik iki yönlü Giriş/Çıkış portudur.port D çıkış kanalları simetrik sürüş karakteri ile high sink ve source capability e sahiptir. The Port D pinleri, saat darbeleri olmasa da bir reset durumu meydana geldiğinde tri-stated olurlar. Port D ayrıca ATmgea16 ya ait üretici bilgi, sayfasında yer alan başka özelliklere de sahiptir. RESET: Reset Girişi. Saat darbesi olmasa da genliği minimum darbe genliğinden (bu genlikle ilgili ayrıntı üretici bilgi sayfasında yer almaktadır) uzun olan bir düşük seviye (mantıksal sıfır-logic sıfır-low level) darbesi geldiğinde reset durumu meydana gelir. XTAL1: Osilatör Bacağı XTAL2: Osilatör Bacağı AVCC: AVCC Port A ve A/D Çevirici için besleme gerilimi pinidir. ADC kullanılmasa da harici olarak VCC bacağına bağlanmalıdır. ADC kullanılır ise alçak geçiren (low-pass) filtre ile VCC bacağına bağlanmalıdır. AREF: AREF A/D Çeivirci için analog referans pinidir. 2. ATmega128 Staj süresince kullanılan bir diğer mikro denetleyici 8 bitlik ATmega128 dir. ATmega128 in sahip olduğu özellikler ATmega16 dan daha fazla olmak üzere yukarıdakilere benzer olduğu için tekrar ele alınmayacak belgede yeri geldikçe ATmega128 in ATmega16 dan farklı olan tarafları anlatılacaktır. Şekil 2 de ATmega128 in bacak dizilimi görülmektedir. Şekil 2 4

3.Temel Çalışmalar Stajda ilk çalışma temel giriş/çıkış işlemleri ile başlamıştır. Bu sayede Atmel ailesine mensup mikro denetleyicilere ait yazmaçlar (kütükler-registers) öğrenilmeye başlanmıştır. İlk olarak ATmega16 nın bir devrede hangi bağlantılara sahip olacağı öğrenilmiştir. Şekil 3 te Atmega16 nın bağlanış şekli gösterilmiştir. Proteus Isis besleme bacaklarını otomatik olarak bağladığından şekilde VCC ve Ground bacakları görülmemektedir. Şekilde görüleceği üzere şayet dahili osilatör kullanılmadığında harici osilatörün nasıl bağlanacağı, reset işlemi için nasıl bir bağlama şekli gerektiği gösterilmiştir. Bundan sonraki çalışmalarda Proteus dahili kristali istenilen biçimde değiştirmeye izin verdiğinden ve besleme bacakları otomatik olarak yapıldığından devre bu şekilde bağlanmadan uygulamalar yapılacaktır.. Şekil 3 Uygulama 1:Temel Giriş/Çıkış İşlemleri Şekil 4 te ilk uygulamaya dair AVR Studio nun genel görünümü ile yazılan ilk program görülmektedir. AVR Sudio nun sol tarafında programla ilgili header files, source files gibi programın derlenmesini ve çalışmasını sağlayan dosyalar bulunmaktadır. Ortadaki ekranda C kodu görülmektedir. Sağ yanda ise AVR ye ait simülasyon ekranı bulunmaktadır. Bu ekranda programcıya ATmel16 ya dair tüm modüller (kesmeler,spi,usart gibi modüller yazmaçlar bayraklar ) sunulmaktadır. 5

Şekil 4 Şekil 5 6

Şekil 5 te yazılan ilk program görülmektedir. Programda öncelikle ATmega16 ya it giriş/çıkış kütüphanesi (i/o.h) eklenmiştir. Ardından geleneksel C dili yazımında olduğu üzere bir main() (ana fonksiyon) açılmıştır. DDRB = 0b11111111 yapılarak B portuna ait tüm pinler çıkış yapılmıştır. DDR data direction register in kısaltılmışı olup veri alış verişinin hangi yönde olacağına karar verir. Mantıksal (logic) 0 değeri giriş(input) anlamına gelirken, mantıksal 1 çıkış(output) anlamına gelmektedir. Bunun ardından PORTB=0b01010101 yapılarak PORTB den sırasıyla 0.,2.,4.,6. pinler mantıksal 1 değeri verirken diğer pinler mantıksal 0 değeri verirler. Şekil 6 da uygulamaya ilişkin devre çıktısı yer almaktadır: Şekil 6 Uygulama 2:Bekleme Fonksiyonu İle LED Yakıp Söndürme Şekil 7 de Uygulama 2 ile ilgili program görülmektedir. Bu programda önce iki adet kütüphane eklenmiştir. Birinci kütüphane giriş çıkış işlemleri ile ilgili olan, ikinci kütüphane ise bekleme işlemleri ile ilgili olan kütüphanedir. Ardından sayaç için tamsayı tipinde bir değişken tanımlanmıştır. Ana fonksiyonda D protu çıkış olarak ayarlanmış, PORTD binary cinsinden bir değere(0b01010101) eşitlenerek, hangi pinin 5V, hangi pinin 0V vereceği yazılmıştır. Ardından program bir döngüye sokulmuş(while(1)) ve içinde PORTD, 0b11111111 ile ve lenmiştir. Bu işlemin ardından her bitin tersi alınmıştır. Sırasıyla gösterilecek olursa; PORTD( ve lendikten sonra)=0b01010101 olmuş, PORTD( ters lendikten sonra)=0b10101010 olmuştur. Bundan sonra 350 ms beklenmiş sonra bu yeni değer yeniden ve lenerek ve ters lenerek eski haline gelmiştir. 7

Şekil 7 Şekil 8 8

Şekil 9 Şekil 8 ve 9 da bu programa uygun çıktı görülmektedir. Staj süresince bu ve bunun gibi bir çok uygulama kesmelerde,seri haberleşmede,pwm üretiminde uygulandı. Bu gibi temel işlemler öğrenildikten sonra stajın ikinci safhasında kesmelere başlandı. İlk olarak harici kesmeler ele alındı. 4. Kesmeler Kesme, gömülü sistemler için önemli bir kavramdır. Bir mikro denetleyicide bir program koşarken, kesmeye sebep olacak bir durum meydana geldiğinde (kesme bayrağını aktif hale getirecek-set edecek-bir durum) program nerede olursa olsun, hemen kesme ile ilgili olan alt programa dallanır. Kesme içindeki işlemler bitinceye veyahut kesme koşulu bir şekildi sonlandırılıncaya kadar bu dalın içinde kalır. Kesme koşulları sona erdiğinde program ana fonksiyona geri döner ve kaldığı yerden çalışmaya devam eder. Atmega ailesine mensup olan mikro denetleyicilerde bir çok yazmaçta(register-kütük) kesmeye dair bayraklar ve yazmaçlar(kütük-register) bulunabilir. Stajda ileriki uygulamalarda ele alınan projelerden fark edileceği üzere kesmeler bir çok yerde kullanılmaktadır. Bu sebepten daha stajın ilk günlerinden içlerinde kesmelere dair bit bulunduran, kesmeleri başlatan, bitiren bir çok yazmaç ele alınmış ve bu yazmaçlara bağlı olarak uygulamalar yapılmıştır. Bundan önce üreticinin bilgi sayfasında(datasheet) sayfa 45 ten alınan ATmega16 da bulunan kesme çeşitlerine bakılacak olursa: 9

Tablo 1 Tablo 1 de görüldüğü üzere ATmega16 da bir çok kesme çeşidi vardır. Şimdi bu kesmeleri kullanmayı öğrenmek için bakılan yazmaçlara ve onların görevlerine bakalım. Staj süresince ilk ele alınan yazmaç Status Register ve onun içinde yer alan SREG in 7. biri Global Interrupt Enable dır. Status register çalıştırılmış aritmetik işlermlerin sonuçları hakkındaki veriyi içerir. Bu bilgi programın akışını değiştirmek için kullanılabilir. SREG, Aritemek mantıksal ünitenin (Arithmetic Logic Unit-ALU) işlemlerinden sonra güncellenir. Bu sayede programın daha hızlı koşturulması sağlanır. AVR Status Register-SREG- şöyle gösterilir: Tablo 2 SREG in 7. biti Staj süresince yapılacak uygulamalar için oldukça büyük önem taşımaktadır: 10

Bit 7 I: Global Interrupt Enable : Kesmelerin aktif hale getirilmesi için Global Interrupt Enable ayarlanmalıdır( 1 yapılmalıdır-set edilmelidir-aktif hale getirilmelidir). Bu aşamadan sonra ayrı ayrı her interrupt kendi bayrakları sayesinde aktif hale getirilebilir. Ancak Global Interrupt Enable Register temizlendiğinde( aktif halden çıkarıldığında ) hiçbir kesme çalışmaz. Bu yazmacın kesmeler için başlama noktası anlamına gelen 7. bitine bakıldıktan sonra genelden özele ilerleyerek, bir başka yazmaç ele alındı. General Interrupt Control Register ismini taşıyan bu yazmacın bit yapısı şu şekilde idi: Tablo 3 Tablo 3 ten anlaşıldığı üzere GICR, harici kesmeleri temsil eden INT0-1-2 bitleri ile IInterrupt vector select ile Interrupt Vector change Enable bitlerini taşımaktadır. IVSEL ve IVCE, C kodu üzerinden işaretlenebildiğinden(atmel de vektör isimlerinin ayrı olup çağırıldıklarında bu bitler derleyici tarafından otomatik olarak ayarlanmaktadır) kod yazılırken dikkate alınmadı. Ancak harici kesmelerin aktif hale gelmesini sağlayan son 3 bit önemlidir. Bu nokta ileride anlatılacaktır. Sonuç olarak stajın bu safhasında Atmel ailesine mensup bir mikro denetleyicide Kesme çeşitleri, haritası ve de kesme işlemleri için önce hangi adımın atılması gerektiği görüldüğü,bunun ardından ilk kesme çeşidi olan harici kesmeler ile ilgilenildi. 5. Harici Kesmeler Harici kesmeler INT0,INT1,INT2 pinlerinin tetiklenmesi ile meydana gelir. INT0-1-2 pinleri çıkış olarak ayarlansalar da eğer aktif hale getirildilerse kesme meydana gelir. Harici kesmeler kendisine gelen elektriksel sinyalde düşen kenar, yükselen kenar veya herhangi bir mantıksal değişim sonucunda tetiklenebilir. MCU Control Register (MCUCR) isimli yazmaçta yapılan ayarlamalarla kesmenin ne zaman meydana geleceği ayarlanabilir. Kesme durumu meydana gelince program, harici kesme fonksiyonuna dallanır ve orada yazan kodu işlemeye başlar. Tablo 4 Tablo 4 te harici kesme ile ilgili olan MCUCR(MCU Control Register) görülmektedir. Aşağıda ise bu bölümde işe kullanılacak olan bitler ele alınmıştır. Bit 3, 2 ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0 Harici kesme 1 (The External Interrupt 1 ) SREG ayarlanıp, GICR de INT1 ile ilgili bit ayarlandığında aktif hale gelir. ISC11 ve ISC10 ise INT1 pinine gelen elektriksel sinyalle ilgilidirler. Bu bitler hangi elektriksel sinyalde harici kesmenin aktif olacağını belirlerler. Tablo 4.1 de bu durum anlatılmaktadır. 11

Tablo 4.1 Interrupt 1 Sense Control ISC11 ISC10 Açıklama 0 0 INT1 0 (low level) iken kesme üretir. 0 1 Herhangi bir mantıksal değişim (Any logical change) kesme üretir. 1 0 INT1 düşen kenarda kesme üretir. 1 1 INT1 yükselen kenarda kesme üretir. Bit 1, 0 ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0 SREG ve ona ilişkin kesme maskesi aktif hale getirildiğinde INT 0 aktif hale gelir. Bu bitler de yukarıdaki bitlerle aynı görevi yaparlar. INT0 harici kesmesinin hangi elektriksel değişim sonucunda medya geleceğini anlatan bu bitlerin hangi durumda ne yapacakları Tablo 4.2 da anlatılmaktadır. Table 4.2 Interrupt 0 Sense Control ISC01 ISC00 Açıklama 0 0 INT0 0 (low level) iken kesme üretir. 0 1 Herhangi bir mantıksal değişimde INT0 kesme üretir. 1 0 INT0 düşen kenarda kesme üretir. 1 1 INT0 yükselen kenarda kesme üretir. INT2 ile ilgili kesme aşağıdaki yazmacın sorumluluğundadır. MCU Control and Status Register MCUCSR isimli bu yazmacın bit haritası aşağıdaki gibidir. Tablo 5 Bu bitlerden INT2 ile ilgili olan bit ISC2 dir. Bit 6 ISC2: Interrupt Sense Control 2 Asenkron Harici Kesme 2, SREG e ait I-bitinin(Interrupt) ve de GICR de INT2 ye ait bitin aktif edilmesi ile çalışabilir. ISC2 0 yapıldığında, INT2 harici kesmesi düşen kenarda aktif hale gelir. ISC2 1 yapıldığında ise yükselen kenarda aktif hale gelir. INT0-1-2 harici kesmlerini aktif hale getiren yazmaç Tablo 6 da bit haritası görülen GICR dir. Tablo 6 12

Her 3 kesmeyi de aktif hale getirmek için, SREG biti ayarlanıp, ilgili ISCxx bitleri de istenilen kesmeye girme biçimine getirilip GICR de ilgili kesme biti 1 yapıldığında harici kesme kullanıma hazır hale getirilmiş olur. Uygulama 3:INT0 ve INT1 Harici Kesme Kullanımı Şekil 7 de Uygulama 3 e ait kod görülmektedir. Kodda öncelikle kesme(interrupt.h) ve bekleme(delay.h) işlemlerine dair kütüphaneler eklenmiştir. io.h isimli header file, interrupt.h dosyasının içinde olduğundan yeniden eklenmemiştir. Ardından INT0 ve INT1 kesmelerinin vektörlerini ayarlayan ISR(INT0_vect) ve ISR(INT1_vect) fonksiyonları yazılmıştır. Bir harici kesme durumu oluştuğunda program bu iki fonksiyondan birine dallanmaktadır. Kesme fonksiyonlarının içinde ise PORTB yi artırılıp azaltılarak görsel çıktı sağlanmak istenmiştir. Ana fonksiyonun içinde B portı çıkış D portu giriş olarak ayarlanmıştır. SREG de I-biti diğer bir ifade ile kesmeleri aktif etmek için gerekli olan bit 1 yapılmıştır. GICR nin son 3 biti 1 yapılarak INT 0-1-2 kesmeleri hazır hale getirilmiştir. Ardından ISCxx bitleri programda gibi INT1 için düşen kenarda INT0 için yükselen kenarda kesmeye girmek üzere ayarlanmıştır. Şekil 10 Şekil 11 de devrenin başlangıç durumu görülmektedir. Şekil 12 de ise INT0 ın bağlı olduğu butona basılınca meydana gelen değişim gözlenmektedir. INT0 butonuna basıldığında INT0 toprakla kısa devre halindedir. Diğer bir deyişle düşen kenardadır. Çekildikten sonra ise 5V a kısa devredir. İlk yükselen kenar. Böylece ilk basıp-çekme sonucunda bir kesme meydana gelir. Burada 2 1 *1+2 2 *1=2+4=6 dan butona toplam 6 kere basılıp çekildiği anlaşılmaktadır. 13

Şekil 13 te ise INT1 butonuna basılmış ve PORTB nin değeri 1 azalmış şekilde görülmektedir. 6-1=5 ya da 2 0 *1+2 2 *1=1+4=5 eşitliklerinden bu durum anlaşılabilir. INT1 butonuna basıldığı anda 5V tan 0V ta geçiş olduğundan basıldığı an düşen kenarla karşılaşılır ve PORTB bir azalır. Çekildiğinde ise bir şey olmaz. Şekil 11 14

Şekil 12 Şekil 13 15

Bu çalışma ile ilk defa bir kesme kullanılmış oldu. Genel olarak yazmaçların nasıl işlediği anlaşıldıktan sonra zamanlayıcı/sayıcı/pwm üretici modüller ve onlara ait yazmaçlar öğrenilmeye başlandı. Tablo 7 6.Zamanlayıcı, Sayıcı ve Pwm Üreticiler Atmega16 da 8 bitlik 2, 16 bitlik 1 adet zamanlayıcı vardır. Tablo 7 de timer0 a ait yazmaç haritası görülmektedir. Bu haritada görülen bitlerden WGMxx ile başlayan bitler wave generation mode (dalga üretim modu) anlamına gelmektedir. Tablo 8 de bir bakıma bu bitlerin ne iş yaptığı özetlenmiştir. ATmega16 ve 128 de zamanlayıcıların bir çok fonksiyonu vardır. bir bitin değeri ile oynanılarak pwm üretimin frekansı değiştirilebilir, genliği değiştirilebilir ve bütün bunların hemen hepsi birkaç bitte ufak oynalarla gerçekleşir. Uygulamalar yapıldıkça tüm bu bitler daha rahat anlaşılacaktır. COMxx ile başlayan bitler compare match output mode ifadesinin kısaltılmış halidir. WGMxx lerin durumlarına göre OC0 pinin davranışını belirlerler. Tablo 8 Tablo 9 16

Tablo 10 Tablo 11 Üreticinin bilgi sayfasından alınmış olan yukarıdaki tablolardan şunlar anlaşılmaktadır. Zamanlayıcının nasıl bir dalga üreteceği seçilir. Ardından seçilen dalgaya uygun OC0 pinin davranışı COMxx isimli bitler aracılığı ile belirlenir. Son olarak da bütün bu dalga üretiminin hangi saat darbesi ile ne kadar sıklıkla yapılacağı CSxx (clock select) bitleri ile aşağıdaki tablodaki gibi belirlenir. Tablo 12 Yine zamanlayıcı modülüne ait Tablo 13 te bit haritası görülen timer counter register isimli TCNT0 sayıcı uygulamalarında kullanılır. Tablo 13 17

Tablo 14 Tablo 14 te ise output compare register isimli OCR0 a ilişkin bit haritası gösterilmiştir. OCR0 kendine atanan değeri sürekli olarak TCNT0 ile karşılaştırır. Bu karşılaştırmalar sonucunda bu ikisinin birbirlerini yakaladıkları nokta ya kesmeye girmenin tetikleyicisi olan ya da dalga üretimini başlatan noktadır. Ve bu noktada olan olaya göre OC0 pinin davranışı belirlenir. Tablo 15 Tablo 15 te zamanlayıcı modülüne ait kesmelerden sorumlu timer interrupt mask register isimli yazmaç görülmektedir. Bit 1 OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable OCIE0 1 yapıldığında(sreg de kesmeler açılmış iken ) Timer/Counter0 Compare Match interrupt kesmesi aktif olur. Timer/Counter0 da bir karşılaşma meydana geldiğinde Timer/Counter0 Output Compare Match Interrupt Enable kesmesi meydana gelir. Bit 0 TOIE0: Timer/Counter0 Overflow Interrupt Enable TOIE0 1 yapıldığında(sreg de I-biti açılmış iken) Timer/Counter0 Overflow interrupt kesmesi aktif olur. Timer/Counter0 da taşma meydana geldiğinde Timer/Counter0 Overflow Interrupt Enable kesmesi meydana gelir. 18

Uygulama 4:Zamanlayıcı Modülü ile Sayaç Kullanımı Şekil 14 Kodda her zamanki gibi gerekli kütüphane yazıldı. Ardından giriş çıkış portları ayarlandı. Sonra üreticinin bilgi sayfasından elde edilen değerler timer counter control register 0 (TCCR0) yazmacına atandı. Burada CSxx bitleri yükselen kenarları say şeklinde ayarlandı. COM00 seçilerek toggle modu ayarlandı. Böylece yükselen kenar sayısı TCNT0 a (timer counter 0) aktarıldı.ardından ana fonksiyonda bu değer PORTD ye yazdırıldı. Şekil 15 te uygulamaya ilişkin kod çıktısı görülmektedir. Şekil 15 19

Uygulama 5:PWM Üretimi Şekil 16 Şekil 17 Şekil 18 20

Şekil 16 da bulunan kodda OC1A ve OC1B ye ilişkin port çıkış yapıldıktran sonra, üreticinin bilgi sayfasına bakılarak faz doğrultmalı, evirilmemiş -OCRxx yazmacındaki değere ulaşıncaya kadar 1, o değerden sonra ise 0 veren- 8 bitlik PWM üretilmiş ve çıktısı Şekil 17 ve 18 de gösterilmiştir. Atmega16 da veya 128 de bu ve bunun gibi bir çok pwm üretim şekli vardır. bunlardan bir diğer önemli olanı fast pwm olarak anılan normal pwm in 2 katı frekansı sahip olan pwm dir. Bu ve bunun gibi konular ileri ki meselelerde görülecektir. Uygulama 6:PWM Üretimi 2 Uygulama 16 da hem fast pwm hem de faz doğrultmalı pwm e ilişkin kod ile devre çıktısı ele alınmıştır. Tablo 16 Tablo 16 da Atmega128 ile ilgili üreticinin bilgi sayfasında yer alan TCCR0 yazmacına ilişkin bitlerden WGMxx bitlerinin hangi yapıda hangi sonucu verceği görülmektedir. Aşağıdaki kod ATmega128 de yazılmıştır. Kütüphane eklendikten sonra protatipler yazılmıştır. Program öncelikle portları hazırlar, ardından dış kesme hazırlanır. Dış kesmeye girdiğinde PORTE değeri 1 artırılır. Dış kesme hazırlandıktan sonra pwm hazırlanmış ve pwm_ver fonksiyonu ile üretilen pwm in genliği ayarlanmıştır.genlik değeri ise PORTE ye atandığından, int0 bacağına yükselen kenar geldikçe kesmeye girip değerini bir artıracak bu da pwm in genliğini 1 arıracaktır. Şekil 19 ve 20 de bu durum görülmektedir. Eğer fast pwm olmasaydı üretilen pwm bu takdirde aşağıda görüldüğü üzere osiloskop çıkışında aynı zaman diliminde olmasına karşılık 4 darbe görülecekti. Buradan da anlaşılacağı üzere fast pwm frekansı, faz doğrultmalı pwm in frekansının iki katıdır. 21

22

Şekil 19 Şekil 20 23

Uygulama 7: Zamanlayıcı Taşma Kesmesi Zamanlayıcı modülünün önemli uygulamalarından biri de taşma kesmesidir. Normal moda çalışan bir zamanlayıcı ileri doğru saymaktadır. Örneğin 0 dan 255Ee. ATmega 16 da böyle bir zamanlayıcı aksi belirtilmediği sürece 0 dan en büyük değer olan 255 e kadar sayar. Ardından yeniden sıfırlanır ve bu şekilde saymaya devam eder. Ancak eğer zamanlayıcı taşma kesmesi kullanılacaksa 255 ten sonra 256 demek artık değerin 8 bitin dışına taştığını bu değere ulaşmak için bir 9. bitin gerektiği an olarak düşünülebilir. Bu fazladan bit TOVx x zamanlayıcısına ait timer overflow bayrağı- isimli bayrağı işaretler bu durumda zamanlayıcı taşma kesmesine girer. Kesme meydana geldiğinde bu bayrak sıfırlanır. Şekil 21 24

7. USART Evrensel Senksorn ve Asenkron Seri Alıcı ve Verici (The Universal Synchronous and Asynchronous serial Receiver and Transmitter) oldukça esnek bir seri iletişim aygıtıdır. Stajda kullanılan ATmega128 e ait USART modülü çeşitli özelliklere sahiptir. Birbirinden bağımsız alıcı verici yazmaçları ile iki kat hızlı işlem yapabilme, asenkron ve senkron işlem yapabilme, Master veya Slave zamanlı senkron işlem yapabilme gibi. ATmega128 de iki USART modülü bulunur. USART0 ve USART1. ATmega128 de USART kullanılırken birden çok yazmaç kullanılmaktadır. Öncelikle birim saniyede gönderilecek bit sayısını ifade eden baud rate olarak adlandırılan değerim belirlenmesidir. Bilginin hangi hızda taşınacağı beirlendikten sonra USART başlatma işlemi ile ilgili kütükler hazır hale getirilir. Bunun ardından usart ile hangi işlem yapılacak ise (USART ile bilgi alma veya verme) buna uygun yazmaçların değerleri değiştirilerek mikro denetleyici ile haberleşme işlemi tamamlanabilir. Uygulama 8: USART Modülünden Veri Yollama 25

Yukarıda görülen programa ait Proteus ekran çıktısı aşağıdaki gibidir: Şekil 22 Yukarıdaki programdan da anlaşılacağı üzere bundan sonraki uygulamalarda da görülecek ortak özellik USART a ait Baud Rate i ayarlamak -bu ise üreticinin bilgi sayfasında verdiği formüllerde görüleceği üzere UBRR yi ve Mikro denetleyicinin harici kristalini ayarlamakla olur- ardından alma işlemi veya verme işlemini etkin kılmaktır. Uygulama 8: USART Modülünden Veri Alma Bu uygulamada ise USART modülü ile veri alma işlemi gerçekleştirilmiştir. Ancak gönderilen verinin ATmgea128 tarafından gerçekten alınıp alınmadığını kontrol edebilmek amacı ile gelen veri tx bacağı ile Proteus a ait Virtual Terminale gönderilmiştir. 26

Şekil 23 Şekil 23 te görüleceği üzere klavyeden İSTANBUL TEKNİK ÜNİVERSİTESİ yazılarak Virtual Terminal ile ATmega128 in rx bacağına gönderilen bilgi yine aynı mikrodenetleyici ile tx bacağı aracılığı ile Virtual Terminale gönderilmiştir. Diğer bir deyişle klavyeden girilen her harf önce mikro denetleyiciye gönderilmiş ardından bu bilgi mikro denetleyici tarafından Virtual Terminale yollanmıştr. Böylece ATmega128 ile hem veri alınmış ardından gönderilebilmiştir. 27

Uygulama 9: USART Modülünde RX Kesmesi 28

Şekil 24 29

Şekil 25 Şekil 26 30

Şekil 27 Bu uygulamada Usart a ait rx kesmesi araştırıldı. Haberleşme hızı yani baud rate belirlendikten sonra alıcı verici kanallarını aktif hale getiren fonksiyonlar yazıldı. Bunun yanı sıra USART RX kesmesini hazırlayan kesme hazırla fonksiyonu ve kesmeye girildiği anda ne yapılacağını içinde barındıran USART0_RX_vect fonksiyonu yazıldı. Şekil 24 te ilk olarak ana fonksiyona uygun olarak A harfi çıktısı görülmektedir. Ana fonksiyon çalışmış ve A harfini yollamıştır. Şekil 25 te ise RX kanalına Virtual Terminal aracılığı ile bir bilgi ( U harfi) yollanmıştır. Bunun üzerine RX kanalına bilgi gelir gelmez zaten koşulları hazırlanmış olan kesme devreye girmiş ve t değişkeni 1000 olduğu anda PORTB yi şekil 26 da görüleceği üzere 1 artırmış ve t harfi 1000 in katı olduğu için ayrıca B bilgisini yollamıştır. Şekil 20 de t, 3000 olduğundan PORTB.0 ve PORTB.1 yanmış (2 0 +2 1 =3) ve mikro denetleyici 3 defa B yazmıştır. Uygulama 9: USART Ve Diğer Modüllerin Kullanımı Stajda yukarıda olan ve onlar gibi daha bir çok uygulama yapıldıktan sonra artık bir çok modülün bir arada kullanıldığı programlar yazıldı. Tüm bu karışık uygulamalarda amaç staj süresince üzerinde çalışılan robot için istenilen programı elde etmekti. Bu uygulamada öncelikle bir adet mikro denetleyici sürekli aynı veriyi basmaktadır. Bu veri diğer mikro işlemciye iletilmekte, bunun üzerine veri alan mikro denetleyici RX kesmesine girerek PortB yi artırmakta, aynı zamanda zamanlayıcı taşma kesmesine girerek PortF yi artırmakta ve Timer2 ile de bir sayaç tutmakta ve bu sayacı her taşmada Virtual Terminale TX bacağı ile aktarmaktadır. Öncelikle sürekli veri basan program: 31

Yukarıda görüleceği üzere program sürekli e harfini veri olarak göndermektedir. Bu veriyi alarak kullanan program ise: 32

bu iki programın çıktıları ise aşağıdadır: 33

Şekil 28 Şekil 29 34

Şekil 27 de görüleceği üzere programın yapısı itibari ile PORTF sürekli zamanlayıcı taşması kesmesine girilmesinden ve PORTB sürekli bilgi gelerek RX kesmesine girilmesinden dolayı artmaktadır. Şekil 28 de ise R1 Direncine bağlı butona basılarak sayacın bilgisi Virtual Terminale aktarılmaktadır. Bu çıktıya göre butona o ana kadar 5 defa basılmıştır. Stajın bu safhasından sonra artık üzerinde çeşitli uygulamalar yapılan robota yönelik programlar yazılmaya başlandı. İlk programlar robotta etkin çalışmadı. Bunun sebeplerinden en önemlisi PID kontrolcüsünün katsayılarının tam olarak bilenememesidir. İlk yazılan programlarda uygun USART verilerine göre hareket eden robot tam verim sağlayamamaktaydı. Ayrıca kendini sürekli kontrol eden doğru mu gidiyorum sorusunu soran mekanizma 50 milisaniyede bir devreye girmekteydi. Halbuki bizden istenen dt örnek zaman aralığı 16 milisaniye idi. Bir kısım etkin çalışmayan programdan sonra PID katsayıları sorununa geri dönüldü. Ve robotun üzerine bir program gömülüp hareketine bakıldı. MATLAB aracılığı ile enkoderlardan gelen veri incelendi. Sonunda uygun katsayılar elde edildi. Aşağıda bu katsayıları elde etmek amacı ile robota gömülen yazılım görülmektedir: 35

36

37

38

Bu kod ile böylece robot için uygun PID katsayıları bulunmuştur. Katsayıların bulunmasının ardından artık robota en uygun yukarıdaki kod ufak birkaç değişiklikle robota uygulanmış ve başarı ile çalıştığı görülmüştür. Bu projede çok kısaca sistemin çalışma şekli şöyledir: Bir ortamın içerisinden çeşitli engeller ve staj boyunca üzerinde çalışılan robot vardır. Kamera aracılığı ile ortamın üstten görüntüsü alınmakta ve bu görüntü bilgisayar üzerinde işlenmektedir. Üzerinde Linux işletim sistemi koşan GUMSTİX isimli bir modül bu bilgiyi bilgisayardan almakta ve ROBOSTİX isimli bir başka modüle aktarmaktadır. ROBOSTİX içinde ATmega128 mikro denetleyicisi bulunan bir modüldür. Gelen bilgi bilgisyarda çeşitli biçimlerde işlenmiş bilgi- USART aracılığı ile ATmega128 tarafından alınmakta ve ona uygun bir biçimde bir yerden başka bir yere gitmek üzere hareketlenmektedir. Her 16 milisaniyede bir hareketinin doğru olup olmadığını enkoderlarından aldığı bilgi sayesinde ölçmekte, PID kontrolcüsünü (çalışmada KD 0 çıktığından PI kontrolcüsü de denebilir ) kullanarak motor hızını artırıp azaltarak robotun varılması istenen konum ile kendisinin gerçekte gittiği konumun aynı olmasına çalışmaktadır. Bu staj boyunca stajyerlerden istenen bu ATmega128 in USART dan bilgiyi alması, enkoder bilgisini 16 milisaniyede bir kontrol etmesi PID kontrolcüsünü kullanarak, motorlara uygun PWM verilmesi şeklinde özetlenebilir. Aşağıda yukarıda sayılan işlemlerin hepsini istenilen biçimde yerine getirebilen ATmega128 e gömülmüş olan program bulunmaktadır: 39

40

41

42

BİROL ÇAPA KONTROL MÜHENDİSLİĞİ 2. SINIF ÖĞRENCİSİ 43