guclusat

Tanınmış Üye
Süper Moderatör
The general hobby of modding has not bypassed and me. Two lights-emitting diode matrixes 5*8 was completely becoming in a five-inch compartment of a computer - that I had seen decided to make it on basis of spectrums’.

This is idea of the device: the computer program should allocate a spectrum of a sound signal and through a serial port to transfer the data to the microcontroller which in a dynamic mode serves a light-emitting diode matrix. I have looking for information on decomposition of a sound and conclude, to make it with the help of special library for processing a sound bass.dll with distribution what include set of examples in different programming languages of high level.

The microcontroller ATMEL AT90S2313 is the heart of device, if the program to alternate it is possible to use and ATTINY2313. The controllers accepts the data from a serial port and with the help of conclusions of port B and the additional decoder 74145 is deduce a spectrum on the light-emitting diode screen are collected from two matrixes. The unit of the coordination of levels COM - TTL is collected on to transistor. Brightness of a matrix depends from resistors R4-R11.

The device was collected on two printed-circuit-boards. Two light-emitting diode matrixes were established in the first, and other elements - in the second. The decorative overlay is cut out from an unused plastic of five-inch insert.

The program of the microcontroller was written in BASCOM-AVR. The managing program from the part of a computer is written on VISUAL BASIC. The program was altered from, example of library for processing a sound bass.dll. Some fragments were added to it. One of it’s program to be breaks and averages the spectrum in to 16 sites, others to process buttons of management to organize the virtual light-emitting diode screen and to receive data in a serial port. After had earned spectrum’s analyzer, has added watch in to and casual inclusion - deenergizing of light-emitting diodes. Spectrum’s analyzer had two operating modes - columns and points.

spectrum-clock%20matrix.GIF



spectrum-clock%20matrix4.jpg


spectrum-clock%20matrix5.jpg


spectrum-clock%20matrix6.jpg
Kod:
'****************************************************************************
'* Filename    : LED-MATRIX 5*16
'* Revision    : 1.0
'* Controller  : AT90S2313
'* Compiler    : BASCOM-AVR 1.11.8.3 DEMO
'* Author      : Rubashka Vasiliy , Ukraine , 2007
'* WWW         : http://ledeffects.net
'* Mail        : info@ledeffects.net
'****************************************************************************
'$regfile = "attiny2313.dat"
$regfile = "2313def.dat"
$crystal = 11059200
$baud = 9600
Const Buffer_size = 10
Config Portb = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output

Dim Base As Byte
Dim Temp As Byte
Dim Comdata As Byte
Dim Bad1 As Byte
Dim Bad2 As Byte
Dim Bad3 As Byte
Dim Bad4 As Byte
Dim Bad5 As Byte
Dim Bad6 As Byte
Dim Bad7 As Byte
Dim Bad8 As Byte
Dim Bad9 As Byte
Dim Bad10 As Byte
Dim Index As Byte
'Portb = &HFF
 ' Timer0 Interrupt
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0isr                                         ' Timer0 Auto Reload Timer Mode
Enable Timer0 ' Enable Timer0
Enable Interrupts ' Enable All Interrupt
Start Timer0 ' Start Timer0

Do
Base = Inkey()
If Base = "S" Then
Gosub Download
End If
Loop

Download:
For Index = 0 To 9
Temp = Waitkey()
 If Temp > "9" Then
     Temp = Temp - 7
 End If
 Shift Temp , Left , 4
  Comdata = Temp And &HF0
Temp = Waitkey()
 If Temp > "9" Then
     Temp = Temp - 7
 End If
  Temp = Temp And &HF
  Comdata = Comdata Or Temp

 Select Case Index
 Case 0 : Bad1 = Comdata
 Case 1 : Bad2 = Comdata
 Case 2 : Bad3 = Comdata
 Case 3 : Bad4 = Comdata
 Case 4 : Bad5 = Comdata
 Case 5 : Bad6 = Comdata
 Case 6 : Bad7 = Comdata
 Case 7 : Bad8 = Comdata
 Case 8 : Bad9 = Comdata
 Case 9 : Bad10 = Comdata
 End Select
 Next Index
Return

Timer0isr: ' Timer Interrupt 0
Portb = Bad1
Portd = &H00
Gosub Outd
Portb = Bad2
Portd = &H04
Gosub Outd
Portb = Bad3
Portd = &H08
Gosub Outd
Portb = Bad4
Portd = &H0C
Gosub Outd
Portb = Bad5
Portd = &H10
Gosub Outd
Portb = Bad6
Portd = &H14
Gosub Outd
Portb = Bad7
Portd = &H18
Gosub Outd
Portb = Bad8
Portd = &H1C
Gosub Outd
Portb = Bad9
Portd = &H20
Gosub Outd
Portb = Bad10
Portd = &H24
Gosub Outd
Portb = &H00
Return

Outd:
Waitus 100
Return
 

Eklentiler

Son düzenleme:

Spectrum Analyzer + Digital Watch

Bu devre, ses spektrum analizörü (spektrum analizörü) ile dijital saat fonksiyonunu bir araya getiren hibrit bir tasarımdır. Önceki paylaştığımız analog filtreli modellere göre daha modern bir yapı sunar.

Öne Çıkan Özellikler:

  • Çift Fonksiyon: Hem müzik ritmine göre hareket eden bir spektrum analizörü hem de zamanı gösteren bir saat olarak çalışır.
  • Kategori: Proje, forumun "Pic Uygulama Ve Devreleri" bölümünde yer almaktadır; bu da devrenin bir mikrodenetleyici (muhtemelen PIC serisi) tarafından kontrol edildiğini göstermektedir.
  • Görsel Sunum: Diğer benzer konularla (örneğin "Audio Spectrum Monitor") kıyaslandığında, saat fonksiyonu bu projeyi daha dekoratif ve işlevsel bir masaüstü cihazı haline getirmektedir.
elimizdeki donanım (ATtiny2313) kısıtlı bir hafızaya (2KB) sahip olsa da, mevcut devre üzerinde donanımsal hiçbir değişiklik yapmadan sadece yazılımı "akıllı" hale getirerek bu 5x16 paneli bir "canavara" dönüştürebiliriz.

Mevcut kod sadece dışarıdan veri bekleyen pasif bir köprü. Biz bunu kendi başına kararlar veren, animasyon üreten bir sistem haline getirebiliriz. İşte yapabileceğimiz seviye atlatacak özellikler:

1. Dahili Karakter Kütüphanesi (Font Engine)​

Şu anki yazılımda dışarıdan her sütunun bilgisini tek tek göndermen gerekiyor. Yazılımın içine bir EEPROM veya DATA tablosu ekleyerek standart harfleri (A-Z, 0-9) tanıtabiliriz.
  • Özellik: Sen seri porttan sadece "MERHABA" yazarsın, işlemci bunu kendi hafızasındaki fontlarla 5x16'lık matris verisine çevirir.

2. Kayan Yazı (Scrolling Text) Fonksiyonu​

Statik görüntü yerine metni sağdan sola akıtabiliriz.
  • Yazılım Hilesi: Bir "Sanal Ekran" (Virtual Buffer) oluştururuz. Yazı bu tampon bellekte durur, her Timer kesmesinde veriyi 1 bit sola kaydırıp ekrana basarız. Böylece 16 sütuna sığmayan uzun cümleleri bile okutabiliriz.

3. Animasyon ve Geçiş Efektleri​

Kodun içine küçük matematiksel döngüler ekleyerek şu efektleri donanımsız yapabiliriz:
  • Fade In/Out: LED'lerin parlaklığını Waitus süreleriyle oynayarak (Yazılımsal PWM) yavaşça artırıp azaltabiliriz.
  • Perde Efekti: Yazının yukarıdan aşağıya veya ortadan yanlara açılmasını sağlayacak lojik kapı döngüleri ekleyebiliriz.

4. Akıllı Saat ve Isı Paneli Modu​

Eğer bilgisayara bağlı kalacaksa, bilgisayardan sadece saati ve işlemci sıcaklığını alan minik bir servis yazarız.
  • Özellik: Bilgisayarın CPU sıcaklığı arttığında LED'ler daha hızlı yanıp sönerek görsel bir alarm verir.

5. Yazılımsal Parlaklık Kontrolü (Dimming)​

Gece göz almasın diye seri porttan gelen bir komutla (B=50 gibi) tarama süresini kısaltıp LED'lerin parlaklığını %10 ile %100 arasında yazılımla ayarlayabiliriz.

Peki, Kodda İlk Ne Yapılmalı?

Mevcut Do-Loop içindeki Download rutinini değiştirip, gelen veriyi doğrudan ekrana basmak yerine bir String (Metin) olarak almalıyız.

Örnek Mantık:
Kod:
' Sahte kod mantığı
Do
   Input "Yazi Gir:", MyText  ' Seri porttan metni al
   Call MetniMatriseCevir(MyText) ' Hafızadaki font tablosundan harfleri bul
   Call KaydirmaEfekti() ' Ekranda sağdan sola akıt
Loop
 
ATtiny2313, eski AT90S2313'ün doğrudan halefidir (yani gelişmiş versiyonudur). Bacak bağlantıları (pinout), komut seti ve çalışma mantığı %100 aynıdır. Yani devre şeması üzerinde tek bir kablo bile değiştirmene gerek kalmaz.

Ancak yazılımı yüklerken şu iki küçük farka dikkat etmen gerekir:

1. Yazılımdaki Kayıt Dosyası (Regfile)​

Eğer elindeki fiziksel çip eski AT90S2313 ise kodun en başına şunu yazmalısın:$regfile = "2313def.dat"

Eğer yeni nesil ATtiny2313 kullanıyorsan:$regfile = "attiny2313.dat"

2. Sigorta Ayarları (Fuse Bits)​

  • AT90S2313: Harici kristal ile çalışır, özel bir ayar istemez.
  • ATtiny2313: Fabrika çıkışı "Dahili 1MHz" hızında gelir. Eğer devrende 11.0592 MHz kristal takılıysa, programlayıcıdan (progrisp vb.) "External Crystal" seçeneğini işaretlemelisin. Yoksa yazı çok yavaş akar.
Usta, foruma yakışacak, içinde A'dan Z'ye ve 0-9'a kadar tüm karakterlerin tanımlı olduğu, tak-çalıştır halindeki tam kodu hazırladım. Bu kod, elindeki devreyi seri porttan bağımsız, akıllı bir kayan yazı tabelasına dönüştürür.

5x16 LED Matrix Akıllı Kayan Yazı Tabelası (BASCOM-AVR)

Bu proje, klasik 5x16 LED Matrix devrelerini (AT90S2313 veya ATtiny2313) birer "Kayan Yazı" paneline dönüştürür. Mevcut donanım şemanızı değiştirmeden, sadece bu yazılımı yükleyerek istediğiniz metni sağdan sola akıtabilirsiniz.

Yazılım Özellikleri:

  • Dahili Font: A-Z ve 0-9 arası tüm karakterler tanımlıdır.
  • Hız Ayarı: Kod içerisindeki geciktirme ile yazı hızı ayarlanabilir.
  • Donanım Uyumu: PortB (Sütunlar), PortD (Satır Tarama) yapısına uygundur. Yazılım ektedir.
 

Eklentiler

BASCOM-AVR ile yazdığımız bu kodu mikrodenetleyiciye (AT90S2313 veya ATtiny2313) yüklemek için izlemen gereken yol oldukça basit ama birkaç kritik adım var:

Yükleme Süreci ve Dosya Formatı

Yazdığımız bu kod "kaynak kod"dur (Source Code). Mikrodenetleyiciler bu metni doğrudan okuyamazlar. Bu yüzden kodu makine diline, yani .HEX formatına dönüştürmen (derlemen) gerekir.

1. HEX Dosyasına Dönüştürme (Derleme)

  • Verdiğim kodu BASCOM-AVR programına yapıştır.
  • Klavyeden F7 tuşuna bas veya üst menüdeki "Compile" (Derle) butonuna tıkla.
  • Eğer kodda bir yazım hatası yoksa, BASCOM otomatik olarak kodun bulunduğu klasöre projenin adıyla bir .hex dosyası oluşturacaktır. İşte işlemciye asıl yükleyeceğimiz dosya budur.

2. İşlemciye Yükleme (Programming)

Oluşan bu .hex dosyasını işlemciye basmak için bir programlayıcı cihaz (USBasp, AVRISP mkII vb.) ve bir yükleme yazılımı (ProgISP, AVRDUDE veya Extreme Burner) kullanmalısın.
  • Programlayıcıyı bilgisayara ve devreye bağla.
  • Yazılımı aç, işlemci modelini (AT90S2313 veya ATtiny2313) seç.
  • "Load Flash" diyerek BASCOM'un oluşturduğu o .hex dosyasını seç.
  • "Write" veya "Auto" butonuna basarak yüklemeyi tamamla.

En Kritik Nokta: Fuse Bits (Sigorta Ayarları)

Usta, devrenin hızı ve çalışması için burası çok önemli. Eğer bunu yapmazsan yazı ya hiç akmaz ya da kaplumbağa hızında gider:

  • Kristal Ayarı: Devrende 11.0592 MHz kristal takılı olduğu için, yükleme programında (örneğin ProgISP) sigorta ayarlarından "External Crystal" (Harici Kristal) seçeneğini seçmelisin.
  • Divided by 8 (CKDIV8): Eğer ATtiny2313 kullanıyorsan, fabrikasyon olarak hızı 8'e bölen bir ayar aktiftir. Bunu mutlaka devre dışı (uncheck) bırakmalısın. Yoksa işlemci 11 MHz yerine yaklaşık 1.3 MHz hızında çalışır ve görüntü bozulur.

Özetle:

Dönüştürmek için ekstra bir programa ihtiyacın yok; BASCOM-AVR içinde F7'ye basman yeterli. O sana tertemiz bir HEX dosyası verecek. Onu da her zaman kullandığın yükleme yöntemiyle işlemciye gönderebilirsin.
 
Geri
Yukarı