cpu load - yardım lütfen

wesulkrk

Üye
Katılım
16 May 2012
Mesajlar
127
Puanları
1
arkadaşlar aşağıdaki kodu proteusta denerken cpu load hatası alıyorum ve 18f5650 ile denedim yine aynı
sorun yazılımda ama çözemedim. 0,1,3 nolu analog girişlerden sinyal alıyorum bunları karşılaştırma islemine tabi tutup pwm e dönüstürüp ekranada yazıyorum proteusda denerken pwm sinyalinde donmalar oluyor cpu %60-80 oluyor.proteus dosyasını yüklemek istedim ama siteye yükleyemedim.
pwm.PNG

#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#device ADC=10 //10 bitlik ADC kullanılacağı belirtiliyor.
#include <lcd.c>//lcd kütüphanesi çağırıldı
#define use_portd_lcd TRUE // LCD d portuna bağlı
#define frq 100
int16 sen1,sen2,sen3;
float volt1,volt2,volt3,volt4,pwm;

//-------------------------------ekran fonksiyonu-------------------------------
void ekran (float a, float b, float c, float d)
{

lcd_gotoxy(1,1);//1. satır 1. sutuna git
printf(lcd_putc,"s1=%1.2f s2=%1.2f",a,b);
lcd_gotoxy(1,2);
printf(lcd_putc,"s3=%1.2f pwm=%3.1f",c,d);

}

//-------------------------------pwm fonksiyonu-------------------------------
float pwmvalue(float i)
{
int sonuc=0;
sonuc=(i*frq)/5;
return sonuc;
}

//-------------------------------karsılastırma fonksiyonu-------------------------------
float karsilastir(float x,float y,float z)
{
float sonuc=0;
sonuc=(x+y+z)/3;
return sonuc;
}

//-------------------------------ana fonksiyon-------------------------------
void main()
{
lcd_init();// lcd'i hazırla
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_div_32);
//setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //65,5 ms overflow
setup_timer_2(T2_DIV_BY_16,frq,1); //4,0 ms overflow, 4,0 ms interrupt
//setup_adc_ports(an0_an1_an2_an3_an4); // yazılan AN girişleri analog
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_ccp1(CCP_PWM);//ccp1 modülü pwm e atandı
set_tris_a(255);
set_tris_d(0x00);
set_tris_c(255);
set_tris_b(0x00);
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);

while(TRUE)
{
set_adc_channel(0);//an0 girisini oku
delay_us(100);//adc okuması için 20 mikro saniye zaman ver
sen1=read_adc();//an0 adc degerini alıyoruz
volt1=0.0048828125*sen1;
set_adc_channel(1);//an1 girisini oku
delay_us(100);//adc okuması için 20 mikro saniye zaman ver
sen2=read_adc();//an1 adc degerini alıyoruz
volt2=0.0048828125*sen2;
set_adc_channel(3);//an2 girisini oku
delay_us(100);//adc okuması için 20 mikro saniye zaman ver
sen3=read_adc();//an2 adc degerini alıyoruz
volt3=0.0048828125*sen3;
pwm=karsilastir(volt1,volt2,volt3);//fonksiyonda degerler karsılastırılıp pwm e deger dönuyor
volt4=pwmvalue(pwm);
set_pwm1_duty(volt4);//pwm çıkışı değişkene göre frekans değeri alar.
ekran (volt1,volt2,volt3,volt4);//ekran fonksiyonuna değer yolla
}

}
 
ha bu arada adc okuma sırasında 20 us bekleme verdim proteus kabul etmedi 100 yapmak zorunda kaldım eğer biriniz derleyip sonucu söylerse sorun bendemi anlıyacam proteus ve ccs c yeniden kurdum
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,912
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst