merhaba arkadaşlari,
pic konusunda acemi bir kardeşiniz olarak yardıma ihtiyacım var
pic16877 kullanarak sıcaklık ölçen ve sıcaklık değeri belirlenen değeri geçince çıkış verecek olan bir pic projesi hazırlıyorum
derleyici hata vermiyor ama bir türlü interrupt ile istediğim değişimi yapamıyorum
devre resmi burada
http://i.hizliresim.com/7Am5LN.jpg (http://i.hizliresim.com/7Am5LN.jpg)
kodu da buraya ekliyorum
inşallah bi çözüm önerirsiniz
hepinize saygılar teşekkürler
#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(d)
#define use_portb_lcd TRUE
#include <lcd.c>
#int_timer0
unsigned long int bilgi;
float voltaj,sicaklik;
timer0_kesmesi()
{
if (sicaklik>30)
output_high(pin_d1);
else
output_low(pin_d1);
}
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi 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
set_tris_d(0x00);
output_d(0x00);
setup_timer_0(RTCC_INTERNAL |RTCC_DIV_4);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
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
delay_ms(100); // 100 msn gecikme
}
}