Taula de continguts:

Com connectar una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85: 7 passos
Com connectar una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85: 7 passos

Vídeo: Com connectar una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85: 7 passos

Vídeo: Com connectar una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85: 7 passos
Vídeo: Projeto 25 - Servo Motor com Arduino - Curso Básico de Arduino 2024, Juliol
Anonim
Com interactuar amb una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85
Com interactuar amb una matriu LED 8x8 impulsada per MAX7219 amb microcontrolador ATtiny85

El controlador MAX7219 està fabricat per Maxim Integrated; és un controlador de pantalla de càtode comú d’entrada / sortida sèrie que pot connectar microcontroladors a 64 LED individuals, pantalles LED numèriques de 7 segments de fins a 8 dígits, pantalles de gràfics de barres, etc. -chip són un descodificador de codi BCD BCD, circuits d'escaneig multiplex, controladors de segments i dígits i una memòria RAM estàtica de 8 × 8 que emmagatzema cada dígit.

Els mòduls MAX7219 són molt còmodes d’utilitzar amb microcontroladors com ATtiny85 o, en el nostre cas, la placa Tinusaur.

Pas 1: el maquinari

El maquinari
El maquinari
El maquinari
El maquinari

Els mòduls MAX7219 solen tenir aquest aspecte. Tenen un bus d’entrada per un costat i un bus de sortida per l’altre. Això us permet encadenar 2 o més mòduls, és a dir, un darrere l’altre, per tal de crear configuracions més complicades.

Els mòduls que estem utilitzant són capaços de connectar-se en cadena mitjançant 5 petits ponts. Vegeu la imatge següent.

Pas 2: fixació i senyals

El mòdul MAX7219 té 5 pins:

  • VCC: potència (+)
  • GND - terra (-)
  • DIN: entrada de dades
  • CS: selecció de xip
  • CLK: rellotge

Això vol dir que necessitem 3 pins al costat del microcontrolador ATtiny85 per controlar el mòdul. Aquests seran:

  • PB0: connectat al CLK
  • PB1: connectat al CS
  • PB2: connectat al DIN

Això és suficient per connectar-vos al mòdul MAX7219 i programar-lo.

Pas 3: el protocol

El Protocol
El Protocol

Comunicar-se amb el MAX7219 és relativament senzill: utilitza un protocol síncron que significa que per a cada bit de dades que enviem hi ha un cicle de rellotge que significa la presència d’aquest bit de dades.

En altres paraules, enviem 2 seqüències paral·leles a bits: una per al rellotge i una altra per a les dades. Això és el que fa el programari.

Pas 4: el programari

El programari
El programari

La manera com funciona aquest mòdul MAX7219 és la següent:

  • Escrivim bytes al seu registre intern.
  • MAX7219 interpreta les dades.
  • MAX7219 controla els LED de la matriu.

Això també significa que no hem de fer una volta per tota la matriu de LED per il·luminar-los; el controlador MAX7219 s’encarrega d’això. També podria gestionar la intensitat dels LED.

Per tant, per utilitzar els mòduls MAX7219 d’una manera convenient, necessitem una biblioteca de funcions per complir aquest propòsit.

En primer lloc, necessitem algunes funcions bàsiques per escriure als registres MAX7219.

  • Escrivint un byte al MAX7219.
  • Escriure una paraula (2 bytes) al MAX7219.

La funció que escriu un byte al controlador és la següent:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Estableix CLK a BAIX si (dades & 0x80) // Enmascara el MSB de les dades PORTB | = (1 << MAX7219_DIN); // Estableix DIN a HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Estableix DIN a BAIX PORTB | = (1 << MAX7219_CLK); // Estableix CLK en dades ALTES << = 1; // Canvia cap a l'esquerra}}

Ara que podem enviar bytes al MAX7219 podem començar a enviar ordres. Això es fa enviant 2 byes: el primer per a l’adreça del registre intern i el segon per a les dades que volem enviar.

Hi ha més d’una dotzena de registres al controlador MAX7219.

Enviar una ordre o una paraula és bàsicament enviar 2 bytes consecutius. La implementació de la funció és molt senzilla.

void max7219_word (adreça uint8_t, dades uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Estableix CS a BAIX max7219_byte (adreça); // Enviament de l'adreça max7219_byte (dades); // Enviament de dades PORTB | = (1 << MAX7219_CS); // Estableix CS a HIGH PORTB & = ~ (1 << MAX7219_CLK); // Estableix CLK a BAIX}

És important assenyalar aquí la línia on tornem a posar el senyal CS a HIGH (això marca el final de la seqüència), en aquest cas, el final de l'ordre. S'utilitza una tècnica similar per controlar més d'una matriu connectada en una cadena. El següent pas, abans de començar a encendre i apagar els LED, és inicialitzar el controlador MAX7219. Això es fa escrivint certs valors en determinats registres. Per comoditat, mentre el codifiquem, podríem posar la seqüència d'inicialització en una matriu.

uint8_t initseq = {0x09, 0x00, // Registre de mode de descodificació, 00 = Sense decodificació 0x0a, 0x01, // Registre d'intensitat, 0x00.. 0x0f 0x0b, 0x07, // Registre de límit d'escaneig, 0x07 per mostrar totes les línies 0x0c, 0x01, // Registre de tancament, 0x01 = Funcionament normal 0x0f, 0x00, // Registre de prova-visualització, 0x00 = Funcionament normal};

Només hem d’enviar les 5 ordres anteriors en una seqüència com a parells d’adreça / dades. Pas següent: encendre una fila de LEDs.

Això és molt senzill: només escrivim una ordre on el primer byte és l'adreça (de 0 a 7) i el segon byte són els 8 bits que representen els 8 LED de la fila.

void max7219_row (adreça uint8_t, dades uint8_t) {if (address> = 1 && address <= 8) max7219_word (adreça, dades); }

És important tenir en compte que això funcionarà només per a una matriu. Si connectem més matrius en una cadena, totes mostraran les mateixes dades. El motiu d'això és que després d'enviar l'ordre tornem a posar el senyal CS a HIGH, cosa que provoca que tots els controladors MAX7219 de la cadena es bloquegin i mostrin el que fos l'últim comandament.

Recomanat: