pwm led yakma

Başlatan Muyat, 24 Ocak 2010, 23:46:20

Muyat

16f628a da B portunun sadece 3 yada 4 tanesine led takcam.Ve bu 3 pindeki ledlerinde kısık olarak yanmasını istiyorum.Yani butonla falan kısıklık ayarı olmıcak.Kısıklık ayarını sadece yazılımla degiştircem.
Elektrigi verdigim anda her 3 led kısık olacak ve parlaklıkları hepsinin eşit olcak.RGB gibi biri artarken biri azalsın falan gibi şeyler de  olmıcak.Parlaklıgı az veya fazla bulursam mikroişlemciyi yenıden pic programlayıcıya takıp  bunu sadece yazılımla degiştircem.butonla falan oynamıcam yani.
Bunu nasıl yapabilirim?PWM konusu oldukça zor geliyor bana.Burda amacım güç kaynagının voltajını düşürmeden pwm kullanarak ledlerin parlaklıgını ögrenmek.Ve  şu an bu kadarını ögrensem benım için  yeterli.

@ DEVICE pic16F628A                      'işlemci 16F628A                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog Timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on Timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_ON             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
CMCON=7    DEFINE OSC 4

TRISA=%00001
TRISB=%00000000 ' PortB hepsi çıkış
PORTA=0
PORTB=0
...Devamını getiremedim dogal olarak.

muhittin_kaplan

PWM PORTB.7,127,100 ‘ 100 çevirim süresince PORTB.7 üzerinden 50% "duty cycle" değerine sahip PWM sinyali oluştur.
alıntıdır

Muyat

Bu dedigini aynı anda 3 pinede yapmak mümkün mü?
Örnegin 12f675 de benım bildigim aynı anda 3 kanala pwm uygulanamıyor.16f628de 3 pinede aynı komutu verdigimde 3 pindeki ledler aynı anda kısık yanarmı?Kısık yancak ve o şekılde  yanık kalcaklar.Başka bir şey istemiyorum

Ve verdigin komutta hangi degerleri degiştirdigimde led daha canlı yada daha zayıf yanar? :roll:

Maxim

Alıntı yapılan: "Muyat"Bu dedigini aynı anda 3 pinede yapmak mümkün mü?
Örnegin 12f675 de benım bildigim aynı anda 3 kanala pwm uygulanamıyor.16f628de 3 pinede aynı komutu verdigimde 3 pindeki ledler aynı anda kısık yanarmı?Kısık yancak ve o şekılde  yanık kalcaklar.Başka bir şey istemiyorum
Ve verdigin komutta hangi degerleri degiştirdigimde led daha canlı yada daha zayıf yanar? :roll:

benmi yanlış anladım ?

madem 3 led sürekli kısık yanacak, neden 3 tane seri direnç takmıyorsunuz ?

Fabrisio

Eğer bunu öğrendikten sonra RGB ye geçmek istiyorsan en başta kullanacağın pic i ve yöntemi değiştirmen senin için daha iyi olacaktır. HPWM olayını kavramaya bak. Ayrıca 3 donanımsal PWM ihtiva eden picler var. 16f737, 16f777 vs.

wsxwsx


Logan

Muyat, benim tavsiyem öncelikle soft PWM'den sonrasında ise BASIC dilinden vazgeçmendir. Eğer Fabrisio'nun dediği gibi RGB uygulaması yapacaksan Hardware PWM olayını öğrenmen gerekir. Hatta her halükarda yapacağın projeyi HPWM mantığı ile yapmalısın diyorum.
İmza.

wsxwsx

HPWM  diye ısrar etmenizin önemli bir sebebi olsa gerek.
O nedir?

z

Eger amac sadece ledlerle isik oyunu ise hard yada soft pwm onemli değil.

Ancak pwm kismi yazilimin kucuk bir bolumu ise, yani cpunun ilgilenecegi bir suru ivir zivir is varsa o zaman  donanimin cpu dan bagimsiz olarak pwmle ugrasmasini istemek kadar dogal ne olabilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Muyat

Arkadaşlar ilginiz için teşekkür ederim.
Maxiboost güzel soru sordun.O halde şöyle açıklayım.
Örnegin bir adet pice 3 tane transistör yada mosfet sürerek led yakcaz diyelim.pic daima besleme de olsun.Devamlı elektrik gelsin diyelim.
3 tane çıkış ve 2 tane giriş olsun.Giriştede anahtar olsun diyelim.
Girişteki anahtarların görevi şu şekılde olcak.
Sadece 1.anahtar kapandıgında ledler kısık yancak
Sadece 2.anahtar kapadıgında ise ledler yürüyerek yancak.Yani önce 1.sonra 2. sonra 3. led de yandıktan sonra o şekılde yanık kalcaklar.Ve anahtar açılınca da önce 3. sonra 2. sonra 1. led sırayla söncek.

Burda 2.anahtar diye tabir ettigim kısmı yazılımsal olarak yapabiliyorum.1.anahtarlı bölgeyi ise pic kullanmadan da zaten yapıyorum.
Fakat burda bu 2 olay tek sistemde olcagı için işim zorlaşıyor.
Önce 1 .sonra 2.anahtarı kapattık ve sonrada 2.anahtarı geri açma olayına gelelim
1.anahtarı kapattık ledler kısık yandı diyelim  sonra arkasından 2.anahtarı da kapattık diyelim.bu durumda ne olcak.Ledler parlayarak yürüyerek yancak ve 3.led de yandıktan sonra o şekılde beklicekler.Sonuç itibariyle de her 3 ledde maksimum parlaklıkta yanmış olcak.
Daha sonra 2.anahtarı açtık diyelim2.anahtarı açtıgımda yukarıda tabir ettigim gibi ledler 3.den başlıcak söncekti ama o sırada 1.anahtar da kapalı oldugun için 3.led sönmicek.Sadece 3.led kısılacak arkasından 2.kısılacak arkasından 1.led kısılacak.

Bu işlemi sanırım röle kullanakta yapamam.Şayet 2.anahtar kapalıyken geri açıldıgında 3led aynı anda sönseydi ozaman sanırım röle ile yapılabilirdi.
Bunu ben hangi yöntemle yapabilirim?PWM,HPWM,Röle?Ve enaz 3 çıkış olcak 4 te olabilir?
Ve burda ledlerin + ucu direk güç kaynagına baglı.güç kaynagından 2 kol ayrılıyor.biri 7805 pici besledigi için 7805 e digeri ise ledlerin + ucuna gidiyor.

ete

İstediğin Basicde gayet güzel yapılabiliyor.

Aşağıda örnek programı veriyorum. Program ;
- PortB.0
- PortB.1
- PortB.2
- Portb.3
- PortB.4
pinlerine bağlı ledlere istediğin ayarda PWM uygular.

Kısıklık ayarlarını ben olayı görebilesin diye farklı yaptım.
Başla satırından sonra K(ırmızı) , Y(eşil) , M(avi), S(arı), B(eyaz) şeklinde isimlendirdiğim ledlere 0-100 arasında bir kısıklık ayarı (yada parlaklık ayarı) verebilirsin. 100 en parlak 0 en kısık olacak şekilde ayarlarsın.

Ete
'****************************************************************
'*  Name    : PWM-TMR0.BAS                                      *
'*  Author  : [ETE-EROLEC-ERO]                                  *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 3/2/2007                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
define osc 4
PORTA=0:portb=0
TRISB=0   '
TRISA=%00000000   '
'-----------------------------------------------------------------
@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_OFF              	'Watch Dog timer kapalı
@ DEVICE pic16F628, PWRT_ON             	'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF          'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_off           	 'MCLR pini kullanılmıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-----------------------------------------------------------------
'-------------------------------------------------------------------------
ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%00001000   'Pull up dirençleri İPTAL- Bölme oranı 1/1
INTCON=%10100000  'Kesmeler aktif ve TMR0 kesmesi aktif

CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'----------------------------------------------------------------------------
 K   var byte  'kırmızı
 Y   var byte  'yeşil
 M   VAR BYTE  'Mavi
 S   var byte  'sarı
 B   var byte  'beyaz 
 KH  VAR BYTE
 YH  VAR BYTE
 MH  VAR BYTE   
 SH  VAR BYTE
 BH  VAR BYTE
 I   VAR BYTE
 W   var bit
'-----------------------------------------------------------------------------
CLEAR  'tüm değişkenler sıfırlandı
'PAUSE 200
TMR0=254
K=50
Y=50
M=50
S=50
B=50
KH=K
Yh=Y
MH=M
SH=S
BH=B

'-----------------------------------------------------------------------------

BASLA:
K=10  'Kırmızı led kısıklık ayarı 100 en parlak
Y=20  'yeşil led kısıklık ayarı
M=30  'mavi led kısıklık ayarı
S=40  'sarı led kısıklık ayarı
B=50  'beyaz led kısıklık ayarı
'--------------------------------------B + ve - sonu          
GOTO BASLA


DISABLE
KESME:
         KH=KH-1
         IF KH=0 then 
            IF PORTB.0=1 THEN
              KH=100-K
            ELSE
              KH=K
            ENDIF    
            PORTB.0=1-PORTB.0
         endif
       
       YH=YH-1    
       IF YH=0 THEN
          IF PORTB.1=1 then
            YH=100-y
          else
            yh=y
          endif
          PORTB.1=1-PortB.1    
        endif
       
         MH=MH-1
         IF MH=0 then
            IF PORTB.2=1 THEN             
              MH=100-M
            else
              MH=M
            ENDIF
            PORTB.2=1-PORTB.2
         ENDIF 
       
       sH=sH-1
       IF sH=0 then
          IF PORTB.3=1 THEN
            SH=100-S
          ELSE
            sH=s
          ENDIF    
          PORTB.3=1-PORTB.3            
       ENDIF
              
       BH=BH-1
       IF BH=0 THEN
          IF PORTB.4=1 THEN
            BH=100-B
          ELSE
            BH=B
          ENDIF    
         PORTB.4=1-PORTB.4
       endif     
          
      TMR0=254
      INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
      RESUME
      ENABLE
      
END
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Muyat

Ete abi.
Sen bu kodları yazarken aynı dakikalardad ben de hemen o sırada diger arkadaşların yazdıkları için yenı bir açıklama daha yaptım.Dolaysıyla şu kodları yazdıgın mesajın üstünde bi mesajım daha var.Acaba orayı da okudunuzmu?Çünkü burda 2 anahtarında kapalı olma ve arkasından 2.anahtarın açılma durumu söz konusu.
Yani basicle ordakileri yapmak mümkünmü?Bide şu an yazdıklarını anlamaya çalışıyorum.Bi taraftan derslerine bakıyorum.
Fakat şu yazdıgın kodlarda pwm ve HPWM komutu göremiyorum.Yanı sen PWM kullanmadan mı yaptın?
Çok kısa bi açıklama yapabilirmisin?
Mesela
KH=K:KL=100-KH bu ifadenın anlamı nedir
ve K=50
Y=50
M=50
S=50
B=50
Burdaki degerler neden 50 dir?
Ve anladıgım kadarıyla burda hem kesme hemde pwm komutlarına iyi hakim olmak gerekiyor

ete

Kodları biraz daha kısalttım son halini alsan daha uygun olur.

Sistem çok basit. PWM ne demektir T (peryod) süresi sabit kalmak şartı ile iş zaman (Duty) nın değiştirilmesi anlamına geliyor. % hesabı uygulayarak T süresini 100/e böldüm. Bu benim kesme yaratma sürem oldu. Yani her T/100 (yaklaşık olarak çünki komut gecikmeleride var) sürsinde bir kesme oluşturuyorum.
Şimdi açıklamamızı Kırmızı led üzerinden vereyim. K=10 dediğim zaman bu Kırmızı ledin HIGH süresini kapsıyor. Yani 10 defa kesme oluşunca K konum değiştimesi ardından ise 100-K=90 olduğundan bu sefer 90 defa kesme oluşunca K nın konum değiştirmesi gerekiyor bunu sağladım.
BU şekilde bütün B portuna PWM yaptırılabileceği gibi istediğin bir pine de PWM yaptırılabilir.
Anladığın üzere ne PWM nede HPWM komutlarını kullandım.

Bütün ledler kesmeler sayılarak kendi süreleri kadar HIGH da ve yine 100-HIGH süresi kadar da LOW da kalarak PWM sinyalini oluşturuyorlar.

Buton meselesine gelince,
Tek bir pine bağlı butonun kontrolü için bit bazında kontrol gerekir.
Örnek IF PORTA.0=0 then .... yani PortA.0 da bağlı buton (basılınca LOW oluyor) basılmış ise şunu yap.
Şayet birden fazla butonun basılı olup olmadığını kontrol edecek isen Byte bazında kontrol yapman gerekir. Şimdi PoRTA.0 ve PORTA.1 de bağlı butonların kontrolünü yapalım.
IF PORTA AND %00000011=%00000011 then iki butonada basılmış demektir.
Başlangıç satırından önce verdiğim 50 değerleri ledlerin açılış parlaklıkları. Gerekirse kaldırabilirsin gerekli değil o satırlar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

altugduranoglu

Öncelikle merhabalar.Aranıza yeni katıldım.Deneyim ve tecrübelerinize ihtiyacım var.
Ben pic pwm kontrölü ile arabanın iç lambasını, sis farlarını ve arabanın kapı açma kolunun oraya bağlayacagım ledleri kontrol etmek pwm ile led efekti vermek istiyorum. Kafamdaki sistemi basitce açıklıyım.
Oto Alarm ve merkezi kilit sistemleri hakkında az çok elektronik bilgim var.Şimdi araçların merkezi kilidini kapı açma kapama yı tetik yada anahtar olarak düşünürsek, kapıyı kumandadan actıgımızda merkezi kilit anahtar görevi görererek pic'e sinyal vericek otonun iç lambaları pic ile normal bir şekilde yanıcak kapı kolunun iç kısmına bagladıgımız ledler patlama efekti vererek artarak yanıcak 10 saniye sonra azalarak sönücek. Aynı sekilde arabayı anahtardan kitledigimizde sisler ve parklar 10 - 15 saniye yanıp sönücek bu sebeble eve giderken sisler bize eşlik edicek. yeni model arabalarda bu sistemin adı follow me home galiba. Böyle bir sistem düşünüyorum.
Fikir versin diye video koyuyorum. http://video.yahoo.com/watch/7985118/21163167
Basit olarak düşünürsek anahtardan (açma) tetik geldiginde 5 led (örn. 4 kapı kolu + iç lamba) bu videodaki veya benzer efekti pwm ile vererek yanıcak 10-15 saniye sonra azalarak sönücek. Kapama tetik geldiginde 2 led efektsiz sürekli yanıcak 15 saniye yanıp azalarak söncek (örn.sisler ve parklar).
Şimdi elimizde olanlar 2 adet tetik anahtar. kapı acma kapama.
Mekatronik cıkışlıyım.
Mekanik olsun Elektronik olsun bilgim yazılım azda olsa bilgim  var. Pic programlayıcı plaket perhidrol hersey hazırda :D sadece yazılım ve pwm konusunda eksiklerim var.
Ete arkdasımızın yaptığı yazılımı inceledim benim projeme benziyor pwm var efekt için bir türlü hexe ceviremedim. derleyici hep hata verdi. Isıs te devre ufaktan bi devre kurup sizlerinde yardımı ile projemi gercekleştirmek istiyorum pic ve yazılıma hakim olmak geliştirmek istiyorum. Hazıra konmak değil kendim bişiler yapmaktır öenmli olan. Önerilerinizi bekliyorum. Şimdiden Teşekkürler...

subram

burasının yanlış yer olduğunu biliyorum ama ben bir sorim; 16f876 da asm kodlarla ledlerin parlaklığını arttırıp azaltan bir program yazmaya çalışıyorum. Basicde yapabiliyorum ama asm de yapamadım.  bütün portlarındaki ledler yavaş yavaş yansın sonra yavaş yavaş sönsün! nasıl bir şey yapmalıyım?
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz