Vi har skapat en serie Raspberry Pi-handledning, där vi har täckt gränssnitt mellan Raspberry Pi och alla baskomponenter som LED, LCD, knapp, DC-motor, servomotor, stegmotor, ADC, skiftregister etc. Vi har också publicerade några enkla Raspberry Pi-projekt för nybörjare, tillsammans med några bra IoT-projekt. I dag, i fortsättning av dessa handledning, ska vi styra 8x8 LED Matrix Module av Raspberry Pi. Vi kommer att skriva ett pythonprogram för att visa tecken på matrismodulen.
Kontrollera även Interfacing 8x8 LED Matrix med Arduino och LED Matrix med AVR Microcontorller.
Komponenter som krävs:
Här använder vi Raspberry Pi 2 Model B med Raspbian Jessie OS. Alla grundläggande hårdvaru- och mjukvarukrav har tidigare diskuterats, du kan slå upp det i Raspberry Pi Introduction och Raspberry PI LED Blinking för att komma igång, annat än vad vi behöver:
- Raspberry Pi Board
- Strömförsörjning (5v)
- 1000uF kondensator (ansluten över strömförsörjningen)
- 1KΩ motstånd (8 delar)
8x8 LED-matrismodul:
En 8 * 8 LED-matrismodul innehåller 64 LED (Light Emitting Diodes) som är ordnade i form av en matris, varför namnet är LED-matris. Dessa kompakta moduler finns i olika storlekar och många färger. Man kan välja dem på bekvämlighet. Modulens PIN-konfiguration är som visas på bilden. Tänk på att modulens pinouts inte är i ordning så att PIN-koder bör numreras exakt som visas på bilden för att undvika fel.
Det finns 8 + 8 = 16 vanliga terminaler i LED Matrix-modulen. Över dem har vi 8 gemensamma positiva terminaler och 8 gemensamma negativa terminaler, i form av 8 rader och 8 kolumner, för att ansluta 64 LED i matrisform. Om modulen skulle ritas i form av kretsschema får vi en bild som visas nedan:
Så för 8 rader har vi 8 gemensamma positiva terminaler (9, 14, 8, 12, 17, 2, 5). Tänk på den första raden, lysdioderna från D1 till D8 har en gemensam positiv terminal och stiftet tas ut vid PIN9 i LED Matrix-modulen. När vi vill att en eller alla lysdioder i en RAD ska vara PÅ, bör motsvarande stift av LED-MODUL drivas med + 3,3 v.
I likhet med vanliga positiva terminaler har vi 8 gemensamma negativa terminaler som kolumner (13, 3, 4, 10, 6, 11, 15, 16). För jordning av vilken LED som helst i vilken kolumn som helst ska respektive gemensamma negativa terminal jordas.
Kretsförklaring:
Anslutningarna som görs mellan Raspberry Pi och LED- matrismodul visas i nedanstående tabell.
LED-matrismodul Stift nr. |
Fungera |
Raspberry Pi GPIO-stift nr. |
13 |
POSITIVT0 |
GPIO12 |
3 |
POSITIVT 1 |
GPIO22 |
4 |
POSITIVT2 |
GPIO27 |
10 |
POSITIVT 3 |
GPIO25 |
6 |
POSITIVT 4 |
GPIO17 |
11 |
POSITIVT 5 |
GPIO24 |
15 |
POSITIVT 6 |
GPIO23 |
16 |
POSITIVT 7 |
GPIO18 |
9 |
NEGATIV0 |
GPIO21 |
14 |
NEGATIV1 |
GPIO20 |
8 |
NEGATIV2 |
GPIO26 |
12 |
NEGATIV 3 |
GPIO16 |
1 |
NEGATIV4 |
GPIO19 |
7 |
NEGATIV5 |
GPIO13 |
2 |
NEGATIV6 |
GPIO6 |
5 |
NEGATIV7 |
GPIO5 |
Här är det sista kretsschemat för gränssnitt 8x8 LED-matris med Raspberry Pi:
Arbetsförklaring:
Här kommer vi att använda Multiplexing Technique för att visa karaktärer på 8x8 LED Matrix Module. Så låt oss diskutera om denna multiplexering i detalj. Säg om vi vill sätta på LED D10 i matrisen, måste vi driva modulens PIN14 och jorda modulens PIN3. Med denna lysdiod tänds D10 enligt bilden nedan. Detta bör också kontrolleras först så att MATRIX vet att allt är i ordning.
Säg nu att om vi vill slå på D1, måste vi driva PIN9 i matrisen och jorda PIN13. Med den lyser LED D1. Den aktuella riktningen i detta fall visas i bilden nedan.
Nu för den knepiga delen, överväga att vi vill slå på både D1 och D10 samtidigt. Så vi borde driva både PIN9, PIN14 och jorda båda PIN13, PIN3. Detta tänds LED D1 och D10, men dessutom tänds även LED D2 och D9. Det beror på att de delar gemensamma terminaler. Så om vi vill tända lysdioderna längs diagonalen kommer vi att tvingas sätta på alla lysdioder längs vägen. Detta visas i figuren nedan:
För att undvika detta problem använder vi en teknik som kallas Multiplexing. Vi har också diskuterat denna multiplexeringsteknik när vi gränssnitt 8x8 LED Matrix med AVR, här förklarar vi igen. Samma multiplexeringsteknik används också i Scrolling Text på 8x8 LED-matris med Arduino och med AVR-mikrokontroller.
Det mänskliga ögat kan inte fånga en frekvens på mer än 30 Hz. Det är om en lysdiod tänds och släcks kontinuerligt med en hastighet på 30 Hz eller mer. Ögat ser LED-lampan som kontinuerligt PÅ. Detta är dock inte fallet och LED kommer faktiskt att tändas och släcks ständigt. Denna teknik kallas Multiplexing.
Låt oss säga att vi till exempel bara vill tända LED D1 och LED D10 utan att slå på D2 och D9. Tricket är att vi först kommer att ge ström till endast LED D1 med PIN 9 & 13 och vänta på 1mSEC, och sedan stänger vi av den. Då kommer vi att ge ström till LED D10 med PIN 14 & 3 och vänta på 1mSEC och sedan stänga av den. Cykeln går kontinuerligt med hög frekvens och D1 & D10 tänds och släcks snabbt och båda lysdioderna ser ut att vara kontinuerligt PÅ för vårt öga. Det betyder att vi bara ger ström till en rad (LED) åt gången, vilket eliminerar chanserna att tända andra lysdioder i andra rader. Vi kommer att använda denna teknik för att visa alla karaktärer.
Vi kan vidare förstå det med ett exempel, som om vi vill visa "A" på matrisen, som visas nedan:
Som sagt kommer vi att slå på en rad på ett ögonblick, Vid t = 0m SEC är PIN09 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 jordade (andra KOLONN-stift är HÖG vid denna tidpunkt)
Vid t = 1m SEC är PIN14 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 jordade (andra KOLONN-stift är HÖG vid denna tidpunkt)
Vid t = 2m SEC är PIN08 inställt HÖG (andra RAD-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN15, PIN16 jordade (andra KOLONN-stift är HÖGA just nu)
Vid t = 3m SEC är PIN12 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN15, PIN16 jordade (andra KOLONN-stift är HÖG vid denna tidpunkt)
Vid t = 4m SEC är PIN01 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 jordade (andra KOLONN-stift är HÖG vid denna tidpunkt)
Vid t = 5m SEC är PIN07 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 jordade (andra KOLONN-stift är HÖG vid denna tidpunkt)
Vid t = 6m SEC är PIN02 inställt HÖG (andra ROW-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN15, PIN16 jordade (andra KOLONN-stift är HÖGA vid denna tidpunkt)
Vid t = 7m SEC är PIN05 inställt HÖG (andra RAD-stift är LÅGA vid denna tidpunkt) vid denna tidpunkt är PIN13, PIN3, PIN15, PIN16 jordade (andra KOLONN-stift är HÖGA just nu)
Vid denna hastighet kommer displayen att visas som kontinuerligt visar “A” -tecken som visas i figuren.
Den Python Program för att visa tecken på LED Matrix använder Raspberry Pi ges nedan. Programmet förklaras väl av kommentarer. Portvärden för varje karaktär ges i programmet. Du kan visa vilka tecken du vill genom att bara ändra 'pinp' -värdena i 'for loop' i det givna programmet. Kontrollera också demonstrationsvideon nedan.