• Sonuç bulunamadı

MikroC ile PIC MikroC ile PIC Programlama Programlama

N/A
N/A
Protected

Academic year: 2021

Share "MikroC ile PIC MikroC ile PIC Programlama Programlama"

Copied!
20
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

MikroC ile PIC MikroC ile PIC

Programlama Programlama

Mikrodenetleyiciler 1

8.Hafta

8.Hafta

(2)

MikroC

MikroC bit bit ve ve sbit sbit değişken tipleri değişken tipleri

Mikrodenetleyiciler 2

(3)

MikroC LCD kütüphanesi kullanımı MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 3

MikroC nin HD44780 uyumlu LCD ler için kütüphanesi 4bit data hattı üzerinden iletişimi desteklemektedir.

// Lcd pinlerin ayarlanmasi sbit LCD_RS at RB4_bit;

sbit LCD_EN at RB5_bit;

sbit LCD_D7 at RB3_bit;

sbit LCD_D6 at RB2_bit;

sbit LCD_D5 at RB1_bit;

sbit LCD_D4 at RB0_bit;

// Port yonlendirme

sbit LCD_RS_Direction at TRISB4_bit;

sbit LCD_EN_Direction at TRISB5_bit;

sbit LCD_D7_Direction at TRISB3_bit;

sbit LCD_D6_Direction at TRISB2_bit;

sbit LCD_D5_Direction at TRISB1_bit;

sbit LCD_D4_Direction at TRISB0_bit;

Yukarıdaki pin atamaları ve yönlendirme kaydedicileri

atamalarından sonra LCD kullanıma hazır hale gelmektedir.

Diğer derleyicilerden farklı olarak MikroC de kütüphane

programları #include komutu kullanılmaksızın pin

tanımlamaları ile aktif hale gelir.

(4)

MikroC LCD kütüphanesi kullanımı MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 4

LCD kütüphanesi içerisindeki fonksiyonlar:

Lcd_Init : Lcd modulünü etkin hale getirir (başlatır). Program ilk çalıştırıldığında bir kez kullanımı yeterlidir.

Kullanımı : Lcd_Init();

Lcd_Out : İstenen satırın, istenilen kolonundan başlayarak, girilen metni yazar.

Kullanımı : Lcd_Out(1, 3, "Merhaba"); // 1.satır 3. kolondan itibaren «Merhaba» yazar Lcd_Out(2, 4, msg1); // 2. satır, 4. kolondan itibaren msg1, char tipi

degiskenin icerigini yazar

Lcd_Out_Cp : Aktif kursörden itibaren metni yada char tipi değişken içeriği yazılır.

Kullanımı : Lcd_Out_Cp("Merhaba"); // O anki kursörden itibaren «Merhaba» yazar Lcd_Out_Cp (msg1); // O anki kursörden itibaren msg1, char tipi

degiskenin icerigini yazar

Lcd_Chr : İstenen satırın, istenilen kolona, bir karakter yazar.

Kullanımı : Lcd_Out(1, 3, ‘i’); // 1.satır 3. kolona «i» yazar.

Lcd_Chr_Cp : Aktif kursöre bir karakter yazar.

Kullanımı : Lcd_Out(1, 3, ‘i’); // O anki kursöre «i» yazar.

(5)

MikroC LCD kütüphanesi kullanımı MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 5

LCD kütüphanesi içerisindeki fonksiyonlar:

Lcd_Cmd : LCD ye bazı komutlar gönderir, bu komutların tanımladıkları iş icra edilir.

Komutlar:

_LCD_FIRST_ROW Kursörü 1. satıra taşı.

_LCD_SECOND_ROW Kursörü 2. satıra taşı.

_LCD_THIRD_ROW Kursörü 3. satıra taşı.

_LCD_FOURTH_ROW Kursörü 4. satıra taşı.

_LCD_CLEAR Ekranı temizle.

_LCD_RETURN_HOME Kursörü başa taşı. (Yazılı bilgi etkilenmez) _LCD_CURSOR_OFF Kursörü kapat.

_LCD_UNDERLINE_ON Alt Çizgi biçimli kursör.

_LCD_BLINK_CURSOR_ON Yanıp Sönen biçimli kursör.

_LCD_MOVE_CURSOR_LEFT Kursör bir karakter sola.

_LCD_MOVE_CURSOR_RIGHT Kursör bir karakter sağa.

_LCD_TURN_ON Lcd displayi aç.

_LCD_TURN_OFF Lcd displayi kapat.

_LCD_SHIFT_LEFT Display metnini sola kaydır.

_LCD_SHIFT_RIGHT Display metnini sağa kaydır.

Kullanımı : Lcd_Cmd(_LCD_CLEAR); // Ekran temizlenir

Lcd_Cmd(_LCD_BLINK_CURSOR_ON); // Yanıp-Sönen kursör tanımlanır

(6)

Lcd_Out(1,1,txt1); // İlk satira txt1 ü yaz.

Lcd_Out(2,5,txt2); // İkinci satira txt2 yaz Delay_ms(2000);

for(i=0; i<4; i++) { // Metni 4 kez saga kaydir.

Lcd_Cmd(_LCD_SHIFT_RIGHT);

Move_Delay();

}

while(1) { // Sonsuz dongu for(i=0; i<8; i++) { // 7 kez sola kaydir Lcd_Cmd(_LCD_SHIFT_LEFT);

Move_Delay();

}

for(i=0; i<8; i++) { // 7 kez saga kaydir Lcd_Cmd(_LCD_SHIFT_RIGHT);

Move_Delay();

} } } sbit LCD_RS at RD2_bit;

sbit LCD_EN at RD3_bit;

sbit LCD_D4 at RD4_bit;

sbit LCD_D5 at RD5_bit;

sbit LCD_D6 at RD6_bit;

sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;

sbit LCD_EN_Direction at TRISD3_bit;

sbit LCD_D4_Direction at TRISD4_bit;

sbit LCD_D5_Direction at TRISD5_bit;

sbit LCD_D6_Direction at TRISD6_bit;

sbit LCD_D7_Direction at TRISD7_bit;

char txt1[] = "mikroElektronika";

char txt2[] = "EasyPIC4";

char txt3[] = "Lcd4bit";

char txt4[] = "ornek";

char i; // Dongu degiskeni

void Move_Delay() { //Text in hareketi icin fonksiyon

Delay_ms(500); // Gecisler icin gecikme zamani }

void main(){

ADCON1 = 7; // A portu dijital I/O Lcd_Init(); // LCD baslat Lcd_Cmd(_LCD_CLEAR); // Ekrani sil Lcd_Cmd(_LCD_CURSOR_OFF); // Kursörü kapat Lcd_Out(1,6,txt3); // İlk satira txt3 ü yaz.

Lcd_Out(2,6,txt4); // İkinci satira txt4 yaz.

Delay_ms(2000); // 2 sn bekle

Lcd_Cmd(_LCD_CLEAR); // Ekrani temizle

Örnek: LCD kullanimi

(7)

HD44780 LCD karakter tablosu

(8)

sbit LCD_RS at RD2_bit;

sbit LCD_EN at RD3_bit;

sbit LCD_D4 at RD4_bit;

sbit LCD_D5 at RD5_bit;

sbit LCD_D6 at RD6_bit;

sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;

sbit LCD_EN_Direction at TRISD3_bit;

sbit LCD_D4_Direction at TRISD4_bit;

sbit LCD_D5_Direction at TRISD5_bit;

sbit LCD_D6_Direction at TRISD6_bit;

sbit LCD_D7_Direction at TRISD7_bit;

char txt1[] = "Direnc =";

char txt2[]="000";

unsigned short deger = 175;

char ohm[]="0";

void main(){

ADCON1 = 7; // A portu dijital I/O Lcd_Init(); // LCD baslat Lcd_Cmd(_LCD_CLEAR); // Ekrani sil Lcd_Cmd(_LCD_CURSOR_OFF); // Kursörü kapat Lcd_Out(1,2,txt1); // İlk satira txt3 ü yaz.

txt2[0]= (deger/100) +48; // Yuzler basamagi txt2[1]= (deger%100)/10 +48; // Onlar basamagi txt2[2]= (deger%10)+48; // Birler basamagi ohm[0] = 0xf4;

Lcd_Out(1,10,txt2); // deger degiskeni yazdirilir Lcd_Out(1,14,ohm); // İlk satira ohm simgesi yaz }

Örnek: LCD ile sayısal değerlerin ve özel karakterlerin ekrana yazdırılması

(9)

Analog – Dijital Çevirici Modülü Analog – Dijital Çevirici Modülü

Mikrodenetleyiciler 9

PIC 16 F877’de 8 kanallı 10 bit’e kadar çevirme işlemi yapabilen bir analog-dijital çevirici (ADC) modülü bulunmaktadır.

PIC 16F877 üzerindeki ADC modülün çalışması şu şekildedir. Analog giriş örnekle ve tut kondansatörünü şarj eder. Örnekle ve tut kondansatörünün çıkışı dönüştürücünün girişine uygulanır. Dönüştürücü, ardışık yaklaştırma yoluyla bu analog düzeyin sayısal sonucunu üretir. Bu A/D dönüşümde, analog giriş sinyali 10 bitlik sayı karşılaştırması ile sonuçlanır. ADC bir özelliği de işlem yapmazken uyuma moduna geçer.

ADC Modül dört (4) kaydediciye sahiptir. Bunlar;

1- A/D Yüksek sonuç kaydedicisi (ADRESH) 2- A/D Düşük sonuç kaydedicisi (ADRESL) 3- A/D Kontrol kaydedici 0 (ADCON0)

4- A/D Kontrol kaydedici 1 (ADCON1)

(10)

PIC 16F877‟de analog giriş için E Portunda 3 ve A Portunda 5 pin bulunmaktadır. Bu uçlara bağlanacak olan sıcaklık, ışık, ses veya sensörler yardımıyla analog veri alınabilir. Kendi iç devre saatini için ise RC osilatörünü kullanır. AD çevrim işlemleri için 4 adet yazmaç kullanılır Bu yazmaçlardan ADRESH ve ADRESL, AD dönüşüm sonucunun üst ve alt byte’larını

tutulduğu kısımdır. Diğer yazmaçlar ise kontrol yazmaçlarıdır. ADCON0, AD çevirme işlemlerinin kontrolün de, ADCON1 ise port pinlerinin konfigürasyonlarında kullanılır.

ADCS1, ADCS0 - A/D Çevirici saat darbesi seçim biti.

(11)

ADCS1, ADCS0 - A/D Çevirici saat darbesi seçim biti.

ADCON0

ADCON0 Kaydedicisi Kaydedicisi

ADON: A/D çeviriciyi yetkilendirme bitidir.

ADON=1 ise A/D çevirici açıktır ve işlem yapılabilir durumdadır.

ADON=0 ise A/D çevirici kapalıdır.

GO/DONE: Eğer ADCON biti de 1 ise A/D çevirici statü biti görevini üstlenir.

GO/DONE=1 ise A/D çevirici işlem yapıyor demektir.

GO/DONE=0 ise A/D çevirici üzerinde herhangi bir işlem yapılmıyordur.

(12)

CHS0:CHS2: A/D çevirici için kanal seçim bitlerini oluşturur. Bu bitlere verilecek

değerlerle A/D çevirme için hangi kanalın seçileceği belirlenir. Daha önceden de belirtildiği gibi PIC 16F877’de A/D çevirici için 8 kanal mevcuttur.

000 = kanal 0, (RA0/AN0) 001 = kanal 1, (RA1/AN1) 010 = kanal 2, (RA2/AN2) 011 = kanal 3, (RA3/AN3) 100 = kanal 4, (RA5/AN4) 101 = kanal 5, (RE0/AN5) 110 = kanal 6, (RE1/AN6) 111 = kanal 7, (RE2/AN7)

ADCON0

ADCON0 Kaydedicisi Kaydedicisi

(13)

PCFG0:PCFG3: A/D çevirici portunun biçimini düzenlemeyi sağlayan bitlerdir. Yani A/D çevirme işleminde kullanılacak pinlerin nasıl davranacağını belirlememize olanak

sağlarlar.

ADFM: A/D çevirme işlemi esnasında meydana gelen verinin biçimini belirlemeye yarayan bittir.

1 : ADRESH kaydedicisinin MSB kısmındaki 6 biti 0 kabul edilir ve A/D çevirme sonucunda elde edilen veri ADRESH’ın 2 bitlik LSB kısmına ve ADRESL’ye yazılır.

0 : ADRESL’nin LSB kısmındaki 6 biti 0 kabul edilir ve A/D çevirme sonucu elde edilen veri ADRESL’nin son iki bitine ve ADRESH’a yazılır.

ADCON1

ADCON1 Kaydedicisi Kaydedicisi

(14)

PCFG3:PCFG0 : PortA ve PortE için port yapılandırma bit konfigürasyonu

ADCON1

ADCON1 Kaydedicisi Kaydedicisi

(15)

ADRESH:ADRESL kaydedicileri A/D dönüşümün 10 bit sonucunu kapsar. A/D dönüşümü bittiği

zaman, sonuç A/D sonuç kaydedicisinin içine yüklenir. A/D modülü şekilde görülmektedir.

(16)

ADC Çevirim Adım Aralığı

ADC Çevirim Adım Aralığı

(17)

A/D Modülü biçimlendirildikten sonra, dönüştürme işlemi başlamadan önce kanal seçilmiş olmalıdır. Analog giriş kanallarında ilgili TRIS bitleri giriş için seçilmiş olmalıdır.

Aşağıdaki adımlar, A/D dönüşüm yapmak için takip edilmelidir.

1- A/D Modülü Konfigürasyonu

• Analog pinler, referans voltajlar ı ve dijital I/O konfigürasyonu (ADCON1)

• A/D giriş kanalı seçimi (ADCON0)

• A/D dönüşüm saat sekimi (ADCON0)

• A/D Modülünü açma

2- A/D Kesme Konfigürasyonu (Kesme kullanılacak ise)

• ADIF bitinin temizlenmesi

• ADIE bitinin ayarlanması

• GIE bitinin ayarlanması

3- Gerekli zamanı bekleme işlemi (100ns) 4- Dönüşümün başlaması

• GO/DONE bitinin ayarlanması

5- A/D dönüşümünün beklenmesi), ya Sıfıra düşmesi yada kesme gelmesi beklenir.

6- A/D dönüşüm sonucunu okuma ve kaydetme

7- Diğer dönüşüm için 2. veya 4. adımları tekrarlama

(18)

unsigned int temp_res;

void main() {

ADCON0 = 0x01;

ADCON1 = 0x1e;

TRISA = 0xFF; // PORTA giris TRISC = 0; // PORTC cikis TRISB = 0; // PORTB cikis

do {

temp_res = ADC_Read(0); // AN0 dan 10-bitlik ADC okuma sonucu alinir

PORTB = temp_res; // PORTB ye dusuk anlamli bitler yazilir PORTC = temp_res >> 8; // RC1, RC0 en yuksek anlamli bitler

}

while(1); // sonsuz dongu }

Örnek: ADC programları, kütüphane kullanmadan ve kütüphane ile.

unsigned short low_b, high_b;

void main() {

ADCON0 = 0x01; // fosc/2 - kanal0 - ADON=1

ADCON1 = 0x1e; // format0 - AN0 – analog, 1-7 digital I/O

TRISA = 0xFF; // PORTA giris TRISC = 0; // PORTC cikis TRISB = 0; // PORTB cikis do {

ADCON0.GO_DONE= 1;

// AN0 dan 10-bitlik ADC okuma icin Go/Done biti 1 yapilir while (ADCON0.GO_DONE = 1) {}

// ADC isleminin tamamlandiginda bu bit modul tarafindan sifira cekilir. Bu komutla sifir olana kadar beklenir.

low_b = ADRESL;

high_b = ADRESH;

PORTB = low_b; // PORTB ye ADRESL yazilir PORTC = high_b; // PORTC ye ADRESH yazilir }

while(1); // sonsuz dongu }

(19)

do {

deger = ADC_Read(0); // ADC okuma deger *= 5; // mv dönüşümü

txt2[0]= (deger/1000) +48; // Binler basamagi txt2[1]= (deger%1000)/100 +48; // Yuzler basamagi txt2[2]= (deger%100)/10 +48; // Onlar basamagi txt2[3]= (deger%10)+48; // Birler basamagi Lcd_Out(1,7,txt2); // deger degiskeni yazdirilir Lcd_Out(1, 12, txt3); // birim yazilir

} while(1);

}

Örnek: ADC den okunan degeri voltaj karşılığına dönüştüren ve LCD ekranda gösteren program (Voltmetre)

sbit LCD_RS at RD2_bit;

sbit LCD_EN at RD3_bit;

sbit LCD_D4 at RD4_bit;

sbit LCD_D5 at RD5_bit;

sbit LCD_D6 at RD6_bit;

sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;

sbit LCD_EN_Direction at TRISD3_bit;

sbit LCD_D4_Direction at TRISD4_bit;

sbit LCD_D5_Direction at TRISD5_bit;

sbit LCD_D6_Direction at TRISD6_bit;

sbit LCD_D7_Direction at TRISD7_bit;

char txt1[] = "Volt: ";

char txt2[] = "0000";

char txt3[] = "mV.";

unsigned int deger;

void main() {

ADCON0 = 0x01;

ADCON1 = 0x1e;

Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,1,txt1);

(20)

Signal Conditioning (Sinyal Şartlandırıcı) Signal Conditioning (Sinyal Şartlandırıcı)

Mikrodenetleyiciler 20

Herhangi bir fiziksel işaretin mikrodenetleyicili bir sistem tarafından örneklenmeden önce ihtiyaca göre, yükseltme, zayıflatma, filtreleme, anti-aliasing, izolasyon, kaydırma (offset ekleme), lineerizasyon gibi amaçlarla tasarlanmış analog ön-sinyal işleme devreleridir.

Genellikle, Op-ampla gerçekleştirilen eviren veya evirmeyen amplifikatör, toplayıcı, buffer, alçak-geçiren filtre devreleri kullanılmaktadır.

Örnek devre:

Referanslar

Benzer Belgeler

Eussiez-vous eu, d'ailleurs, I'invention qu'il faut Pour pouvoir là, devant ces nobles galeries, Me servir toutes ces folles plaisanteries, Que vous n'en eussiez pas articulé le

Aş ağ ı daki sorulardan; sonunda parantez olanlar doğ ru / yanlı şsoruları dı r. Verilen ifadeye göre parantez içine doğ ru ise “D”, yanlı şise “Y” yazı nı z. Bilgisayar

Ders Programı Çizelgeleme Probleminin çözümüne ilişkin kurulan modellerin birçoğunun amaç fonksiyonu ifadesi, sağlanan esnek kısıtların miktarını artırmaya ve

Bu

Önce sabit katsay¬l¬ denklem çözülür, sonra t = ln x yerine yaz¬larsa Euler denkleminin genel çözümüne ula¸ s¬l¬r..

Akademik Birimler, Araştırma ve Uygulama Merkezleri, Bilim, Eği- tim, Sanat, Teknoloji, Girişimcilik, Yenilikçilik Kurulu (Gazi BEST), Araştırma-Geliştirme Kurum

Bu tez çalışmasında, günümüzde çok yaygın olarak kullanılan PIC mikrodenetleyicilerinden 16 bitlik bir mikrodenetleyici kullanılarak program hafıza kapasitesi,

P, (E) düzlemi içinde değişen bir nokta olduğuna göre AP  PB toplamı en küçük olduğunda P noktasının koordinatları aşağıda- kilerden hangisi