pcbway

16f877a led yakma sorunu

Başlatan rclk, 14 Şubat 2012, 03:16:29

rclk

14 Şubat 2012, 03:16:29 Son düzenlenme: 14 Şubat 2012, 11:41:34 gevv
16f8777a  kullanarak led yakmaya çalışıyorum fakat bi türlü sorunları hallemedim yadımcı olursanız sevinirim..

toggle uygulaması yapmaya çalıştım fakat ledlerin hiçbiri yanmadı;
serdar çicek in ccs c ile pic programlama kitabına çalışıyorum ve kod ordan;
ccs c pic kodu
/
   
   
#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ılan osilatör frekansı belirtiliyor

#use fast_io(b) // Port yönlendirme komutları B portu için geçerli

/********* ANA PROGRAM FONKSİYONU********/
#define SIZE 50
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(0x00);    // RB0 portu tümüyle çıkış olarak ayarlandı.

   output_b(0x00);      // B portu çıkışı sıfırlanıyor

   basla:

   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b0);  // RB0 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b1);  // RB1 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b2);  // RB2 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b3);  // RB3 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b4);  // RB4 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b5);  // RB5 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b6);  // RB6 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor
   output_toggle(pin_b7);  // RB7 ucunun çıkış durumu tersleniyor
   delay_ms(SIZE);          // 500 ms\'lik gecikme veriliyor

   goto basla;
}


devrenin resimleri;



kudretuzuner

Merhaba
Gözüme ilk çarpan,kristalin ayaklarına  22 pikofaratlık kondansatör koymak gerekir.devreyi isiste çizerseniz daha kolay yardım alırsınız.

kudretuzuner

Pardon,kondansatörleri gördüm ama çok uzağa koymuşsunuz.Kristale yakın olsun.

rclk

14 Şubat 2012, 12:23:55 #3 Son düzenlenme: 14 Şubat 2012, 12:39:19 rclk
kusura bakmayın ilk defa konu açtım;

 hex,isis dosyası içinde

https://rapidshare.com/files/1741703085/ekler.rar

birde dediğiniz gibi yaptım kondansatörleri yakına bağladım  olmadı ledler hiç yanmıyor :(

kudretuzuner

Merhaba
İlk dört led için asm ile yazdım.isiste çalışıyor.hex dosyası da ilişiktedir.Bir dener misiniz?

LIST P=16F877
INCLUDE \"P16F877.INC\"
__CONFIG H\'3F31\'
ORG H\'0000\'
SAYAC1 EQU H\'20\'
SAYAC2 EQU H\'21\'
BSF STATUS,5
MOVLW B\'110000\'
MOVWF TRISA
MOVLW B\'00000000\'
MOVWF TRISB 
MOVLW B\'10111111\'
MOVWF TRISC
MOVLW B\'00000000\'
MOVWF TRISD
MOVLW B\'000\'
MOVWF TRISE
BCF STATUS,5
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
;XXXXXXXXXXXXXXXXXXXXXXX
BASLA
BSF PORTB,0
CALL BEKLE

BSF PORTB,1
CALL BEKLE


BSF PORTB,2
CALL BEKLE

BSF PORTB,3
CALL BEKLE
;****************
BCF PORTB,3
CALL BEKLE

BCF PORTB,2
CALL BEKLE

BCF PORTB,1
CALL BEKLE

BCF PORTB,0
CALL BEKLE


GOTO BASLA
;XXXXXXXXXXXXXXXXXXXXXXXX
BEKLE
MOVLW H\'FF\'
MOVWF SAYAC1
DONGU1
MOVLW H\'FF\'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
;************
END
;***********

kudretuzuner


rclk

kudretuzuner

15- 20 dk önce 16f628a ile denedim osilatör kullanmadan yaptım oldu aynı şeyi 16f877a osilatör kullanarak yapıyorum olmuyor bu osilaörü  13,14 pinlere bağlıyoruz kondansatörleri paralel bağlıyoruz pic e enerjiyi 1. pinden veriyoruz dogru mu biliyorum yaptıgım eksikler neler?

kudretuzuner

Merhaba
11-12  ve  31- 32  pinler nereye bağlı boşta mı? Entegrenin besleme ve şase uçlarıdır datasına bir bakarsanız daha iyi anlayacaksınız.

kudretuzuner


rclk

14 Şubat 2012, 17:04:12 #9 Son düzenlenme: 14 Şubat 2012, 17:04:47 rclk
Alıntı yapılan: kudretuzuner - 14 Şubat 2012, 17:02:20data sheet

ben en iyisi datasheetine bi bakayım çünkü dediğiniz gibi boştalar; yardımınız için  çok teşşekkür ediyorum ... :)

yazici67

Ayrıca 500ms gecikme için SIZE sabiti 500 e ayarlanmalı programda #define SIZE 50 yapmışsınız devre doğru kurulsa bile ledleri sürekli sönük yanma halinde görürsün o kısmıda düzelt.Osilatör yerine rezonatör kullanırsan daha kolay olur başlangıç uygulamaları için...

rclk

Alıntı yapılan: yazici67 - 14 Şubat 2012, 20:40:58Ayrıca 500ms gecikme için SIZE sabiti 500 e ayarlanmalı programda #define SIZE 50 yapmışsınız devre doğru kurulsa bile ledleri sürekli sönük yanma halinde görürsün o kısmıda düzelt.Osilatör yerine rezonatör kullanırsan daha kolay olur başlangıç uygulamaları için...

tavsiyenizi dikkate alacağım rezonatörle devam edeceğim çok teşekkür ediyorum :)