çalışmayan bir kod daha :(

Başlatan snansrin, 11 Mayıs 2015, 11:54:07

snansrin

/* konveyör 2 buton 3 çıkış 20 mhz kristal 
Tarih 10.05.2015 */
 #define buton1 porta.ra0
 #define buton2 porta.ra1
void main() {
trisa.ra0 = 1;    //start butonu
trisa.ra1 = 1;    //endüktif sensör
trisb.rb0 = 0;    //motor 1
trisb.rb1 = 0;    //motor saga
trisb.rb2= 0;     //motor sola
porta = 0x00;     //girişler sıfırlandı
portb = 0x00;     //çıkışlar sıfırlandı
  while(1)
          {
          if(buton1)
          {
          portb.rb0 = 1;     //motor 1 çalıştırıldı
          portb.rb1 = 1;     //motor 2 çalıştırıldı
          }
          if (buton2)
          {
          portb.rb1 = 0;     //motor 2 durduruldu
          portb.rb2 = 1;     // motor 3 çalıştırıldı
          delay_ms(5000);    // 5 sn bekle
          portb=0x00;    // bütün çıkışlar sıfırlandı
          }




}
}

bu kodu derlemede sorun yaşamıyorum,fakat proteus ta kurduğumda herhangi bir çıkış ta alamıyorum. nerede hata yapıyorum yardım ederseniz sevinirim.

ete

Pic firması yüzlerce çeşit Mikrodenetleyici üretiyor ve her birine değişik bir isim veriyor. mesela 16F628A veya 16F877A gibi isimler.
Bu isimler o denetleyicinin farklı özellikler taşıdığının bir ispatıdır. Zira hepsi bir birinin aynı olsa idi tek bir isim altında toplanırlardı.

Şimdi senin yazdığın kodlara ve mesaja bakıyorum hangi denetleyici kullanıldığı konusunda en ufak bir belirti yok. Hangi denetleyici olduğunu bilmeden bu soruna bir çözüm bulmak bizim açımızdan imkansız. Ancak tahminlerde bulunabiliriz.
Genelleme yapacak olursak,
- A portuna default olarak verilmiş Komparatör özelliğini kapatıp portu digital hale getirmen gerekir.
- Yine A portuna default olarak verilmiş olan Analog çalışma özelliğinide iptal edip portu tamamen digital hale getirmen lazım.

Bu iki özellikde  A portunda yer almıyor ise (işlemcin 16F84A ise) o zaman devreni kontrol et kristal ve ona bağlı kondansatör bağlantıları ile MCLR pininde bağlanması gereken Pullup direncinin olup olmadığını kontrol et derim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

snansrin

kusura bakmayın hocam kullandığım entegre 16f877a

burç tankal

ADCON1 = 7; komutu ekleyerek portA ve portE'yi dijital olarak yapılandırırsanız sorun hallolacaktır.

snansrin

#4
teşekkür ederim :)

mesaj birleştirme:: 11 Mayıs 2015, 15:25:01

Bu seferd derlemede hata oluştu, ADCON1=7; yi hata olarak görüyor.

burç tankal

/* konveyör 2 buton 3 çıkış 20 mhz kristal 
Tarih 10.05.2015 */
 #define buton1 porta.ra0
 #define buton2 porta.ra1
void main() {
trisa.ra0 = 1;    //start butonu
trisa.ra1 = 1;    //endüktif sensör
trisb.rb0 = 0;    //motor 1
trisb.rb1 = 0;    //motor saga
trisb.rb2= 0;     //motor sola
porta = 0x00;     //girişler sıfırlandı
portb = 0x00;     //çıkışlar sıfırlandı
ADCON1 = 7;
  while(1)
          {
          if(buton1)
          {
          portb.rb0 = 1;     //motor 1 çalıştırıldı
          portb.rb1 = 1;     //motor 2 çalıştırıldı
          }
          if (buton2)
          {
          portb.rb1 = 0;     //motor 2 durduruldu
          portb.rb2 = 1;     // motor 3 çalıştırıldı
          delay_ms(5000);    // 5 sn bekle
          portb=0x00;    // bütün çıkışlar sıfırlandı
          }




}
}


Bu şekilde denediniz mi? Bende herhangi bir sıkıntı çıkmadan derlendi.

snansrin

denedim fakat aynı hata oldu programı kapatıp açtığımda derlendi, şimdi proteusta deneyeceğim.

mehmet

Butonlara debounce gecikmesi  ekleyiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

burç tankal

Derleyici sapıttı heralde :) Çalıştı mı kodunuz?

snansrin

yine proteus ta bir çıkış yok. :( 
debounce gecikmesi nasıl yapabilirim onu hocam ?

vitruvius

Proteus dosyanı bir yere yükleyip linkini verir misin hex dosyasıyla beraber. Belki de proteus ayarlarında bir sorun var.

Debounce eklemek için:

if(buton1)
{
    delay_ms(20);
.
.
.
}

snansrin

#11
tabi hemen yandex e atıyorum hocam .

mesaj birleştirme:: 11 Mayıs 2015, 16:49:49

https://yadi.sk/d/eFzJFYs9gZ2LJ  bu linkten ulaşabilirsiniz hocam proteus 8.1 kullanıyorum öyle kaydettim .

ete

16f877A da ayrıca komparatör vardır (16F877 de yoktur).
CMCON=7 komutuda ilave edilmeli koda.
Yada varsa tüm portlar digital yapacak tek bir komut verilmelidir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

snansrin

onuda ilave ettim hocam da yine sonuç değişmedi çıkış yok. sorunda yok derlemede

burç tankal

#14
1- Adcon ve cmcon komutlarını while döngüsünün dışına; Main'in hemen altına koyunuz.
2- Butonlara pull-down dirençleri koyunuz.
3- While döngüsünden hemen önce register'ların oturması için 100 ms kadar gecikme koyunuz.
4- buton2'ye basıldıktan sonra 5 saniye boyunca pic başka komutu algılamayacaktır (gecikme komutu nedeniyle). Bunu önlemek için timer kesmesi veya for next komutu kullanarak gecikme sağlayabilirsiniz.