pcbway

Yavaşça açılıp kapanan led devresini nasıl yaparım

Başlatan Chameleon, 10 Ocak 2012, 04:31:57

Chameleon

Selam arkadaşlar
Elimde aşağıdakine benzeyen bir terminator büstü var. Bunun kırmızı ledden gözleri bulunmakta. Benim isteğim bu gözlerin yavaşça yanması, belli bir süre sonrada yavaşça sönmesi. Bu olayın adını tam bilemediğim için nasıl aratacağımıda kestiremedim. Biri yanına yaklaşınca ledler devreye girsin istiyorum. O devreyi bulmak zorlamaz gibi geldi ama bu ledin fade li bir şekilde yanıp sönmesi tahminimden daha zorlayıcı birşey sanırım.



Chameleon


onderion

Merhabalar konuyu hortlatmış olacağım ama bu foruma bu proje için üye oldum. Kendim gemi inşaa mühendisiyim ve arabama bir kaç led modifiyesi yapmak istiyorum. gezinirken şu projeyi buldum.
http://sunbizhosting.co.uk/~spiral/blog/?p=227
pic 12f683 ile yapılmış ve .c kodunu paylaşmışlar. [spoiler]/*

   PIC 12F683 Powered KTM Duke 200 breathing parking light
   10.06.12
   Version 1.0
   Language: Hi-Tech C for Baseline 8-bit PIC microcontrollers
   Blog post URL: http://sunbizhosting.co.uk/~spiral/blog/?p=227
   email: spiralbrain@yahoo.com

*/
#include <pic.h>
#include \"delay.h\"      
#include \"delay.c\"


__CONFIG(0x31C4);            

#define   XTAL_FREQ   1MHZ      /* Crystal frequency in MHz */

#define LED            GP0
#define NEUTRAL         GP4      


void main(void)
{
   unsigned char x;
   ANSEL = 0x00;
   IRCF0 =0;
   IRCF1 =0;
   IRCF2 =1;

   TRISIO = 0b00111011;
   PR2 = 99;
   CCPR1L = 0b00011110;
   CCP1CON = 0b00001100;
   T2CON = 0b00000110;

   while(1)
   {
      for(x=8;x<99;x++)
      {
         CCPR1L = x;
         DelayMs(4);
      }
         DelayMs(120);
      while(NEUTRAL == 1)
      {
            // do nothing
      }
      for(x=99;x>8;x--)
      {
         CCPR1L = x;
         DelayMs(6);
      }
   }[/spoiler]

Fakat bir türlü hex e çeviremedim onun yerine bir de bu kodu buldum. [spoiler]
/*
\"Breathing sleep LED, like on a Mac.
Jeremy Saglimbeni 2011
thecustomgeek.com

LED is attached to pin 11 in series with a 5.6K resistor
*/
int i = 0;
void setup() { // bring the LED up nicely from being off
  for(i = 0 ; i <= 15; i+=1)
  {
    analogWrite(11, i);
    delay(5);
  }
}
void loop()
{
  for(i = 15 ; i <= 255; i+=1)
  {
    analogWrite(11, i);
    if (i > 150) {
      delay(4);
    }
    if ((i > 125) && (i < 151)) {
      delay(5);
    }
    if (( i > 100) && (i < 126)) {
      delay(7);
    }
    if (( i > 75) && (i < 101)) {
      delay(10);
    }
    if (( i > 50) && (i < 76)) {
      delay(14);
    }
    if (( i > 25) && (i < 51)) {
      delay(18);
    }
    if (( i > 1) && (i < 26)) {
      delay(19);
    }
  }
  for(i = 255; i >=15; i-=1)
  {
    analogWrite(11, i);
    if (i > 150) {
      delay(4);
    }
    if ((i > 125) && (i < 151)) {
      delay(5);
    }
    if (( i > 100) && (i < 126)) {
      delay(7);
    }
    if (( i > 75) && (i < 101)) {
      delay(10);
    }
    if (( i > 50) && (i < 76)) {
      delay(14);
    }
    if (( i > 25) && (i < 51)) {
      delay(18);
    }
    if (( i > 1) && (i < 26)) {
      delay(19);
    }
  }
  delay(970);
}
[/spoiler]
bu nu da bir kere hexe çevirmeyi başardım sonra hep bu hatayo alıyorum. \"*** Error 128 A #DEVICE required before this line\"
Çevirdiğim hexi de devreye atınca çok yavaş çalıştı. yardım edebilirseniz çok memnun olurum.

alianildinler

arduino da pwm kontrol ile bu dediğinin yapıldığını görmüştüm.

onderion

Cevap için teşekkürler hocam fakat pic ile yapmak mümkün değil mi?

baykoyu


onderion

Hocam dediğim gibi ben gemi inşaat müh. o yüzden yabancı olduğum bir konu. İnternetten bulduğum bir çalışmayı yapayım diye girdim bu işe ama delay.c gibi kodları eksik paylaştıkları için tam yapamadım. pwm nedir biraz detaylandırabilir misiniz? Çok teşekkürler.

Adnancoskun

PWM (Puls Width Modulation) yani dalganın enine modülasyonu, yani siz dalganın enine genişliğini ayarlayarak dalga şeklini değiştiriyorsunuz ve bu sistemle sürdüğünüz birmosfet ve bobinden oluşan sistemde çıkış gerilimini sabit akımda ayarlıyorsunuz... SMPS sistemlerinde, step motorlarda , fırçasız motorların sürülmesinde bu yöntem kullanılmaktadır...
Tanrı Türk'ü Korusun ve Yüceltsin.

pwm.c

neden PIC ile yapmak istiyorsun?
istersen şurada 555 ile yapılmış bir örnek var:
http://www.pcbheaven.com/userpages/Flexible_555_LED_Pulsing_Circuit/
devrede flaşörün bütün durumları ayarlanabiliniyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

onderion

Teşekkürler. Peki bu 555 e de bir kod yüklemek gerekiyor mu yoksa bu zaten o çipin kendi işlevi mi?

pwm.c

555 genel amaçlı bir timer entegresidir. bir çok uygulamada osilatör yapımında kullanılır. yani anlayacağın programlanabilir bir eleman değil. tak kullan aygıtı :)
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

onderion

Tamam üstatlar çok teşekkür ederim verdiğiniz bilgiler için. Allah razı olsun.