Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: fcure - 17 Ağustos 2011, 15:02:26

Başlık: zamanlamayla ilgili bir sorun :. yardımcı olursanız sevnrm .:
Gönderen: fcure - 17 Ağustos 2011, 15:02:26
//Fikret CÜRE _ Çalışmalar
#include <16f877.h> // Denetleyici
// Konfigürasyon Ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(a)
//Ana Program Fonksiyonu
void main(){
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_a(0b00000011);
set_tris_b(0x00);
output_b(0x00);
output_high(pin_b0);

while (1){
output_high(pin_b1);
delay_ms(80);
output_low(pin_b1);
delay_ms(80);

if (input(pin_a0))
{output_high (pin_b2) ;}

else
{output_low (pin_b2) ;}}}


Burada b1 pini 80ms yanıp sonra 80 ms sönük duruyor burada bir problem yok sürekli bir döngüde var.

a0 pinine bağlı butona basıldığı zaman b2 pinine bağlı ledin yanması ve basılmadığı zamanda sönmesi gerekiyor buda doğru ama bu olaylar geç oluyor hocam butona bir süre basıldığı zaman led yanıyor ve butondan çekildiğinde ise bir süre sonra led sönüyor bir geçikme meydana geliyor ve bu geçikme yukarıdaki 80 ms ile orantılı.

bir kaç yöntem denedim ama düzeltemedim.Yardımcı olursanız sevinirim.
Başlık: Ynt: zamanlamayla ilgili bir sorun :. yardımcı olursanız sevnrm .:
Gönderen: esensoy - 17 Ağustos 2011, 21:10:16
bu program ile butona bastıktan sonra 0 ila 160 ms arası gecikme ile led yanar,
butonu a0 dan b0 a alıp int0 interruptını da açarsan basar basmaz ledi yakabilirsin.
Başlık: Ynt: zamanlamayla ilgili bir sorun :. yardımcı olursanız sevnrm .:
Gönderen: tyildizak - 17 Ağustos 2011, 21:10:31
80 ms'lik beklemeleri parçalara ayırırsan daha hızlı tepki alırsın:


#include <16f877.h> // Denetleyici
// Konfigürasyon Ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(a)
//Ana Program Fonksiyonu
void main(){
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_a(0b00000011);
set_tris_b(0x00);
output_b(0x00);
output_high(pin_b0);

int a;

while (1){
output_high(pin_b1);

for(a=1;a<81;a++){
delay_ms(1);
if (input(pin_a0))output_high (pin_b2) ;
else output_low (pin_b2) ;
}

output_low(pin_b1);

for(a=1;a<81;a++){
delay_ms(1);
if (input(pin_a0))output_high (pin_b2) ;
else output_low (pin_b2) ;
}}}
Başlık: Ynt: zamanlamayla ilgili bir sorun :. yardımcı olursanız sevnrm .:
Gönderen: fcure - 17 Ağustos 2011, 21:20:10
eyvallah emresensoy  kardeşim bende onunla uğraşıyorum inşallah çözücem daha yeniyim de
Başlık: Ynt: zamanlamayla ilgili bir sorun :. yardımcı olursanız sevnrm .:
Gönderen: jozzef - 17 Ağustos 2011, 21:39:02
Buton mekanik olduğu için basma ve çekme sırasında "noise" oluşur yani sinyal dalgalanır.
Bunu engellemek için buton kontrolü yaptıktan sonra gecikme koymalısınız.


Örneğin:

if (input(pin_a0))
{
     delay_ms(50);
     output_high (pin_b2) ;
}


Ekleyeceğiniz bir diğer kontrolde:

if (input(pin_a0))
{
     delay_ms(50);
     while(input(pin_a0));
     output_high (pin_b2) ;
}


Böylece elinizi butondan çekene kadar bekler.