7 Mayıs 2007 Pazartesi

PIC16F877 ile ADC

Dış dünya ile iletişimi analog dijital dönüştürücüler yardımı ile yapmaktayız.Bazı pic modellerinde bu amaç doğrultusunda adc modül konuşmuştur.Bunun sayesinde birkaç komut ile analog verilerimizi dijitale dönüştürebilmekteyiz.Pic 16f877 de adc için ayrılmış iki adet yazmaç (register) bulunmaktadır.bunlar ADCON0 ve ADCON1 yazmaçlarıdır.Bu yazmaçlar 8 er bitliktir ve bitlerin 1 ve 0 olması halinde adc nin özelliklerini değiştirebilmekteyiz.Ayrınlı bilgi için Pic programalama bölümündeki registerlara bakabilirsiniz.Analog veriyi picin içinde bir değişkene şu komut ile almaktayız ;
  • ADCIN 0,VERI
Bu komutun bize söylemek istediği analog veriyiyi 0 nolu pinden al ve veri adlı değişkene kaydet.0 nolu pin porta nın 0.pinidir.Peki bu adc'nin örnekleme zamanını,kaç bit olduğu gibi özellikleri nasıl belirleyeceğimiz kısmına.Bunun için yazdığım bir programı örnek olarak gösterip bunun üzerinden anlatmak istedim.Buyrun bakalım...

DEFINE ADC_BITS 8 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 50 'Örnekleme zamanı mikro saniye cinsinden.
TRISB=0
PORTB=0

VERI var byte 'ADC den okunan digital değer.

'8 bit değişken tipi seçtik kullanacağımız değer 8 bit olacak.
BASLA:

ADCIN 0,VERI '0 nolu kanaldan Analog değeri oku ve VERI değişkenine aktar.

BAK:
IF ADCON0.2=1 THEN BAK


PORTB=VERI

GOTO BASLA

Programdan görüldüğü gibi adc nin çözünürlüğü 8 bit yapılmıştır.Örnekleme zamanı 50 mikro saniyedir.Frekans kaynağımız ise pice bağlı olan kristalin frekansıdır.
Bu programda amacım PortA nın 0.pininden aldığım analog veriyi dijitale çevirip PortB den göstermekti.Adcon yazmacının 3.biti 0 olduğunda analog veri alınmış demektir.Bu yüzden if le bir döngü yapıyoruz.VERI değişkenine alınan değer ise PortB ye aktarılıyor.Burada İf li komuttan sonra istediğiniz ayarlamaları yapabilrsiniz.İster karşılaştırma,İster LCD ye gönderme.Oraya kadar herey aynıdır ama.Umarım birilerine yardımcı olurum.Yorum ve sorularınıza açığım Hatalarım için 0544....... :)

Hiç yorum yok: