Innehållsförteckning:
Video: Hur man gränsar en MAX7219 driven LED -matris 8x8 med ATtiny85 mikrokontroller: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
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
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
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
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:
Hur man använder Max7219 8x8 Dot Matrix With "skiiiD": 9 steg
Så här använder du Max7219 8x8 Dot Matrix With "skiiiD": Detta är en videoinstruktion av Max7219 8x8 Dot Matrix via " skiiiD " Före start, nedan är en grundläggande handledning för hur du använder skiiiDhttps: //www.instructables.com/id /Komma igång-W
Hur man bygger 8x8 BIG LED Matrix (MAX7219 LED 10mm): 9 steg (med bilder)
Hur man bygger 8x8 BIG LED Matrix (MAX7219 LED 10mm): Har du arbetat med färdig 8x8 LED-matris som skärmar? De finns i olika storlekar och är ganska intressanta att arbeta med. En stor lättillgänglig storlek är cirka 60 mm x 60 mm. Men om du letar efter en mycket större färdig LED-matris,
Hur man gör en drönare med Arduino UNO - Gör en quadcopter med mikrokontroller: 8 steg (med bilder)
Hur man gör en drönare med Arduino UNO | Gör en Quadcopter Med Microcontroller: Introduktion Besök min Youtube -kanal En Drone är en mycket dyr gadget (produkt) att köpa. I det här inlägget ska jag diskutera, hur gör jag det billigt ?? Och hur kan du göra din egen så här till billigt pris … Tja i Indien alla material (motorer, ESC
Hur man gränsar GPS-modul (NEO-6m) med Arduino: 7 steg (med bilder)
Hur man gränsar GPS-modul (NEO-6m) med Arduino: I det här projektet har jag visat hur man kopplar en GPS-modul till Arduino UNO. Data för longitud och latitud visas på LCD -skärmen och platsen kan ses på app.Lista över material Arduino Uno == > $ 8 Ublox NEO-6m GPS-modul == > $ 15 16x
Hur man gränsar en 16x4 LCD -skärm med en Arduino: 6 steg
Hur man gränsar en 16x4 LCD -skärm med en Arduino: Introduktion Jag fick nyligen några gratis LCD -prover från mina vänner på FocusLCDs.com. En av dem är en 16x4 LCD; P/N: C164AXBSYLY6WT. Den använder en ST7066U -styrenhet (se datablad här) istället för HD44780 som vanligtvis finns i LCD -skärmar. Jag är inte