Buton ile led yakamama :)

Başlatan lazut08, 14 Kasım 2013, 01:10:56

lazut08

Arkadaşlar en basitinden buton led yakma programını pic16f877a işlmeciye atıyorum ledi yakamıyorum(İki tane 16f877A var ikisiinde denedim).Ancak butonsuz led yakıp söndürme, seri haberleşme yapabiliyor.kodu bilindik bir kitaptan aynen yazdım.Bi kodları inceleyebilirmisiniz neyde sorun olabilir.Butonda bozuk değil,ikincisi butonuda çıkarıp direk kabloyu takıp çıkardım vs .
/******************************************************
 
#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 fast_io(a) // Port yönlendirme komutları A portu için geçerli
#use fast_io(b) // Port yönlendirme komutları B portu için geçerli

int1 x; // 1 bitlik x adında tamsayı tipinde bir değişken tanımlanıyor.

/********* 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_a(0b00000001);    // RA0 ucu giriş olarak ayarlandı.
   set_tris_b(0x00);    // RB0 portu tümüyle çıkış olarak ayarlandı.

   output_b(0x00);

   basla:
   x=input(pin_a0);      // RA0 girişi okunuyor, tersleniyor ve x değişkenine aktarılıyor.
   output_bit(pin_b0,x);  // x değişkeni değeri RB0 pini çıkışına aktarılıyor.
   goto basla;            // basla etiketinin olduğu yere gidilir.
}

RaMu

Buton bağlantısı şema veya foto şeklinde ekle bakalım koda göremi,
koda daha bakmadım kitaptan aldım dediğin için, ama derlerken hata mesajı aldın mı?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

lazut08

yok hata mesajı almadım isis te düzgün bir şekilde çalışıyor ancak devreyi kurduğumda butona basamda basmasamda led sürekli yanıyor.Butona bastığım anda ledin parlaklığı bir kademe daha (çok az) artıyor yanlız.

Recep METE

Kurduğun devrede bir sıkıntı var.Bu tip basit programlar isiste çalıştığına göre devrede de çalışması gerekir.Kurduğun devrenin bir fotoğrafını yüklersen hatalar üzerinde konuşabiliriz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

sadogan

#4
/******************************************************/
 
#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 fast_io(a) // Port yönlendirme komutları A portu için geçerli
#use fast_io(b) // Port yönlendirme komutları B portu için geçerli

int1 x; // 1 bitlik x adında tamsayı tipinde bir değişken tanımlanıyor.

/********* 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ışı
setup_comparator(NC_NC_NC_NC);    ///--> Bu satır
   set_tris_a(0b00000001);    // RA0 ucu giriş olarak ayarlandı.
   set_tris_b(0x00);    // RB0 portu tümüyle çıkış olarak ayarlandı.

   output_b(0x00);

   basla:
   x=input(pin_a0);      // RA0 girişi okunuyor, tersleniyor ve x değişkenine aktarılıyor.
   output_bit(pin_b0,x);  // x değişkeni değeri RB0 pini çıkışına aktarılıyor.
   goto basla;            // basla etiketinin olduğu yere gidilir.
}

16F877A da comparator modul var
setup_comparator(NC_NC_NC_NC); bu komut la kapatıp denermisin.

mcn

MCLR ye 10 k bağlayarak pull up yapıp dener misin
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

lazut08

Arkadaşlar comparotörü ekleyip derledim  ve mclr bacağına 10k bağlamıştım onu çizmeyi unuttum  ancak 2 türlüde olmadı voltmetreyle ölçtüm ancak butona bassamda basmasamda hep yanıyor(4.5v) onun dışında butonsuz uygulamalarda yanıp söndürme felan yaptım aslında.Devrenin resmide  bu arkadaşlar

M_B

Kristali Entegre bacaklarına yakın tak. Cok uzağa goturmussun.
ust kısımda yazmıs oldugun
int1 x; 
x 'e 0 degerini ata.
int1 x=0;

Bu şekille dene. Olmazsa butonu cıkar ve A0 pinini olcu aletiyle ölç kaç volt var.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

mcn

buton bozuk olmasın, yada kısa devre olan bacaklarına bağlamış olabilirsiniz
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

Recep METE

Bu sorunun  osilatöre takılan, 22pF zannedilen ama 22nF olan mercimek kondansatörler yüzünden olduğunu zannediyorum.Kondansatörler değiştirilerek sorun çözülebilir.Osilatöre takılan mercimek kondansatörlerin üstünde yazan numaraları söylermisin?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

turkplc

220 ohmluk direnç yanlış gibi görünüyor

kudretuzuner

Merhaba,
Anladığım kadarı ile PIC'e yeni başlıyorsunuz.(yanılıyorsam lütfen düzeltin).Kullandığınız Programlama dilini bilmiyorum ama asm ile yazabiliyorum.Bir amatör olarak şunları yazabilirim.PIC ile uğraşmak çok zevkli olmakla birlikte bazı prensipleri gözardı etmemek gerekir.İsis bazı şeyleri atlayarak kullanıcıya kolaylık yapar ve programı çalıştırır.Pratikte ise sorun çıkabilir.Benim önerim,PIC ile çalışırken tüm bacakları sigorta ayarlarına göre ya pozitife veya şaseye çekiniz.Boşta pin bırakmayınız.Yeni başlıyor iseniz 16F628A ile,pın adedi az olduğundan daha kolay programlar daha kolay protoborda kurarsınız.PIC programlamayı öğrenirken tuttuğum notlar belki işinize yarar.Sistemin çalışmasını kavradıktan sonra size daha kolay gelen veya sevdiğiniz bir programlama dili ile devam eder çalışmalarınızı geliştirebilirsiniz.Kolay gelsin.
https://www.dropbox.com/s/j8jaiwgqniono93/ANTRAK1_ASM_BASLANGC.rar
https://www.dropbox.com/s/pu51gzg5vpf3g6f/ANTRAK2_ASM_BASLANGC.rar
Amatör

lazut08

Arkadaşlar öncelikle ilgilendiğiniz için teşekkür ederim.kondansatörlerim 22 pf  int1 x=0; yaparak denedim kristali yaklaştırdım,bide buton sağlam voltmetreden kontrol ettim .setup_comparator(NC_NC_NC_NC); komtunuda ekledim.Ancak değişen birşey olmadı yanlız birşey olduğunu farkettim pin a0 ile toprak arasındaki voltu ölçerken butona basıp elimi tekrar kaldırdığımda devrenin doğru bir şekilde çalıştığını gördüm.Bunda bi terslik var çünkü voltmetreyle ölçüm alırken doğru bir şekilde çalışıyor ilginçtir ancak normal bir şekilde çalıştırdığımda led yanıyor ve bastığımda ledin parlaklık derecesi bir kademe artıyor.

pwm.c

TTL entegrelerde 10k pull-down direnci bazen fazla geliyor ve GND ye bağlı olduğu halde port burayı sürekli "1" olarak algılıyor. buton oygulamalarında mümkünse pull-up bağlantısını kullanın, yani butona basınca "0" olarak görsün. pull-down yapacaksanız 10k direnci 330 ohm veya 1k gibi küçük değerli olanlarından tercih edin.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

lazut08

pull down direnci dediğiniz butondaki 10klık direnç değilmi ?