Merhaba Arkadaşlar,
Geçmişte yaptığım bir uygulamayı güncelleyi hedeflerken Shift PWM olayını gördüm ve elimdeki imkanlar ile ufak bir uygulama hazırladım. Detayları Blog sitemde paylaştım.
@Mucit23 ayrıca teşekkür ederim.
(http://www.sercanca.com/wp-content/uploads/2018/06/Devre-semasi.png)
-- -------------------------------------------------------------------------
-- Baslık : 74HC595 Shift PWM Uygulaması ve Kuyruklu Karaşimşek Devresi
--
-- Yazar : www.sercanca.com - Sercan TEK
-- Compiler : jal jalv24q6 (compiled Oct 25 2016)
-- Tarih : 08.06.2018
-- -------------------------------------------------------------------------
include 12f683
pragma target clock 20_000_000
pragma target OSC HS
pragma target WDT DISABLED
pragma target BROWNOUT DISABLED
pragma target FCMEN DISABLED
pragma target IESO DISABLED
pragma target MCLR INTERNAL
OSCCON_SCS = 0
enable_digital_io() -- Tüm girişler ve çıkışlar Dijital
pin_a0_direction = output -- Enable
pin_a1_direction = output -- Data
pin_a2_direction = output -- Clock
const LED_Adet = 8
var byte LED[LED_Adet] = {0,0,0,0,0,0,0,0}
var byte duty = 1
----------------------------------------------------------------
-- Gecikme Alt Programı
----------------------------------------------------------------
procedure gecikme(word in us) is
for us loop
_usec_delay(7)
end loop
end procedure
-------------- 74HC595 için pin tanımlamaları ------------------
var volatile bit Clock is pin_a2
var volatile bit Enable is pin_a0
var volatile bit Data is pin_a1
----------------------------------------------------------------
-- Duty değerine göre shift registere Data Gönderir.
----------------------------------------------------------------
Procedure Tarama is
var byte dongu
for LED_Adet using dongu loop
-- Duty Değerini Dizideki değerle karşılaştır.
if (duty >= (LED[(LED_Adet-1)-dongu])) then
Data = false -- Data 0
else
Data = true -- Data 1
end if
Clock = high Clock = low -- 74hC595e gönder
end loop
Enable = high Enable = low -- Led çıkışa Aktarılsın.
duty = (duty + 1) % 255 -- Duty Değerini 1 Arttır.
end procedure
----------------------------------------------------------------
-- TMR0 Kesmesi Alt programı
----------------------------------------------------------------
-- Prescaler=1 Preset=235 Freq=238095.24Hz Period=0.000004 seconds
const Baslangic = 235
OPTION_REG_T0CS = 0
OPTION_REG_T0SE = 0
OPTION_REG_PSA = 1
OPTION_REG_PS2 = 0
OPTION_REG_PS1 = 0
OPTION_REG_PS0 = 0
INTCON_GIE = 1 -- tüm kesmelere izin verdik.
INTCON_TMR0IF = 0 -- Kesme bayrağını sıfırladık
TMR0 = Baslangic
INTCON_TMR0IE = 1 -- Timer0 kesmesini aktif edildi
procedure Tara is
pragma interrupt -- Kesme Alt Programları
var byte deger = 0
if (INTCON_TMR0IF) then -- TMR0 Kesmesi İse
Tarama
TMR0 = Baslangic
INTCON_TMR0IF = false
end if
end procedure
----------------------------------------------------------------
procedure Efekt(byte in sure) is
-- Soldan Sağa Yürü
LED[0]=254 gecikme(sure)
LED[0]=64 LED[1]=254 gecikme(sure)
LED[0]=16 LED[1]=64 LED[2]=254 gecikme(sure)
LED[0]=2 LED[1]=16 LED[2]=64 LED[3]=254 gecikme(sure)
LED[0]=0 LED[1]=2 LED[2]=16 LED[3]=64 LED[4]=254 gecikme(sure)
LED[1]=0 LED[2]=2 LED[3]=16 LED[4]=64 LED[5]=254 gecikme(sure)
LED[2]=0 LED[3]=2 LED[4]=16 LED[5]=64 LED[6]=254 gecikme(sure)
LED[3]=0 LED[4]=2 LED[5]=16 LED[6]=64 LED[7]=254 gecikme(sure)
LED[4]=0 LED[5]=2 LED[6]=16 LED[7]=254 gecikme(sure)
LED[5]=0 LED[6]=2 LED[7]=254 gecikme(sure)
LED[6]=0 LED[7]=254 gecikme(sure)
gecikme(sure)
-- Sağdan Sola yürü
LED[6]=254 LED[7]=64 gecikme(sure)
LED[5]=254 LED[6]=64 LED[7]=16 gecikme(sure)
LED[4]=254 LED[5]=64 LED[6]=16 LED[7]=2 gecikme(sure)
LED[3]=254 LED[4]=64 LED[5]=16 LED[6]=2 LED[7]=0 gecikme(sure)
LED[2]=254 LED[3]=64 LED[4]=16 LED[5]=2 LED[6]=0 gecikme(sure)
LED[1]=254 LED[2]=64 LED[3]=16 LED[4]=2 LED[5]=0 gecikme(sure)
LED[0]=254 LED[1]=64 LED[2]=16 LED[3]=2 LED[4]=0 gecikme(sure)
LED[0]=254 LED[1]=16 LED[2]=2 LED[3]=0 gecikme(sure)
LED[0]=254 LED[1]=2 LED[2]=0 gecikme(sure)
LED[0]=254 LED[1]=0 gecikme(sure)
end procedure
forever loop
Efekt(65)
end loop
Çalışma Videosu :
Kaynak : http://www.sercanca.com/jalv2-74hc595-shift-pwm-ile-karasimsek-efekti/