CCS de yaptığım denemelerde sorun yaşıyorum bilen arkad

Başlatan rkinaci, 12 Ocak 2010, 13:47:06

rkinaci

#include <16f628a.h>
#fuses INTRC_IO,NOWDT,NOPUT,NOMCLR,NOBROWNOUT,NOLVP,NOCPD,NOPROTECT
#use fast_io(a)
#use fast_io(b)
#use delay(clock=4000000)

//*******************************   giriş tanımlamaları   ******************************
#define  isikBtn        pin_a7
#define  su1Btn         pin_a6
#define  cerrahiBtn     pin_a5
#define  muslukBtn      pin_a4
#define  su2Btn         pin_a3
#define  tukEmiciBtn    pin_a2
#define  kresuarBtn     pin_a1

//*****************************   çıkış tanımlamaları     ******************************
#define  isikOut        pin_b7
#define  su1Out         pin_b6
#define  cerrahiOut     pin_b5
#define  muslukOut      pin_b4
#define  su2Out         pin_b3
#define  tukEmiciOut    pin_b2
#define  kresuarOut     pin_b1


void main()
   {
      setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
      setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
      setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
            
      set_tris_a(0xff);
      set_tris_b(0x00);
      
      output_b(0x00);      
      basla:
//**************************  IŞIK AÇ-KAPA **************************************
         if ((input(isikBtn))&&(!input(isikOut)))
            {
               delay_ms(10);
               output_high(isikOut);
               
            }
        if ((input(isikBtn))&&(input(isikOut)))
            {
               delay_ms(10);
               output_low(isikOut);
               
            }
//**************************  SU1 AÇ-KAPA **************************************
         if ((input(su1Btn))&&(!input(su1Out)))
            {
               delay_ms(10);
               output_high(su1Out);
               
            }
         if ((input(su1Btn))&&(input(su1Out)))
            {
               delay_ms(10);
               output_low(su1Out);
               
            }
//**************************  CERRAHİ AÇ-KAPA **************************************
         if ((input(cerrahiBtn))&&(!input(cerrahiOut)))
            {
               delay_ms(10);
               output_high(cerrahiOut);
               
            }
          if ((input(cerrahiBtn))&&(input(cerrahiOut)))
            {
               delay_ms(10);
               output_low(cerrahiOut);
               
            }
//**************************  MUSLUK AÇ-KAPA **************************************
         if (input(muslukBtn))
            {
               delay_ms(10);
               output_high(muslukOut);
               delay_ms(3000);
               output_low(muslukOut);
               
            }
         if ((input(muslukBtn))&&(input(!muslukOut)))
            {
               delay_ms(10);
               output_high(muslukOut);
               delay_ms(3000);
               output_low(muslukOut);
               
            }
//**************************  SU2 AÇ-KAPA **************************************
         if ((input(su2Btn))&&(!input(su2Out)))
            {
               delay_ms(10);
               output_high(su2Out);
               
            }
         if ((input(su2Btn))&&(input(su2Out)))
            {
               delay_ms(10);
               output_low(su2Out);
               
            }
//**************************  TÜKRÜK EMİCİ AÇ-KAPA ******************************
         if ((input(tukEmiciBtn))&&(!input(tukEmiciOut)))
            {
               delay_ms(10);
               output_high(tukEmiciOut);
               
            }
         if ((input(tukEmiciBtn))&&(input(tukEmiciOut)))
            {
               delay_ms(10);
               output_low(tukEmiciOut);
               
            }
//**************************  KREŞUAR AÇ-KAPA **************************************
         if ((input(kresuarBtn))&&(!input(kresuarOut)))
            {
               delay_ms(10);
               output_high(kresuarOut);
               
            }
         if ((input(kresuarBtn))&&(input(kresuarOut)))
            {
               delay_ms(10);
               output_low(kresuarOut);
               
            }   
         goto basla;
   }


Arkadaşlar yukarıda kodda ne eksikler ya da yanlışlar var. Uygulama geçtiğimde butona her basışımda değilde bir kaç kez basışımda lamba yanıyor veya sönüyor. Kodu while(1) şeklinde bir döngüye aldığımda ise proteusda denediğimde butona bastığımda ledler flash yapar gibi yanıyor ve bir kerede değil birkaç kez basmamda yanıp sönüyor. Fakat kodları basla ve goto basla gibi etiket içinde yazarsam bunu yapmıyor proteusta. Bu CCS C'ye ısınamadım bir türlü hep böyle sorunlar yaşıyorum. Ben mi programlarımda yanlış yapıyorum bilmiyorum. Ama Serdar Çiçek hocanın kitabını aldım ordaki uygulamalardan da denediğim oldu yine bazılarında sorun yaşadım. Acaba kullandığım sürümde mi sorun var. Şu anda tam hatırlamıyorum sürümü. Sanırım Hi-tech PicC'ye geçicem ya da MicroC :( Yorumlarınızı bekliyorum...

Proteus dosyasını buradan indirebilirsiniz...
Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!

ahmet2004

süreyi uzat komutları bu şekile çevir.

//**************************  IŞIK AÇ-KAPA ************************************** 
         if (input(isikBtn)) 
            { 
               delay_ms(250); 
               output_toggle(isikOut); 
            }

ferdem

Ben de 10ms yi 200ms gibi uzatmanızı ve output_toggle komutunu kullanmanızı tavsiye edecektim. ahmet20004 benden önce yazmış. Kolay gelsin.

GreeN

if ((input(isikBtn)))
            {
               delay_ms(250);
               output_toggle(isikOut);
               label:
               if ((input(isikBtn)))
               {
               delay_ms(10);
               goto label;
               }


toggle da kullanılsa aynı sorun ortaya çıkar. buton basıl olduğu süre boyunca çıkış flip-flop misali olur. bir musluğun bu şekilde açılıp kapanması hoş değil. ayrıca bir buton basılı iken diğerine basılma ilhimalide var. eğer buda istenmiyorsa ben yukarıdaki gibi basit bir önlem almanı isterim. Tabi ustaların fikrine saygı duyarım.
Terörü Lanetliyoruz.

GreeN

//**************************  IŞIK AÇ-KAPA **************************************
         if ((input(isikBtn)))
            {
               delay_ms(250);
               output_toggle(isikOut);
               do{                //buton basıl kaldığı sürece döngüde kalır
               delay_ms(10);      //
               }while(input(isikBtn));
                            
            }



yada bu daha güzel. Diğeri biraz c diline aykırı oldu . :)
Terörü Lanetliyoruz.

Salih

Böyle durumlarda ben yardımcı bit kullanıyorum. Çok iyi sonuç veriyor.
Bu şekilde pic bir görev için bekletilmiyor.

int1 basili=1;
...
...
...

         if ((input(isikBtn))&&(!basili)) 
            { 
               output_toggle(isikOut); 
               delay_ms(10); 
               basili=1;
            }else basili=0;