Multiplexering 7 Segment visar med Arduino och SKIFT register (3 / 5 steg)

Steg 3: Dags att koden!

Vid det här laget har du förmodligen en idé om hur du kommer koden ditt program baserat på din Schematisk.

För att börja du, är här en enkel skiss som visar 456 med decimal i en tidsfördröjning sätt att demonstrera multiplexing. Jag gjorde det också flexibla att rymma olika konfigurationer som du kan ha. Källan är också tillgänglig i botten för att hämta. Var noga med att förstå koden först, och sedan kopiera och klistra in en ny skiss. Nästa, göra de nödvändiga anpassningarna till variabler och Stifttilldelningar eftersom de kan vara olika i din situation. En gång gjort, ladda upp till Arduino.

En sak du bör notera är riktningen av dataflödet. Om du minns min schematiska, vänster mest SKIFT register kommer att ta emot den första byten men kommer att dumpa det data ur SER ut om ett annat byte tas emot. Så, om du vill skicka 11111111 till höger siffran, skulle du behöva flytta ut 11111111 sedan 00000000 och slutligen 00000000. Oroa dig inte, detta hanteras automatiskt av koden.

BEGIN KOD

/*
Kod för samverkan med 7 segment visar
med metoden multiplexering
och TPIC6B595 SKIFT Register (1 per siffra)
Vid K.O.
*/

Stifttilldelningar (du bör ändra dessa)
CONST int CLK = 9. Ansluten till industriländer stift 13: SRCLK (aka klocka)
CONST int spärren = 10; Ansluten till industriländer stift 12: RCLK (aka spärr/load/CS/SS...)
CONST int OE = 11; Ansluten till industriländer pin 9: OE (Output aktiverar)
CONST int DOUT = 12. Ansluten till industriländer stift 3: SER (aka MOSI)

Antalet mönster (0-9)
Avlopp 0-7 måste vara ansluten till segment A-DP respektive ***
CONST byte numTable [] =
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};

Globala variabler
int numDevices = 1; Antalet x-siffriga Visa moduler du planerar att använda
int maxDisplays = 3; De maximala skärmar som kan tillgodoses (se anmärkning 1)
int maxDigits = 3; De högsta siffrorna som du planerar att Visa Visa modul (varje SR kan hantera ett max på 8 siffror)
int SRData [3] [3]. Lagringsplatsen för den siffra informationen. Vi måste ange ett fast utbud vid kompileringen (se not 2)
booleska debug = sant; Ändra till true för att skriva ut meddelanden
int fördröjningstid = 1000; Tillval (bara för att demonstrera multiplexing)

/*
Anteckningar
1. det rekommenderas att använda en extern strömkälla för att undvika oversource/sjunka mikrokontroller
eller om du behöver driva hög spänning, hög ström visar. Denna kod kommer att slå på/av alla segment i en siffra för *** varje *** visas.
Så, om med 2 x 3-siffriga visar alla visar en 8 + DP, max konsumtionen kommer att vara:
20mA (önskas framåt strömmen) * 8 (segment på) * 2 (skärmar visar identiska information) = 320mA
2. den första dimensionen ska vara lika maxDisplays. Den andra dimensionen bör vara lika med antalet siffror
*/

void setup()
{
Serial.BEGIN(9600);

Ställ in pinkodsskydd lägen
pinMode(CLK,OUTPUT);
pinMode(LATCH,OUTPUT);
pinMode (DOUT, OUTPUT);
pinMode (OE, OUTPUT);

7-segment Display Init
digitalWrite(OE,LOW); Möjliggör SR drift
initializeSRData(); Förbereder SR och raderar data på serial line

Test
setDigit(0,0,4,true);
setDigit(0,1,5,true);
setDigit(0,2,6,true);
}

void loop()
{
refreshDisplay(); Cykler genom alla displayer och siffror
}

=== BEGIN SR funktioner ===
void initializeSRData()
{
Visa skanner (Iterates genom varje display modul)
digitalWrite(LATCH,LOW); Berättar alla SRs att uController skickar data

för (int dispID = 0; dispID < maxDisplays; dispID ++)
{
Siffriga Scanner (Iterates genom varje SR (digit) i en display modul)
för (int siffra = 0; siffriga < maxDigits; siffriga ++)
{
Rensar alla sopor på raden följetong
shiftOut(DOUT,CLK,LSBFIRST,0); Flytta ut 0s till alla skärmar
SRData [dispID] [siffra] = 0; Lagrar en 0 för varje siffra så dess helt off
}
}
digitalWrite(LATCH,HIGH); Berättar alla SRs att uController är gjort skickar data
}

void printSRData()
{
IF(!debug)
hemkomst.

Serial.println ("utskrift SR Data...");

Display Scanner
för (int dispID = 0; dispID < maxDisplays; dispID ++)
{
Serial.Print ("Visa #");
Serial.println(dispID);

Siffriga Scanner
för (int siffra = 0; siffriga < maxDigits; siffriga ++)
{
Serial.Print ("siffran").
Serial.Print(DIGIT);
Serial.Print(":");
Serial.println(SRData[dispID][digit],bin);
}
Serial.println();
}
}

void setDigit (int dispID int siffra, int värde, booleska dp)
{
Parametern checker
om (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!"); OoB = out of bounds
hemkomst.
}

om (siffran < 0 || siffriga > maxDigits)
{
Serial.println ("siffran OoB!").
hemkomst.
}

om (värdet < 0 || värde > 9)
{
Serial.println ("Ogiltigt värde!");
hemkomst.
}

värde = numTable [värde];

Toggle dp om det behövs
IF(DP)
värdet | = B00000001; Tänds den första binär siffra (segment) använder en bitmask som OR

Lagra siffran
SRData [dispID] [siffra] = värde;

IF(debug)
printSRData();
}

void setSegments (int dispID, int siffra, byte-värde)
{
Parametern checker
om (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!");
hemkomst.
}

om (siffran < 0 || siffriga > maxDigits)
{
Serial.println ("siffran OoB!").
hemkomst.
}

om (värdet < 0 || värde > 255)
{
Serial.println ("Ogiltigt byte!");
hemkomst.
}

Lagra siffran
SRData [dispID] [siffra] = värde;

IF(debug)
printSRData();
}

void clearDisplay(int dispID)
{
initializeSRData();
refreshDisplay();
}

void refreshDisplay()
{
Siffriga Scanner
för (int siffra = 0; siffriga < maxDigits; siffriga ++)
{
Display Scanner
digitalWrite(LATCH,LOW);
för (int dispID = numDevices - 1; dispID > = 0; dispID--)
{
Före siffran blinkern (Skift ut 0s att korrigera siffror innan du skickar segmentet data till önskad siffra)
för (int blanks = (maxDigits - 1 - digit); blanks > 0; blanks--)
shiftOut(DOUT,CLK,LSBFIRST,0);

shiftOut(DOUT,CLK,LSBFIRST,SRData[dispID][digit]);

Efter siffran blinkern (Skift ut 0s till resterande siffror)
för (int blanks = siffran; blanks > 0; blanks--)
shiftOut(DOUT,CLK,LSBFIRST,0);
}
digitalWrite(LATCH,HIGH);

Visar multiplexering drift
Delay(delayTime);
Fördröjningstid-= 10.
om (fördröjningstid < = 0)
Fördröjningstid = 0;
}
}

=== SLUTET SR funktioner ===

END-KOD

Se Steg
Relaterade Ämnen

Arduino och SKIFT register

I detta projekt kan du se hur du styr ledde använder arduino och SKIFT registerDu behöver:Arduinoenskiftregisterleddeför kod och krets gå till:bästa-circuit.blogspot.comatt se hur wok går till:https://www.youtube.com/watch?v=F1K3qt9nhKc...

Multiplexering fyra 7-segment visar med hjälp av SKIFT register Arduino

Hallo allaJag konstruerade ett enkelt sätt att multiplex fyra 7-Segment visar med hjälp av SKIFT register och en ArduinoLåt oss multiplex 7 segment displaySteg 1: Steg-1: Låt oss utforma Ta fyra 7-segment visar och löda på en PCB på ett sätt som sida...

Multiplexering med Arduino och 74HC595

74HC595 är en lätt och billig (på cirka 60 cent styck) sätt att öka antalet digitala ut stiften på din Arduino. I denna tutorial ska jag visa dig hur man kör upp till 16 lysdioder med en 74HC595 med hjälp av en teknik som kallas multiplexing. I slutä...

Nybörjare tutorial: kontrollera ledde matrisen med 2 595 SKIFT register och potmeter

Jag börjar bara med Arduino och instructables från amandaghassaei hjälpte mig mycket. I sin andra tutorialabout in- och utgångar förklarar hon hur du använder SKIFT register och hur man styr en ledde matrisen av multiplexing. I det sista steget föres...

Använda en 4 siffrig, 7 segment display, med arduino

I denna tutorial kommer jag att visa dig hur du använder en 7 segment display med 4 siffror genom att använda arduino. Några grundläggande saker jag vill påpeka är att detta tar upp nästan alla digitala stiften på arduino uno, leonardo, styrelser med...

Arduino 8 * 8 ledde matrisen driver med 2 * 74HC595 SKIFT register

Jag köpte en 8 x 8 ledde matrisen inklusive en förare ombord med ett MAX7219CNG chip. Tyvärr detta chip inte fungerar korrekt. Så jag bestämde mig att bygga min egen drivrutin med hjälp av 2 74HC595 SKIFT register.Min lösning är baserad på den "Multi...

Kontrollera en LED med arduino och Wifly sköld

För att visa hur du kan styra enheter via wifi med hjälp av arduino wifly shield, kommer jag slå på och av en LED genom att skicka en http-begäran från webbläsaren till wifly sköld.Krav:1. Arduino uno2. Wifly sköld3. ledde4. 220 ohm motstånd5. ett pa...

Styra DC Motors(PC Fans) med Arduino och Relay board

I detta instructable kommer vi att se utan att gå in i detalj, hur man använder 12V DC motorer (PC Fans) med Arduino och relay board eBlockSteg 1: Konfigurera maskinvara och programvara För att göra det behöver vi viss maskinvara kan du hitta på Inte...

Kontrollera en RGB ledde med Arduino och bearbetning

detta instructable (min första inte mindre) visar hur man styr en RGB ledde med bearbetning och arduino.Den viktiga funktionen att vara färg markeras genom att klicka på en bild, RGB-värdet för den pixel du klickar på bearbetas och skickas till den a...

Mugg musik: Förvandla vatten till ett Instrument med Arduino och ChucK

Vad händer om du slå alla ledande yta till ett instrument? Gillar, säga... en mugg vatten? Bäst av allt, är det billigt; du behöver bara $1 värt extra elektriska komponenter (inte inklusive Arduino).För detta projekt, min vän skörd och jag kombinerad...

Säkerhetssystem och tillgång kontroll med Arduino och RFID-

säkerhetssystem och tillgång kontroll med Arduino och RFIDDetta projekt är en evolotuin av mitt första projekt kallat "Arduino - Security System och Access Control"Som ni kan se på bloggen http://arduinobymyself.blogspot.com.br/2012/03/arduino-s...

Hur använder gamla Stepper Motors med Arduino och A4988 Driver

Jag har varit med stegmotorer ett tag nu, och de är fantastiska för alla typer av robotic projekt.Idag kommer jag att dela de saker jag har lärt mig hittills om återanvända gamla stegmotorer bärgades från skrivare. Identifiera stegmotorerStegmotorer...

Power övervakning med Arduino och logga in i Google blad

Sedan senaste veckorna tänkte jag på att göra ett projekt som kan hjälpa mig att hålla ett spår på min dagliga energi användningsområden. I detta projekt använder jag en 30A övervakning styrelse. denna styrelse har 6 strömsensor som kan läsa upp till...

Roligt spel med arduino och bearbetning

Denna tutorial ska show dig hur man gör en första person FPS-shooter i bearbetning med hjälp av en arduino. Detta projekt lämnades till oss som en avslutande tentamen i en teknisk specialkurs, (gymnasieskolan).Video av projektet! :) (Svårt att spela...

Kontroll av en DC motor med Arduino och Visual Basic

Hej vänner detta är mitt första inlägg i instructables.com där jag kommer att försöka ge mer nyhet des ofta.Idag är temat med Arduino och Visual Basic.Det projekt som vi ser idag är controller en dc-motor med Arduino och Visual Basic.För att styra en...

Styra din Tv, Dvd och ljud system med Arduino och Android

Hej alla, detta är min andra instructable och min första på engelska, så, ledsen för misstag.Jag vill dela detta projekt det handlar om hur du kan styra din Tv, DVD och ljudanläggningen med Arduino och en app för Android med app inventor.Om du gillar...

Rörelseaktiverade ljus med Arduino och HC-SR04 sensor

Jag gjorde detta projekt för länge sedan att tända upp i köket när jag öppnar bakdörren.Tanken var när jag öppnar bakdörren, detta ljus som tänds under 15 sekunder och som ger mig tillräckligt med tid att nå strömbrytaren på den motsatta väggen. Före...

Kapacitans mätare med arduino och 555 timer

KAPACITANS MÄTARE MED ARDUINO OCH 555 TIMER CHIPDetta projekt syftar till att bygga en enkel kapacitans mätare, en enhet för att mäta kapacitans i nanoFarads och microFarad, med en räckvidd på ca 1 nanoFarad till hundratals microFarads.Detta projekt,...

Hur man styr motorer med Arduino och RC mottagare i 10 minuter

Detta är min andra handledning på att kontrollera saker med Arduino och R/C-mottagare. Om du inte har tittat på min första tutorial jag föreslår att du tittar på det första, här: i den här guiden kommer vi att titta på hur man styr motorer också anvä...