19
TUNA AYAN www.tuna-ayan.com [email protected] ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama

ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama

  • Upload
    yori

  • View
    92

  • Download
    0

Embed Size (px)

DESCRIPTION

ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama. TUNA AYAN www.tuna-ayan.com [email protected]. BAŞLAMADAN ÖNCE. GPS Modülü İle Konum Belirleme I2C Haberleşme Protokolü Magnetometre İle I2C Haberleşmesi GPIO, ADC , Timer ve UART Uygulamaları. GPS İLE KONUM BELİRLEME. - PowerPoint PPT Presentation

Citation preview

Page 1: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

TUNA AYAN

www.tuna-ayan.com

[email protected]

ARM Tabanlı Mikrodenetleyici

Temelleri ve Programlama

Page 2: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

• GPS Modülü İle Konum Belirleme

• I2C Haberleşme Protokolü

• Magnetometre İle I2C Haberleşmesi

• GPIO, ADC, Timer ve UART Uygulamaları

BAŞLAMADAN ÖNCE

Page 3: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS(Global Positioning System):

• Uydular ile arasındaki mesafeyi ölçerek konumunu bulan sistemdir.

• Bu sistem 24 adet uydudan oluşur. GPS alıcısı ise bu uydulardan gelen sinyal zamanlarını yorumlayarak konumunu hesaplar.

• Konum hesaplamasını üçgenleme metodu olarak adlandırılan bir metot kullanarak gerçekleştirir.

Page 4: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS(Global Positioning System):

• Uydular ile arasındaki mesafeyi ölçerek konumunu bulan sistemdir.

• Bu sistem 24 adet uydudan oluşur. GPS alıcısı ise bu uydulardan gelen sinyal zamanlarını yorumlayarak konumunu hesaplar.

• Konum hesaplamasını üçgenleme metodu olarak adlandırılan bir metot kullanarak gerçekleştirir.

Page 5: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS Nasıl Çalışır:

• GPS ile uydular arasında her hangi bir açı bilgisi gelmez.

• İlk olarak 24 uydunun hepsiyle iletişime geçer.

• Daha sonra kendisine en yakın olan 3 adet uydu yardımıyla konumunu belirler.

• Uydudan uzaklık bilgisini aldıktan sonra o uyduyu merkez kabul ederek çevresinde yarı çapı uzaklık olan bir çember çizer.

Page 6: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS Modul Uzaklık Bilgisini Nasıl Kullanıyor :

• Yol = Hız x Zaman

• Zaman olarak sinyalin seyahat zamanı bilgisini kullanıyor. Uydu sinyal cevabını gönderirken o anki saat bilgisini de gönderecektir.

• Her uydudan aynı anda veri alındığı kabul edilmektedir. GPS hatalarının nedenlerinde birisi budur.

• Hız olarak sinyalin hızı kullanılır. (ışık hızı)

Page 7: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS Modul Uzaklık Bilgisini Nasıl Kullanıyor :

• Yol = Hız x Zaman

• Zaman olarak sinyalin seyahat zamanı bilgisini kullanıyor. Uydu sinyal cevabını gönderirken o anki saat bilgisini de gönderecektir.

• Her uydudan aynı anda veri alındığı kabul edilmektedir. GPS hatalarının nedenlerinde birisi budur.

• Hız olarak sinyalin hızı kullanılır. (ışık hızı)

Page 8: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İLE KONUM BELİRLEME

GPS Modül Hataları:

• GPS sinyallerini gönderirken havadaki partiküller nedeniyle sinyal hızı yavaşlayabilir(ışık hızı)

• GPS ve Uydu arasındaki zaman kaymaları(saat hataları) sinyal zamanını etkilecektir.

Hataların Giderilmesi:

• Bu hatalar çift yönlü frekans hesabı ile iki taşıyıcı sinyal arasındaki gecikme kullanılarak çözülebilmektedir.

• A-GPS(assisted GPS) yöntemi ile hatalar azaltılabilmektedir.

• Saat doğruluğu için GPS modül üzerinde atom saati kullanılarak zaman kayması giderilebilir.

Page 9: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

GPS İle Konum Belirleme

GPS Modül Çıktılarının Yorumlanması:• GPS Modül üzerinde

NMEA protokolü ile bilgileri alacağız.

• GPS modül bize bir çok bilgi göndermektedir. Data paketleri içerisinden istediğimiz verileri ayrıştırmak ve yorumlamak zorundayız.

• GGA paket verisi üzerinden koordinat bilgilerimizi çekeceğiz.

Page 10: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Nedir:• I2C bir haberleşme protokolüdür. 2 kablo ile bir çok cihaza

erişebilmemizi sağlar.

• Hızlı olması bir çok cihazla sadece iki kablo üzerinden haberleşmesi tercih nedenleridir.

• Kısa mesafeli bir protokoldür.

Page 11: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Özellikleri:• SDA(Data kablosu) ve SCL(Clock kablosu) kabloları ile

haberleşme gerçekleştirilir.

• SDA ve SCL çıkışları open-drain yani ‘low’ konumda sürülürler.(0volt)

• Sistem pull-up direnç ile sürülmek zorundadır. Sisteme bağlı cihaz sayısı pull-up direnç sayısını etkilemez. 1 tane yeterlidir.

Page 12: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Özellikleri:• Master ve Slave olmak üzere iki moda sahiptir. Master komut

veren slave ise cevap veren kısımdır. I2C destekleyen bir modül iki şekilde de ayarlanabilir.

• Data transferini her zaman master başlatır. Slave data transferini başlatamaz.

• SDA bacağında bilgi çift taraflı gönderilebilir. SCL kısmında bilgi taşınmaz. Sisteme ortak clock vermek senkronizasyonu sağlamak için kullanılır.

Page 13: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Nasıl Çalışır:• Master slave ile konuşmak istediğinde önce start sinyali

gönderilmelidir.

• Veri gönderildikten sonra ise stop sinyali gönderilmelidir.

• Start yada stop işlemi SCL saati 1 konumunda iken SDA nın değişmesine göre belirlenir.

• Veri transferi tamamlandıktan sonra bir adet ACK sinyali oluşur. Bu yüzden 8 bitlik veri transferinde 9 bit çıktı alırız.

Page 14: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Nasıl Çalışır:• Veri 8-bit paketler halinde taşınır.

• Her bir bit SDA yoluna MSB(Most significant bit) olarak atanır.

• Standart SCL hızı 100KHz dir. 400KHz e kadar çıkabilir.

• Cihazlar ile haberleşebilmek için cihazların bir kişisel adresi olmak zorundadır. Bu adres slave adres olarak tanımlanır.

• Slave adresleri 7 bit tir.

Page 15: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

I2C HABERLEŞME PROTOKOLÜ

I2C Algoritması:• Master Start sinyalini gönderir.

• Master Cihaz adresini gönderir.(Slave adres)

• Slave üzerinden okumak ya da yazmak istediği register adresini gönderir.

• Yazma ya da okuma yapar.

• Bütün yazma ve okumaları bittikten sonra stop sinyalini gönderir.

Page 16: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

MAGNETOMETRE İLE I2C HABERLEŞMESİ

Magnetometre Nedir:• Manyetik alanın doğrultusunu hesaplamamıza yarayan

modüldür.

• Hesaplama birimi tesla dır.

• Metal detektörlerde kullanılabilir.

• Yönelme uygulamalarında kullanılır.

Page 17: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

MAGNETOMETRE İLE I2C HABERLEŞMESİ

MAG3110:• 3 eksenli bir magnetometre modülüdür.

• I2C protokolü ile çalışır.

• I2C adresi = 0x0E

Page 18: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

MAGNETOMETRE İLE I2C HABERLEŞMESİ

StellarisWare I2C Algoritması(yazma işlemi):• I2C Modülü aktif hale getirilir.

SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);

• LM3S811 i master olarak tanımla. Hızını 100kbps olarak tanımlaI2CMasterInitExpClk(I2C0_MASTER_BASE, SysCtlClockGet(), false);

• Cihazın Slave adresini tanımla. false yazma true okuma anlamına gelir.I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, SLAVE_ADDRESS, false);

• Gönderilecek datayı buffer üzerine alI2CMasterDataPut(I2C0_MASTER_BASE, ulDataTx[i]);

• Start sinyali ile birlikte gönderimi başlat.I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_START);

• Transfer bitene kadar beklewhile(I2CMasterBusy(I2C0_MASTER_BASE))

• Veri gönderme bittikten sonra stop sinyalini gönder.I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);

Page 19: ARM Tabanlı  Mikrodenetleyici  Temelleri ve Programlama

MAGNETOMETRE İLE I2C HABERLEŞMESİ

StellarisWare I2C Algoritması(okuma işlemi):• Önce magnetometre üzerinde okunacak reg adresi sisteme yazma işlemi ile

yazılır. Ardından okuma yapılır.I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, SLAVE_ADDRESS, false);

I2CMasterDataPut(I2C0_MASTER_BASE, 0x01);

I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_SINGLE_SEND);

• Slave adresi bu sefer okumak için gönderilir. (true)I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, SLAVE_ADDRESS, true);

• Data okuma isteği gönderilir.I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);

• Transfer bitene kadar beklenir.while(I2CMasterBusy(I2C0_MASTER_BASE))

• Veri kaydedilir.Data[0] = I2CMasterDataGet(I2C0_MASTER_BASE);

• Data çekilmeye devam edilebilir.I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT)

while(I2CMasterBusy(I2C0_MASTER_BASE))

• Okuma bitince stop sinyali gönderilir.I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);