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.
Foruma hoşgeldiniz.
Öncelikle yapabildiğiniz kadarını
paylaşın. Eksikliklere bakılır.
(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.
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
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.
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.
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ı.
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)
@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...
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
Değişken ve dizi kullanılamaz mı?
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
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
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ı.
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.
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
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.
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
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;
}
}
}
}