You are on page 1of 20

MikroC ile PIC Programlama

8.Hafta
Mikrodenetleyiciler 1

MikroC bit ve sbit deiken tipleri


MikroC ile bit yada sbit deiken tipleri ile bir bitlik deikenler kullanlabilir. sbit deiken tipi PICin zel fonksiyonlarnn (SFR) bitlerini kullanlmasn salar.
rnek1: sbit Abit at PORTB.B0; // PortB0, Abit eklinde 1 bitlik deiken olarak adlandirilmistir ... void main() { ... } rnek2: char MyVar; sbit AnotherBit at MyVar.B0; ... void main() { ... }

// Myvar isimli char tipi degisken olusturulur // degiskenin bit0 i AnotherBit olarak tanimlandi.

MikroC ile bit deiken tipi ile bir bitlik deikenler kullanlabilir. bit bf; bit *ptr; bit arr [5]; // bf bit tipi deiken atanr, hafizada belirli bir adresi yoktur. // bu nedenle pointer atamasida yapilamaz: // bit tipi dizi atmasi yapilamaz.

Mikrodenetleyiciler

MikroC LCD ktphanesi kullanm


MikroC nin HD44780 uyumlu LCD ler iin ktphanesi 4bit data hatt zerinden iletiimi 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;

Yukardaki pin atamalar ve ynlendirme kaydedicileri atamalarndan sonra LCD kullanma hazr hale gelmektedir. Dier derleyicilerden farkl olarak MikroC de ktphane programlar #include komutu kullanlmakszn pin tanmlamalar ile aktif hale gelir.

Mikrodenetleyiciler

MikroC LCD ktphanesi kullanm


LCD ktphanesi ierisindeki fonksiyonlar: Lcd_Init : Lcd moduln etkin hale getirir (balatr). Program ilk altrldnda bir kez kullanm yeterlidir. Kullanm : Lcd_Init(); Lcd_Out : stenen satrn, istenilen kolonundan balayarak, girilen metni yazar. Kullanm : Lcd_Out(1, 3, "Merhaba"); // 1.satr 3. kolondan itibaren Merhaba yazar Lcd_Out(2, 4, msg1); // 2. satr, 4. kolondan itibaren msg1, char tipi degiskenin icerigini yazar

Lcd_Out_Cp : Aktif kursrden itibaren metni yada char tipi deiken ierii yazlr. Kullanm : Lcd_Out_Cp("Merhaba"); // O anki kursrden itibaren Merhaba yazar Lcd_Out_Cp (msg1); // O anki kursrden itibaren msg1, char tipi degiskenin icerigini yazar : stenen satrn, istenilen kolona, bir karakter yazar. Kullanm : Lcd_Out(1, 3, i); // 1.satr 3. kolona i yazar.

Lcd_Chr

Lcd_Chr_Cp : Aktif kursre bir karakter yazar. Kullanm : Lcd_Out(1, 3, i); // O anki kursre i yazar.
Mikrodenetleyiciler 4

MikroC LCD ktphanesi kullanm


LCD ktphanesi ierisindeki fonksiyonlar: Lcd_Cmd Komutlar:
_LCD_FIRST_ROW _LCD_SECOND_ROW _LCD_THIRD_ROW _LCD_FOURTH_ROW _LCD_CLEAR _LCD_RETURN_HOME _LCD_CURSOR_OFF _LCD_UNDERLINE_ON _LCD_BLINK_CURSOR_ON _LCD_MOVE_CURSOR_LEFT _LCD_MOVE_CURSOR_RIGHT _LCD_TURN_ON _LCD_TURN_OFF _LCD_SHIFT_LEFT _LCD_SHIFT_RIGHT Kursr 1. satra ta. Kursr 2. satra ta. Kursr 3. satra ta. Kursr 4. satra ta. Ekran temizle. Kursr baa ta. (Yazl bilgi etkilenmez) Kursr kapat. Alt izgi biimli kursr. Yanp Snen biimli kursr. Kursr bir karakter sola. Kursr bir karakter saa. Lcd displayi a. Lcd displayi kapat. Display metnini sola kaydr. Display metnini saa kaydr.

: LCD ye baz komutlar gnderir, bu komutlarn tanmladklar i icra edilir.

Kullanm : Lcd_Cmd(_LCD_CLEAR); // Ekran temizlenir Lcd_Cmd(_LCD_BLINK_CURSOR_ON); // Yanp-Snen kursr tanmlanr

Mikrodenetleyiciler

rnek: LCD kullanimi


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; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,6,txt3); Lcd_Out(2,6,txt4); yaz. Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); // A portu dijital I/O // LCD baslat // Ekrani sil // Kursr kapat // lk satira txt3 yaz. // kinci satira txt4 // 2 sn bekle // Ekrani temizle Lcd_Out(1,1,txt1); Lcd_Out(2,5,txt2); yaz Delay_ms(2000); // lk satira txt1 yaz. // kinci satira txt2

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(); } }

HD44780 LCD karakter tablosu

rnek: LCD ile saysal deerlerin ve zel karakterlerin ekrana yazdrlmas


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; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,2,txt1); txt2[0]= (deger/100) +48; txt2[1]= (deger%100)/10 +48; txt2[2]= (deger%10)+48; ohm[0] = 0xf4; Lcd_Out(1,10,txt2); Lcd_Out(1,14,ohm); }

// A portu dijital I/O // LCD baslat // Ekrani sil // Kursr kapat // lk satira txt3 yaz. // Yuzler basamagi // Onlar basamagi // Birler basamagi

// deger degiskeni yazdirilir // lk satira ohm simgesi yaz

Analog Dijital evirici Modl


PIC 16 F877de 8 kanall 10 bite kadar evirme ilemi yapabilen bir analog-dijital evirici (ADC) modl bulunmaktadr. PIC 16F877 zerindeki ADC modln almas u ekildedir. Analog giri rnekle ve tut kondansatrn arj eder. rnekle ve tut kondansatrnn k dntrcnn giriine uygulanr. Dntrc, ardk yaklatrma yoluyla bu analog dzeyin saysal sonucunu retir. Bu A/D dnmde, analog giri sinyali 10 bitlik say karlatrmas ile sonulanr. ADC bir zellii de ilem yapmazken uyuma moduna geer. ADC Modl drt (4) kaydediciye sahiptir. Bunlar; 1- A/D Yksek sonu kaydedicisi (ADRESH) 2- A/D Dk sonu kaydedicisi (ADRESL) 3- A/D Kontrol kaydedici 0 (ADCON0) 4- A/D Kontrol kaydedici 1 (ADCON1)

Mikrodenetleyiciler

PIC 16F877de analog giri iin E Portunda 3 ve A Portunda 5 pin bulunmaktadr. Bu ulara balanacak olan scaklk, k, ses veya sensrler yardmyla analog veri alnabilir. Kendi i devre saatini iin ise RC osilatrn kullanr. AD evrim ilemleri iin 4 adet yazma kullanlr Bu yazmalardan ADRESH ve ADRESL, AD dnm sonucunun st ve alt bytelarn tutulduu ksmdr. Dier yazmalar ise kontrol yazmalardr. ADCON0, AD evirme ilemlerinin kontroln de, ADCON1 ise port pinlerinin konfigrasyonlarnda kullanlr.

ADCS1, ADCS0 - A/D evirici saat darbesi seim biti.

ADCON0 Kaydedicisi

ADCS1, ADCS0 - A/D evirici saat darbesi seim biti.

ADON: A/D eviriciyi yetkilendirme bitidir. ADON=1 ise A/D evirici aktr ve ilem yaplabilir durumdadr. ADON=0 ise A/D evirici kapaldr.
GO/DONE: Eer ADCON biti de 1 ise A/D evirici stat biti grevini stlenir. GO/DONE=1 ise A/D evirici ilem yapyor demektir. GO/DONE=0 ise A/D evirici zerinde herhangi bir ilem yaplmyordur.

ADCON0 Kaydedicisi

CHS0:CHS2: A/D evirici iin kanal seim bitlerini oluturur. Bu bitlere verilecek deerlerle A/D evirme iin hangi kanaln seilecei belirlenir. Daha nceden de belirtildii gibi PIC 16F877de A/D evirici iin 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)

ADCON1 Kaydedicisi
PCFG0:PCFG3: A/D evirici portunun biimini dzenlemeyi salayan bitlerdir. Yani A/D evirme ileminde kullanlacak pinlerin nasl davranacan belirlememize olanak salarlar. ADFM: A/D evirme ilemi esnasnda meydana gelen verinin biimini belirlemeye yarayan bittir. 1 : ADRESH kaydedicisinin MSB ksmndaki 6 biti 0 kabul edilir ve A/D evirme sonucunda elde edilen veri ADRESHn 2 bitlik LSB ksmna ve ADRESLye yazlr. 0 : ADRESLnin LSB ksmndaki 6 biti 0 kabul edilir ve A/D evirme sonucu elde edilen veri ADRESLnin son iki bitine ve ADRESHa yazlr.

ADCON1 Kaydedicisi

PCFG3:PCFG0 : PortA ve PortE iin port yaplandrma bit konfigrasyonu

ADRESH:ADRESL

kaydedicileri A/D dnmn 10 bit sonucunu kapsar. A/D dnm bittii

zaman, sonu A/D sonu kaydedicisinin iine yklenir. A/D modl ekilde grlmektedir.

ADC evirim Adm Aral

A/D Modl biimlendirildikten sonra, dntrme ilemi balamadan nce kanal seilmi olmaldr. Analog giri kanallarnda ilgili TRIS bitleri giri iin seilmi olmaldr.
Aadaki admlar, A/D dnm yapmak iin takip edilmelidir. 1- A/D Modl Konfigrasyonu Analog pinler, referans voltajlar ve dijital I/O konfigrasyonu (ADCON1) A/D giri kanal seimi (ADCON0) A/D dnm saat sekimi (ADCON0) A/D Modln ama 2- A/D Kesme Konfigrasyonu (Kesme kullanlacak ise) ADIF bitinin temizlenmesi ADIE bitinin ayarlanmas GIE bitinin ayarlanmas 3- Gerekli zaman bekleme ilemi (100ns) 4- Dnmn balamas GO/DONE bitinin ayarlanmas 5- A/D dnmnn beklenmesi), ya Sfra dmesi yada kesme gelmesi beklenir. 6- A/D dnm sonucunu okuma ve kaydetme 7- Dier dnm iin 2. veya 4. admlar tekrarlama

rnek: ADC programlar, ktphane kullanmadan ve ktphane 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; TRISC = 0; TRISB = 0; // PORTA giris // PORTC cikis // PORTB cikis unsigned int temp_res; void main() { ADCON0 = 0x01; ADCON1 = 0x1e; TRISA = 0xFF; TRISC = 0; TRISB = 0; // PORTA giris // PORTC cikis // 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; PORTC = high_b; } while(1); } // PORTB ye ADRESL yazilir // PORTC ye ADRESH yazilir

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 }

// sonsuz dongu

rnek: ADC den okunan degeri voltaj karlna dntren ve LCD ekranda gsteren 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(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,txt1); // Initialize LCD // Clear display // Cursor off do { deger = ADC_Read(0); // ADC okuma deger *= 5; // mv dnm 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); Lcd_Out(1, 12, txt3); } while(1); } // deger degiskeni yazdirilir // birim yazilir

Signal Conditioning (Sinyal artlandrc)


Herhangi bir fiziksel iaretin mikrodenetleyicili bir sistem tarafndan rneklenmeden nce ihtiyaca gre, ykseltme, zayflatma, filtreleme, anti-aliasing, izolasyon, kaydrma (offset ekleme), lineerizasyon gibi amalarla tasarlanm analog n-sinyal ileme devreleridir. Genellikle, Op-ampla gerekletirilen eviren veya evirmeyen amplifikatr, toplayc, buffer, alak-geiren filtre devreleri kullanlmaktadr.
rnek devre:

Mikrodenetleyiciler

20

You might also like