Sercanca Çözümler..

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

08.06.2018
377
Jalv2 – 74HC595 Shift PWM ile Karaşimşek Efekti

İnternette gezerken Jalv2 ile yeni tanıştığım dönemde yapmış olduğum 32 Ledli karaşimşek devresine denk geldim. Kodları ve devreye bakınca ne kadar amatörce yaptığımı fark ettim. İçimde birden güncelleme isteği uyandı. Yapıp kullanacağımdan değil ama belki birilerinin işine yarar diye umut ediyorum.

Daha önce yaptığım devrede orjinal efekt değilde düz yanan ve sağ sola gezen bir efekt vardı. Netten orjinal efekti nasıl yaparım diye araştırırken karşıma Shift PWM konusu çıktı. Özellikle “picproje.org” üyelerinden Ferhat YOL arkadaşımızın yazdığı yazıya denk geldim.

Bknz : http://arectron.com/yazilim/stm32f103-74hc595-ile-shift-pwm.html

Kendisi STM32F103 kullanarak 74HC595 ile Shift PWM uygulamasının nasıl yapılacağını yazmış. Kendisine buradan teşekkürler.

Kullandığı ARM mcu 32 bit olduğu için gayet hızlı. Ama ben PIC ailesinden ufak birşey kullanmayı düşündüğüm için algoritmada farklar yapmam gerekti. Malzeme kutumda 12F683 olduğu için denemelerimi onunla yapmaya karar verdim.

Öncelikle Shift PWM nasıl çalışır ona değinelim.

Bildiğiniz gibi 74HC595 seri giriş paralel çıkış bir kaydırmalı kaydedici entegredir. Özellikle led animasyon devrelerinde, kayan yazılarda çok sık kullanılır. En önemli özelliği veri yüklendikten sonra onu çıkışlara aktarmak olan Latch pinin olmasıdır. Farklı bir modeli olan 74ls164 te bu özellik olmadığı için bazı uygulamalarda özellikle 74HC595 tercih sebebidir.

Eğer 74HC595 ile ShiftPWM yapmak istiyorsak her pinin Lojik 1 veya lojik 0 olma durumunu kontrol etmemiz gerekiyor. Buda yüksek hız isteyen bir algoritmadır.

Mantık olarak istenilen duty değerine göre ilgili pini 1 ya da 0 olarak güncelleyeceğiz. Bu sayede göz yanılması olarak kısık yanan bir led elde ederiz.

Öncelikle Devremizi aşağıdaki gibi kuralım.

Dikkat etti iseniz Kristal değerini 20Mhz olarak seçtim. öncesinde 4-8-16 Mhz denemelerimde istediğim sonucu elde edemedim. Kullandığım PIC 8 bit ve yazdığım algoritma yüzünden olsa gerek en uygun Kristal değeri 20 Mhz olarak gözüküyordu.

Yazılım tarafında TMR0 kesmesini ayarlamak için “http://eng-serve.com/pic/pic_timer.html” sitesinden yardım aldım. Gerekli değerleri girince size ilgili registerlerin nasıl olacağını ve TMR0 için başlangıç değerini gösteriyor.

Ferhat uygulamasında TMR0 için 100 hz , 39 us olacak şekilde kesme yeterli demiş. Ama benim uygulamamda 238Khz ve 4 us uygundu. Belki ben yanlış algoritma kurmuş olabilirim. Ya da kullandığım PIC ‘ in kabiliyeti bu kadar olabilir.

Kesme ve Tarama yordamları

Yukarıdaki Kod öbeğinde Tara isimli bir prosedür yer almaktadır. Aynı zamanda kesme oluştuğunda işlemci bu prosedürü çalıştırmaktadır. Tara prosedürü çalıştığında Tarama isimli alt prosedüre dallanmaktadır.

Tarama prosedüründe ise verilen duty değer dizisi sürekli karşılaştırılmakta ve ilgili bit 1 yada sıfır yapılarak 74HC595‘e aktarılmaktadır.

Her prosedür çağrıldığında Duty değerinin max 254 olacak şekilde sürekli değeri artmaktadır. Artan Duty değeri ile dizi de verilen değerin karşılaştırılması sağlanarak istenilen Ledin parlaklığı değiştirilmektedir. Çok geniş bir yelpazemiz yok ama LED uygulamalarında işimizi görecektir.

Yazılımın Tamamı aşağıdaki gibi.

Devrenin Kurulmuş Hali.

8 çıkışımız olsa da Ben ledleri çifter çifter bağladığım için 16 ledli elde ettim. Üçerli bağlarsanız bence daha güzel olacaktır diye düşünüyorum.

Devrenin Çalışma Videosu :

Kaynak Dosyalar : 12F683-20

Pass : sercanca.com

Bu Uygulamada Neler Öğrenebiliriz ? 

  • Jalv2 dilinin ile temel kullanımı
  • Jalv2 dilinde TMR0 kesmesinin kullanımı
  • Jalv2 dilinde Shift register kullanımı
  • Jalv2 dilinde Shift PWM kullanımı
  • Jalv2 dilinde 12F683 kullanımı ve sigorta ayarları

Başka bir yazıda görüşmek üzere

Sercan TEK

BİR YORUM YAZIN

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ZİYARETÇİ YORUMLARI - 2 YORUM
  1. Haydar dedi ki:

    Bende gölgeli arıyordum isabet olmuş. yalnız jalv2 den anlamıyorum başka dilde örnek yok mu ?

    1. Sercan TEK dedi ki:

      Ben Jalv2 kullanıyorum. Eğer başka dilde yazmak isterseniz bu yazıyı referans olarak kullanın.

Yayımlanan tüm yazılar Sercan TEK tarafından yazılmaktadır. İzinsiz kullanımı yasaktır.