PWM kullanımı yardım

Başlatan einstain90, 25 Mart 2007, 18:51:29

einstain90

Arkadaşlar daha öncede böyle bir başlık açtım ama tam anlamı ile cevap veren olmadı şimdi ben pwm komutu ile bir lambayı yavaşca yakıp nasıl söndüre bilirim bana örenek kod yollayabilirmisiniz. Aynı şu videodaki şeye benzer birşey yapmaya çalışacağım.


http://www.youtube.com/watch?v=Zbsq13rcQbY&mode=related&search=
Her işte her zaman bir aksilik çıkar.Siz yeterki pes etmeyin...

sitenindelisi

Bir ledin ışık şiddetini ayarlamak ile rgb oluşturmak arasında ciddi farklar vardır. RGB için 3 farklı renkte ledi eş zamanlı olarak kontrol etmelisiniz. Kullanacağınız MCU size donanımsal olarak bu imkanı sağlayamıyor ise, sizin yazılımsal olarak yapmanız gerekir.
En basit hali ile 3 farklı değişken ve   rengin oluşması için ref alınacak ve çözünürlüğü belirleyecek olan min değere kurulu INT timer yeterli.

Örnek olarak bir renk belirleyin ve bu rengin duty değerleri R:30,G:40,B:80 olsun. Tam değer 100 üzerinden konuşuyorum. 1 birim bazında konuşursak istediğimiz rengin oluşması için;
R, 30 kesme sonunda durum değiştirmeli ve 70 kesme 0 olarak kalmalıdır,
G, 40 kesme sonunda durum değiştirmeli ve 60 kesme 0 olarak kalmalıdır,
B, 80 kesme sonunda durum değiştirmeli ve 20 kesme 0 olarak kalmalıdır.

Forumda RGB olarak aratırsanız, sanırım istediğinizi bulabilirsiniz. Örnek kodlar da olmalı.

einstain90

RGP nin aynısını istemiyorum benim öğrenmek istediğim sadece bir lambayı yavaşca yakıp söndürmek okadar . Sadece ama sadece bu kadar o kodu yazarsanız sevinirim.
Her işte her zaman bir aksilik çıkar.Siz yeterki pes etmeyin...

sitenindelisi

Benden hazır kod istemeyin. Siz yazmak için çaba sarfedin, başlayın, ben veya diğer arkadaşlar takıldığınız noktalarda yardımcı olalım.

XX_CİHAN_XX

Alıntı yapılan: "einstain90"Arkadaşlar daha öncede böyle bir başlık açtım ama tam anlamı ile cevap veren olmadı şimdi ben pwm komutu ile bir lambayı yavaşca yakıp nasıl söndüre bilirim bana örenek kod yollayabilirmisiniz. Aynı şu videodaki şeye benzer birşey yapmaya çalışacağım.


http://www.youtube.com/watch?v=Zbsq13rcQbY&mode=related&search=

Bu rgb(3 renk) pwm programı

Bu da senın ıstedıgın tek cıkıslı pwm programı:

;******************************************************
		LIST		P=16F876A
		INCLUDE		"P16F876A.INC"
;******************************************************
		CBLOCK		0x20
PWM_DUTY
LOW_PWM
HIGH_PWM
PWM_SAYAC
DLY1
DLY2
		ENDC
;******************************************************
#DEFINE		PWM_OUT		PORTC,0  ;pwm cıkısının baglandıgı pin
;******************************************************
		ORG			0x00
		GOTO		START
;******************************************************
START
		BSF			STATUS,5
		MOVLW		0x07
		MOVWF		ADCON1
		CLRF		TRISC
		BCF			STATUS,5
		CLRF		PORTC
		CLRF		PWM_SAYAC
;******************************************************
MAIN
		MOVF		PWM_SAYAC,W
		MOVWF		PWM_DUTY
		CALL		START_PWM
		INCF		PWM_SAYAC,F	
		CALL		DELAY
		GOTO		MAIN
;******************************************************
START_PWM
		MOVF		PWM_DUTY,W
		BCF			PWM_OUT
		BTFSC		STATUS,Z
		RETURN
		MOVWF		HIGH_PWM
		SUBLW		.255
		MOVWF		LOW_PWM
		BSF			PWM_OUT
		BTFSC		STATUS,Z
		RETURN
		DECFSZ		HIGH_PWM,F
		GOTO		$-1
		BCF			PWM_OUT
		DECFSZ		LOW_PWM,F
		GOTO		$-1
		RETURN
;******************************************************
DELAY
		MOVLW		.1
		MOVWF		DLY1
LOOP1
		MOVLW		.10
		MOVWF		DLY2
LOOP2
		DECFSZ		DLY2,F
		GOTO		LOOP2
		DECFSZ		DLY1,F
		GOTO		LOOP1
		RETURN
;******************************************************
		END

Bu kodlar portc,0 ı 0v dan 5v a kadar yukseltıyor sen bunu ıstedıgın sekılde degıstırebılırsın.
Oradakı delay gorsellık olsun dıye koyuldu senın programda kullanacagın kısım
MOVF		PWM_SAYAC,W
		MOVWF		PWM_DUTY
		CALL		START_PWM

Burasıdır.pwm_sayac regısterıne verılen sayıya gore c0 dan pwm cıkısı alırsın.Kolay gelsin..
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

BioOriented

MikroBasic'te hazır kütüphane sayesinde PWM çok kolay yapılıyor.

Örnek:
dim j as byte


  j     = 180           ' Initial j
  PWM1_Init(5000)        ' Initialize PWM module
  PWM1_Start             ' Start PWM

  while TRUE            ' endless loop
    Delay_ms(10)        ' wait 10ms
    Inc(j)
    PWM1_Change_Duty(j)  ' set new duty ratio
  wend