Innehållsförteckning:

Hur man gränsar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller: 7 steg
Hur man gränsar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller: 7 steg

Video: Hur man gränsar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller: 7 steg

Video: Hur man gränsar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller: 7 steg
Video: Fritz Blommor - inspirationsfilm, skapa en egen krans eller gravdekoration 2024, November
Anonim
Hur man kopplar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller
Hur man kopplar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller

MAX7219-styrenheten är tillverkad av Maxim Integrated är en kompakt, seriell ingång/utgång gemensam-katod-bildskärmsdrivrutin som kan ansluta mikrokontroller till 64 individuella lysdioder, 7-segment numeriska LED-displayer med upp till 8 siffror, stapeldiagram, etc. Ingår på -chip är en BCD-kod-B-avkodare, multiplexskanningskretsar, segment- och sifferdrivrutiner och ett 8 × 8 statiskt RAM-minne som lagrar varje siffra.

MAX7219 -modulerna är mycket praktiska att använda med mikrokontroller som ATtiny85, eller i vårt fall Tinusaur Board.

Steg 1: Hårdvaran

Hårdvaran
Hårdvaran
Hårdvaran
Hårdvaran

MAX7219 -modulerna ser vanligtvis ut så här. De har en ingångsbuss på ena sidan och utgångsbuss på den andra. Detta gör att du kan kedja 2 eller flera moduler, dvs en efter en, för att skapa mer komplicerade inställningar.

De moduler som vi använder kan anslutas i en kedja med 5 små hoppare. Se bilden nedan.

Steg 2: Pinout och signaler

MAX7219 -modulen har 5 stift:

  • VCC - effekt (+)
  • GND-mark (-)
  • DIN - Datainmatning
  • CS - Chip select
  • CLK - Klocka

Det betyder att vi behöver 3 stift på ATtiny85 -mikrokontrollersidan för att styra modulen. De kommer att vara:

  • PB0 - ansluten till CLK
  • PB1 - ansluten till CS
  • PB2 - ansluten till DIN

Detta är tillräckligt för att ansluta till MAX7219 -modulen och programmera den.

Steg 3: Protokollet

Protokollet
Protokollet

Kommunikation med MAX7219 är relativt enkelt - det använder ett synkront protokoll som innebär att för varje databit vi skickar finns en klockcykel som betyder närvaron av den databiten.

Med andra ord skickar vi 2 parallella sekvenser till bitar - en för klockan och en annan för data. Detta är vad programvaran gör.

Steg 4: Programvaran

Mjukvaran
Mjukvaran

Så här fungerar MAX7219 -modulen:

  • Vi skriver byte till dess interna register.
  • MAX7219 tolkar data.
  • MAX7219 styr lysdioderna i matrisen.

Det betyder också att vi inte behöver cirkla genom matrisen hela tiden för att tända dem - MAX7219 -kontrollen tar hand om det. Det kan också hantera intensiteten hos lysdioderna.

Så för att använda MAX7219 -modulerna på ett bekvämt sätt behöver vi ett bibliotek med funktioner för att tjäna det syftet.

Först behöver vi några grundläggande funktioner för att kunna skriva till MAX7219 -registren.

  • Skriver en byte till MAX7219.
  • Skriva ett ord (2 byte) till MAX7219.

Funktionen som skriver en byte till styrenheten ser ut så här:

void max7219_byte (uint8_t data) {för (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Ställ CLK på LÅG om (data & 0x80) // Maskera MSB för data PORTB | = (1 << MAX7219_DIN); // Ställ in DIN på HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Ställ in DIN till LÅG PORTB | = (1 << MAX7219_CLK); // Ställ CLK på HIGH data << = 1; // Skift till vänster}}

Nu när vi kan skicka byte till MAX7219 kan vi börja skicka kommandon. Detta görs genom att skicka 2 byes - 1: a för adressen till det interna registret och det andra för de data vi vill skicka.

Det finns mer än ett dussin register i MAX7219 -styrenheten.

Att skicka ett kommando, eller ett ord, är i princip att skicka 2 byte i rad. Funktionen som implementerar det är mycket enkel.

void max7219_word (uint8_t address, uint8_t data) {PORTB & = ~ (1 << MAX7219_CS); // Ställ in CS på LÅG max7219_byte (adress); // Skicka adressen max7219_byte (data); // Skicka data PORTB | = (1 << MAX7219_CS); // Ställ in CS på HIGH PORTB & = ~ (1 << MAX7219_CLK); // Ställ CLK på LÅG}

Det är viktigt att notera här linjen där vi tar tillbaka CS -signalen till HIGH - detta markerar slutet på sekvensen - i detta fall slutet av kommandot. En liknande teknik används för att styra mer än en matris ansluten i en kedja. Nästa steg, innan vi börjar slå på och av lysdioderna, är att initiera MAX7219 -styrenheten. Detta görs genom att skriva vissa värden till vissa register. För enkelhets skull, medan vi kodar det kan vi sätta initialiseringssekvensen i en array.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = No decode 0x0a, 0x01, // Intensity Register, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 för att visa alla rader 0x0c, 0x01, // Avstängningsregister, 0x01 = Normal drift 0x0f, 0x00, // Display-Test Register, 0x00 = Normal Operation};

Vi behöver bara skicka de fem kommandona ovan i en sekvens som adress/datapar. Nästa steg - lysa upp en rad lysdioder.

Detta är väldigt enkelt - vi skriver bara ett kommando där 1: a byte är adressen (från 0 till 7) och 2: a byten är de 8 bitarna som representerar de 8 lysdioderna i raden.

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

Det är viktigt att notera att detta endast fungerar för en matris. Om vi ansluter fler matriser i en kedja visar de alla samma data. Anledningen till detta är att efter att ha skickat kommandot tar vi tillbaka CS -signalen till HIGH vilket får alla MAX7219 -styrenheter i kedjan att låsa och visa vad det sista kommandot var.

Rekommenderad: