pcbway

PIC C 16f877A led yak uygulamamda sorun var ledi yakamadım ?

Başlatan makkuzu, 25 Temmuz 2011, 16:35:14

makkuzu

Yaklaşık bir aydır pic programlama ile ilgili araştırma yapıyorum kitap branner felan filan derken artık tamam ilk uygulamamı yapabilirim dedim ve..

ilk kodumu yazdım PIC C Compiler da.

#include \"C:\\Program Files (x86)\\PICC\\Projects\\second\\main.h\"


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   while(1)
{
   output_high(PIN_B0);
    output_high(PIN_B2);
     output_high(PIN_B4);
      output_high(PIN_B6);
     
    output_low(PIN_B1);
    output_low(PIN_B3);
     output_low(PIN_B5);
      output_low(PIN_B7);
   delay_ms(500);
   
   
      output_high(PIN_B1);
    output_high(PIN_B3);
     output_high(PIN_B5);
      output_high(PIN_B7);
     
    output_low(PIN_B0);
    output_low(PIN_B2);
     output_low(PIN_B4);
      output_low(PIN_B6);
   delay_ms(500);
}

}

Kodlarımı derledim ve .hex dosyamı oluşturdum.

Ardından \"USBURN 1.8\" kullanarak Branner8 aracılığıyla hex dosyamı pic 16f877A ya yükledim.

Pic in Vss ve Vdd uçlarına adaptörden gelen 0,3 Amper 5,8 Volt DC Gerilim Uyguladım.

Pic in B portundan bir kaçtanesine de bir drenç (150ohm) ve drence seri bir 5mm Led bağladım ledin diğer ucunu da adaptörümden gelen negatif uca bağladım.

Ledi ters bağladım, farklı uca bağladım kodları değiştirip A portunu C portunu kulllnadım ne yaptıysam ledi bir türlü yakamadım. Bana yardımcı olabilirseniz sevinirim Teşekkürler.

yazici67

Çalışmaması çok normal.Giriş/Çıkış tercihlerini ( TRISA , TRISB vs. ) yapmamışsın.Varsayılan olarak tüm portlar giriş olarak ayarlıdır. Şunu kullanabilirsin :
set_tris_a(0b00000000) ; A portu tamamıyla çıkış
set_tris_b(0b11111111) ; B portu tamamıyla giriş

1\'ler giriş , 0\'lar çıkış anlamına gelir.
Hazırlık kısmına bu kodları \" UYARLAYARAK \" kullanabilirsin.
İyi akşamlar...

makkuzu

Teşekkür ederim Akşam eve gidince ilk işim bunu denemek olacak :)

yazici67

Önemli değil arkadaşım.Yeter ki herkes birşeyler elde etsin , amacına ulaşsın.İyi günler...

makkuzu

Yine olmadı :(
Acaba donanısal bir sorunolabilir mi? Nelere dikkat etmem lazım biraz bilgilendirirseniz sevinirim. Bu benim ilk deneyimim olacak.

Hiç bişey bilmeyen birine anlatır gibi anlatabilirsiniz, ki o benim şahsen :)

mesela hex dosyasının belirli bir ismi olması gerekirmi? index.hex veya main.hex?
Voltaj belirli bir aralığı geçmiş olabilir de ondan olabilir mi? Amper i düşük veya fazla gelmiş olabilir mi?

her hangi bir hata yapıyor olabilirim.

makkuzu

Mesela PIC C Compiler da proje oluştururken aşağıdaki gibi bir ekranla karşılaşıyorum orada işaretlemem seçmem gereken bişey var mı ben olduğu gibi bırakıyorum.

davut naci kaya

@makkuzu merhaba öncelikle şuna dikkat etmelisiniz. 5.8 volt besleme verilemez pic16f877a mikrodenetleyicisine. en fazla 5.5 volt verilmelidir, ben uygulamalarımda buna her zaman dikkat ederim, belkide pic16f877a bozulmuş olabilir. 7805li bir regülatör devresi yapın derim.

makkuzu

Branner8 pic i tanıyor, silme yükleme işlemi yapabiliyor yinede bozulmuş olabilir mi?

yazici67

Arkadaşım kodları ( main.C olarak ) ve varsa ISIS devre şemasını yükleyebilirmisin ?
@davut naci kaya nın da dediği gibi besleme bir sorun yaratmış olabilir.
Birde FUSE ayarlarınıda yazarsan bir çözüme ulaşabiliriz. ( Brown Out Detect/Reset gerilim oynamalarında PIC i resetleyebilir.)

makkuzu

Tam olarak bilmiyorum ama FUSE ayarları dediğiniz şunlar galiba şunlar galiba;

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES LP                       //Low power osc < 200 khz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)


ISIS Projesi yok devreyi kendim çizmeye çalıştım birde breadbord daki devremin fotoğrafını atıyorum. main.c içeriğini yukarıda vermiştim son hali aşağıda:

#include \"C:\\yanhadi\\main.h\"


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   
   set_tris_b(0b00000000) ;        //b Bortu çıkış 
    set_tris_a(0b11111111) ; //a portu giriş

   while(1)
{
   output_high(PIN_B0);
    output_high(PIN_B2);
     output_high(PIN_B4);
      output_high(PIN_B6);
     
    output_low(PIN_B1);
    output_low(PIN_B3);
     output_low(PIN_B5);
      output_low(PIN_B7);
   delay_ms(500);
   
   
      output_high(PIN_B1);
    output_high(PIN_B3);
     output_high(PIN_B5);
      output_high(PIN_B7);
     
    output_low(PIN_B0);
    output_low(PIN_B2);
     output_low(PIN_B4);
      output_low(PIN_B6);
   delay_ms(500);
}


}

makkuzu

Micro denetleyicinin bozulmuş olabileceğini düşünerekten yenisini sipariş verdim.  :-\\

yazici67

@makkuzu arkadaşım öncelikle şemadaki diyot/led \' i ters bağlamışsın.Bir de resimdeki devre çalışıyor gibi görünüyor.Ayrıca FUSE ayarlarına göre hafızanın %50 si \"Write Protected\" yani yazma korumalı.Bu FUSE ayarını silerek bir dene.Ayrıca \" PORT-A \" yı kullanmadığına göre set_tris_a kullanmana gerek yok.Bir de arkadaşım bu devrenin osilatörü nerede ? ( Mesela kristal osilatör ?? )
Ayrıca #FUSES LP diyerek LowPowerOsc belirtmişsin yani 200kHz veya daha aşağısı.Ama gecikmeleri 20mHz ye göre kullanmışsın.

yazici67

@makkuzu arkadaşım kolaylık olsun diye kodları , devre şemasını (resim ve devre olarak) ve animasyonu arşivleyip ekledim.Devreyi bu halde yapıp kodu yüklersen devre çalışacaktır.Kodları incelemeni öneririm.Bütün kodların açıklamasını yazdım.
İyi günler...

makkuzu

Yazıcı67 arkadaşım ilgin ve yardımların için çok teşekkür ederim. Benim problemim osilatörün ne olduğunu bilmeden ilk devremi yapmaya kalkışmam olmuş. Yani benim pic e bağlı bir osilatörüm yok  :-[

yazici67

Evet bu şekilde bir aşama daha kaydetmiş olmalısın.Zaten tüm örnek PIC devrelerinde osilatör görebilirsin.Eklediğim resimdeki devre daha düzgün ve eksiksiz olur.Mümkünse onu dene.
İyi günler...

makkuzu

Malzemeyi ayarlayınca, deneyeceğim Teşekkür ederim :)

makkuzu

Bir sorum da olacak bu osilatöre bağlı olan kondansatörlerin değerleri çok mu önemli?

yazici67

Evet.Belirli frekans aralıkları için kondansatör seçilir. 20mHz için en uygun kapasite 15pF dır. Örnek olarak 4mHz için 22pF kullanılır. Tabi kolay olması açısından \"Seramik Rezonatör\" de kullanabilirsin.Rezonatörün kristal ve 2 kond. içindedir.


Rezonatör :


Bağlanışı :


Bu şekilde de kullanabilirsin.
İyi akşamlar ...

makkuzu

Yazıcı bilgilerinle aydınlanıyorum. Teşekkür ederim.

yazici67

Önemli değil arkadaşım.İyi akşamlar geceler ...

makkuzu

Malzemelerim geldi, artık led leri yakıp söndürebiliyorum :) teşekkürler.