74HC595 Shift PWM ile Karaşimşek Efekti - Jalv2

Başlatan ByTEK, 08 Haziran 2018, 14:47:56

ByTEK

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.



-- -------------------------------------------------------------------------
-- 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/