İçindekiler:

ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır: 7 Adım
ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır: 7 Adım

Video: ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır: 7 Adım

Video: ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır: 7 Adım
Video: #Dot matrix display 2024, Temmuz
Anonim
ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır
ATtiny85 Mikrodenetleyici ile MAX7219 Driven LED Matrix 8x8 Arayüz Nasıl Yapılır

MAX7219 denetleyicisi Maxim Integrated tarafından üretilmiştir, kompakt, seri giriş/çıkış ortak katot ekran sürücüsüdür ve mikro denetleyicileri 64 ayrı LED'e, 8 haneye kadar 7 segmentli sayısal LED ekranlara, çubuk grafik ekranlara vb. bağlayabilir. -chip, bir BCD kod-B kod çözücü, mültipleks tarama devresi, segment ve rakam sürücüleri ve her rakamı saklayan 8×8 statik RAM'dir.

MAX7219 modülleri, ATtiny85 veya bizim durumumuzda Tinusaur Board gibi mikro denetleyicilerle kullanım için çok uygundur.

Adım 1: Donanım

Donanım
Donanım
Donanım
Donanım

MAX7219 modülleri genellikle böyle görünür. Bir tarafta giriş bus'ı ve diğer tarafta çıkış bus'ı var. Bu, daha karmaşık kurulumlar oluşturmak için 2 veya daha fazla modülü birbiri ardına zincirlemenize olanak tanır.

Kullanmakta olduğumuz modüller 5 adet küçük jumper ile zincir şeklinde bağlanabilmektedir. Aşağıdaki resme bakın.

Adım 2: Pinout ve Sinyaller

MAX7219 modülünün 5 pini vardır:

  • VCC – güç (+)
  • GND – toprak (-)
  • DIN – Veri girişi
  • CS – Çip seçimi
  • CLK – Saat

Bu, modülü kontrol etmek için ATtiny85 mikrodenetleyici tarafında 3 pime ihtiyacımız olduğu anlamına gelir. Bunlar:

  • PB0 – CLK'ya bağlı
  • PB1 – CS'ye bağlı
  • PB2 – DIN'e bağlı

Bu, MAX7219 modülüne bağlanmak ve programlamak için yeterlidir.

Adım 3: Protokol

Protokol
Protokol

MAX7219 ile iletişim nispeten kolaydır – senkronize bir protokol kullanır, bu da gönderdiğimiz her veri biti için o veri bitinin varlığını gösteren bir saat döngüsü olduğu anlamına gelir.

Başka bir deyişle, bitlere 2 paralel dizi göndeririz - biri saat için diğeri veri için. Yazılımın yaptığı budur.

4. Adım: Yazılım

Yazılım
Yazılım

Bu MAX7219 modülünün çalışma şekli şudur:

  • Dahili kaydına bayt yazıyoruz.
  • MAX7219 verileri yorumlar.
  • MAX7219, matristeki LED'leri kontrol eder.

Bu aynı zamanda, onları aydınlatmak için her zaman LED dizileri arasında dolaşmak zorunda olmadığımız anlamına gelir - MAX7219 denetleyicisi bununla ilgilenir. Ayrıca LED'lerin yoğunluğunu da yönetebilir.

Bu nedenle, MAX7219 modüllerini uygun bir şekilde kullanmak için bu amaca hizmet edecek bir işlev kitaplığına ihtiyacımız var.

Öncelikle MAX7219 yazmaçlarına yazabilmek için bazı temel fonksiyonlara ihtiyacımız var.

  • MAX7219'a bir bayt yazma.
  • MAX7219'a bir kelime (2 bayt) yazma.

Denetleyiciye bir bayt yazan işlev şöyle görünür:

void max7219_byte(uint8_t veri) { for(uint8_t i = 8; i >= 1; i--) { PORTB &= ~(1 << MAX7219_CLK); // (veri & 0x80) ise CLK'yı DÜŞÜK olarak ayarlayın // PORTB verisinin MSB'sini maskeleyin |= (1 << MAX7219_DIN); // DIN'i YÜKSEK olarak ayarlayın, aksi takdirde PORTB &= ~(1 << MAX7219_DIN); // DIN'i LOW PORTB olarak ayarlayın |= (1 << MAX7219_CLK); // CLK'yı YÜKSEK veriye ayarla <<= 1; // Sola kaydır } }

Artık MAX7219'a bayt gönderebildiğimize göre komutları göndermeye başlayabiliriz. Bu, dahili kaydın adresi için 1 ve göndermek istediğimiz veriler için 2 bayt gönderilerek yapılır.

MAX7219 denetleyicisinde bir düzineden fazla kayıt vardır.

Bir komut veya kelime göndermek, temelde 2 ardışık bayt göndermektir. Bunu uygulayan fonksiyon çok basit.

void max7219_word(uint8_t adresi, uint8_t verisi) { PORTB &= ~(1 << MAX7219_CS); // CS'yi LOW max7219_byte(adres) olarak ayarla // max7219_byte(data) adresini gönderiyoruz; // PORTB verilerinin gönderilmesi |= (1 << MAX7219_CS); // CS'yi YÜKSEK PORTB olarak ayarla &= ~(1 << MAX7219_CLK); // CLK'yı DÜŞÜK olarak ayarla }

Burada, CS sinyalini YÜKSEK'e geri getirdiğimiz satırı not etmek önemlidir - bu, dizinin sonunu gösterir - bu durumda, komutun sonu. Bir zincire bağlı birden fazla matrisi kontrol ederken benzer bir teknik kullanılır. Bir sonraki adım, LED'leri açıp kapatmaya başlamadan önce, MAX7219 denetleyicisini başlatmaktır. Bu, belirli kayıtlara belirli değerler yazılarak yapılır. Kolaylık sağlamak için, kodlarken başlatma dizisini bir diziye koyabiliriz.

uint8_t initseq = { 0x09, 0x00, // Kod Çözme Modu Kaydı, 00 = Kod çözme yok 0x0a, 0x01, // Yoğunluk Kaydı, 0x00.. 0x0f 0x0b, 0x07, // Tarama Sınırı Kaydı, 0x07 tüm satırları göstermek için 0x0c, 0x01, // Kapatma Kaydı, 0x01 = Normal Çalışma 0x0f, 0x00, // Ekran-Test Kaydı, 0x00 = Normal Çalışma };

Yukarıdaki 5 komutu sırayla adres/veri çiftleri olarak göndermemiz gerekiyor. Sonraki adım – bir sıra LED'leri yakmak.

Bu çok basittir – 1. baytın adres olduğu (0'dan 7'ye) ve 2. baytın sıradaki 8 LED'i temsil eden 8 bit olduğu bir komut yazıyoruz.

void max7219_row(uint8_t adresi, uint8_t verisi) { if (adres >= 1 && adres <= 8) max7219_word(adres, veri); }

Bunun yalnızca 1 matris için çalışacağını not etmek önemlidir. Bir zincire daha fazla matris bağlarsak, hepsi aynı verileri gösterecektir. Bunun nedeni, komutu gönderdikten sonra CS sinyalini HIGH'a geri getirmemizdir, bu da zincirdeki tüm MAX7219 kontrolörlerinin kilitlenmesine ve son komutun ne olduğunu göstermesine neden olur.

Önerilen: