Innholdsfortegnelse:

Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller: 7 trinn
Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller: 7 trinn

Video: Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller: 7 trinn

Video: Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller: 7 trinn
Video: M#3 MAX7219 7-сегментные и матричные дисплеи | Аутсил Дев. ПЛК Мега 2024, Juli
Anonim
Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller
Hvordan koble til en MAX7219 drevet LED -matrise 8x8 med ATtiny85 mikrokontroller

MAX7219-kontrolleren er produsert av Maxim Integrated er en kompakt, seriell inngang/utgang felles-katodeskjermdriver som kan koble mikrokontrollere til 64 individuelle lysdioder, 7-segment numeriske LED-skjermer på opptil 8 sifre, stolpediagrammer osv. Inkludert på -chip er en BCD-kode-B-dekoder, multiplex skannekretser, segment- og sifferdrivere og en 8 × 8 statisk RAM som lagrer hvert siffer.

MAX7219 -modulene er veldig praktiske å bruke med mikrokontrollere som ATtiny85, eller i vårt tilfelle Tinusaur Board.

Trinn 1: Maskinvaren

Maskinvaren
Maskinvaren
Maskinvaren
Maskinvaren

MAX7219 -modulene ser vanligvis slik ut. De har en inngangsbuss på den ene siden og utgangsbuss på den andre. Dette lar deg kjede 2 eller flere moduler, dvs. etter hverandre, for å lage mer kompliserte oppsett.

Modulene vi bruker er i stand til å koble til en kjede ved hjelp av 5 små hoppere. Se bildet nedenfor.

Trinn 2: Pinout og signaler

MAX7219 -modulen har 5 pinner:

  • VCC - effekt (+)
  • GND-bakken (-)
  • DIN - Datainngang
  • CS - Chip select
  • CLK - Klokke

Det betyr at vi trenger 3 pinner på ATtiny85 -mikrokontrollersiden for å kontrollere modulen. De vil være:

  • PB0 - koblet til CLK
  • PB1 - koblet til CS
  • PB2 - koblet til DIN

Dette er tilstrekkelig for å koble til MAX7219 -modulen og programmere den.

Trinn 3: Protokollen

Protokollen
Protokollen

Kommunikasjon med MAX7219 er relativt enkelt - den bruker en synkron protokoll som betyr at for hver databit vi sender er det en klokkesyklus som betyr tilstedeværelsen av den databiten.

Med andre ord sender vi 2 parallelle sekvenser til biter - en for klokken og en annen for dataene. Dette er hva programvaren gjør.

Trinn 4: Programvaren

Programvaren
Programvaren

Slik fungerer denne MAX7219 -modulen:

  • Vi skriver byte til det interne registeret.
  • MAX7219 tolker dataene.
  • MAX7219 styrer lysdiodene i matrisen.

Det betyr også at vi ikke trenger å sirkle gjennom en rekke LED -er hele tiden for å lyse dem - MAX7219 -kontrolleren tar seg av det. Det kan også styre intensiteten til lysdiodene.

Så for å bruke MAX7219 -modulene på en praktisk måte trenger vi et bibliotek med funksjoner for å tjene dette formålet.

Først trenger vi noen grunnleggende funksjoner for å skrive til MAX7219 registre.

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

Funksjonen som skriver en byte til kontrolleren ser slik ut:

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

Nå som vi kan sende byte til MAX7219 kan vi begynne å sende kommandoer. Dette gjøres ved å sende 2 byes - første for adressen til det interne registeret og det andre for dataene vi ønsker å sende.

Det er mer enn et dusin register i MAX7219 -kontrolleren.

Å sende en kommando, eller et ord, er i utgangspunktet å sende 2 påfølgende byte. Funksjonen som implementerer det er veldig enkel.

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

Det er viktig å merke seg linjen der vi tar CS -signalet tilbake til HIGH - dette markerer slutten på sekvensen - i dette tilfellet slutten av kommandoen. En lignende teknikk brukes for å kontrollere mer enn én matrise som er koblet til en kjede. Neste trinn, før vi begynner å slå på og av lysdiodene, er å initialisere MAX7219 -kontrolleren. Dette gjøres ved å skrive visse verdier til visse registre. For enkelhets skyld, mens vi koder det, kan vi sette initialiseringssekvensen i en matrise.

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

Vi trenger bare å sende de fem kommandoene ovenfor i en sekvens som adresse/datapar. Neste trinn - lyser opp en rad lysdioder.

Dette er veldig enkelt - vi skriver bare en kommando der 1. byte er adressen (fra 0 til 7) og 2. byte er de 8 bitene som representerer de 8 lysdiodene i rekken.

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

Det er viktig å merke seg at dette bare vil fungere for 1 matrise. Hvis vi kobler flere matriser i en kjede, viser de alle de samme dataene. Grunnen til dette er at etter at vi har sendt kommandoen, bringer vi CS -signalet tilbake til HIGH som får alle MAX7219 -kontrollerne i kjeden til å låse seg og vise hva den siste kommandoen var.

Anbefalt: