Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ccs c kontak yapma

Başlatan mapitechno, 03 Ağustos 2013, 17:37:38

mapitechno

  Selamlar arkadaşlar , benim problemim ccs c dizel motor çalıştırmakla ilgili kodlar yazıyorum ve bir yerde tıkandım , bir butona basıldığında , kontak olan led 6 sn yanıcak , 3 sn sönücek ve bu 3 sefer tekraranacak,
eğer adc den okunan voltaj bilgisi 4 voltu geçerse led hangi aşamada olursa olsun sönecek , yani örnek vermem gerekirse bir araba kontağına 3 sefer otomatik basıcağım , eğer voltaj 4 voltu geçerse araba çalışıyor demek ve kontak kapanacaktır, kullandığım micro işlemci  16f877a , yardımcı olursanız sevinirim , iyi çalışmalar.

   (timer0 bu işlemi yapmaya çalıştım ama led lamba sürekli yanıp sönuyor , voltaj değeri 4 gectiğinde led sönüyor ama )

sadogan

Kodlarını paylaşsaydın...

pwm.c

#2
Alıntı yapılan: mapitechno - 03 Ağustos 2013, 17:37:38
  Selamlar arkadaşlar , benim problemim ccs c dizel motor çalıştırmakla ilgili kodlar yazıyorum ve bir yerde tıkandım , bir butona basıldığında , kontak olan led 6 sn yanıcak , 3 sn sönücek ve bu 3 sefer tekraranacak,
eğer adc den okunan voltaj bilgisi 4 voltu geçerse led hangi aşamada olursa olsun sönecek , yani örnek vermem gerekirse bir araba kontağına 3 sefer otomatik basıcağım , eğer voltaj 4 voltu geçerse araba çalışıyor demek ve kontak kapanacaktır, kullandığım micro işlemci  16f877a , yardımcı olursanız sevinirim , iyi çalışmalar.

   (timer0 bu işlemi yapmaya çalıştım ama led lamba sürekli yanıp sönuyor , voltaj değeri 4 gectiğinde led sönüyor ama )

Buyur arkadaşım:
#include <16f877A.h> 
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD   
#device ADC=10
#use delay(clock = 4000000)

#use fast_io(a)        
#use fast_io(b)

int8 sayac=0, saniye=0, zaman=0, say=1, step=0, bayrak=0;
int16 limit=0, adcsonuc=0;

#int_TIMER0
void timer0_kesmesi() {
if(++sayac == 61)  // timer0 61 kez taştıysa
 {                 // 61 x 16.3 ms = 1 sn süre geçmiştir
   sayac = 0;
   if(zaman==0){zaman=6;}
   
      if(++saniye == zaman) 
      {                
      saniye=0;
      bayrak=1;
      ++step;
      if(step==1)
      {
      output_low(PIN_B0); 
      zaman=3;
      }
      if(step==2)
      {
        if(adcsonuc<limit){output_high(PIN_B0);}
      zaman=6;
      step=0;
      }
      
      
      
      if(++say==6)
      {bayrak=0;step=0;say=1;}
      }
 }
}
   
void main() {
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(AN0);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_a(0xFF);  
   output_a(0x00);
   set_tris_b(0x00);  
   output_b(0x00);      
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64|RTCC_8_bit);      //16.3 ms overflow
   disable_interrupts(INT_TIMER0); //kesme pasif
   enable_interrupts(GLOBAL);
   
   limit=819; // 819 = 4v

   while(TRUE) //ana döngü
   {
    set_adc_channel(0);
    delay_ms(1);
    adcsonuc=read_adc(ADC_START_AND_READ);
    if(adcsonuc>limit)
    {output_low(PIN_B0);}
    else
    {
    if(!input(PIN_A1)) //Başla
      {
      if(step==0 && bayrak==0){output_high(PIN_B0);}
      enable_interrupts(INT_TIMER0); //kesme aktif
      bayrak=1;
      }
    }
    if(bayrak==0) 
    {disable_interrupts(INT_TIMER0);} 
   }

}


dosyalar:
https://github.com/pwmccs/elektronik/raw/master/kontak4v.zip
alternatif:
https://yadi.sk/d/UCUl3wB935bSKr


_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

mapitechno

#3
pwm.c size çok tessekkür ederim , tam olarak işimi gördünüz.. çok saolun :)

mesaj birleştirme:: 04 Ağustos 2013, 11:21:50

selamlar pwm.c ben ccs c öğrenmeye yeni başladım ve sizin bu yardımınızla inş güzel yol alıcağım. Sizden isteğim yardım ettiğiniz kodları açıklayabilirmisiniz. saniye , zaman , sayaç , step , özellikle bayrak bu kodları yorumlarsanız sevinirim.. İyi çalışmalar..

pwm.c

programdaki değişkenlerin ne amaçla kullanıldığını söylersem daha kolay yorumlayabilirsin.

sayac= interup sayacıdır. timer0 her taşmada 1 artar.
saniye= interup süresini saniye olarak gösterir.
zaman= led yanma ve sönme zamanını saniye olarak belirler.
say= interup döngüsünün tekrar sayısnı belirler yani bu değer kadar tekrarlanır.
step= led yanma ve sönme durumunu belirler.
bayrak= interup döngüsünün başladığını ve tamamlandığını gösterir.
adcsonuc= ADC dönüşüm sonucunu gösterir.
limit= MAX voltaj limitinin ham değerini gösterir. 819 sayısı yaklaşık 4v gerilime denk geliyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

mapitechno

çok teşşekkür ederim verdiğiniz bilgilerden dolayı ...