Pic ile Yanıp Sönen Led ve Frene Basınca Yanan Led Devresi

pltmgnm

Üye
Katılım
22 Ocak 2010
Mesajlar
5
Puanları
1
Yaş
32
Merhaba yıllar önce almış olduğum picprogramlama kartımla çocukluk yıllarımda uğraşmış Hazır devre almak yerine az çok kurcalamış ve kendime ufak tefek bir kaçdevre yapmışlığım olmuştur. Ha yaptığım devreyi dışarıdan satın almak elbeteki daha ucuza gelecekti.Ancak birşeyleri kendimin yapıyor olması daha büyük haz veriyor.


Amacım şu
Picin 1 kanalını çıkış yapıp 1 adet 12 volt ile çalışan power Led pcbsini (2 tane 3 lü seri ) 2 defa çaktırıp 2 saniye bekletip 2 defa daha çaktırmak ve bu döngünün sürekli devam etmesi. Aynı zamanda da birde giriş pini oluşturup pice 7805 yada daha farklı birşekilde gelen + veya – tetik ucu ile ledin sürekli yanmasını sağlamak. Ekstra başka bir mod istemiyorum. Buton istemiyorum.

Piyasada bu şekilde birtane bile devre yok. Hep modlu sürekli çakan devreler var. Olsa bile ben kendim yapmak istiyorum.

İnternet üzerinden birinin yapmış olduğu devre kodlarında oynama yaparak istediğim çaktırmayı sağladım.Ancak sürekli yanması için gerekli kodu bilemediğim için yazamadım. Ledin +kutbuna Diyot bağladım ama yine olmadı.

Devre 16f628a pici ile yapılmış. Kullanılan program Pic C Complier

RA0 Pini çıkış pini olarak işaretlenip LED ismi verilmiş ve aşağıdaki kod satırı yazılmış;

Kod:
#include <tekled sonn.h>
void main()
{
   while(TRUE)
   {
         output_low(LED);
         delay_ms(2000);
         output_high(LED);
         delay_ms(300);
         output_low(LED);
         delay_ms(25);
        
         output_high(LED);
         delay_ms(300);
   }
}


Devrenin fotoğrafı da aşağıdaki gibi :

Untitled-Sketch_bb-1024x378.jpg


Devrede kullanılan elemanlar:

-2 Adet 22 piko Farad Kondansatör (Mercimek)

-4Mhz Kristal

-10kΩ direnç

-330Ω direnç

-1 Adet Led



Benim istediğim ise bu devreyi 12f629 ile yapmak ve 6 power led ile sürecek transistörü de devreye eklemek. Bu konuda yardımınıza ihtiyacım var. Şimdiden Teşekkür Ederim.
 
Bir pini giriş olarak ayarlayıp 0ise yani eksi yanıp sönen led kodları yazmanız 1 yani artı isede diyer sürekli yanan kod eklemelisiniz tam tersinide yapabilirsin fark etmez bakmanız gereken buton ile led yakmak söndürmek komutları
 
Bir pini giriş olarak ayarlayıp 0 ise yani eksi yanıp sönen led kodları yazmanız 1 yani artı isede diyer sürekli yanan kod eklemelisiniz tam tersinide yapabilirsin fark etmez bakmanız gereken buton ile led yakmak söndürmek komutları

Hocam şimdi bir kaç buton devresine baktım. Kodu şu şekilde yaptım ancak ne derece doğru bilemiyorum .

Pinlerden birini FREN adıyla giriş olarak tanımladım. Fren pinine 5volt geldiğinde led sürekli yanacak. 5 volt kesildiğinde ise yanıp sönmeye devam edecek.

Kod doğru mu acaba

Kod:
#include <tekled sonn.h>

void main()
{

   while(TRUE)
   {
        if
        input_high(FREN)==1;     
      {
      output_high(LED);
      }
         output_low(LED);
         delay_ms(2000);
        
         output_high(LED);
         delay_ms(500);
        
         output_low(LED);
         delay_ms(50);
        
         output_high(LED);
         delay_ms(500);
        
              
   }

}
 
Kimse ilgilenmemiş bu pic çok mu eskide kaldı acaba?

Ben devreyi tamamladım istediğim gibi çalışıyor ancak bunu 16f628de çalıştırabildim. 12f629 picinde bacak ayarlamasını yapsam bile çalışmadı sebebi nedir ?

ccs c ile yazdım.

Kod:
#include <main.h>

void main()
{
while(TRUE)
   {
   if(input(FREN1))
   { output_bit(LED,FREN1); 
     }
  
   else
      {
        
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(25);
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(2000);
      }
   }
}
 
F629 da komparatör var mıydı?
Varsa kapatmalısınız.

Kod:
CMCON = 0x07;
 
Son düzenleme:
Kimse ilgilenmemiş bu pic çok mu eskide kaldı acaba?

Ben devreyi tamamladım istediğim gibi çalışıyor ancak bunu 16f628de çalıştırabildim. 12f629 picinde bacak ayarlamasını yapsam bile çalışmadı sebebi nedir ?

ccs c ile yazdım.

Kod:
#include <main.h>

void main()
{
while(TRUE)
   {
   if(input(FREN1))
   { output_bit(LED,FREN1); 
     }
  
   else
      {
        
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(25);
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(2000);
      }
   }
}
Koşuşturmadan ilgilenemedim kod çalışır ama kullanılan pin ile ilgili diyer registir a kapatmalısın
 
Arkadaşlar devreyi çalıştırdım. İstediğim gibi de çalıştı.Ancak Delay komutundan dolayı butona bastığım anda yanması gereken led döngü bittikten sonra yanıyor. Yani delay yerine kesme komutu kullanmak gerekiyor sanırım. Bu devreye nasıl entegre edebilirim. kesme komutunu.

Kod:
#include <main.h>
#fuses NOMCLR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#use delay(internal=4MHz)
#use FIXED_IO( A_outputs=PIN_A4)
#define LED   PIN_A4
#define FREN   PIN_A5

void main()
{


while(TRUE)
 { 
    if(input(FREN))
   {
         output_high(LED);
   }
        
    else   
   {
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(30);
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(2000);
  }
 }
}
 
CCS C de register kullanmıyoruz. o kendisi herşeyi otomatik ayarlar.
interup için aşağıdaki kodları dene bakalım, birde harici interup girişi 5. bacak olan GP2 pininden yapılıyor. lojik 1 olunca kesme devreye girer ve tekrar 0 olana kadar bekler.

C:
#include <12F629.h>
#FUSES NOMCLR, NOWDT, NOBROWNOUT
#use delay(internal=4MHz)
#use FIXED_IO( A_outputs=PIN_A4 )
#define FREN   PIN_A2
#define LED   PIN_A4

#INT_EXT
void  EXT_isr(void) {
   output_high(LED);
   while(input(FREN)){output_high(LED);}
}

void main() {
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   while(TRUE){
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(30);
        
         output_high(LED);
         delay_ms(100);
        
         output_low(LED);
         delay_ms(2000);
   }

}
 
CCS C de register kullanmıyoruz. o kendisi herşeyi otomatik ayarlar.
interup için aşağıdaki kodları dene bakalım, birde harici interup girişi 5. bacak olan GP2 pininden yapılıyor. lojik 1 olunca kesme devreye girer ve tekrar 0 olana kadar bekler.

C:
#include <12F629.h>
#FUSES NOMCLR, NOWDT, NOBROWNOUT
#use delay(internal=4MHz)
#use FIXED_IO( A_outputs=PIN_A4 )
#define FREN   PIN_A2
#define LED   PIN_A4

#INT_EXT
void  EXT_isr(void) {
   output_high(LED);
   while(input(FREN)){output_high(LED);}
}

void main() {
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   while(TRUE){
         output_high(LED);
         delay_ms(100);
       
         output_low(LED);
         delay_ms(30);
       
         output_high(LED);
         delay_ms(100);
       
         output_low(LED);
         delay_ms(2000);
   }

}


Hocam giriş pinini a5 olarak değiştirdim. basar basmaz yanıyor artık gecikme söz konusu değil. Ancak bu defada bastığım süre boyunca yanık kalmıyor.Geri sönüp eski düzenden devam ediyor. Basılı tuttuğum sürece devrede kalmasını bıraktığımda da hemen sönmesini ve yanıp sönme işlevinin devam etmesini istiyorum.Eksik olan ne ki ?
 

Forum istatistikleri

Konular
128,104
Mesajlar
915,001
Kullanıcılar
449,803
Son üye
ERSEDAT

Yeni konular

Geri
Üst