Ynt: 16F877A Reset ve Durma

Başlatan veliusta, 05 Mayıs 2016, 15:04:19

veliusta

16F877A Reset butonuna basıyorum fakat yeniden başlamıyor. Herşey kapanıp. Duruyor.
İsiste sorunsuz çalışıyor.

Sorun nerede olabilir?

#include <16f877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.



//********** ANA PROGRAM FONKSİYONU*******

void main ( ){
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);   // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);   // CCP2 birimi devre dışı

   set_tris_b(0b11111111);      // B portu komple giriş
   set_tris_d(0b00000000);      // D portu komple çıkış
   set_tris_c(0b00000000);      // D portu komple çıkış

   
   port_b_pullups(1);       // B Portunda bulunan dahili pull-up özelliği aktif ediliyor
  output_d(0b00000000);          // A portu temizlendi.
  output_c(0b00000000);          // B portu temizlendi
   
   delay_us(10);            // Bekleniyor 
   
      output_toggle(pin_D6);
      delay_ms(250);
      output_toggle(pin_D6);
      delay_ms(250);
      output_toggle(pin_D6);
      delay_ms(250);
      output_toggle(pin_D6);
      delay_ms(250);
      
      output_toggle(pin_D5);
      delay_ms(250);
      output_toggle(pin_D5);
      delay_ms(250);
      output_toggle(pin_D5);
      delay_ms(250);
      output_toggle(pin_D5);
      delay_ms(250);
   
      output_toggle(pin_D4);
      delay_ms(250);
      output_toggle(pin_D4);
      delay_ms(250);
      output_toggle(pin_D4);
      delay_ms(250);
      output_toggle(pin_D4);
      delay_ms(250);
      
      output_toggle(pin_C6);
      delay_ms(250);
      output_toggle(pin_C6);
      delay_ms(250);
      output_toggle(pin_C6);
      delay_ms(250);
      output_toggle(pin_C6);
      delay_ms(250);
      
      output_toggle(pin_C4);
      delay_ms(250);
      output_toggle(pin_C4);
      delay_ms(250);
      output_toggle(pin_C4);
      delay_ms(250);
      output_toggle(pin_C4);
      delay_ms(250);
      
      output_toggle(pin_D3);
      delay_ms(250);
      output_toggle(pin_D3);
      delay_ms(250);
      output_toggle(pin_D3);
      delay_ms(250);
      output_toggle(pin_D3);
      delay_ms(250);

      output_toggle(pin_D2);
      delay_ms(250);
      output_toggle(pin_D2);
      delay_ms(250);
      output_toggle(pin_D2);
      delay_ms(250);
      output_toggle(pin_D2);
      delay_ms(250); 
      
      output_toggle(pin_D1);
      delay_ms(250);
      output_toggle(pin_D1);
      delay_ms(250);
      output_toggle(pin_D1);
      delay_ms(250);
      output_toggle(pin_D1);
      delay_ms(250);
      
      output_toggle(pin_D0);
      delay_ms(250);
      output_toggle(pin_D0);
      delay_ms(250);
      output_toggle(pin_D0);
      delay_ms(250);
      output_toggle(pin_D0);
      delay_ms(250);
      
      output_toggle(pin_C3);
      delay_ms(250);
      output_toggle(pin_C3);
      delay_ms(250);
      output_toggle(pin_C3);
      delay_ms(250);
      output_toggle(pin_C3);
      delay_ms(250);
      
      output_toggle(pin_C2);
      delay_ms(250);
      output_toggle(pin_C2);
      delay_ms(250);
      output_toggle(pin_C2);
      delay_ms(250);
      output_toggle(pin_C2);
      delay_ms(250);
      
      output_toggle(pin_C7);
      delay_ms(250);
      output_toggle(pin_C7);
      delay_ms(250);
      output_toggle(pin_C7);
      delay_ms(250);
      output_toggle(pin_C7);
      delay_ms(250);
      
 while(1){ // Sonsuz döngü
 
if(input(pin_B7)==1){
output_high(pin_D6);
}else{
output_low(pin_D6);
}
    
if(input(pin_B6)==1){
output_high(pin_D5);
}else{
output_low(pin_D5);
}

if(input(pin_B4)==1){
output_high(pin_D4);
}else{
output_low(pin_D4);
}

      
   }
}


mesaj birleştirme:: 06 Mayıs 2016, 05:11:15

Sanırım devrede sahte direnç var. Entegreyi çıkartıp MCRL pinindeki 10K direnci ölçüyorum. 7.90K gösteriyor. Diğer dirençler normal.
Sorun Bundan olabilir mi?

Sorunu çözdüm:   Ben devreyi yıkamıştım. Butonun içine biraz su kaçmış.

SysTick

Butonun sağlamlığından emin misiniz ?

mehmet

#2
Alıntı yapılan: veliusta - 05 Mayıs 2016, 15:04:19


mesaj birleştirme:: 05 Mayıs 2016, 15:11:15

Sanırım devrede sahte direnç var. Entegreyi çıkartıp MCRL pinindeki 10K direnci ölçüyorum. 7.90K gösteriyor. Diğer dirençler normal.
Sorun Bundan olabilir mi?

Bu direnci devre üzerinde mi ölçüyorsunuz? Öyle ise
yanlış çıkma ihtimali olabilir. Ayrıca MCLR üzerindeki
direnç değerinin hassas değeri yok. Sadece +5V da
tutabilecek bir direnç yeterli.

Şemanızı ve kurduğunuz devrenin resmini de görsek
fena olmaz...

Ek: Sanırım portları yazılımda değiştirdiniz devrede
değiştirmediniz. Zira açıklamalar ile kodlar biraz uyumsuz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

robomaster

1) Program ilk çalışmaya başladığı zaman kısa bir gecikme (10ms) koyup sonucu bir söyleyin.
2) 1. de bir sonuç elde edemezseniz devre beslemesine bir 470uf veya 1000uf kapasitör koyup reset atın deneyin.
Sonuçları paylaşın.

dursuncemal

#fuses  ayarlarina mclr yi ekleyerek deneyin derim.
:=

overlok

Alıntı yapılan: veliusta - 05 Mayıs 2016, 15:04:19
Sorunu çözdüm:   Ben devreyi yıkamıştım. Butonun içine biraz su kaçmış.
Sanırım sorunu çözmüş arkadaş.
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

veliusta

Sorun çözüdüde. XT mi yapacam ben HS mi ?

4MHz iki pinli kristal var bende.

tekosis

İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.