iyi çalışmalar,
IR kumanda ile RGB ledleri fet ile on-off yapmak ve 3 adet roleyide on-off olarak kontrol etmek için yola çıkmış idim.Sağolsun ete hocanın yardımlarıyla bunları yapmıştım problemsiz çalışıyorlar.Malüm IR kumanda RB0.Int.kullanarak bu kontrolleri yapıyor.Sonraki adımımda rgb ledlerin parlaklığını değiştirmek oldu.Yine ete hocanın ders notlarından yararlanarak tmr0 taşma kesme özelliğini kullanarak yazılımsal pwm sinyali elde ettim ve duty değerini butonla değiştirerek rgb ledlerin parklaklığı ile oynayabiliyorum.Buraya kadar sorun olmadı.Ledlerin parlaklığını butonla değilde, ır kumanda yardımıyla yapmaya çalıştığım zaman problemler başladı.Bir haftayı geçti denemediğim yöntem kalmadı.Burdan ve başka formlardan bir çok araştırma yaptım fikirler aldım nafile.
Problem:IR kumanda ile parlaklık ayarı yapmaya çalışırken pwm sinyalde bozulmalar çok oluyor(simülasyonda görüyorum bunu)Gerçek devrede denerken,scop imkanım olmadığı için analog ölçü aleti bağladım çıkışa.Ölçü aletinin ibresi bulunduğu yerde çok sekiyor.Proğramcılığım orta seviyelerde,çıkamadım işin içinden.
1-Benim yapmaya çalıştığım bu işi yazılımsal pwm ile yapabilmek mümkünmü? Mümkün değilse işlemci değiştirmem gerekecek.Ustalarımın yardımlarından dolayı şimdiden teşekkür ederim.
'****************************************************************
'* 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
Include "MODEDEFS.BAS"
PORTA=0
PORTB=0
TRISA=%00000000
TRISB=%00000111
'''-----------------------------------------------------------------------------
@ DEVICE pic16F628A 'işlemci 16F628
@ DEVICE pic16F628A, WDT_OFF 'Watch Dog timer kapalı
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılmıyor.
@ DEVICE pic16F628A, 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 aktif-wdt geçerli bölme oranı 1/1
INTCON=%10110000 'Kesmeler aktif TMR0 ve RB0/INT kesmeleri aktif
CMCON=7 '16F628 de komparatör pinleri iptal hepsi giriş-çıkış
DEFINE PULSIN_MAX 1200
SYMBOL IR_Goz=PORTB.0
SYMBOL ARTTIR=PORTB.1
SYMBOL AZALT=PORTB.2
R var byte
G var byte
B VAR BYTE
RH VAR BYTE
GH VAR BYTE
BH VAR BYTE
RL VAR BYTE
GL VAR BYTE
BL VAR BYTE
I VAR byte
W var bit
TAMAM VAR WORD 58
Tus Var byte 60
IR_AL var BYTE(32)62
X var Byte 100
SAY VAR WORD 102
ALDIM VAR BIT
CLEAR 'tüm değişkenler sıfırlandı
TMR0=243
R=50
G=50
B=50
RH=r
RL=100-rH
gh=g
gl=100-gH
bh=b
bl=100-bH
BASLA:
SAY=0
while ALDIM=0
SAY=SAY+1
''''-----------------------BUTON İLE ARTTIRMA AZALTMA--------------------------
IF ARTTIR=0 THEN
R=R+1
IF R=100 THEN R=99
GOSUB DELAY
ENDIF
IF AZALT=0 THEN
R=R-1
IF R<0 THEN R=1
GOSUB DELAY
ENDIF
'''-----------------------------------------------------------------------------
WEND
ALDIM=0
TUS=0
for X=0 to 7
IF IR_AL(16+X)>70 then TUS.0[X]=1 '16 bit den itibaren gelen 8 bit ise komut bitleri oluyor
next
'--------------------------IR KUMANDA İLE ARTTIRMA AZALTMA----------------------
IF TUS=25 THEN
R=R+1
IF R=100 THEN R=99
GOSUB DELAY
ENDIF
IF TUS=22 THEN
R=R-1
IF R<0 THEN R=1
GOSUB DELAY
ENDIF
GOTO BASLA
DELAY:
FOR I=0 TO 1000
NEXT
FOR I=0 TO 1000
NEXT
FOR I=0 TO 1000
NEXT
FOR I=0 TO 1000
NEXT
FOR I=0 TO 1000
NEXT
RETURN
DISABLE
KESME:
INTCON.5=1
IF INTCON.4=1 & INTCON.1=1 THEN
PULSIN IR_Goz,1,TAMAM
IF TAMAM >400 AND TAMAM<500 THEN
for X=0 to 31
pulsin IR_Goz,1,IR_AL(X) 'YALNZCA LOW BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
next
ALDIM=1
ENDIF
SAY=0
INTCON.1=0 'RB0/INT Bayrağı (flag) silindi.
' Resume 'geldiğin yere dön.
' Enable 'kesmeler yeniden aktif.
endIF
'''-----------------------------------------------------------------------------
IF INTCON.5=1 & INTCON.2=1 THEN
IF PORTA.1=1 THEN
RH=RH-1
IF RH=0 then
PORTA.1=1-PORTA.1
RH=R
endif
ELSE
RL=RL-1
IF RL=0 THEN
PORTA.1=1-PORTA.1
RL=100-Rh
ENDIF
ENDIF
ENDIF
TMR0=243
INTCON.2=0 'TMR0 Kesme bayrağı sıfırlandı
RESUME 'geldiğin yere dön.
ENABLE 'kesmeler yeniden aktif.
END
https://s2.dosya.tc/server17/lpo1vk/pwm.rar.html