Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

CCS C ile PIC16F628A LM35

Başlatan mahmut_kmrs, 16 Mayıs 2015, 23:08:07

mahmut_kmrs

selam arkadaşlar...628a nın adc konfigürasyon ayarlarını yapamıyorum...set_adc_channel(0); yazarsam hata veriyor...dolayısıyla bunun altına read_adc(); komutunu yazamıyorum kesin hata verecek ve hata veriyor...lm35 ile sıcaklığı ölçüp lcd de göstermek istiyorum...lcd de diğer yazıları filan gösterdim sıcaklığı okutamıyorum....ilgilenen arkadaşlara şimdiden teşekkür ederim

baran123

#1
Serdar Çiçek hocamızın kitabından bir örnek.Kendi işlemcinize göre uyarlayabilirsiniz.Hazır kod oldu biraz ama :D

/******************************************************
 PIC16F877 ile LM35 Sıcaklık Sensörü Uygulaması
PIC PROG/DEKA : Port B jumper'ı LCD konumunda olmalı
*******************************************************/
#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
 
#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.
 
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
 
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
 
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
 
#define use_portb_lcd TRUE // LCD B portuna bağlı
 
#include <lcd.c> // lcd.c dosyası tanıtılıyor
 
unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj,sicaklik; // ondalıklı tipte değişkenler tanıtılıyor
 
//********** ANA PROGRAM FONKSİYONU*******
 
void main ( )
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
 
 set_tris_a(0x01); // RA0 Giriş olarak yönlendiriliyor
 
 setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
 setup_adc_ports(AN0); //RA0/AN0 girişi analog
 
 lcd_init(); // LCD hazır hale getiriliyor
 
 set_adc_channel(0); // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak
 delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
 
 printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor
 while(1) // sonsuz döngü
 {
 bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
 
 voltaj=(0.0048828125*bilgi)*1000; // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor
 sicaklik=(voltaj/10)+2; // Her 10mV'ta 1 derece artma
 
 lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda
 printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor
 // Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak.
 // Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f
 // komutu ile bu işlemler yaptırılmıştır.
 delay_ms(100); // 100 msn gecikme
 }
}


mesaj birleştirme:: 17 Mayıs 2015, 00:21:25

Not : Dediğiniz işlemcide ADC yok .

mehmet

PIC16F628A analog giriş pini yoktur... Aynı pin yapısını
barındıran PIC16F1826/27 kullanılabilir...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

mahmut_kmrs

RA0/AN0 ve RA1/AN1 pinleri analog giriş için değil mi...

mehmet

"Analog comparator input" olarak görülmektedir.

40044f.pdf / Tablo 5-1 ve 10. bölüm...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

mahmut_kmrs