Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

TUNA AYAN ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama.

Benzer bir sunumlar


... konulu sunumlar: "TUNA AYAN ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama."— Sunum transkripti:

1 TUNA AYAN ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama

2 • Clock Ayarı • TIMER Modülü • ADC Modülü • UART Haberleşme Protokolü

3 • Sistemin çalışma hızını belirleyen kısımdır. • LM3S811 maksimum 50MHz hızına ulaşabilmektedir. • LM3S811 üzerinde 2 adet osilatör vardır. İnternal osc ve Main osc olarak adlandırılır. • Main OSC 1-8 MHz hızındadır. Internal OSC ise 12MHz Hızındadır. • Boot anında her zaman Main OSC çalışır.

4 • Bütün OSC kaynakları PLL(Phase Locked Loop) destekler. • PLL 200MHz hızında sanal clock üreten bir bloktur. • Hız belirlendikten sonra Sistem saati, PWM saati ve ADC saati olarak kullanılabilir. • Sistemin desteklediği maksimum frekansın üstünde bir frekans ayarlandığı takdirde clock fail oluşur. • ADC saati sabit bir bölücüye sahiptir. ADC Modülünü MHz ile sürebilmek için PLL kullanılması zorunludur.

5 PLL Kullanımı: • OSC1 ve OSC2 osilatör kaynaklarıdır. Bunlar kristal ya da tek girişli(single ended) saat üreteci olabilirler. • Kristal kullanıldığı takdirde OSC1 ve OSC2 bacaklarına kristal bağlanır. • Tek girişli yapı kullanıldığı takdirde OSC1 üzerinden clock alınır.

6 PLL Kullanımı: • PLL 200MHz ile çalışabilmek için spesifik ve net frekans değerlerini osilatör kaynaklarından ister. • Desteklemediği frekans değerlerinde hatalı sonuçlar üretir.

7 StellarisWare İle PLL Kullanımı : • Öncelikle osilatör kaynağını seçiyoruz. ( SYSCTL_OSC_MAIN ) • 20 Mhz clock üretebilmek için PLL destekleyen bir osilatör kaynağı hızını sisteme göstermemiz gerekir. ( SYSCTL_XTAL_6MHZ ) • PLL seçildikten sonra 200MHz frekans üretecektir. Bunu maksimum frekans aralığına çekiyoruz. 200/10 = 20 MHz SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);

8 Timer(zamanlayıcı) Hakkında: • İşlemci içerisinde zamanlama gerektiren uygulamalarda kullanılır. • LM3S811 üzerinde Timer Modülü 3 adet blok halinde ifade edilir.(Timer1 Timer2 Timer3) • Her bir blok içerisinde 16-bit iki adet sayaç bulunur.(TimerA TimerB) • Başka bir modülü tetiklemek için, capture(yakalama) yapabilmek için ve PWM oluşturmak için kullanılabilir.

9 Timer Modları: • 32-bit sayıcı modu • 16-bit sayıcı modu • 16-bit input capture (giriş sinyali yakalama) modu • 16-bit PWM modu vardır. Mod Özellikleri: • One-shot timer: 1 kerelik çalışan sayaçtır. Sayaç sıfırlandıktan sonra bir dafa devam etmez. • Periodic timer: periyodik olarak çalışır. Sıfırlandıktan sonra saymaya devam eder.

10 Stellaris İle Timer Kullanımı: Algoritma: • Timer Modülü içerisinde kullanılacak blok aktif hale getirilir. SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); • Timer bloğu özellikleri belirlenir. TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |TIMER_CFG_B_PERIODIC); TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |TIMER_CFG_B_ONE_SHOT); • Sayaç değeri belirlenir. TimerLoadSet(TIMER0_BASE, TIMER_B, SysCtlClockGet() / 1000); SysCtlClockGet() = 1 saniyede yaptığı işlem sayısını bize veriyor => bu sayıyı 1000 e bölersek 1ms lik zaman dilimini elde ederiz. • İnterrupt varsa aktif edilir ve ayarlanır. Ne zaman tetikleneceği belirlenir. IntEnable(INT_TIMER0B); TimerIntEnable(TIMER0_BASE, TIMER_TIMB_TIMEOUT); • Timer açılır TimerEnable(TIMER0_BASE, TIMER_B);

11 ADC (Analog to Digital Converter) Nedir? • Analog verilerin dijital ortamda referanslarının tanımlanmasını sağlayan modüldür. • Voltaj ya da akım değerlerini dijital ortamda ifade edebilmemizi sağlar. • Çözünürlüğüne göre hassasiyeti ayarlanabilir. LM3S bit çözünürlüğe sahiptir.

12 LM3S811 ADC Modül Özellikleri: • 10-bit Çözünürlüğe sahiptir. • 0-3V referansı vardır. 0V => V => => 0x3FF • 4 adet analog girişe sahiptir. • Tek girişli(single ended) ve çok girişli(differential) hesaplamalar yapılabilir. • Saniyede 500k örnek alabilir. • Dahili(On-chip) sıcaklık sensörüne sahiptir.

13 LM3S811 ADC Modül Özellikleri: • Timer, PWM, GPIO ve interrupt ile kolayca tetiklenebilir. • FIFO(First In First Out) mantığına göre çalışır.

14

15 ADC Modül Modları: Tek girişli(Single Ended) mod: • Bu mod seçildiği takdirde tek bir analog giriş değeri okunur ve dijital referansı çıkartılır. Örnek: 0-3volt referansımız var olduğunu düşünelim 1.5volt giriş bize 0x200 sonucu verecektir. (0x3FF değerinin yarısı) Diferansiyel(Differential) mod: • Bu modda 2 adet giriş kullanılır ve bu girişlerin farkı dijital ortamda yorumlanır. Örnek: ilk giriş sinyalimiz 2.5volt olsun. İkinci giriş sinyalimiz ise 1.75 volt olsun bu sefer; 2.5 – 1.75 = 0.75 => 0x100 sonucunu verecektir.

16 ADC Modül Nasıl Çalışır: • Sequence(dizi) tabanlı çalışır. Her bir sequencer(dizi elemanı) kendi içinde ayrıca tetiklenebilir, ayarlanabilir ve kendi aralarında öncelik sırasına göre düzenlenebilir. • LM3S811 üzerindeki ADC modülde 4 adet sequencer bulunur. • Bir birleri ile aralarında step sayıları farkı bulunur.

17 ADC Modül Nasıl Çalışır: Örnek: • Sequencer 1 TIMER ile tetiklenirken sequencer 3 işlemci ile tetiklenecek şekilde ayarlanmıştır. • 3 adet analog giriş kullanılmıştır. • Chip üzerinde bulunan sıcaklık sensör verisi okumak için ayarlama yapılacaktır.

18 StellarisWare Algoritması: • ADC modül aktif hale getirilir. SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); • Kullanılacak örnekleme ayarlanır. SysCtlADCSpeedSet(SYSCTL_ADCSPEED_500KSPS); • Ayarlamaları yaparken yanlış örnekleme almaması için sequence(dizi) inaktif hale getirilir. ADCSequenceDisable(ADC_BASE, 1); ADCSequenceDisable(ADC_BASE, 3); • Kullanılacak olan sequencer üzerinde nasıl tetikleneceği ve öncelik sırası ayarlamaları yapılır. ADCSequenceConfigure(ADC_BASE, 1, ADC_TRIGGER_TIMER, 1); ADCSequenceConfigure(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);

19 StellarisWare Algoritması: • Sequencer ayarlandıktan sonra bu sefer kullanılan stepler ayarlanır. Step Ayarları: • End Of Sequence(ENDn): Dizide kullanılan son step • Temp. Sensor(TSn): Sıcaklık sensörü • Interrupt Enable(IEn): İnterrupt açık • Differential Sampling(Dn): Diferansiyel örnekleme • N sayısı step numarasını ifade eder.

20 StellarisWare Algoritması: • Sequencer ayarlandıktan sonra bu sefer kullanılan stepler ayarlanır. ADCSequenceStepConfigure(ADC_BASE, 1, 0, ADC_CTL_CH0); ADCSequenceStepConfigure(ADC_BASE, 1, 1, ADC_CTL_CH1); ADCSequenceStepConfigure(ADC_BASE, 1, 2, ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END); ADCSequenceStepConfigure(ADC_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_END);

21 StellarisWare Algoritması: • Eğer kullanılacaksa sequence üzerinde interrupt ayarı yapılır. ADCIntEnable(ADC_BASE, 1); • Data FIFO mantığı ile çekilir. ADCSequenceDataGet(ADC_BASE, 1, & sensor1); ADCSequenceDataGet(ADC_BASE, 1, & sensor2); ADCSequenceDataGet(ADC_BASE, 1, & sensor3); ADCSequenceDataGet(ADC_BASE, 3, & sicaklik);

22 UART Nedir: • Universal Asynchronous Receiver/Transmitter (UART) bir seri haberleşme protokolüdür. • UART byte olarak aldığı dataları bir diğer cihaza asenkron olarak iletir. • RS-232,RS-422 ya da RS-485 haberleşme standartlarını destekler. • Senkron haberleşme de gerçekleştirebilir. (USART) • Temel olarak 4 kablo ile kontrol edilir. Bunlar Gnd, Vcc, TX(transmitter) ve RX(receiver) dir.

23 Önemli UART Sinyalleri: • RXD: Haberleşmede verilerin alındığını gösteren sinyaldir.. • TXD: Haberleşmede verilerin gönderildiğini gösteren sinyaldir. Cihazların TXD ve RXD bacakları bir birlerine terslenerek bağlanırlar. Çünkü birisi TXD ile gönderirken karşıdaki bunu RXD ile alacaktır. • RTS(Ready To Send): Veri almaya hazırım, veri göndermeye başlayabilirsin sinyalidir. • CTS(Clear To Send): Veri gönderebilirim sinyalidir. CTS ve RTS bacakları birbirlerine terslenerek bağlanırlar.

24 UART Özellikleri: • Bir seferde 8-bit ya da 9-bit veri transferi yapılabilir. • Gönderim hızı BAUD ayarı ile kontrol edilebilir. ÖRN: bps(bit per second) saniyede bit gönderilecek anlamını taşır. • Verinin doğruluğunu ve bozulmaya uğrayıp uğramadığını test etmek için parity-bit kullanılır. Örnek: Mesaj: Mesajdaki toplam 1 sayısı bulunur. Eğer çıkan sonuç tekse mesaja 1 eklenir. Çiftse 0 eklenir. Gönderilen data:

25 UART Özellikleri: • Hardware Flow Control(Donanım akış kontrolü) ile iki cihaz arasında aynı hız elde edilebilir. Paket kaybı azaltılabilir. • Handshaking yöntemi ile cihazlar birbirlerine veri göndereceklerini önceden haber verebilirler. Bununla birlikte daha güvenli bir iletim sağlanmış olur. • İşlemci üzerinde bağlı bulunan pine interrupt bağlanabilir.

26 LM3S811 UART Modül Özellikleri: • LM3S811 üzerinde 2 adet UART girişi bulunur. • BAUD hızı 3.125Mbps(mega bit per second) ‘a kadar çıkabilir. • 5,6,7,8 bit data iletimi gerçekleştirebilir. • Parity yakalama özelliğine sahiptir. • 16x8 bit iletim(TX) ve data alma(RX) buffer alanına sahiptir. Bu alanlar FIFO mantığına göre çalışır.

27 StellarisWare Algoritması: Algoritma 1(UART Echo) : • UART ayarlamaları yapılır. UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), , (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE ); • UART aktif hale getirilir. UARTEnable(UART0_BASE); • Eğer data alımı yapılacaksa RX buffer alanı kontrol edilebilir. while(!UARTCharsAvail(UART0_BASE)){} while(UARTCharGetNonBlocking(UART0_BASE)){} • Eğer data gönderilecekse TX buffer alanına konulabilir. UARTCharPut(UART0_BASE, ’xxx’)); • Kullanılmak isteniyorsa kullanılacak kısımlar üzerinde interrupt açılır. UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);

28 StellarisWare Algoritması: Algoritma 2 (UartStdio): • UART aktif hale getirilir. SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); • UARTStdio belirlenir. Bütün ayarları kendisi içerisinde yapmaktadır. UARTStdioInit(0); • Printf fonksiyonunun C programlamadaki bütün görevlerini yerine getirebilir. UARTprintf(" deger=%d%s \n ",sayi,karakter); • uartstdio.c ve uartstdio.h projeye eklenmelidir.(stellarisware)


"TUNA AYAN ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama." indir ppt

Benzer bir sunumlar


Google Reklamları