Gönderen Konu: Butona Basılı Olma Süresi Hk.  (Okunma sayısı 1127 defa)

Çevrimdışı serkancetin

  • Kıdemli
  • ****
  • İleti: 428
  • iman hem nurdur hem kuvvet
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #15 : 05 Aralık 2017, 04:12:57 »
@foseydon   ustam verdiginiz ornekte pin giriş ve çıkışlari define ilemi belirlicez.onalari nerede kullanacaz. C çaliştim biraz ama derin detaylarini daha ögrenemedim. Çok saolasin ilgilendigin için.
« Son Düzenleme: 05 Aralık 2017, 04:16:06 Gönderen: serkancetin »
iman hem nurdur hem kuvvet  www.serkanccetin.com

Çevrimdışı foseydon

  • Kıdemli
  • ****
  • İleti: 105
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #16 : 05 Aralık 2017, 04:25:34 »
@foseydon   ustam verdiginiz ornekte pin giriş ve çıkışlari define ilemi belirlicez.onalari nerede kullanacaz. C çaliştim biraz ama derin detaylarini daha ögrenemedim. Çok saolasin ilgilendigin için.

#define BUTTON1 pin.tanimi olacak eklememisim onu

Çevrimdışı serkancetin

  • Kıdemli
  • ****
  • İleti: 428
  • iman hem nurdur hem kuvvet
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #17 : 05 Aralık 2017, 11:35:29 »
@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
Kod: [Seç]
#include<12f683.h>
#fuses intrc_io,nowdt,nomclr
#use delay(clock = 4m)
int sure;
void main()
{
set_tris_a(0xff);
//set_tris_b(0x00);
SETUP_CCP1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
sure = 0;
while(true)
{
if(input(pin_a0)==1 && sure < 255)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure + 1;
if(sure>11)
{
output_high(pin_a4);
}
}
if(input(pin_a1)==1 && sure > 0)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure - 1;
if(1>sure)
{
output_low(pin_a4);
sure=0;
}
}
}
}
iman hem nurdur hem kuvvet  www.serkanccetin.com

Çevrimiçi sigmoid

  • Emektar
  • *****
  • İleti: 809
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #18 : 05 Aralık 2017, 22:33:55 »
Xc8 derleyicisi için kullandığım yapıyı aşağıdaki videolarda açıkladım. Ufak değişiklikler ile kodu ccsc de de kullanabilirsiniz. Kodun çalışması için her 1ms de artan bir sayaç yaptım.

https://youtu.be/TYUCASUAMg0

https://youtu.be/Ey1IhsIq2KQ


Çevrimdışı foseydon

  • Kıdemli
  • ****
  • İleti: 105
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #19 : 06 Aralık 2017, 07:19:19 »
@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
Kod: [Seç]
#include<12f683.h>
#fuses intrc_io,nowdt,nomclr
#use delay(clock = 4m)
int sure;
void main()
{
set_tris_a(0xff);
//set_tris_b(0x00);
SETUP_CCP1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
sure = 0;
while(true)
{
if(input(pin_a0)==1 && sure < 255)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure + 1;
if(sure>11)
{
output_high(pin_a4);
}
}
if(input(pin_a1)==1 && sure > 0)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure - 1;
if(1>sure)
{
output_low(pin_a4);
sure=0;
}
}
}
}

1. CCS bilmiyorum, bunu dikkate alınız.
2. Kod paylaşırken indent yapmaya özen gösteriniz, ki okunaklı olsun.
3. Kod yazarken makro kullanarak anlamsız tanımlamaları anlamlı hale getirin. Hem değiştirmesi kolay olur, hem okuyan(buna kendinizde dahilsiniz) daha rahat anlar.

Bu şekilde ne olur mu? ben anlamadım. Bu kod ile yapılmak istenen nedir? Onu da söylemeniz gerekiyor ki anlayalım. Benim anladığım kadarı ile pin_a0 bir butona bağlı(buton1) ve pin_a1 diğer butona bağlı(buton2)
buton1'e bastığınız zaman 100ms aralıklarla süreyi artırıyor ve 11den büyükse süreye eşit duty çıkışı veriyor. button2'ye bastığınız zaman 100ms aralıklarla süreyi azaltıyor ve süre 0a eşitlenince duty çıkışını kesiyor.


Çevrimdışı Teğmen

  • Kıdemli
  • ****
  • İleti: 485
  • "Usûlsüz Vusül Olmaz,Yola Çıkmayan Varamaz."
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #20 : 06 Aralık 2017, 07:49:03 »
@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
Kod: [Seç]
#include<12f683.h>
#fuses intrc_io,nowdt,nomclr
#use delay(clock = 4m)
int sure;
void main()
{
set_tris_a(0xff);
//set_tris_b(0x00);
SETUP_CCP1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,255,1);
sure = 0;
while(true)
{
if(input(pin_a0)==1 && sure < 255)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure + 1;
if(sure>11)
{
output_high(pin_a4);
}
}
if(input(pin_a1)==1 && sure > 0)
{
set_pwm1_duty(sure);
delay_ms(100);
sure = sure - 1;
if(1>sure)
{
output_low(pin_a4);
sure=0;
}
}
}
}
@serkancetin usta senin yazdığın kod ilk sorduğunla alakalı değil,olsa bile buna gerek yok bu PWM başka bir olay.Sen en başta dökümanlardan timer kısmına çalış sayıcı ve zamanlayıcı nedir bu ikisine bir bak burdan devam edelim.Sindire sindire ilerle
"Girdim ilim meclisine kıldım eyledim talep,   Dediler ilim geride kaldı illa Edep illa Edep" Hz.Yunus Emre K.S.

Çevrimdışı serkancetin

  • Kıdemli
  • ****
  • İleti: 428
  • iman hem nurdur hem kuvvet
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #21 : 06 Aralık 2017, 13:37:43 »
Ustam unceliyorum. Uygun bir örnek yapinca paylaşayim.
iman hem nurdur hem kuvvet  www.serkanccetin.com

Çevrimdışı serkancetin

  • Kıdemli
  • ****
  • İleti: 428
  • iman hem nurdur hem kuvvet
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #22 : 07 Aralık 2017, 12:13:06 »
Kod: [Seç]
#include <16F877A.h>
#device adc=10
 
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
//#FUSES WRT_50%                //Lower half of Program Memory is Write Protected
 
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fast_io(b)
 
long zaman=0; //Değişkenlerimiz başlangıç değerleriyle tanımlanmaktadır.
int sayac=0;
 
#int_timer0       //timer0 kesmesi oluşturuldu.
void zamanlayici() //timer0 fonksiyonu oluşturuldu.
{
   set_timer0(60); //Saymaya başlanılacak değer tekrar tanımlandı.
   sayac++;        //her kesmeye girişte sayac 1 arttırılmaktadır.
   
   //20 kez kesmeye girildiğinde 1 saniye oluşmaktadır ve 1 saniye
   //oluşma koşulu test edilektedir.
   //if (sayac ==20)
   if(input(pin_a4))
   { 
   delay_ms(10);
      zaman++;        //zaman ifadesi 1 arttırılmaktadır.
       
      //b portunun çıkşına 8 adet led bağlandığından geçen zamanı en fazla 255
      //saniye olarak gözlemlediğimizden zaman 257 olduğunda zaman ifadesini
      //0(sıfır) değerine çekmekteyiz.
      if(zaman==60) 
      {
         output_low(pin_b0);
         zaman=0;
      }
       
       if(zaman==30) output_high(pin_b0);
       
      //output_b(zaman); //Oluşan zaman ifadesi binary olarak b portunda gösterildi.
      sayac=0;         //1 saniyeyi tekrar elde etmek için sayacımızı sıfırladık.
   }
}
 
void main()
{
   setup_timer_0(rtcc_internal | rtcc_div_256); //timer0 için setup ayarları yapıldı.
   set_timer0(60);   //Saymaya başlanılacak değer 60 olarak belirlenmektedir
   
   enable_interrupts(int_timer0); //timer0 kesmesi aktif duruma getirildi.
   enable_interrupts(global);     //timer0 kesmesi global duruma getirildi.
   
   set_tris_b(0x00);    //b portundaki pinler çıkış olarak tanımlandı.
   
   output_b(0x00);      //b portundaki ledler sönük duruma getirildi.
   
   while(true);  //Programın sürekli çalışması için sonsüz döngü oluşturulmaktadır.
   
}


ustalarım bakarmısnız. buton basma süresi timer0 ın zamanlayıcı olarak kullanıldı
iman hem nurdur hem kuvvet  www.serkanccetin.com

Çevrimdışı serkancetin

  • Kıdemli
  • ****
  • İleti: 428
  • iman hem nurdur hem kuvvet
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #23 : 09 Aralık 2017, 13:03:30 »
arkadaşlar buton basma süresi yapamadım yapabilen arkadaş var mı. maksadım öğrenmek :(
iman hem nurdur hem kuvvet  www.serkanccetin.com

Çevrimdışı vitruvius

  • Emektar
  • *****
  • İleti: 842
Ynt: Butona Basılı Olma Süresi Hk.
« Yanıtla #24 : 09 Aralık 2017, 15:38:04 »
Kesme icinde iviz zivir isler yapmamalisin. Sayacini arttir gec.

Ana dongu icinde butonun durumuna bakacaksin. Butona basildiginda timer'i baslatacaksin, buton birakildiginda timer'i kapatip sayacini okursun. Sonra gerekli matematiksel islemleri yapar ne kadar zaman gecmis hesaplarsin ve de sayacini bir sonraki butona basma durumu icin sifirlarsin.