PIC16F877A - Çalışmama problemi

Başlatan yunusy, 08 Mart 2012, 13:18:01

yunusy

Merhaba;
Dünden beri bir problemle uğraşıyorum hala çözemedim, umarım bir çözüm buluruz burada. Benzer problemle karşılaşan birçok kişinin yazdıklarını okudum ama çözümünü bulamadım henüz.
877A'yı çalıştırmaya çalışıyorum breadboardda, eksik bir şey mi yapıyorum ki.
20Mhz kristalim var(birden fazla, hepsini denedim), HS diye seçtim, OSC1 ve OSC2'ye kristalin bacaklarını yerleştirdim, kristalin bacakları ile toprak arasına da 2 adet 22pf kapasitör koydum. Kristal hemen PIC'in yanında.
MCLR'ye 10k direnç ile 5V veriyorum.
4 tane pilden 5,24V gibi bir değer ile besliyorum PIC'i, VSS ile Vdd arasına kapasitör koydum 100uF.
2 adet VSS 2 adet Vdd 'si var 877A'da, 2sini de 5V ve toprak yaptım.
Ama hiçbir tepki yok, yazdığım programda A ve B portlarını 500ms de bir toggle ettiriyorum ama 5V olmuyor bu portlar hiçbir zaman, arada bir(her zaman değil, genelde 0V alıyorum) 3.12 ile 2.4 arasında sallanıyorlar ama hangi ara gözlemleyemedim.
Kristale de dokununca bazen B0'a bağladığım led yanıyor fakat sürekli yanıp sönmesi lazım yazdığım programa göre.
2 Adet 877A'm var, 2sinin de bozuk olacağını sanmıyorum
CCS ise yazdığım kodlar da şunlar, Klon PicKit2 ile programlıyorum

#include <16f877A.h>
#use delay (clock=20000000)
#fuses HS, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD



#use fast_io(b)
#use fast_io(a)


void main()
{
   
   set_tris_b(0x00);
   set_tris_a(0x00);
   output_b(0x00);
   output_a(0x00);
   while(1){
      output_high(pin_b7);
       output_high(pin_b6);
        output_high(pin_b5);
         output_high(pin_b4);
          output_high(pin_b3);
          
      output_high(pin_a0);
       output_high(pin_a1);
        output_high(pin_a2);
         output_high(pin_a3);
          output_high(pin_a4);
          
      delay_ms(500);
      output_low(pin_b7);
      output_low(pin_b6);
      output_low(pin_b5);
      output_low(pin_b4);
      output_low(pin_b3);
      
      output_low(pin_a0);
      output_low(pin_a1);
      output_low(pin_a2);
      output_low(pin_a3);
      output_low(pin_a4);
      delay_ms(500);
   }
}


yunusy


Devrem resimdeki gibi, Kristaller, pf kondansatörleri ve Ledi 628A ile denedim düzgün çalışıyorlar.
Resimdeki kapasitör 100uF değerinde ama birçok değerle denedim :)

Kabil ATICI

vss vdd arasına 100nF koydun mu?(işlemcinin her iki yanına) Devreyi kristal takmadan denedin mi? (uygun ayarlar ile)
ambar7

yunusy

Kristalsiz çalıştırmaktan kastını anlamadım.
1uF koydum dediğin yerlere yine bir gelişme yok ne yazık ki

skara1214

5.24 yüksek bir değer(sınır 5.25),  adaptör + 7805 kullanıp dene ayrıca kodu şu şekilde değiştirebilirmisin?
   
#include <16f877A.h>
#fuses HS, NOWDT
#use delay (clock=20000000)
void main()
{
   
   while(true){
output_toggle(pin_a0);
delay_ms(2000);
   }
}

yukarıdakini deneyip sonuç alamazsan ;
ccs c  4.093 portable sürümünü  indir, kur problemsiz çalışıyor
Herkes ölür ama herkes gerçekten yaşamaz

ipek

C den anlamam fakat 877 ile 877A arasında comparator farkı var 
bunları A portundan kapatman gerekir
CMCON diye bir bak
ADC'yi kullanmıyorsan ANSEL 'i de kapat
yada A port'unu  kullanma B portunu kullan..

yunusy

Alıntı yapılan: skara1214 - 08 Mart 2012, 20:03:24
5.24 yüksek bir değer(sınır 5.25),  adaptör + 7805 kullanıp dene ayrıca kodu şu şekilde değiştirebilirmisin?
   
#include <16f877A.h>
#fuses HS, NOWDT
#use delay (clock=20000000)
void main()
{
   
   while(true){
output_toggle(pin_a0);
delay_ms(1000);
   }
}

yukarıdakini deneyip sonuç alamazsan ;
ccs c  4.093 portable sürümünü  indir, kur problemsiz çalışıyor
Merhaba; voltaj değerini değiştirmeden verdiğiniz kodu yazdım, çok ilginç şekilde şu anda çalışıyor. Çok şaşırarak teşekkür ediyorum :)
Yalnız yazdığım kodun neresinde sorun var bunu çok merak ettim şimdi, sadece pin_b0  ile de denemiştim kodu ama çalışmamıştı.
Çözersem buradan paylaşacağım, tekrardan teşekkürler

elektronikhobi

Emin değilim ama kullandığın kristal'den kaynaklanıyor olabilir. Gene de emin olmak için PIC16F877A'ın kullanım kılavuzuna bakmak gerekir.

Örneğin burada baktığımda frekans 10MHz olarak seçtiğinde 15-33 pF arası sığaç (kondansatör) kullanıyormuşsun. Titreşirin ("oscillator") çalışma şeklini de yüksek hızlı (HS High Speed) olarak seçmek gerekiyormuş. Ben genelde 4Mhz kristal kullanıyorum ve gene 15-33pF arası bir sığaç seçiyorum. 

yunusy

üstte çalıştı dediğim koddan sonra, benim yazdığım koddaki problemi adım adım aramaya koyuldum ve en başta kendi yazdığım koda geldim. Şimdi ise yazdığım kod bile çalışıyor. Herhalde bir yerleri birbirine değdirdim diyeceğim, her ne kadar defalarca hem basılmış devre hem de breadboard üzerinde denemiş olmama rağmen.
Teşekkürler arkadaşlar

elektromagma

Yanlış görmüyorsam osilatördeki kondansatörlerin bir ucu + damı?
Anadolu MakerSpace http://www.anadolums.com/

cemilkendir

Alıntı yapılan: elektromagma - 09 Mart 2012, 09:06:55
Yanlış görmüyorsam osilatördeki kondansatörlerin bir ucu + damı?

ekside gibi görünüyor asllında bordu ters kullanmış renklerine önem vermemiş gibi

electronickim

kristalin dış kılıfından bir uç lehimle şaseye bağla birde öyle dene.

coco

20mhz kristal kullanmışsın sanırım.Peki kullandığın pic PIC16F877A-20 midir?(-20) olması 20 mhz kadar çalışabilir anlamına geliyor sanırım.