Indholdsfortegnelse:

Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller: 7 trin
Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller: 7 trin

Video: Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller: 7 trin

Video: Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller: 7 trin
Video: Sådan tilsluttes 2 Hue Switch til én pære 2024, Juli
Anonim
Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller
Sådan tilsluttes en MAX7219 drevet LED -matrix 8x8 med ATtiny85 mikrokontroller

MAX7219-controlleren er fremstillet af Maxim Integrated er en kompakt, seriel input/output fælles-katode-skærmdriver, der kan grænseflade mikrokontrollere til 64 individuelle lysdioder, 7-segment numeriske LED-displays på op til 8 cifre, søjlediagramdisplayer osv. Inkluderet på -chip er en BCD-kode-B-dekoder, multiplex-scanningskredsløb, segment- og cifferdrivere og en 8 × 8 statisk RAM, der gemmer hvert ciffer.

MAX7219 modulerne er meget bekvemme at bruge med mikrokontrollere som f.eks. ATtiny85, eller i vores tilfælde Tinusaur Board.

Trin 1: Hardware

Hardwareen
Hardwareen
Hardwareen
Hardwareen

MAX7219 modulerne ser normalt sådan ud. De har en inputbus på den ene side og outputbus på den anden. Dette giver dig mulighed for at kæde 2 eller flere moduler, dvs. efter hinanden, for at skabe mere komplicerede opsætninger.

De moduler, vi bruger, er i stand til at forbinde i en kæde ved hjælp af 5 små jumpere. Se billedet herunder.

Trin 2: Pinout og signaler

MAX7219 modul har 5 ben:

  • VCC - effekt (+)
  • GND-jord (-)
  • DIN - Datainput
  • CS - Chip select
  • CLK - Ur

Det betyder, at vi har brug for 3 ben på ATtiny85 -mikrokontrollersiden for at styre modulet. Det vil være:

  • PB0 - tilsluttet CLK
  • PB1 - forbundet til CS
  • PB2 - tilsluttet DIN

Dette er tilstrækkeligt til at oprette forbindelse til MAX7219 -modulet og programmere det.

Trin 3: Protokollen

Protokollen
Protokollen

Kommunikation med MAX7219 er relativt let - den bruger en synkron protokol, hvilket betyder, at for hver databit, vi sender, er der en urcyklus, der angiver tilstedeværelsen af denne databit.

Med andre ord sender vi 2 parallelle sekvenser til bits - en for uret og en anden for dataene. Dette er hvad softwaren gør.

Trin 4: Softwaren

Softwaren
Softwaren

Sådan fungerer dette MAX7219 -modul:

  • Vi skriver bytes til dets interne register.
  • MAX7219 fortolker dataene.
  • MAX7219 styrer lysdioderne i matrixen.

Det betyder også, at vi ikke hele tiden behøver at cirkulere gennem lysdioderne for at tænde dem - MAX7219 -controlleren tager sig af det. Det kunne også styre intensiteten af lysdioderne.

Så for at bruge MAX7219 modulerne på en bekvem måde har vi brug for et bibliotek med funktioner til at tjene dette formål.

For det første har vi brug for nogle grundlæggende funktioner for at skrive til MAX7219 -registre.

  • Skriver en byte til MAX7219.
  • Skrivning af et ord (2 bytes) til MAX7219.

Funktionen, der skriver en byte til controlleren, ser sådan ud:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Indstil CLK til LAV hvis (data & 0x80) // Masker MSB for dataene PORTB | = (1 << MAX7219_DIN); // Indstil DIN til HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Indstil DIN til LAV PORTB | = (1 << MAX7219_CLK); // Indstil CLK til HIGH data << = 1; // Skift til venstre}}

Nu hvor vi kan sende bytes til MAX7219, kan vi begynde at sende kommandoer. Dette gøres ved at sende 2 byes - 1. for adressen på det interne register og den anden for de data, vi gerne vil sende.

Der er mere end et dusin registre i MAX7219 -controlleren.

At sende en kommando eller et ord er stort set at sende 2 på hinanden følgende bytes. Funktionen, der implementerer, er meget enkel.

void max7219_word (uint8_t adresse, uint8_t data) {PORTB & = ~ (1 << MAX7219_CS); // Indstil CS til LOW max7219_byte (adresse); // Sender adressen max7219_byte (data); // Send data PORTB | = (1 << MAX7219_CS); // Indstil CS til HIGH PORTB & = ~ (1 << MAX7219_CLK); // Indstil CLK til LAV}

Det er vigtigt at notere linjen her, hvor vi bringer CS -signalet tilbage til HIGH - dette markerer afslutningen på sekvensen - i dette tilfælde slutningen på kommandoen. En lignende teknik bruges til at styre mere end en matrix forbundet i en kæde. Næste trin, før vi begynder at tænde og slukke LED'erne, er at initialisere MAX7219 -controlleren. Dette gøres ved at skrive bestemte værdier til bestemte registre. For nemheds skyld kunne vi, mens vi kodede det, sætte initialiseringssekvensen i et array.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = No decode 0x0a, 0x01, // Intensity Register, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 for at vise alle linjer 0x0c, 0x01, // Shutdown Register, 0x01 = Normal Operation 0x0f, 0x00, // Display-Test Register, 0x00 = Normal Operation};

Vi skal bare sende de 5 kommandoer ovenfor i en rækkefølge som adresse/datapar. Næste trin - belysning af en række lysdioder.

Dette er meget enkelt - vi skriver bare en kommando, hvor 1. byte er adressen (fra 0 til 7) og 2. byte er de 8 bits, der repræsenterer de 8 lysdioder i rækken.

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

Det er vigtigt at bemærke, at dette kun fungerer for 1 matrix. Hvis vi forbinder flere matricer i en kæde, viser de alle de samme data. Årsagen til dette er, at efter at vi har sendt kommandoen, bringer vi CS -signalet tilbage til HIGH, hvilket får alle MAX7219 -controllere i kæden til at låse og vise, hvad den sidste kommando var.

Anbefalede: