Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: burakelectronics - 10 Mayıs 2020, 02:40:01

Başlık: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 10 Mayıs 2020, 02:40:01
PIC16F877A ile Proteus'da bir uygulama yapacağım yardımcı olursanız sevinirim.
Bir buton ile 8 tane ledi, butona her bastığımda farklı ledler yanacak şekilde ayarlamak istiyorum.
Örneğin; butona ilk bastığımda 3,5,6,7. ledler yanacak. Tekrar bastığımda 1,2,5,6,7. ledler yanacak.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: mehmet - 10 Mayıs 2020, 14:26:39
Foruma hoşgeldiniz.
Öncelikle yapabildiğiniz kadarını
paylaşın. Eksikliklere bakılır.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 10 Mayıs 2020, 15:00:43

(https://i.ibb.co/rswvSsg/1.png) (https://ibb.co/rswvSsg)

(https://i.ibb.co/qxq59k3/2.png) (https://ibb.co/qxq59k3)

Şimdilik bu aşamadayım. Butona basıyorum 3, 5, 6, 7. ledler yanıyor. Tekrar butona bastığımda farklı ledlerin yanmasını istiyorum.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: samedkutuk - 10 Mayıs 2020, 15:43:09
Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 02:40:01PIC16F877A ile Proteus'da bir uygulama yapacağım yardımcı olursanız sevinirim.
Bir buton ile 8 tane ledi, butona her bastığımda farklı ledler yanacak şekilde ayarlamak istiyorum.
Örneğin; butona ilk bastığımda 3,5,6,7. ledler yanacak. Tekrar bastığımda 1,2,5,6,7. ledler yanacak.

Ödev tarif etmek yerine bir kısmına uğraşıp yapaömadığınız noktalarda yardım istemeniz yararınıza olacaktır.
Birde Formda soru sorarken tüm detayları vermelisiniz Örneği;
Pic16f877a mikrodenetleyicisini kullanarak CCS C derleyicisinde  .... projesini gerçekleştirmek istiyorum fakat ... kısmında hata alıyorum.
İyi çalışmalar
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: mehmet - 10 Mayıs 2020, 18:26:28
Kodları paylaşmak için
bilgisayarınızda kopyala/yapıştır
çalışmıyor mu?

Değişkenker, diziler, vs. gibi konuları
tekrar ediniz.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 10 Mayıs 2020, 19:17:18
Bu kodu kopyalamakla mı yardımcı olacaksınız giriş seviyesi led yakma komutları sadece. Araştırıp haftalardır uğraşıp didik didik etmesem gelip forumunuzda rahatsızlık vermezdim kusura bakmayın.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 10 Mayıs 2020, 19:19:54
Alıntı yapılan: samedkutuk - 10 Mayıs 2020, 15:43:09Ödev tarif etmek yerine bir kısmına uğraşıp yapaömadığınız noktalarda yardım istemeniz yararınıza olacaktır.
Birde Formda soru sorarken tüm detayları vermelisiniz Örneği;
Pic16f877a mikrodenetleyicisini kullanarak CCS C derleyicisinde  .... projesini gerçekleştirmek istiyorum fakat ... kısmında hata alıyorum.
İyi çalışmalar

Ne ödevi canım benim senin yaşında çoluğum çocuğum var böyle mi karşılıyorsunuz forumda yenileri. Gerçekten harika pozitif enerjili bir forummuş çalışma şevkim arttı.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: samedkutuk - 11 Mayıs 2020, 00:28:56
Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 19:19:54Ne ödevi canım benim senin yaşında çoluğum çocuğum var böyle mi karşılıyorsunuz forumda yenileri. Gerçekten harika pozitif enerjili bir forummuş çalışma şevkim arttı.

Öncelikle yaşınızı bilmiyordum direk bu şekilde soran öğrenciler oluyor o nedenle yazdım.
Yanlış olmuş Özür dilerim
Sizin için bir örnek çalışma yaptım.
butona bir kere bastığınızda led1 ve led2 sırası ile yanıp sönüyor, Butona ikinci defa bastığınızda led3 ve led4 sırası ile yanıp sönüyor.
Kendim simülasyonda denedim çalışıyor.
Devre kod ve şeması aşağıdaki gibidir.
Rar olarak da aşağıda yine linke bıraktım indirip direk üzerinde de deneyebilirsiniz.
https://dosyam.org/7q3YsiGx (https://dosyam.org/7q3YsiGx)

#include <main.h>

#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=20000000)
#use FIXED_IO( C_outputs=PIN_C3,PIN_C2,PIN_C1,PIN_C0 )
#define Buton  PIN_B0
#define Led1   PIN_C0
#define Led2   PIN_C1
#define Led3   PIN_C2
#define Led4   PIN_C3


int deger=0;
void main()
{
output_c(0x00);

   while(TRUE)
   {
      while(input(Buton)==1){
      delay_ms(50);
      deger=deger+1;
      switch(deger){
     
  case 1:
    output_high(Led1);
    delay_ms(200);
    output_high(Led2);
    delay_ms(200);
    output_low(Led1);
    output_low(Led2);
  break;
 
  case 2:
    output_high(Led3);
    delay_ms(200);
    output_high(Led4);
    delay_ms(200);
    output_low(Led3);
    output_low(Led4);
  break;

    default:

    deger=0;
  break;   
     
      }
 
     
      }
   }

}
(https://i.ibb.co/5rLnkNX/boosd.png) (https://ibb.co/5rLnkNX)
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: samedkutuk - 11 Mayıs 2020, 00:30:13
@burakelectronics  Simülasyon dosyası 8.5 sürümü ile çizildi daha aşağı bir sürüm ile açılmayacaktır bilginize
İyi çalışmalar dilerim...
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: m.ak - 11 Mayıs 2020, 01:32:20
Bende bu şekilde bir şey yaptım.birinci basışta 2,4,5,6 yanıyor ikinci basışta 1,3,7,0 yanıyor.

#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP


#use delay(crystal=4000000)

void main()
{
set_tris_b(0x00);
set_tris_d(0x01);
output_b(0x00);

while(TRUE)
{
while(input(pin_d0))
{
output_high(pin_b2);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);

output_low(pin_b1);
output_low(pin_b3);
output_low(pin_b7);
output_low(pin_b0);
}

while(input(pin_d0))
{
output_high(pin_b1);
output_high(pin_b3);
output_high(pin_b7);
output_high(pin_b0);

output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
}

}
} //Main son
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: mehmet - 11 Mayıs 2020, 02:26:28
Değişken ve dizi kullanılamaz mı?
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 11 Mayıs 2020, 02:51:07
Alıntı yapılan: samedkutuk - 11 Mayıs 2020, 00:28:56Öncelikle yaşınızı bilmiyordum direk bu şekilde soran öğrenciler oluyor o nedenle yazdım.
Yanlış olmuş Özür dilerim
Sizin için bir örnek çalışma yaptım.
butona bir kere bastığınızda led1 ve led2 sırası ile yanıp sönüyor, Butona ikinci defa bastığınızda led3 ve led4 sırası ile yanıp sönüyor.
Kendim simülasyonda denedim çalışıyor.
Devre kod ve şeması aşağıdaki gibidir.
Rar olarak da aşağıda yine linke bıraktım indirip direk üzerinde de deneyebilirsiniz.
https://dosyam.org/7q3YsiGx (https://dosyam.org/7q3YsiGx)

#include <main.h>

#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=20000000)
#use FIXED_IO( C_outputs=PIN_C3,PIN_C2,PIN_C1,PIN_C0 )
#define Buton  PIN_B0
#define Led1   PIN_C0
#define Led2   PIN_C1
#define Led3   PIN_C2
#define Led4   PIN_C3


int deger=0;
void main()
{
output_c(0x00);

   while(TRUE)
   {
      while(input(Buton)==1){
      delay_ms(50);
      deger=deger+1;
      switch(deger){
     
  case 1:
    output_high(Led1);
    delay_ms(200);
    output_high(Led2);
    delay_ms(200);
    output_low(Led1);
    output_low(Led2);
  break;
 
  case 2:
    output_high(Led3);
    delay_ms(200);
    output_high(Led4);
    delay_ms(200);
    output_low(Led3);
    output_low(Led4);
  break;

    default:

    deger=0;
  break;   
     
      }
 
     
      }
   }

}
(https://i.ibb.co/5rLnkNX/boosd.png) (https://ibb.co/5rLnkNX)



olur öyle doğrudur estafirullah
teşekkürler uğraşmışsın uygulayacağım
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 11 Mayıs 2020, 02:52:25
Alıntı yapılan: m.ak - 11 Mayıs 2020, 01:32:20Bende bu şekilde bir şey yaptım.birinci basışta 2,4,5,6 yanıyor ikinci basışta 1,3,7,0 yanıyor.

#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP


#use delay(crystal=4000000)

void main()
{
set_tris_b(0x00);
set_tris_d(0x01);
output_b(0x00);

while(TRUE)
{
while(input(pin_d0))
{
output_high(pin_b2);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);

output_low(pin_b1);
output_low(pin_b3);
output_low(pin_b7);
output_low(pin_b0);
}

while(input(pin_d0))
{
output_high(pin_b1);
output_high(pin_b3);
output_high(pin_b7);
output_high(pin_b0);

output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
}

}
} //Main son


teşekkürler ilgin için deneyeceğim
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: RaMu - 11 Mayıs 2020, 06:55:46
Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 15:00:43(https://i.ibb.co/rswvSsg/1.png) (https://ibb.co/rswvSsg)

(https://i.ibb.co/qxq59k3/2.png) (https://ibb.co/qxq59k3)

Şimdilik bu aşamadayım. Butona basıyorum 3, 5, 6, 7. ledler yanıyor. Tekrar butona bastığımda farklı ledlerin yanmasını istiyorum.

While true kısmını alttaki ile değiştirin.
while(TRUE)
{
 if(input(pin_d0)//butona basıldı mı?
 {
  if(input_state(pin_b1)) output_B(0b11101000);//  RB1 pini şuan High=1 (ledi yanıyor) ise 3,5,6,7 yi yak
  else output_B(0b11100110);    //değilse 1,2,5,6,7 yak
 }
delay_ms(50);
}

Düzeltme:
RB0 deki lede bakıyordum yanlış olmuş, RB1 e bakmak lazımdı.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: fide - 11 Mayıs 2020, 09:08:07
Alıntı yapılan: m.ak - 11 Mayıs 2020, 01:32:20Bende bu şekilde bir şey yaptım.birinci basışta 2,4,5,6 yanıyor ikinci basışta 1,3,7,0 yanıyor.
#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP


#use delay(crystal=4000000)

void main()
{
set_tris_b(0x00);
set_tris_d(0x01);
output_b(0x00);

while(TRUE)
{
while(input(pin_d0))
{
output_high(pin_b2);
output_high(pin_b4);
output_high(pin_b5);
output_high(pin_b6);

output_low(pin_b1);
output_low(pin_b3);
output_low(pin_b7);
output_low(pin_b0);
}

while(input(pin_d0))
{
output_high(pin_b1);
output_high(pin_b3);
output_high(pin_b7);
output_high(pin_b0);

output_low(pin_b2);
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
}

}
} //Main son

Yukardaki satırlar aynı olduğu için çalışmayacaktır.

Tavsiyem şu:

İnt1 ledBool;

While(1)
{
  İf (input(pin_d0)==0)
    {ledBool =!ledBool;
      Delay_ms(50);}
  İf ( ledBool)
  {output_B(0b11101000);}
  else
  {output_B(0b11100110);}

Bu şekilde butona ilk basışta 0.1.2.4,
İkincide 0.1.2.5.6. ledler yanar.
@RaMu'dan biraz farklı
Bu tondan elini çekince değil, bir daha basınca ledler değişir.

İ harfleri telefondan yazdığım için çıktı. Kodda düzeltin.

Düzeltme:
Kodları bilgisayarda ve çipe yükleyip denemedim. Siz yazınca Farkettim.
Edge trigger olmadan her basışta farklı çalışması zor. Çünkü butona 50ms uzun süre basınca ikinci defa basılmış gibi algılıyor.

Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: m.ak - 11 Mayıs 2020, 11:05:05
Alıntı YapYukardaki satırlar aynı olduğu için çalışmayacaktır.
Proğramı Compile edip Proteusta çalıştırdıktan sonra yükledim..Aynı komutu iki kere veya birkaç kere tekrarlamanın ne mahsuru var açıklarmısınız.Buton basışlarda gecikme yapılsa daha iyi çalışır.İyileştirilmiş halinide yükledim.Sizin yazdığınız kod ( İf (input(pin_d0)==1)) düzeltmeme rağmen çalışmadı.
#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP

#use delay(crystal=4000000)
//#use fast_io(b)
//#use fast_io(d)

void main()
{
set_tris_b(0x00);
set_tris_d(0xff);
output_b(0x00);
//output_d(0b0000000);

while(TRUE)
{

if (input(pin_d0))  delay_ms(5);     
while(input(pin_d0))
{
output_b(0b00111010);
}
if (input(pin_d0))  delay_ms(5);
while(input(pin_d0))
{
output_b(0b11000101);
}
}
} //Main son
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: RaMu - 11 Mayıs 2020, 20:39:45
Alıntı yapılan: fide - 11 Mayıs 2020, 09:08:07...
@RaMu'dan biraz farklı
Bu tondan elini çekince değil, bir daha basınca ledler değişir.
....
Verdiğim örnek butona her basıldığında sıradaki duruma geçer.
Butona basılı tutulursa 50ms de bir butona basılmış gibi davranır.
Buda önlenebilir if(buton) un içine bir while(buton); eklemek lazım.
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: m.ak - 14 Mayıs 2020, 17:45:14
Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 02:40:01PIC16F877A ile Proteus'da bir uygulama yapacağım yardımcı olursanız sevinirim.
Bir buton ile 8 tane ledi, butona her bastığımda farklı ledler yanacak şekilde ayarlamak istiyorum.
Örneğin; butona ilk bastığımda 3,5,6,7. ledler yanacak. Tekrar bastığımda 1,2,5,6,7. ledler yanacak.
Sorunu çözebildinizmi?
Benim yüklediğim kodların tesadüfi çalıştığını gördüm.Diğer kodlarda sizin ihtiyacınızı görmüyor tahminim.
Yeni bir kod yüklüyorum,her butona basışta bir kod bloğu işleniyor ve butona uzun veya kısa basmak farketmiyor.Bunu proteusta C0 ve C1  portlarına birer conter bağlayarak test ettim.Gerçek devrede denemedim.Siz denerseniz ve sonucu yazarsanız sevinirim.
#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP

#use delay(crystal=4000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)

void main()
{
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0xff);
output_b(0x00);
output_c(0x00);


while(TRUE)
{
while(input(pin_d0));
//delay_ms(20);
while(!input(pin_d0));
   { // 1.Blok
//   output_high(pin_c0);
   output_b(0b00111010);
//   output_low(pin_c0);

   }
while(input(pin_d0));
//delay_ms(20);
while(!input(pin_d0));
   { //2.Blok
//   output_high(pin_c1);
   output_b(0b11000101);
//   output_low(pin_c1);
   }
}
} //Main son
Başlık: Ynt: PIC16F877A ile buton kullanımı
Gönderen: burakelectronics - 25 Mayıs 2020, 01:12:42
arkadaşlar herkese ilginiz için teşekkür ederim cevaplayamadım meşguldüm lakin verdiğiniz kodlar kısmi şekilde çalışıyor ve buton ark yapıyor simulasyonda çalışabilir kodlar kartta çalışmadı. ama en efektif çalışan kodu ürettik şimdilik sorun yok gibi bir arkadaşın bahsettiği gibi tesadüfi rastgele sayılar üretmediğinden emin olmaya calısıyorum bekleyerek. yeni kodumuz:

#use fast_io(b)
#use fast_io(d)

#define buton pin_d0

int a=116;

void main()
{

set_tris_d(0x01);
set_tris_b(0x00);
output_b(0x00);

   while(TRUE)
   {
      if(input(buton)) {
     
      output_b(a);
      a=a-1;
     
      while (input(buton));
     
      if(a==255) {
      a=116;
      }
     
      }
   }

}