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

Başlatan SercanTEK, 08 Haziran 2018, 17:47:56

SercanTEK

08 Haziran 2018, 17:47:56 Son düzenlenme: 08 Haziran 2018, 22:17:00 SercanTEK
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.



Kod Seç
-- -------------------------------------------------------------------------
-- 
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 usis
 
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_TMR0IFthen        -- TMR0 Kesmesi İse
   Tarama
   TMR0            
Baslangic
   INTCON_TMR0IF   
false
 end 
if
end procedure
----------------------------------------------------------------

procedure Efekt(byte in sureis

 
-- 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/
Hayat sadece bir araçtır amaca ulaşmak için; Amaç ise Hayata birşeyler Katmaktır Benim için.. www.sercanca.com