INHOUDSOPGAWE:

Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 te koppel met ATtiny85 -mikrobeheerder: 7 stappe
Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 te koppel met ATtiny85 -mikrobeheerder: 7 stappe

Video: Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 te koppel met ATtiny85 -mikrobeheerder: 7 stappe

Video: Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 te koppel met ATtiny85 -mikrobeheerder: 7 stappe
Video: Использование нескольких 4-значных светодиодных дисплеев TM1637 с Arduino 2024, Julie
Anonim
Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 met ATtiny85 -mikrokontroleerder te koppel
Hoe om 'n MAX7219 -aangedrewe LED -matriks 8x8 met ATtiny85 -mikrokontroleerder te koppel

Die MAX7219-kontroleerder word vervaardig deur Maxim Integrated, 'n kompakte, seriële invoer/uitset gemeenskaplike katode-skermbestuurder wat mikrobeheerders tot 64 individuele LED's kan koppel, 7-segment numeriese LED-skerms van tot 8 syfers, staafgrafieke, ens. -skyfie is 'n BCD-kode-B-dekodeerder, multiplex-skanderingskringe, segment- en syferbestuurders en 'n 8 × 8 statiese RAM wat elke syfer stoor.

Die MAX7219 -modules is baie handig om te gebruik met mikrobeheerders soos ATtiny85, of in ons geval die Tinusaur Board.

Stap 1: Die hardeware

Die hardeware
Die hardeware
Die hardeware
Die hardeware

Die MAX7219 -modules lyk gewoonlik so. Hulle het 'n invoerbus aan die een kant en 'n uitsetbus aan die ander kant. Hiermee kan u 2 of meer modules, d.w.s. die een na die ander, koppel om meer ingewikkelde opstellings te skep.

Die modules wat ons gebruik, kan met 5 klein springers in 'n ketting verbind word. Sien die prentjie hieronder.

Stap 2: Pinout en seine

Die MAX7219 -module het 5 penne:

  • VCC - krag (+)
  • GND-gemaal (-)
  • DIN - Data -invoer
  • CS - Chip select
  • CLK - Klok

Dit beteken dat ons 3 penne aan die ATtiny85 -mikrokontroller se kant nodig het om die module te beheer. Dit sal wees:

  • PB0 - gekoppel aan die CLK
  • PB1 - gekoppel aan die CS
  • PB2 - gekoppel aan die DIN

Dit is voldoende om aan te sluit op die MAX7219 -module en dit te programmeer.

Stap 3: Die protokol

Die protokol
Die protokol

Dit is relatief maklik om met die MAX7219 te kommunikeer - dit gebruik 'n sinchrone protokol wat beteken dat daar vir elke databit wat ons stuur 'n kloksiklus is wat die teenwoordigheid van die databit aandui.

Met ander woorde, ons stuur 2 parallelle rye na stukkies - een vir die klok en 'n ander vir die data. Dit is wat die sagteware doen.

Stap 4: Die sagteware

Die sagteware
Die sagteware

Die manier waarop hierdie MAX7219 -module werk, is soos volg:

  • Ons skryf grepe na sy interne register.
  • MAX7219 interpreteer die data.
  • MAX7219 beheer die LED's in die matriks.

Dit beteken ook dat ons nie die hele tyd deur die verskeidenheid LED's hoef te draai om dit te verlig nie - die MAX7219 -beheerder sorg daarvoor. Dit kan ook die intensiteit van die LED's beheer.

Om die MAX7219 -modules op 'n gerieflike manier te gebruik, benodig ons 'n biblioteek met funksies om hierdie doel te bereik.

Eerstens benodig ons 'n paar basiese funksies om na die MAX7219 -registers te skryf.

  • Skryf 'n greep na die MAX7219.
  • Skryf 'n woord (2 grepe) na die MAX7219.

Die funksie wat een byte aan die beheerder skryf, lyk soos volg:

leegte max7219_byte (uint8_t data) {vir (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Stel CLK op LAAG as (data & 0x80) // Masker die MSB van die data PORTB | = (1 << MAX7219_DIN); // Stel DIN op HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Stel DIN op LAAG PORTB | = (1 << MAX7219_CLK); // Stel CLK in op HOOG data << = 1; // Skuif na links}}

Noudat ons grepe na die MAX7219 kan stuur, kan ons begin om opdragte te stuur. Dit word gedoen deur 2 byes te stuur - 1ste vir die adres van die interne register en die 2de vir die data wat ons wil stuur.

Daar is meer as 'n dosyn register in die MAX7219 -beheerder.

Die stuur van 'n opdrag, of 'n woord, stuur basies 2 opeenvolgende grepe. Die implementering van die funksie is baie eenvoudig.

void max7219_word (uint8_t address, uint8_t data) {PORTB & = ~ (1 << MAX7219_CS); // Stel CS op LOW max7219_byte (adres); // Stuur die adres max7219_byte (data); // Stuur die data PORTB | = (1 << MAX7219_CS); // Stel CS op HOOG PORTB & = ~ (1 << MAX7219_CLK); // Stel CLK op LAAG}

Dit is belangrik om hier te let op die lyn waar ons die CS -sein na HOOG terugbring - dit is die einde van die ry - in hierdie geval die einde van die opdrag. 'N Soortgelyke tegniek word gebruik om meer as een matriks wat in 'n ketting gekoppel is, te beheer. Volgende stap, voordat ons die LED's aan- en uitskakel, is om die MAX7219 -beheerder te initialiseer. Dit word gedoen deur sekere waardes na sekere registers te skryf. Vir die gemak kon ons die initialiseringsvolgorde in 'n skikking plaas tydens die kodering daarvan.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = Geen dekodeer 0x0a, 0x01, // Intensiteitsregister, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 om alle lyne te wys 0x0c, 0x01, // Sluitregister, 0x01 = normale werking 0x0f, 0x00, // vertoon-toetsregister, 0x00 = normale werking};

Ons hoef net die 5 opdragte hierbo in 'n volgorde as adres-/datapare te stuur. Volgende stap - 'n ry LED's aansteek.

Dit is baie eenvoudig - ons skryf net een opdrag waar 1ste byte die adres is (van 0 tot 7) en die 2de byte is die 8 bisse wat die 8 LED's in die ry verteenwoordig.

ongeldig max7219_row (uint8_t adres, uint8_t data) {if (adres> = 1 && adres <= 8) max7219_word (adres, data); }

Dit is belangrik om daarop te let dat dit slegs vir 1 matriks werk. As ons meer matrikse in 'n ketting verbind, sal hulle almal dieselfde data toon. Die rede hiervoor is dat ons na die stuur van die opdrag die CS -sein na HIGH terugbring, wat veroorsaak dat al die MAX7219 -beheerders in die ketting vashou en wys wat die laaste opdrag ook al was.

Aanbeveel: