Med en matrisskrivare LED med en Arduino och SKIFT registrera (4 / 5 steg)
Steg 4: Spara i/o-portar med en förskjutning registrera
En stund att "växla"...
Ett skiftregister kan förstås bäst av tänka på de två orden som utgör dess namn: "shift" och "registrera". Ordet SKIFT avser hur data är på väg via registret. Här (som i vårt Arduino och microcontrollers, i allmänhet) ett register är en plats som innehåller data. Det gör detta genom implementsing en linjär kedja av digital logic kretsar kallas "flip flops" som har två stabila stater som kan representeras av antingen en 1 eller 0. Så, genom att sätta åtta flip flops tillsammans du har en enhet som kan hålla och som representerar en 8-bitars byte.
Precis som det finns flera typer av flip flops, och flera variationer på ett tema av SKIFT register (tror upp/ner räknare och Johnson räknare), det finns också flera typer av SKIFT register baserat på hur data är låst in i registret och hur dessa data är utdata. Baserat på detta anser följande typer av SKIFT register:
- Följetong / parallell ut (SIPO)
- Följetong i / följetong ut (SISO)
- Parallellt i / följetong ut (PISO)
- Parallellt i / parallell ut (PIPO)
Två av anmärkning är SIPO och PISO. SIPO register ta data seriellt, det vill säga en bit efter den andra, skifta tidigare input lite över till nästa flip floppen och skicka data ut på alla ingångar på en gång. Detta gör en fin följetong till parallell-omvandlare. PISO SKIFT register, har däremot parallella ingångar, så alla bitar anges samtidigt, men matas ut en i taget. Och du gissade rätt, detta gör för en trevlig parallell till seriell omvandlare. Skiftregister vi vill använda för att minska antalet I/O pins skulle tillåta oss att ta de 8 IO pinnar vi använt tidigare och reducera dem ner till en, eller kanske bara ett par, med tanke på att vi kan behöva styra hur vi bitarna. Skiftregister vi använder därför en följetong / parallell ut.
Tråd upp skiftregister mellan LED och Arduino
Det är enkelt att använda ett skiftregister. Den svåraste delen är bara Visualisera data output stiften och hur de binära siffrorna kommer att hamna i IC och hur de så småningom kommer att dyka upp på LED. Ta en stund att planera ut.
1. Fäst 5V stift 14 (överst till höger) och ta stift 7 (nedre vänstra) ner till marken.
2. skiftregister har två seriella ingångar men vi kommer endast att använda en, så ansluter stift två till 5V
3. vi kommer inte att använda tydliga PIN-koden (används till noll ut alla utgångar) så lämna det flytande eller attackera det till 5V
4. Anslut en digital IO port till pin en av skiftregister. Detta är det seriella ingångsstiftet.
5. Anslut en digital IO port till stift 8 (nederst till höger). Detta är klockan PIN-koden.
6. Anslut din data linjer från Q0 till Q6. Vi använder bara 7 bitar eftersom ASCII-teckenuppsättningen använder bara sju bitar.
Jag använde PD2 mata min seriella data och PD3 för klocksignalen. För data stiften, ansluten jag Q0 till D6 på LED och fortsätta på så sätt (Q1 till D5, Q2 till D4, etc). Eftersom vi skickar ut data seriellt vi måste undersöka den binär representationen av varje tecken vill vi skicka, titta på 1 och 0's och mata varje bit på raden följetong. Jag har tagit en andra version av den dotmatrixled.c källan tillsammans med en Makefile nedan. Det växlar mellan teckenuppsättningen och visar alla även tecken (om det är konstiga tänkande att ett brev kan vara udda eller jämnt, tänka på den binära representationen för ett ögonblick). Försök att räkna ut hur till göra det igenom visar alla udda karaktärer. Du kan ytterligare experiment med anslutningarna mellan skiftregister, matrisskrivare LED och din Arduino. Det finns flera kontrollfunktioner mellan LED och de register som kan tillåta dig att finjustera din kontroll om när data visas.
So... vi har gått från att ha åtta I/O portar till att bara använda två!