Programação arduino - jogo com registos de deslocamento (a.k.a mesmo mais leds)

programação arduinoHoje eu vou tentar ensinar-lhe um pouco sobre registos de deslocamento. Estes são uma parte bastante importante da programação Arduino, basicamente porque eles expandir o número de saídas que você pode usar, em troca de apenas 3 pinos de controle. Você também pode mudança em cadeia registra em conjunto, a fim de obter ainda mais saídas.

Este é um salto significativo na dificuldade de tutoriais anterior, porém, e eu sugiro fortemente que você tem um bom entendimento sobre o material anterior (links no final deste artigo), bem como a compreensão da noções básicas de binário que escrevi pela última vez.

O que é uma mudança Register?

Um registo de deslocamento de saída, tecnicamente falando, recebe dados em série e saídas em paralelo. Em termos práticos, isto significa que podemos enviar rapidamente um grupo de comandos de saída para o chip, diga a ele para ativar, e as saídas serão enviados para os pinos relevantes. Em vez de a iteração através de cada pino, que simplesmente enviar a saída necessária para todos os pinos de uma só vez, como um único byte de informação ou mais.

Se ele ajuda a entender, você pode pensar em um registrador de deslocamento como um "leque" de saídas digitais, mas podemos ignorar os comandos digitalWrite habituais e simplesmente enviar uma série de bits para transformá-los ligado ou desligado.

Como funciona?

O registador de deslocamento estaremos usando - o 74HC595N incluído no kit de iniciação Oomlout - precisa apenas 3 pinos de controle. O primeiro é um relógio - você não precisa se preocupar muito sobre isso como as bibliotecas de série Arduino controlá-lo -, mas um relógio é basicamente apenas uma on / off pulso elétrico que define o ritmo para o sinal de dados.

O pino de trava é usado para dizer ao registo de deslocamento quando se deve girar suas saídas dentro e fora de acordo com os bits que acabamos de enviar-lo - isto é, trancando-os no lugar.

Finalmente, o pino de dados é onde enviamos os dados de série real com os bits para determinar a on / off estado das saídas do registo de deslocamento.

Todo o processo pode descrito em 4 passos:

  1. Defina o pino de dados de alta ou baixa para o primeiro pino de saída do registrador de deslocamento.
  2. Pulso o relógio para "mudança" os dados no registo.
  3. Continue a definir os dados e pulsante do relógio até ter definido o estado exigido para todos os pinos de saída.
  4. Pulsar o pino de bloqueio para ativar a seqüência de saída.

Implementação

Você precisa dos seguintes componentes para este projeto:

  • 7HC595N mudar chip de registo
  • 8 LEDs e resistores apropriados, ou o que quer que você quer saída para
  • Tábua de pão habituais, conectores e um Arduino básico


Se você tem o Oomlout starter kit, você pode baixar a layout de placa de ensaio a partir daqui.

Aqui está o vídeo de montagem:

O layout da placa:

programação arduino

E a minha versão montada:

Eu modificado o código original fornecido pela Ooolmout, mas se você gostaria de tentar que, ao invés, pode ser baixado na íntegra aqui. Explicação do código está incluído, para copiar e colar a coisa toda abaixo ou pastebin para ler uma explicação sobre o código.

/ * ------------------------------------------------ --------- * | Shift Register Tutorial, com base em | * | Arduino Experimentação Kit CIRC-05 | * | .: 8 Mais LEDs:. (74HC595 Shift Register) | * ------------------------------------------- -------------- * | Modificado por James @ MakeUseOf.com | * ----------------------------------------- ---------------- * /// Pin Definições // 7HC595N tem três dados pinsint = 2 // onde enviar os bits para controlar relógio outputsint = 3- // mantém o dados trava syncint = 4- // informa o registo de deslocamento quando ativar a configuração sequencevoid saída () {// definidos os três pinos de controle para outputpinMode (dados, de saída) -pinMode (relógio, oUTPUT) -pinMode (trava, oUTPUT ) -Serial.begin (9600) - // para que possamos enviar mensagens de depuração para monitor serial} void loop () {outputBytes () - // nossa saída básico que grava 8-bits para mostrar como um registo works.// turno outputIntegers () - // envia um valor inteiro como dados em vez de bytes, contando efetivamente em binário} outputIntegers void () {for (int i = 0-i> para ajustar directiondelay (100) -.}}

Bit-Shifting (OutputBytes Function)

No primeiro exemplo loop - outputBytes () - o código utiliza uma sequência de 8 bits (um byte) que, em seguida, desloca à esquerda cada iteração do loop. É importante notar que se você mudar mais do que é possível, o bit é simplesmente perdido.



Bit-shifting é feito usando << or >> Seguido pelo número de bits que você deseja transferir por.

Confira o exemplo a seguir e certifique-se de compreender o que está acontecendo:

byte Val Val = = B00011010val << 3 // B11010000val = val << 2 // B01000000, we lost those other bits!val = val >> 5 // B00000010

Enviando Inteiros Em vez disso (OutputIntegers Function)

Se você enviar um número inteiro para o registo de deslocamento em vez de um byte, ele simplesmente irá converter o número em uma seqüência de bytes binário. Nesta função (uncomment no circuito e fazer o upload para ver o efeito), temos um loop que conta 0-255 (o número inteiro mais alto podemos representar com um byte), e envia essa vez. Basicamente, conta em binário, então a sequência pode parecer um pouco aleatório, a menos que seus LEDs são dispostos em uma longa fila.

Por exemplo, se você ler o binário explicou artigo, você vai saber que o número 44 será representado como 00101100, de modo LEDs 3,5,6 vão acender naquele ponto na seqüência.

Encadeamento mais de um turno Register

A coisa notável sobre registos de deslocamento é que se forem dadas mais de 8-bits de informação (ou por maior que seu registro é), eles vão mudar os outros bits adicionais para fora outra vez. Isto significa que você pode conectar-se de uma série de los juntos, empurrar em uma longa cadeia de bits, e tê-lo distribuído a cada registrar separadamente, todos com nenhuma codificação adicional de sua parte.

Embora nós não será detalhar o processo ou esquemas aqui, se você tiver mais de um registo de deslocamento, você pode tentar o projeto a partir do site Arduino oficial aqui.

Outros artigos da série:

Isso é tanto quanto nós iremos com registos de deslocamento de hoje, como eu acho que nós cobrimos muito. Como sempre, eu encorajá-lo para jogar com e ajustar o código, e não hesite em perguntar qualquer dúvida que possa ter nos comentários, ou mesmo compartilhar um link para seu projeto impressionante base de registo de deslocamento.

» » Programação arduino - jogo com registos de deslocamento (a.k.a mesmo mais leds)