28
ADC: Anolog-Digital Çevirici YRD.DOC.Dr.BÜLENT ÇOBANOĞLU ADC, girişlerine uygulanan akım, gerilim, sıcaklık gibi analog büyüklükleri değerleri ile orantılı olarak çıkışında digital sinyale çeviren devredir. PIC16F877ada 8 kanallı ADC modülü bulunmaktadır.10 bit çözünürlüğe sahiptir. 2^10=1024 Vref+=5v,Vref-=0v Adım Sayısı=5/1024=0.00482812 Her 0.00482812 volt değişiminde (adımında) 10 bit’in dijitinde değişim olur. DAC ise, girişindeki sayısal değerlere karşılık analog bir gerilim veya akım üreten devredir. ADC lerde olduğu gibi bit çözünürlüğü, adım büyüklüğü gibi bir çok kavram DAC ler içinde geçerlidir.

ADC: Anolog-Digital Çevirici - WordPress.com

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ADC: Anolog-Digital Çevirici - WordPress.com

ADC: Anolog-Digital Çevirici

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

ADC, girişlerine uygulanan akım, gerilim, sıcaklık gibi analog büyüklükleri değerleri ile

orantılı olarak çıkışında digital sinyale çeviren devredir.

PIC16F877a’da 8 kanallı ADC modülü bulunmaktadır.10 bit çözünürlüğe sahiptir.

2^10=1024

Vref+=5v,Vref-=0v

Adım Sayısı=5/1024=0.00482812

Her 0.00482812 volt değişiminde (adımında) 10 bit’in dijitinde değişim olur.

DAC ise, girişindeki sayısal değerlere karşılık analog bir gerilim veya akım üreten

devredir. ADC lerde olduğu gibi bit çözünürlüğü, adım büyüklüğü gibi bir çok kavram

DAC ler içinde geçerlidir.

Page 2: ADC: Anolog-Digital Çevirici - WordPress.com

Bir MCU da ADC birimi yoksa

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

ADC0831, Üç kontrol hattı, DO (data out), CLK

(clock), _CS (chip seçim) kullanır.

MCU da ADC birimi yoksa (Örneğin 16F84 gibi) ADC0831 entegresini kullanarak

dönüştürme yapabilirsiniz.

Page 3: ADC: Anolog-Digital Çevirici - WordPress.com

Orta Ölçekli PIC ADC Yapısı

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 4: ADC: Anolog-Digital Çevirici - WordPress.com

PIC ADC Çevrim Algoritması

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

1. Hangi kanalları A/D çevrimine açacağınızı ve çevrim sonucunu nasıl yazdırmak istediğinizi göz önünde bulundurarak ADCON1 kaydedicisinin değerini ayarlayın.

2. Çevrimi açmak ve bu çevrimi hangi kanaldan(A/D çevrimini birkaç kanaldan aynı anda yapamazsınız) yapacağınızı ve çevrim periyodunu ayarlamak için ADCON0 kaydedicisine gerekli değerleri ayarlayın.

3. ADCON0’ın Go/Done bitini 1 yaparak çevirme işlemini başlatın.Öncesinde ADON biti ‘1’ olmalı.

4. Go/Done bitinin 0 değerini almasını bekleyin. Bu değerin 0 olması işlemin bittiğinin, sonucunda ADRESH ve ADRESL’ye yazıldığını belirtir.

5. Sonuç yazılma ayarlarınızı göz önünde bulundurarak sonucu değerlendirebilirsiniz.

Sonucu 10 bit üzerinden değerlendirmeniz gerekir. Elde edilen sonucun kaç volta karşılık geldiğini şu şekilde formülize edebiliriz. ((ADRESH:ADRESL) x (Vref+ - Vref-) ) / 1024Örnek olarak sonuç değerimiz 0110101010 olsun, referans olarakta Vdd ve Vss’yi seçtiğimizi varsayarsak Vo=(426x(5-0)) / 1024 ‘den yaklaşık olarak V0=2.1 volt sonucunu elde ederiz.

Veya Vin=Vo*adım buyuklugu Adım buyuklugu=5/2^10=4.88 mV

Page 5: ADC: Anolog-Digital Çevirici - WordPress.com

PIC16f877 ADC yapısı

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

PIC16F877’de 8 kanallı ADC modülü bulunmaktadır, bu modüllerden 10 bitlik giriş alınabilir. Bukanallar PIC16F877’de ise’ PORTA ve PORTE’de bulunur. ADC modül işlemlerinde 4 önemlikaydedici vardır. Bunlar ADCON0, ADCON1, ADRESH, ADRESL’dir. ADCON’lar A/D çevrimininkontrolünü yönetirler. ADRES’ler ise sonuçların yazıldığı yazmaçlardır.

Page 6: ADC: Anolog-Digital Çevirici - WordPress.com

Dr. Bülent ÇOBANOĞLU

I/O Portları: Analog/Digital Seçimi

ADFM biti dönüştürme işlemi sonunda 10 bitlik sayının formatını belirler.1: Sayı sağa kaydırılır.0: Sayı

sola kaydırılır. PCFG3 – PCFG0 bitleri A/D portlarının durumunu belirler. Tümü 0 yapılırsa bu durumda 8 tane

analog kanal seçilmiş olur ve her kanalın referans gerilimi VDD olarak ayarlanır.

16F877’de 8 tane 10 bitlik A/D çevirme kanalı bulunur. A / D

kanalları için RA4 hariç diğer A ve E portları kullanılır. A/D

çevirme işlemi 4 adet kaydediciyle yapılmaktadır.

Aşağıda ilgili register lar ve adresleri gösterilmiştir.

ADRESH 0x1E ; A / D sonuç kaydedicisi (high register)

ADRESL 0x9E ; A / D sonuç kaydedicisi (low register)

ADCON0 0x1F ; A / D kontrol kaydedicisi 0

ADCON1 0x9F ; A / D kontrol kaydedicisi 1

Page 7: ADC: Anolog-Digital Çevirici - WordPress.com

ADCON1, PORTA ve PORTE

portlarını dijital veya analog

giriş-çıkış olarak ayarlamaya

yarar. Default olarak bu portlar

analogtur ADCON1

kaydedicisine ilgili değerler

yüklenerek bütün pinler digital

veya analog işlemler için

ayarlanabilir. Ayrıntılı bilgi için

lütfen datasheet’e ve ileride

anlatacağımız ADC konusuna

göz atınız.

I/O Portları: Analog/Digital Seçimi :ADCON1

Page 8: ADC: Anolog-Digital Çevirici - WordPress.com

I/O Portları: Analog/Digital Seçimi : ADFM biti ve ADRESL-ARESH

Page 9: ADC: Anolog-Digital Çevirici - WordPress.com

I/O Portları: Analog/Digital Seçimi : ADCON0

TAD:Bir bitlik dönüşüm süresidir. 10 bitlik dönüşüm için 11TAD süresi çeker.

Page 10: ADC: Anolog-Digital Çevirici - WordPress.com

PIC16f877 ADC yapısı

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

CHS2, CHS1, CHS0 : Kanal seçme bitleridir.

GO/DONE : ADC çevrimini başlatan bittir, çevrim bitince 0

olur.

ADON : ADC birimini açan bittir.

ADCS1, ADCS0 : Frekans kaynağı seçim bitleridir

ADFM: ADRES kaydedicisi formatını belirler

ADCS2 : Yardımcı frekans seçme biti.

PCFG3, PCFG2, PCFG1, PCFG0 : Portların

görevlerini ayarlayan bitler.

(ADCS1: ADCS0 (Bit özel isimleri)) Bu

yazmaçın 7 ve 6. bitleri TAD değerini

ayarlamaya yarar. TAD, A/D çevrim

periyodudur. Bir çevrim için minimum

11TAD süresi gerekir. TAD süresi için

dört seçenek vardır.

00 = Fosc/2

01 = Fosc/8

….

TAD süresi minimum 1.6 mikro saniye

olmalıdır. Bunun 4 Mhz’likte 2 veya 8,

20 MHZ’likte ise hepsi seçilebilir.

Page 11: ADC: Anolog-Digital Çevirici - WordPress.com

ADC Örnek

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 12: ADC: Anolog-Digital Çevirici - WordPress.com

ADC Örnek

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

#include <xc.h>void main() {TRISA = 0xFF; // PORTA inputTRISD = 0x00; // portd çıkışTRISB = 0; // PORTB çıkışPORTC=0;PORTD=0;ADCON1=0b11000000; // AN ler analog, ADFM=1,ADcs2=1ADCON0=0b00010001; //fosc/4, AN2, GODONE=0, ADON=1for(;;){ADCON0bits.GO=1; // çevrime başlawhile (ADCON0bits.nDONE); //bitene kadar beklePORTB = ADRESL; // ilk 8 bit PORTB e gönderPORTD = ADRESH; //Son iki biti (MSB leri) PORTD e gönder} }

ADFM biti

Page 13: ADC: Anolog-Digital Çevirici - WordPress.com

Soru: Referans gerilimlerini farklı seçtiğinizde elde edilen sonuçları bir önceki örnek değerleri ile karşılaştırınız

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 14: ADC: Anolog-Digital Çevirici - WordPress.com

LCD UYGULAMASI

LCD (Liquid Crystal Display) göstergeli mikro denetleyici uygulamalarıile hayatımızın her alanında (cep telefonları, fotokopi makineleri,otomobiller, kameralar, oyuncaklar, güvenlik sistemleri gibi)karşılaşılmaktadır.

Karakter tabanlı dot matrix LCD (paralel/seri) ve grafik LCD olmak üzereiki çeşit LCD vardır.

LED gösterge ile sadece sayısal değerler ve sınırlı sayıdaki karakterlergösterilebilmektedir. Buna karşılık LCD göstergeler ile her türlü yazı vesayısal değeri göstermek mümkündür. LCD’ler çeşitli firmalar tarafındanüretilmesine rağmen kontrolleri standartlaşmıştır.

Tüm LCD göstergelerde yetki (Enable), oku yaz (R/W), ve kaydediciseçim (RS) uçları ile veri giriş hatları vardır.

Bağlantı şekillerine göre LCD göstergeler seri ve paralel olaraksınıflandırılmaktadırlar. Paralel LCD’ler ucuz oluşları nedeniyle çokyaygın olarak kullanılmaktadır.

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 15: ADC: Anolog-Digital Çevirici - WordPress.com

LCD Kontrol İşlemleriLCD göstergeye gönderilen veri ya bir komut kodu veya bir karakterdir. Şekil 3. deLCD göstergeye yazma işlemine ait zamanlama diyagramı görülmektedir. RS ucudüşük seviyeye çekilirse yapılacak işlem bir kontrol işlemidir. Eğer yüksek seviyedetutulursa gönderilen bir karakterdir. LCD’ye her 8 bitlik veri, önce yüksek değerlikli 4- bit, sonra düşük değerlikli 4 - bit olmak üzere iki defada gönderilir. LCD ekranaveriler ASCII karakter kodları gönderilerek gösterilirler. Mesela ekrana 0 göstermekiçin, sıfırın ASCII kodu olan 48’i göndermek gerekir. RW=0 ise LCD ye yazma,RW=1 ise LCD den okuma işlemi yapılıyordur.

LCD ekrana veri yazmak için aşağıdaki adımlar

izlenir;

• Veri, veri yoluna konulur,

• RS ucu lojik 1 yapılarak, yazma işleminin komut

olmadığı belirtilir,

• RW ucu lojik 0 yapılır,

• E ucuna lojik “1–0” şeklinde bir saat (clock)

darbesi verilir.

LCD ekrana komut yazmak için ise aşağıdaki

adımlar izlenir;

• Komut, veri yoluna konulur,

• RS ucu lojik 0 yapılarak, yazma işleminin komut

olduğu bildirilir,

• RW ucu lojik 0 yapılır,

• E ucuna lojik “1–0” şeklinde bir saat (clock)

darbesi verilir.YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 16: ADC: Anolog-Digital Çevirici - WordPress.com

LCD Bacak Bağlantıları

AçıklamaFonksiyonPin ismiPin No

GNDToprak/ŞaseVss1

+ 5 VKaynak / PowerVdd2

(-2) 0 - 5 VKontrast /ParlaklıkVee3

0: Komut, 1: VeriKomut/Veri SeçiciRS4

0:LCD’ye yaz, 1: LCD den okuOku/YazR/W5

LCD’ye veri gönderme için aktif yapılır. E bacağının lojik 1 den lojik 0’ a geçişi ile LCD’ye veri transfer olur. Bacağın lojik 0’dan lojik 1’e geçmesi ile LCD’den

durum okunabilir.

Enable

/EtkinleştirmeE6

Data LSBI/OD07

DataI/OD18

DataI/OD29

DataI/OD310

DataI/OD411

DataI/OD512

DataI/OD613

Data MSBI/OD714

LCD dış dünyaya 14 pinlik bir konnektör ile bağlanır. Tablo’da LCD nin pin (bacak)

numaraları ve her pinin görevi verilmiştir.

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 17: ADC: Anolog-Digital Çevirici - WordPress.com

Karakter gösterimiKarakter LCD’lerin oluşturabileceği her

bir karakter ise karakter LCD’nin özelCGROM hafızasına kaydedilmişlerdir.ASCII karakter uyumu olankarakterlerin listesi şekil’degörülebilmektedir.

Şekilde görüleceği üzere CGROM’un ilk8 karakterlik (0x00..0x0F) kısmı boşturve yazılabilirdir. Bu kullanıcıya tablodaolmayan karakterleri (CGRAM ile)kendisinin tanımlamasına imkan tanır.

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 18: ADC: Anolog-Digital Çevirici - WordPress.com

LCD

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 19: ADC: Anolog-Digital Çevirici - WordPress.com

LCD nin kullanıma hazır hale getirilmesi

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 20: ADC: Anolog-Digital Çevirici - WordPress.com

PIC- Assembly: 8 bitlik LCD ye yazı yazmakLIST P=16F84

INCLUDE "P16F84.INC«

CBLOCK H'0C'

SAY1,SAY2

ENDC

CLRF PORTB

BSF STATUS,5

CLRF TRISA

CLRF TRISB

BCF STATUS,5

BASLA

MOVLW 0X01; DISPLAY TEMIZLE

CALL KOMUTYAZ

MOVLW 0X30 ;8 BITLIK BAGLANTI, 1 SATIR

CALL KOMUTYAZ

MOVLW 0X0C ;EKRANI AÇ,KURSORU KAPAT, YANIP SONME YOK

CALL KOMUTYAZ

CALL SATIRYAZ

DUR

GOTO DUR

KOMUTYAZ

BCF PORTA,1 ;RS=0 İLE KOMUT YAZ

MOVWF PORTB

BSF PORTA,0 ;E=1

CALL BEKLE

BCF PORTA,0 ;E=0

RETURN

DATAYAZ

BSF PORTA,1 ;RS=1 İLE VERI YAZ

MOVWF PORTB

BSF PORTA,0 ;E=1

CALL BEKLE

BCF PORTA,0 ;E=0

RETURN

SATIRYAZMOVLW 'B'CALL DATAYAZMOVLW 'U'CALL DATAYAZMOVLW 'L'CALL DATAYAZMOVLW 'E'CALL DATAYAZMOVLW 'N'CALL DATAYAZMOVLW 'T'CALL DATAYAZRETURN

BEKLEMOVLW H'FF'MOVWF SAY1

DON1MOVLW H'FF'MOVWF SAY2

DON2DECFSZ SAY2,FGOTO DON2DECFSZ SAY1,FGOTO DON1RETURNEND

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 21: ADC: Anolog-Digital Çevirici - WordPress.com

Devre Şeması

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 22: ADC: Anolog-Digital Çevirici - WordPress.com

PIC- C: 8 bitlik LCD ye yazı yazmak

#include <xc.h>

#define RS RB0

#define RW RB1

#define E RB2

void lcdKomut (unsigned char);

void lcdVeri (char);

void bekle(unsigned int);

void lcdKomut(unsigned char k){PORTD=k;RS=0;RW=0;E=1;bekle(1);E=0;}

void lcdVeri(char veri){PORTD=veri;RS=1;RW=0;E=1;bekle(1);E=0;}

void bekle(unsigned int sn){unsigned int i,j;for (i=0; i<sn; i++)for (j=0; j<135; j++);}

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

void main(){TRISD=0;TRISB=0;E=0;bekle(250);lcdKomut(0x38);//2 satır 5*7 LCD

bekle(250);lcdKomut(0x0E); //ekran ve kursor açıkbekle(15);lcdKomut(0x01);//Ekranı temizlebekle(15);lcdKomut(0x06);//Kursor sağakaysınbekle(15);lcdKomut(0x86);//1. satır,6.sırabekle(15);lcdVeri('S');bekle(15);lcdVeri('A');bekle(15);lcdVeri('U');}

Page 23: ADC: Anolog-Digital Çevirici - WordPress.com

Hitech PIC- C: Hazır fonksiyon kullanarak 4 bitlik LCD ye yazı yazmak

Kod Değişikliği:Hitech klasörünün altındaki ‘LCDemo’ klasörü

içerisindeki «lcd.c» dosyasındaki PORTD yi PORTB,

TRISD’yi de TRISB ye şeklinde değiştirmeliyiz.

lcd.h içindeki fonksiyonlar;

lcd_init(): lcd yi hazırla

lcd_clear(): lcd yi temizle

lcd_goto(p): belirtilen pozisyona git

lcd_write(): Karakter gönder

lcd_puts(): String gönder

lcd_putch(): karakter gönder

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 24: ADC: Anolog-Digital Çevirici - WordPress.com

MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 24

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.

Page 25: ADC: Anolog-Digital Çevirici - WordPress.com

MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 25

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.

Page 26: ADC: Anolog-Digital Çevirici - WordPress.com

MikroC LCD kütüphanesi kullanımı

Mikrodenetleyiciler 26

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

Page 27: ADC: Anolog-Digital Çevirici - WordPress.com

Seri LCD

MCU ya seri olarak sadece bir kablo ile bağlanırlar ve normal olarak RS232 seri

iletişim protokolüne göre çalışırlar. Fiyatları paralel LCD ye göre daha pahalıdır.

VSS

RXD

VDD

LCD2

MILFORD-2X16-BKP

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Page 28: ADC: Anolog-Digital Çevirici - WordPress.com

Basılan tuşu seri LCD de gösteren uygulama

YRD.DOC.Dr.BÜLENT ÇOBANOĞLU

Not: printf bazı lite derleyici

sürümlerinde çalışmıyor o zaman

bu örnek atlanabilir!