Butona Basılı Olma Süresi Hk.

Başlatan tyfrydn, 08 Ocak 2016, 12:10:26

sifirzero

#15
@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.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

foseydon

Alıntı yapılan: serkancetin - 04 Aralık 2017, 13: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.

#define BUTTON1 pin.tanimi olacak eklememisim onu

sifirzero

@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
#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;
}
}
}
}
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sigmoid

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


foseydon

Alıntı yapılan: serkancetin - 04 Aralık 2017, 20:35:29
@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
#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.


Teğmen

Alıntı yapılan: serkancetin - 04 Aralık 2017, 20:35:29
@foseydon  @Teğme @cemre  bu şekilde olurmu sizce.
#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.

sifirzero

Ustam unceliyorum. Uygun bir örnek yapinca paylaşayim.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

#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ı
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

sifirzero

arkadaşlar buton basma süresi yapamadım yapabilen arkadaş var mı. maksadım öğrenmek :(
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

vitruvius

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.