16f628a uygulama proteus çalışma sorunu

Başlatan protezdiyot, 10 Ocak 2015, 17:51:58

protezdiyot

Merhaba.16f628a ile  3 buton ile motor ileri geri programı yazdım.lakin proteusdaki gibi devre çalışmıyor.Yardımcı olur musunuz.

Program proteusda butona bastığımda led yakılı kalıyor ama uygulamada butonu bırakınca led sönüyor.Sorun nerden kaynaklanıyor?

kodlar ve devre şeması burada;
http://www.dosya.tc/server37/NXBhKn/16f628a.rar.html


#include <main.h>

#define ileributonu Pin_A0
#define geributonubutonu Pin_A1
#define stopbutonu Pin_A2

#define motorileri Pin_B0
#define motorgeri Pin_B1


void main()
{
output_low(motorileri);
output_low(motorgeri);

   while(TRUE)
   {
if(input(ileributonu)& !input(geributonubutonu)& !input(stopbutonu)){
    ileri:
    if (input(stopbutonu))
    {goto stop;}
   
    output_high(motorileri);
    output_low(motorgeri);
    goto ileri;      }
    
if(input(geributonubutonu)& !input(ileributonu)& !input(stopbutonu))
{
   geri:
   if (input(stopbutonu))
    {goto stop;}
    
    output_low(motorileri);
    output_high(motorgeri);
     goto geri;           }
 stop:
 {
    output_low(motorileri);
    output_low(motorgeri);
                   }

}
    }

vitruvius

Butonlar pic'e girmeden araya 220 ohm bir direnç koyun. Butonlar için bir debounce algoritması kurun. Sigorta ayarları, Port yönlendirmeleri vs. de göremedim.

fatal16

vitruvius'a ilave olarak kodu soyle yazsan daha guzel olmaz mı acaba
(Simülasyon olduğu için buton arklarını felan saymıyorum, bunun için 5ms delay koyulabilir )
if(input(ileributonu) && !input(geributonubutonu) && !input(stopbutonu)){
    while( !input(geributonubutonu) && !input(stopbutonu))
    {
    output_high(motorileri);
    output_low(motorgeri);
    }
}

protezdiyot

#3
si
Alıntı yapılan: vitruvius - 10 Ocak 2015, 18:54:23
Butonlar pic'e girmeden araya 220 ohm bir direnç koyun. Butonlar için bir debounce algoritması kurun. Sigorta ayarları, Port yönlendirmeleri vs. de göremedim.
sigorta kullanmadım.Port yönlendirmesinide ccs e bıraktım.Nunlar sorun oluşturur mu?

mesaj birleştirme:: 12 Ocak 2015, 10:35:28

Alıntı yapılan: fatal16 - 10 Ocak 2015, 21:13:28
vitruvius'a ilave olarak kodu soyle yazsan daha guzel olmaz mı acaba
(Simülasyon olduğu için buton arklarını felan saymıyorum, bunun için 5ms delay koyulabilir )
if(input(ileributonu) && !input(geributonubutonu) && !input(stopbutonu)){
    while( !input(geributonubutonu) && !input(stopbutonu))
    {
    output_high(motorileri);
    output_low(motorgeri);
    }
}


Sn.Fatal;
Kullandığınız && işareti ne yapıyor açıklayabilir misiniz?..

Kabil ATICI

(input(ileributonu) (VE şlemi) !input(geributonubutonu) ( VE işlemi) !input(stopbutonu))
olarak düşünebilirsin.

&& : VE işlemi
ambar7

protezdiyot

#5
Alıntı yapılan: ambar7 - 12 Ocak 2015, 11:06:18
(input(ileributonu) (VE şlemi) !input(geributonubutonu) ( VE işlemi) !input(stopbutonu))
olarak düşünebilirsin.

&& : VE işlemi

sadece & koysamda and anlamı taşımıyor mu?Yoksa farklı anlama mı geliyor??Ayrıca öğrenme sürecindeyim. Desteğiniz için teşekkürler...

Kabil ATICI

senin dediğin
degisken=degisken1 & 0xf0 için

if işleminde farklı kullanılıyor.
ambar7

protezdiyot

Alıntı yapılan: ambar7 - 12 Ocak 2015, 13:01:00
senin dediğin
degisken=degisken1 & 0xf0 için

if işleminde farklı kullanılıyor.

SN. Ambar7 ;
Ben if komutuyla kodda da gördüğünüz gibi tanımladım & işlemini ve istediğim gibi çalışıyor.Yani a basılıysa b basılıysa işleme girsin diyorum. Sizin dediğinize göre if içinde && yapmam gerekiyor.Doğru mudur??

Kabil ATICI

ambar7

semihel

Sana gönderdiğim dosyayı deneye bilirmisin. Anladığım kadarıyla kodunda duzeltmeler yapmaya çalıştım.
bide inputlarda '&' kullanrak maskeleme yapmaya çalışılmış gibi olmuş. '&&' şekilde olması lazım. gerçek devrede kodda tanımladığın bacaklarımı kullandın onlara dikkat etmek lazım.
http://s3.dosya.tc/server30/fEbd0y/16f628a.rar.html

protezdiyot

Alıntı yapılan: ambar7 - 12 Ocak 2015, 13:26:47
evet if komutunda && şeklinde kullanılıyor.

Yukarıda yazdığım program ama a*b*c şeklinde çalışıyor ama.Neyse bu çok önemli değil.
Sn ambar;
şunu sormak istiyorum.Ben a butonuna bastığımda b çıkışı aktif oluyorsa, a ya bastığım sürece mi b aktif olur yoksa , a ya bastım bıraktım b sürekli mi aktif?

ipek

C' den anlamadığım için göremiyorum,baş belası port A analog ve komparatörler kapalımı ,yani portA digital yapıldımı ?

protezdiyot

Alıntı yapılan: ipek - 12 Ocak 2015, 13:37:39
C' den anlamadığım için göremiyorum,baş belası port A analog ve komparatörler kapalımı ,yani portA digital yapıldımı ?
Analog giriş yok 16f628a da.

Kabil ATICI

Butonu bıraktıktan sonra eğer bu çıkışı ile ilgili bir işlem yok ise,  a butonuna ne yaptığın önemli değildir.

if(a==0)
b=1
şeklindeki bir yapıda; a ne olursa olsun b=1 olur

ama

if(a==0)
b=1
else
b=0
şeklinde bir ifade varsa buton basılı iken b=1 bırakıldığında b=0 olur.

Ama devrede bunu yapmıyorsa muhtemelen parazit olayın vardır. Veya kısa devre...
Motor gibi akım çeken endüktif yüklerde, motor ile aynı kaynaktan beslenmese bile işlemci yeterli yalıtım sağlanmadığında elektriksel parazitler kaçınılmazdır.

Aynı kaynaktan beslenme durumunda durum daha vahimdir. İşlemci besleme hatları üzerine ve işlemciye yakın kondansatörler eklemek gerekiyor.

Bunun için aslında işlemci hatlarını osilaskop ile incelemekte fayda var..

şemayı koymamışsın;
Bu tür durumlar sigorta ayarları, işlemci MCLR bacağının durumu (10 k ile vcc bağlamak)
gibi önlemleri aldıysan söylememişim varsayabilirsin
ambar7

protezdiyot

Hocam teşekkür ederim.Deneme yapıp sonuç üzerine tekrar bilginizi rica edebilirim.Saygılar.