Innehållsförteckning:

5x4 LED -displaymatris med hjälp av en grundstämpel 2 (bs2) och Charlieplexing: 7 steg
5x4 LED -displaymatris med hjälp av en grundstämpel 2 (bs2) och Charlieplexing: 7 steg

Video: 5x4 LED -displaymatris med hjälp av en grundstämpel 2 (bs2) och Charlieplexing: 7 steg

Video: 5x4 LED -displaymatris med hjälp av en grundstämpel 2 (bs2) och Charlieplexing: 7 steg
Video: Токовое сопротивление электрических проводов - эксперимент 2024, November
Anonim
5x4 LED -displaymatris med hjälp av en Basic Stamp 2 (bs2) och Charlieplexing
5x4 LED -displaymatris med hjälp av en Basic Stamp 2 (bs2) och Charlieplexing

Har du en Basic Stamp 2 och några extra lysdioder? Varför inte leka med konceptet charlieplexing och skapa en output med bara 5 stift.

För denna instruerbara kommer jag att använda BS2e men alla medlemmar i BS2 -familjen borde arbeta.

Steg 1: Charlieplexing: Vad, varför och hur

Låt oss ta reda på varför först. Varför använder du charlieplexing med en Basic Stamp 2? --- Bevis på koncept: Lär dig hur charlieplexing fungerar och lär dig något om BS2. Detta kan vara användbart för mig senare med snabbare 8-stifts chips (endast 5 av dem kommer att vara i/o).--Användbar anledning: I princip finns det inga. BS2 är alldeles för långsam för att visa utan märkbara flimmer. Vad är charlieplexing? --- Charlieplexing är en metod för att driva ett stort antal lysdioder med ett litet antal mikroprocessor i/o-stift. Jag lärde mig om charlieplexing från www.instructables.com och du kan också: Charlieplexing LEDs- TheoryHow to drive a lot of LEDs from a few microcontroller pins. Också på wikipedia: CharlieplexingHur kan jag köra 20 lysdioder med 5 i/o-stift? --- Läs igenom de tre länkarna under "Vad är charlieplexing?". Det förklarar det bättre än jag någonsin kunnat. Charlieplexing skiljer sig från traditionell multiplexing som behöver en i/o -pin för varje rad och varje kolumn (det skulle vara totalt 9 i/o -pins för en 5/4 display).

Steg 2: Hårdvara och schematisk

Hårdvara och schematisk
Hårdvara och schematisk

Materiallista: 1x - Basic Stamp 220x - ljusdioder (lysdioder) av samma typ (färg och spänningsfall) 5x - motstånd (se nedan angående motståndsvärde) Extra/Tillval: Metod för programmering av din BS2Momentary tryckknapp som återställningsomkopplare6v -9v Strömförsörjning beroende på din version av BS2 (läs din manual) Schemat: Denna schema är sammanställd med den mekaniska layouten i åtanke. Du kommer att se rutnätet med lysdioder inställda till vänster. Detta är orienteringen för vilken BS2 -koden har skrivits. Lägg märke till att varje par lysdioder har anoden ansluten till den andra katoden. De ansluts sedan till en av de fem i/o -stiften. Motståndsvärden: Du bör beräkna dina egna motståndsvärden. Kontrollera databladet för dina lysdioder eller använd LED -inställningen på din digitala multimeter för att hitta spänningsfallet på dina lysdioder. Låt oss göra några beräkningar: Matningsspänning - Spänningsfall / Önskad ström = Motståndsvärde BS2 levererar 5v reglerad effekt och kan källa 20ma av strömmen. Mina lysdioder har ett fall på 1,6 V och fungerar vid 20ma.5v - 1.6v /.02amps = 155ohms För att skydda din BS2 bör du använda nästa högre motståndsvärde från vad du får med beräkningen, i det här fallet tror jag att det skulle vara 180ohms. Jag använde 220ohms eftersom min utvecklingskort har det värdet av motstånd inbyggt i det för varje i/o -stift. OBS: Jag tror att eftersom det finns ett motstånd på varje stift fördubblar detta effektivt motståndet på varje led eftersom en stift är V+ och den andra är Gnd. Om så är fallet bör du minska motståndsvärdena till hälften. Den negativa effekten av ett för högt motståndsvärde är en dimmer -LED. Kan någon verifiera detta och lämna mig ett PM eller kommentera så att jag kan uppdatera denna information? Programmering: Jag har använt en utvecklingskort som har en DB9 -kontakt för att programmera chipet direkt på kortet. Jag använder också detta chip på min lödfria brödbräda och har inkluderat en In Circuit Serial Programming (ICSP) rubrik. Rubriken är 5 stift, stift 2 till 5 ansluts till stift 2-5 på en DB9 seriell kabel (stift 1 är oanvänd). Observera att för att använda denna ICSP -huvudpinnar 6 och 7 på DB9 -kabeln måste anslutas till varandra. Återställ: En tillfällig tryckningsknapp är valfri. Detta drar bara stift 22 till marken när den trycks.

Steg 3: Breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Nu är det dags att bygga matrisen på ett brödbräda. Jag använde en plintremsa för att ansluta ett ben från varje ledpar tillsammans och en liten bygelkabel för att ansluta de andra benen. Detta är detaljerat i närbilden och förklaras i djupet här: 1. Orientera din brödbräda för att matcha den större bilden2. Placera lysdiod 1 med anoden (+) mot dig och katoden (-) från dig.3. Placera LED 2 i samma riktning som anoden (+) i anslutningskontakten på LED 1 -katoden.4. Använd en liten bygelkabel för att ansluta anoden på LED 1 till katoden på LED 2.5. Upprepa tills varje par lysdioder har lagts till på brädet. Jag använder vad som normalt skulle vara strömbussremsorna på brödskivan som bussremsor för BS2 I/O -stiften. Eftersom det bara finns 4 bussremsor använder jag en terminalremsa för P4 (den femte I/O -anslutningen). Detta kan ses på den större bilden nedan. Anslut plintremsan för LED 1 -katoden till P0 -bussremsan. Upprepa för varje udda numrerad lysdiod och ersätt rätt P* för varje par (se schemat).7. Anslut plintremsan för LED 2 -katoden till bussremsan P1. Upprepa för varje udda numrerad lysdiod och ersätt rätt P* för varje par (se schemat).8. Anslut varje bussremsa till lämpligt I/O-stift på BS2 (P0-P4).9. Kontrollera alla anslutningar för att se till att de stämmer överens med schemat. Fira. OBS: I närbilden ser du att det inte verkar som att jag följde steg 7 eftersom anslutningen till den andra I/O-stiftet är på anoden för de udda numrerade lysdioderna. Kom ihåg att katoden för de jämna lysdioderna är ansluten till anoden för de udda numrerade lysdioderna så att anslutningen är densamma åt båda hållen. Om den här lappen förvirrar dig, ignorera den bara.

Steg 4: Grunderna i programmering

För att charplexuppbyggnad ska fungera slår du bara på en lysdiod i taget. För att detta ska fungera med vår BS2 behöver vi två grundläggande steg: 1. Ställ in utgångslägen för stiften med hjälp av kommandot OUTS. Berätta för BS2 vilka stift som ska användas som utgångar med DIRS -kommandot Detta fungerar eftersom BS2 kan få veta vilka stift som ska köras högt och lågt och väntar med att göra det tills du anger vilka stift som är utgångar. Låt oss se om sakerna är anslutna korrekt försöker bara blinka LED 1. Om du tittar på schemat kan du se att P0 är ansluten till katoden (-) på LED 1 och P1 är ansluten till anoden på samma LED. Det betyder att vi vill köra P0 lågt och P1 högt. Detta kan göras så här: "OUTS = % 11110" som driver P4-P1 högt och P0 lågt. (% Indikerar att ett binärt tal ska följa. Den lägsta binära siffran är alltid till höger. 0 = LÅG, 1 = HÖG) BS2 lagrar den informationen men påverkar den inte förrän vi har deklarerat vilka stift som är utgångar. Detta steg är nyckeln eftersom endast två stift ska vara utgångar samtidigt. Resten ska vara ingångar, vilket sätter dessa stift till högimpedansläge så att de inte sjunker någon ström. Vi måste köra P0 och P1 så att vi ställer in dem på utgångar och resten på ingångar så här: "DIRS = % 00011". (% Indikerar att ett binärt tal ska följa. Den lägsta binära siffran är alltid till höger. 0 = INPUT, 1 = OUTPUT) Låt oss sätta ihop det till en användbar kod: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS = %11110 'Drive P0 low och P1-P4 high DIRS = %00011' Set P0- P1 som utgångar och P2-P4 som ingångar PAUSE 250 'Paus för LED förblir på DIRS = 0' Ställ in alla stift till ingång. Detta kommer att stänga av LED PAUSE 250 'Pause för LED förblir släckt LOOP

Steg 5: Utvecklingscykeln

Nu när vi har sett en stift arbetstid för att se till att de alla fungerar. 20led_Zig-Zag.bseDenna bifogade kod ska tända var och en av de 20 lysdioderna i ett zig-zag-mönster. Du kommer att märka att efter att varje stift har tänt facket använder jag "DIRS = 0" för att förvandla alla stift till ingångar igen. Om du ändrar OUTS utan att stänga av utgångsstiften kan du få lite "ghosting" där en lysdiod som inte ska tändas kan blinka mellan cyklerna. Om du ändrar W1 -variabeln i början av denna kod till "W1 = 1" där kommer bara att vara en paus på 1 millisekund mellan varje LED -blinkning. Detta kommer att orsaka en persistent vision (POV) -effekt som får det att se ut som om alla lysdioder är tända. Detta gör att lysdioderna blir svagare men är kärnan i hur vi ska visa tecken på denna matris. 20led_Interpreter_Proto.bseJag bestämde mig för att jag var tvungen att utveckla någon typ av tolkod för att göra de galna kombinationerna som behövs för att tända Lysdioder i ett användbart mönster. Den här filen är mitt första försök. Du kommer att se att längst ner i filen är tecknen lagrade i fyra rader med femsiffrig binär. Varje rad läses in, analyseras och en subrutin anropas varje gång en lysdiod behöver tändas. Denna kod fungerar och går igenom siffrorna 1-0. Om du försöker köra det märker du att det plågas av en mycket långsam uppdateringsfrekvens som gör att tecknen blinkar nästan för långsamt för att kunna identifieras. Denna kod är dålig av många skäl. Först tar fem binära siffror upp lika mycket plats i EEPROM som åtta siffror binärt eftersom all information lagras i grupper om fyra bitar. För det andra kräver SELECT CASE som används för att bestämma vilken pin som ska tändas 20 fall. BS2 är begränsad till 16 fall per SELECT -operation. Det betyder att jag var tvungen att hacka runt den begränsningen med ett IF-THEN-ELSE-uttalande. Det måste finnas ett bättre sätt. Efter några timmars huvudskrapning upptäckte jag det.

Steg 6: En bättre tolk

Varje rad i vår matris består av 4 lysdioder, var och en kan vara på eller av. BS2 lagrar information i sin EEPROM i grupper om fyra bitar. Den korrelationen borde göra det mycket enklare för oss. Förutom detta faktum motsvarar fyra bitar decimalnumren 0-15 för totalt 16 möjligheter. Detta gör eller VÄLJ CASE mycket enklare. Här är siffran 7 som lagras i EEPROM: '7 %1111, %1001, %0010, %0100, %0100, Varje rad har en decimal motsvarande 0-15 så vi läser en rad in från minnet och mata det direkt till SELECT CASE -funktionen. Detta betyder att den mänskliga läsbara binära matrisen som används för att göra varje tecken (1 = led på, 0 = avstängd) är nyckeln för tolkaren. För att kunna använda samma VÄLJ FALL för var och en av de 5 raderna använde jag ett annat utvalda fall för att ställa in DIRS och OUTS som variabler. Jag läste först på var och en av fem rader i tecknet till variablerna ROW1-ROW5. Huvudprogrammet anropar sedan delrutan för att visa tecknet. Denna underprogram tar den första raden och tilldelar de fyra möjliga OUTS-kombinationerna till variabel outp1-outp4 och de två möjliga DIRS-kombinationerna till direc1 & direc2. Lysdioder blinkar, radräknaren ökas och samma process körs för var och en av de fyra andra raderna. Detta är mycket snabbare än det första tolkprogrammet. Med det sagt finns det fortfarande märkbar flimmer. Ta en titt på videon, kameran får flimmern att se mycket värre ut men du förstår. Att överföra detta koncept till ett mycket snabbare chip, som en picMicro eller ett AVR -chip skulle möjliggöra visning av dessa tecken utan märkbar flimmer.

Steg 7: Vart ska du gå härifrån

Jag har ingen cnc -kvarn eller etsningstillbehör för att göra kretskort, så jag kommer inte att koppla detta projekt. Om du har en kvarn och är intresserad av att samarbeta för att gå vidare härifrån, skicka mig ett meddelande. Jag skulle gärna betala för material och frakt ännu gladare att visa något av en färdig produkt för detta projekt.

Andra möjligheter: 1. Porta detta till ett annat chip. Denna matrisdesign kan användas med alla chip som har 5 i/o-stift tillgängliga som är tri-state-kompatibla (stift som kan vara höga, låga eller ingångar (hög impedans)). 2. Med ett snabbare chip (kanske AVR eller picMicro) kan du öka skalan. Med ett 20 -stifts chip kan du använda 14 stift för att ladda upp en 8x22 -skärm och använda de återstående stiften för att ta emot seriella kommandon från en dator eller annan kontroller. Använd ytterligare tre 20-stifts marker och du kan ha en rullande display som är 8x88 för totalt 11 tecken samtidigt (beroende på bredden på varje tecken förstås). Lycka till, ha kul!

Rekommenderad: