calyon
Üye
- Katılım
- 25 May 2008
- Mesajlar
- 40
- Puanları
- 1
- Yaş
- 40
merhaba arkadaşlar benim projemde timer kesmesi ile frkens üretiyorum 2 tane ayrı şekill portb0 ve portb1 den 2 adet butonlada frekansları artırıp azaltıyorum ayrıca lcd de frekans ve sıcaklık gösteriyorum programda tek sorunum timer1 için harici osilatörü çalıştırmak araştırmalarıma göre
setup_timer_1(t1_external|t1_div_by_1|t1_clk_out); bu komut ile oluyormuş ancak bi türlü çalışmadı ne proteusta nede gerçek te fakat aynı satırı
setup_timer_1(t1_internal|t1_div_by_1);
yapınca devre çalısıyor ama istediğim hızlara çıkamıyorum ve belli seviyeden sonra çıkışım bozulmaya başlıyor bu yüzden timer1 için harici osilatör kullanmak istedim (benim istediğim frekans 10khz-20khz arası) eğer bu konu hakkında bilgisi olan ve yardım edebilecekler için şimdiden teşekkürler. devrenin proteus dosyasını ve kodları da yolluyorum.
setup_timer_1(t1_external|t1_div_by_1|t1_clk_out); bu komut ile oluyormuş ancak bi türlü çalışmadı ne proteusta nede gerçek te fakat aynı satırı
setup_timer_1(t1_internal|t1_div_by_1);
yapınca devre çalısıyor ama istediğim hızlara çıkamıyorum ve belli seviyeden sonra çıkışım bozulmaya başlıyor bu yüzden timer1 için harici osilatör kullanmak istedim (benim istediğim frekans 10khz-20khz arası) eğer bu konu hakkında bilgisi olan ve yardım edebilecekler için şimdiden teşekkürler. devrenin proteus dosyasını ve kodları da yolluyorum.
Kod:
#include <18f4620.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device ADC=10 // 10 bitlik ADC kullanılacağı .
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(d) //Port yönlendirme komutları D portu için geçerli
#define use_portd_lcd TRUE
#include <lcd.c>
#define OSC_32MHZ 8
int i=0;
unsigned long int a,b,c,d; // Tamsayı tipinde değişken tanımlanıyor
int dijital;
float sicaklik,Mvolt,frekans;
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{
if(i==3){
output_high(PIN_b0);
set_timer1(65536-(b));
i=0;
}else if(i==2){
output_low(PIN_b1);
set_timer1(65536-(d));
i++;
}else if(i==1){
output_high(PIN_b1);
set_timer1(65536-(c));
i++;
}
else if(i==0){
output_low(PIN_b0);
set_timer1(65536-(d));
i++;
}
}
/********* ANA PROGRAM FONKSİYONU********/
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_c(0xff); //ra0 aktif
set_tris_a(0xff); //ra0 aktif
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);
lcd_init();
set_adc_channel(0);
delay_us(50);
printf(lcd_putc,"\fSicaklik=");
set_tris_b(0x00); // B portu komple çıkış
output_b(0x01);
setup_oscillator(OSC_32MHZ | OSC_TIMER1);
clear_interrupt(int_timer1);
setup_timer_1(t1_external|t1_div_by_1|t1_clk_out);
set_timer1(65536-(b)); // TMR1 değeri belirleniyor
enable_interrupts(int_timer1);
enable_interrupts(global);
a=150;
while(1){
dijital=read_adc();
Mvolt=(0.0048828412*dijital)*1000;
sicaklik=(Mvolt/10)+2;
frekans=a;
lcd_gotoxy(10,1);
printf(lcd_putc,"%f%cC",sicaklik,223);
lcd_gotoxy(1,2);
printf(lcd_putc,"Frekans=%f",frekans);
if(input(pin_a1)){
while(input(pin_a1));
delay_ms(10);
a=a-100;
}
if(input(pin_a2)==1){
while(input(pin_a2)==1);
delay_ms(10);
a=a+100;
}
b=(a/2);
c=30*(a/100);
d=10*(a/100);
}
}