Stap 4:595 en ShiftOut
Volgende die we een kijkje op de 595 van gegevensblad nemen zullen te vinden van de juiste pinnen op aansluiten. Deze eerste afbeelding hierboven toont de 595 pin aansluitingen. Er zijn 16 pins op de 595, geëtiketteerd 1-16. Merk de halve cirkel markering aan de ene kant van de chip, de #1 pin bevindt zich altijd aan de linker kant van deze chip. De rest van de pinnen zijn rond de chip gaan in de richting tegen de klok in genummerd.
De tweede afbeelding toont de naam van de pin, gerangschikt van pin-nummer, met een korte beschrijving. Pins 1-7 en 15 zijn de uitgangen Q0-Q7, laat die pinnen los voor nu. Pin 8 is een grond pin, sluit deze aan op grond van de Arduino. Pin 9 is een seriële data uitgang, dit wordt gebruikt om te verbinden met andere 595 voor daisy chaining. Serieschakeling kunt rijden van 16 of meer uitgangen met behulp van slechts drie van de digitale pinnen van de Arduino. Het is een beetje buiten de werkingssfeer van deze tutorial, maar u kunt meer lezen over het hier. Omdat we niet pin 9 gebruikt, kunnen we overlaten los (ook wel "drijvende" genoemd). Pin 10 is de master reset, wanneer deze pin laag gaat, hierdoor het shift register opnieuw instellen - geen gegevens verloren gaan we misschien hebben eerder opgeslagen. We niet willen dat deze functionaliteit nu, dus het resetten verbinden met 5V om te voorkomen dat opnieuw gebeurt. PIN 11 is de klok ingang of "klok pin", sluit deze aan op digitale pin van de Arduino 7. Pin 12 is de opslag registreren klok ingang of "klink pin", sluit deze aan op Arduino digitale pin 6. Pin 13 is de uitvoer inschakelen pin, wanneer er lage hierdoor de 595 gegevens te sturen naar de resultaten, we willen dit, deze pin verbinden met grond. Pin 14 is de seriële data-ingang, sluit deze aan op digitale pin van de Arduino 5. Pin 16 is de voeding naar de chip, sluit deze aan op 5V. De schakeling moet uitzien als afbeelding 3.
Sluit nu een LED en een weerstand om grond aan elk van de 595 van acht uitgangen pinnen. De schakeling moet er nu uitzien zoals in afbeelding 4. Nu instellen van de pin van een uitgang van de 595 hoge de bijbehorende LED zal oplichten, en lage instelling zal uitzetten de LED. Upload de volgende code:
//set 595 state int clockPin = 7; int latchPin = 6; int dataPin = 5; byte numberToDisplay = 154; void setup() { //all connections to 595 are outputs pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //first set latch pin low so we can shift in data without disrupting the outputs digitalWrite(latchPin, LOW); // shift out bits of data shiftOut(dataPin, clockPin, LSBFIRST, numberToDisplay); //set latch pin high to send data to output pins digitalWrite(latchPin, HIGH); }
Deze code introduceert een nieuw gegevenstype bytegenoemd, byte is zoals int, maar omdat bytes nodig alleen 8 bits van het geheugen, slaan ze alleen getallen tussen 0 en 255 (2 ^ 8 = 256).
De rest van de code is eenvoudig, met uitzondering van de regel:
shiftOut (dataPin, clockPin, LSBFIRST, numberToDisplay);
In deze lijn, de Arduino gebruikt de gegevens en klok pinnen van de 595 te sturen van het nummer 154 (de huidige waarde van numberToDisplay) in het register van de verschuiving. Het nummer 154 bevat de Staten van alle 8 pinnen van de 595:
154 geconverteerd naar een binair getal is 10011010
Als je kijkt naar de Staten voor uw LEDs, ziet u dat de verbonden met Q0 LED brandt, Q1 en Q2 uitgeschakeld, Q3 zijn en Q4 zijn op Q5 uitstaat, Q6 brandt en Q7 uitgeschakeld is. Zodat de LEDs hetzelfde patroon als het binaire getal volgen, een 1 staat voor een op LED en een 0 geeft aan dat een off LED.
Probeer nu de andere getallen is het getal 15 binaire 00001111 is, kunt u andere Decimaal aan binaire conversies op google door te typen van een # dan de zin "naar een binair getal" (het nummer het spuugt zal beginnen met 0b, negeren dat deel en pak de laatste 8 cijfers). Vergeet niet dat wij alleen binaire getallen met 8 cijfers in hen (8-bits) naar het shift register verzenden kunt omdat het heeft slechts 8 output pinnen, zodat de waarde van de numberToDisplay tussen 0 en 255 liggen moet.
Nu kunt u de parameter LSBFIRST MSBFIRST te proberen, moet u de volgorde van de LEDs achterzijde staat deze variabele sets de richting dat we het binaire getal dat in de 595 sturen: LSBFIRST betekent "minst significante bit eerst" en MSBFIRST betekent "meest significante bit eerst".
Om het een beetje meer interessant, probeert u het volgende:
int clockPin = 7; int latchPin = 6; int dataPin = 5; void setup() { //all connections to 595 are outputs pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (byte numberToDisplay=0;numberToDisplay<256; numberToDisplay++){ digitalWrite(latchPin, LOW); // shift out bits of data shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); //set latch pin high to send data to output pins digitalWrite(latchPin, HIGH); delay(500); } }
U hebt nu uw LEDs omgezet in een binaire teller: