PIC16F877A ile buton kullanımı

Başlatan burakelectronics, 10 Mayıs 2020, 02:40:01

burakelectronics

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.

mehmet

Foruma hoşgeldiniz.
Öncelikle yapabildiğiniz kadarını
paylaşın. Eksikliklere bakılır.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

burakelectronics






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

samedkutuk

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
samedkutuk

mehmet

#4
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.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

burakelectronics

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.

burakelectronics

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ı.

samedkutuk

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

#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;   
      
      }
  
      
      }
   }

}

samedkutuk

samedkutuk

@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...
samedkutuk

m.ak

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

mehmet

Değişken ve dizi kullanılamaz mı?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

burakelectronics

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

#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;   
      
      }
  
      
      }
   }

}




olur öyle doğrudur estafirullah
teşekkürler uğraşmışsın uygulayacağım

burakelectronics

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

RaMu

#13
Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 15:00:43



Ş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ı.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fide

#14
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.

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com