Mündəricat:

ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Edilir: 7 addım
ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Edilir: 7 addım

Video: ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Edilir: 7 addım

Video: ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Edilir: 7 addım
Video: LDmicro 3: PIC16F628A и Arduino Nano (программирование лестничной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Noyabr
Anonim
ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Olunur
ATtiny85 Mikrokontrolör ilə MAX7219 Sürücü LED Matrix 8x8 Necə İnterfeys Olunur

MAX7219 nəzarətçi, Maxim Integrated tərəfindən istehsal olunur, 64 fərdi LED-ə, 8-ə qədər 7 seqmentli rəqəmsal LED displeyə, bar-qrafik ekranlara və s. -chip, bir BCD kod-B dekoderi, multipleks tarama sistemi, seqment və rəqəmsal sürücülər və hər bir rəqəmi saxlayan 8 × 8 statik RAMdır.

MAX7219 modulları ATtiny85 və ya bizim vəziyyətimizdə Tinusaur lövhəsi kimi mikro nəzarətçilərlə istifadə etmək çox rahatdır.

Addım 1: Hardware

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

MAX7219 modulları ümumiyyətlə belə görünür. Bir tərəfdə giriş avtobusu və digər tərəfdə çıxış avtobusu var. Bu, daha mürəkkəb quruluşlar yaratmaq üçün bir -birinin ardınca 2 və ya daha çox modulu bağlamağa imkan verir.

İstifadə etdiyimiz modullar 5 kiçik atlayıcıdan istifadə edərək zəncirdə bağlana bilir. Aşağıdakı şəklə baxın.

Addım 2: Pinout və Siqnallar

MAX7219 modulu 5 sancağa malikdir:

  • VCC - güc (+)
  • GND-torpaq (-)
  • DIN - Məlumat girişi
  • CS - Çip seçin
  • CLK - Saat

Bu o deməkdir ki, modulu idarə etmək üçün ATtiny85 mikro nəzarətçi tərəfində 3 sancağa ehtiyacımız var. Bunlar olacaq:

  • PB0 - CLK ilə əlaqəlidir
  • PB1 - CS -yə qoşulur
  • PB2 - DIN -ə bağlıdır

Bu, MAX7219 moduluna qoşulmaq və onu proqramlaşdırmaq üçün kifayətdir.

Addım 3: Protokol

Protokol
Protokol

MAX7219 ilə əlaqə qurmaq nisbətən asandır - sinxron bir protokoldan istifadə edir, yəni göndərdiyimiz hər bir məlumat biti üçün həmin məlumat bitinin olduğunu göstərən bir saat dövrü var.

Başqa sözlə, bitlərə 2 paralel ardıcıllıq göndəririk - biri saat üçün, digəri isə məlumatlar üçün. Proqramın etdiyi budur.

Addım 4: Proqram təminatı

Proqram təminatı
Proqram təminatı

Bu MAX7219 modulunun işləmə qaydası belədir:

  • Daxili reyestrinə bayt yazırıq.
  • MAX7219 məlumatları şərh edir.
  • MAX7219, matrisdəki LEDləri idarə edir.

Bu o deməkdir ki, onları işıqlandırmaq üçün hər zaman LED -lərdən keçmək məcburiyyətində deyilik - MAX7219 nəzarətçisi bununla məşğul olur. LEDlərin intensivliyini də idarə edə bilər.

Beləliklə, MAX7219 modullarını rahat bir şəkildə istifadə etmək üçün bu məqsədə xidmət edəcək funksiyalar kitabxanasına ehtiyacımız var.

Birincisi, MAX7219 qeydlərinə yazmaq üçün bəzi əsas funksiyalara ehtiyacımız var.

  • MAX7219 -a bir bayt yazmaq.
  • MAX7219 -a bir söz (2 bayt) yazmaq.

Nəzarətçiyə bir bayt yazan funksiya belə görünür:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // CLK -ı LOW olaraq təyin edin, əgər (data & 0x80) // PORTB | = (1 << MAX7219_DIN) MSB məlumatlarını maska edin; // DIN -i YÜKSEK olaraq təyin edin PORTB & = ~ (1 << MAX7219_DIN); // DIN -ı LOW PORTB | = (1 << MAX7219_CLK) olaraq təyin edin; // CLK -ı YÜKSƏK məlumatlara təyin edin << = 1; // Sola sürüşdür}}

İndi MAX7219 -a bayt göndərə bildiyimiz üçün əmr göndərməyə başlaya bilərik. Bu, 2 byes göndərməklə edilir - 1 -ci, daxili reyestrin ünvanı və 2 -ci göndərmək istədiyimiz məlumatlar üçün.

MAX7219 nəzarətçisində birdən çox qeyd var.

Bir əmr və ya bir söz göndərmək, əsasən ardıcıl 2 bayt göndərməkdir. Bunu həyata keçirən funksiya çox sadədir.

etibarsız max7219_word (uint8_t ünvanı, uint8_t məlumatları) {PORTB & = ~ (1 << MAX7219_CS); // CS -ni LOW max7219_byte (ünvan) olaraq təyin edin; // max7219_byte ünvanını göndərmək (məlumatlar); // Məlumat göndərilməsi PORTB | = (1 << MAX7219_CS); // CS -ni HIGH PORTB & = ~ (1 << MAX7219_CLK) olaraq təyin edin; // CLK -ı LOW olaraq ayarlayın}

Burada CS siqnalını YÜKSƏ qaytaracağımız xətti qeyd etmək vacibdir - bu, ardıcıllığın sonunu bildirir - bu halda əmrin sonunu göstərir. Bənzər bir üsul, bir zəncirə bağlı birdən çox matrisi idarə edərkən istifadə olunur. LEDləri açmağa və söndürməyə başlamazdan əvvəl növbəti addım MAX7219 nəzarətçisini işə salmaqdır. Bu, müəyyən qeydlərə müəyyən dəyərlər yazmaqla edilir. Rahatlıq üçün, kodlaşdırarkən, başlatma ardıcıllığını bir sıra qoya bilərik.

uint8_t initseq = {0x09, 0x00, // Dekodlaşdırma Rejimi Qeydiyyatı, 00 = 0x0a, 0x01, // İntensivlik Qeydiyyatı, 0x00.. 0x0f 0x0b, 0x07, // Tarama Limitli Qeyd, 0x07 bütün sətirləri göstərmək üçün 0x0c, 0x01, // Bağlama Qeydiyyatı, 0x01 = Normal İş 0x0f, 0x00, // Göstər-Test Qeydiyyatı, 0x00 = Normal İşləmə};

Sadəcə yuxarıdakı 5 əmri ünvan/məlumat cütü olaraq ardıcıllıqla göndərməliyik. Növbəti addım - bir sıra LED -lərin işıqlandırılması.

Bu çox sadədir - biz yalnız 1 -ci baytın ünvanı (0 -dan 7 -ə qədər) və 2 -ci baytın 8 LED -i təmsil edən 8 bit olduğu bir əmr yazırıq.

etibarsız max7219_row (uint8_t ünvanı, uint8_t məlumatları) {if (ünvan> = 1 && ünvan <= 8) max7219_word (ünvan, məlumatlar); }

Bunun yalnız 1 matris üçün işləyəcəyini qeyd etmək vacibdir. Bir zəncirdə daha çox matris bağlasaq, hamısı eyni məlumatları göstərəcək. Bunun səbəbi, əmri göndərdikdən sonra CS siqnalını YÜKSƏK -ə qaytarmağımızdır ki, bu da zəncirdəki bütün MAX7219 idarəedicilərinin bağlanmasına və son əmrin nə olduğunu göstərməsinə səbəb olur.

Tövsiyə: