Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Algoritma sorusu

Başlatan bulut_01, 11 Nisan 2016, 21:55:10

dursuncemal

#15
adc degeri okuma zamanini  yavaslatin. okudugunuz  deger ile bir onceki deger arasindaki farki bir fonksiyonda istediginiz olcude delay ile son okudugunuz degere artirin yada azaltin.deger esitlenince son degeri tekrar okudugunuz deger ile karsilastirmak icin bir degiskende tutun.hatta bu islemleri yaparken adc okumasi yapmayin.programi c de yaziyor iseniz yardimci olmaya calisirim.
:=

DaRt

Basitçe şöyle bir fonksiyon. İstediğiniz sn cinsinden sürenin 10 katını parametre olarak girerek (5 sn'de tamamlaması için 50 gibi) bu fonksiyonu çağırırsanız yavaşça tam soldan tam sağa gider

void set(int sure){
//pwm tam sol değeri 100 olsun
//pwm tam sağ değeri 600 olsun
int x, y;
y=(600-100)/sure;
for(x=0;x<sure;x++){
set_pwm1_duty(100+y*x);
delay_ms(100);
}
}

bulut_01

#17
Alıntı yapılan: dursuncemal - 12 Nisan 2016, 20:48:03
adc degeri okuma zamanini  yavaslatin. okudugunuz  deger ile bir onceki deger arasindaki farki bir fonksiyonda istediginiz olcude delay ile son okudugunuz degere artirin yada azaltin.deger esitlenince son degeri tekrar okudugunuz deger ile karsilastirmak icin bir degiskende tutun.hatta bu islemleri yaparken adc okumasi yapmayin.programi c de yaziyor iseniz yardimci olmaya calisirim.
Peki hocam örnek verebilirmisiniz inceleyim

mesaj birleştirme:: 13 Nisan 2016, 00:18:45

#include <12F675.h>
#device ADC=10 
#FUSES noWDT               
#FUSES INTRC_IO    
#FUSES NOBROWNOUT 
#fuses NOMCLR
#use delay(int=4000000)

int16 x,t=0;

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

setup_adc(adc_clock_div_4);
setup_adc_ports(AN0_ANALOG); 
set_adc_channel(0);
set_tris_a(0x01);
output_a(0x00) ;

while(1)
{
x=read_adc();
delay_ms(1);
x=x*2+500;
  
output_high(pin_a5);
delay_us(x);
output_low(pin_a5);
delay_us(15000-x);

}
}


x değişkeniyle matematiksel işlem yaparken çıkan sonucu ayarlanan hızda artarak atamak bununla ilgili bir algoritma basit bir şekilde olabilir mi?
YENİLMEZ..

dursuncemal

#18
insanlah konuyu yanlis anlamamisimdir.benim anladigim siz potansi cevirince okudugunuz adc degerin yavas yavas yukselmesini yada azalmasini istiyorsunuz eger oyle ise;
#include <main.h>
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int16 a_d_c_degeri = 0;
int16 a_d_c_bufer  = 0;

unsigned char _gecikme,gecikme_zamani;

gecikme_zamani = 100;


#INT_RTCC
void  RTCC_isr(void) 
{



if(_gecikme){_gecikme--;
  
             
                            if( a_d_c_degeri < a_d_c_bufer ){ a_d_c_degeri ++; } 
                            
                            if( a_d_c_degeri > a_d_c_bufer ){ a_d_c_degeri --; }
                           
                        
                     }else{_gecikme = gecikme_zamani;}



}




void main()
{

   while(TRUE)
   {

 
     a_d_c_bufer = read_adc();  
   
   
   }

}

buradaki timer interruptu ve gecikme zamanini istediginiz zamana ayarlayip adc degerini asil degerini bulma zamani ile istediginiz gibi oynarsiniz.kullanacaginiz degisken  'a_d_c_degeri' degiskeni.
:=

bulut_01

burdan bütün yardımcı olan arkadaslara tesekkür ediyorum istediğim gibi calısan kod asagıdadır sakın kafayla düşününce oluyor.

#include <12F675.h>
#device ADC=10 
#FUSES noWDT               
#FUSES INTRC_IO    
#FUSES NOBROWNOUT 
#fuses NOMCLR
#use delay(int=4000000)

int16 x,z,w=0;
int16 t=500;

#INT_RTCC
void  RTCC_isr(void) 
{
set_timer0(254);

output_high(pin_a5);
delay_us(t);
output_low(pin_a5);
delay_us(3000-t);

}

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

setup_adc(adc_clock_div_2);
setup_adc_ports(AN0_ANALOG); 
set_adc_channel(0);

enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_tris_a(0x01);
output_a(0x00) ;

while(1)
{
x=read_adc();
delay_us(500);
x=x*2+500;

if(x>t){
z++;
if(z>20){
t++;
z=0;}}

if(x<t){
w++;
if(w>20){
t--;
w=0;}}

}
}
YENİLMEZ..