Stap 7:.: 8 meer Leds:. (74HC595 Shift Register) - CIRC05
Wat We doen:
Tijd om te beginnen te spelen met chips. Of geintegreerde schakelingen (ICs) als ze willen om te worden aangeroepen. De externe verpakking van een chip kunnen zeer misleidende bijvoorbeeld de chip op de Arduino board (een micro-controller) en degene die we zullen gebruiken in dit circuit (een shift register) erg lijken, maar zijn in feite iets anders, bijvoorbeeld de prijs van de Atmega-chip op het bord van de arduino is een paar dollar, terwijl de 74hc595 een paar dozijn cent is. Het is een goede inleidende chip, en zodra je comfortabel spelen rond met het en het gegevensblad (beschikbaar online http://tinyurl.com/pr42xe ) de wereld van chips uw oester zullen. Het shift register (ook wel een seriële naar parallelle converter genoemd), krijgt u een extra 8 uitgangen (om LEDs en dergelijke) met behulp van slechts drie pinnen van de arduino. Ze kunnen ook worden gekoppeld samen om u een bijna onbeperkt aantal uitgangen met behulp van de dezelfde vier pinnen. Gebruik het je klok in de gegevens en vervolgens klink vergrendelen (klink het). Om dit te doen instellen u de pin van de gegevens ofwel hoog of laag, de klok, pulse vervolgens de gegevens pincode opnieuw instellen en de klok herhalen totdat u hebben verschoven uit 8 gegevensbits pulse. Vervolgens registreert u puls de klink en de 8 bits worden overgedragen aan de verschuiving pinnen. Het klinkt ingewikkeld maar het is echt eenvoudig zodra je de knie.
(voor een meer diepgaande blik op hoe een verschuiving werken registreren gaat u naar: http://tinyurl.com/56uvv7 )
(u kunt ook de fiche breadboard lay-out van de onderkant van deze stap)
De delen:
- CIRC-05 Breadboard blad
- 2 pin Header (x40
- Shift Register (74HC595) (x 1)
- 560 ohm weerstand (groen-blauw-bruin) (x8)
- 5mm Red LED (x8)
- Draad
Het Circuit en alles inpluggen In:
Een kleine Video van alles wordt aangesloten
The Code: - http://tinyurl.com/cv4fjt
/* --------------------------------------------------------- * | Arduino Experimentation Kit Example Code | * | CIRC-05 .: 8 More LEDs :. (74HC595 Shift Register) | * --------------------------------------------------------- * * We have already controlled 8 LEDs however this does it in a slightly * different manner. Rather than using 8 pins we will use just three * and an additional chip. * * For more information on this circuit http://tinyurl.com/111111/ * *///Pin Definitions//The 74HC595 using a protocol called SPI (for more details http://www.arduino.cc/en/Tutorial/ShiftOut)//Which has three pinsint data = 2; int clock = 3;int latch = 4;//Used for single LED manipulationint ledState = 0;const int ON = HIGH;const int OFF = LOW; /* * setup() - this function runs once when you turn your Arduino on * We set the three control pins to outputs */void setup(){ pinMode(data, OUTPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); }/* * loop() - this function will start after setup finishes and then repeat * we set which LEDs we want on then call a routine which sends the states to the 74HC595 */void loop() // run over and over again{ int delayTime = 100; //the number of milliseconds to delay between LED updates for(int i = 0; i < 256; i++){ updateLEDs(i); delay(delayTime); }}/* * updateLEDs() - sends the LED states set in ledStates to the 74HC595 * sequence */void updateLEDs(int value){ digitalWrite(latch, LOW); //Pulls the chips latch low shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the shift register digitalWrite(latch, HIGH); //Pulls the latch high displaying the data}/* * updateLEDsLong() - sends the LED states set in ledStates to the 74HC595 * sequence. Same as updateLEDs except the shifting out is done in software * so you can see what is happening. */ void updateLEDsLong(int value){ digitalWrite(latch, LOW); //Pulls the chips latch low for(int i = 0; i < 8; i++){ //Will repeat 8 times (once for each bit) int bit = value & B10000000; //We use a "bitmask" to select only the eighth //bit in our number (the one we are addressing this time through value = value << 1; //we move our number up one bit value so next time bit 7 will be //bit 8 and we will do our math on it if(bit == 128){digitalWrite(data, HIGH);} //if bit 8 is set then set our data pin high else{digitalWrite(data, LOW);} //if bit 8 is unset then set the data pin low digitalWrite(clock, HIGH); //the next three lines pulse the clock pin delay(1); digitalWrite(clock, LOW); } digitalWrite(latch, HIGH); //pulls the latch high shifting our data into being displayed}//These are used in the bitwise math that we use to change individual LEDs//For more details http://en.wikipedia.org/wiki/Bitwise_operationint bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};/* * changeLED(int led, int state) - changes an individual LED * LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON */ void changeLED(int led, int state){ ledState = ledState & masks[led]; //clears ledState of the bit we are addressing if(state == ON){ledState = ledState | bits[led];} //if the bit is on we will add it to ledState updateLEDs(ledState); //send the new LED state to the shift register }
En upload zal hierdoor de lichten om het licht van een na de andere en vervolgens uit op een vergelijkbare manier. Controleer de code en wikipedia om te zien hoe het werkt, of schiet ons een e-mail als je vragen hebt.
Meer animaties:
Nu krijgen de dingen meer interessant. Als je terug naar de code van CIRC02 kijkt (8 LED Fun) u zien we veranderen de LEDs met digitalWrite (led, staat), dit is hetzelfde formaat als de routine schreven we changeLED (led, staat). U kunt de animaties die je schreef voor CIRC02 door de code in deze schets te kopiëren en wijzigen van alle de digitalWrite () van aan (de changeLED). krachtige? Zeer. (u moet ook een paar andere dingen veranderen maar volg de compile-fouten en het werkt zelf)