Programação arduino - jogando com registradores de deslocamento (a.k.a ainda mais leds)

Hoje 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 para 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), assim como a compreensão da noções básicas de binário que eu escrevi pela última vez.O que é o binário? [Tecnologia Explicada]O que é o binário? [Tecnologia Explicada]Dado que binário é tão absolutamente fundamental para a existência de computadores, parece estranho que nós nunca abordou o assunto antes - por isso hoje eu pensei que eu iria dar um breve resumo do que binário ...consulte Mais informação

O que é uma mudança registar-se?

Um registrador 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 monte 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 iteração através de cada pino, nós simplesmente enviar a saída requerida para todos os pinos de uma vez, como um único byte ou mais informações.

Se ele ajuda a entender, você pode pensar de um registo de deslocamento como um ‘array` 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 o registo de deslocamento, quando deveria transformar suas saídas dentro e fora de acordo com os bits que acabamos de enviar-lo - ou seja, 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 registrador de deslocamento.

Todo o processo pode descrito em 4 passos:

  1. Definir o pino de dados de alta ou baixa para o primeiro pino de saída do registador de deslocamento.
  2. Pulso o relógio para ‘mudança` os dados no registo.
  3. Continue definindo os dados e pulsante do relógio até ter definido o estado necessário para todos os pinos de saída.
  4. Pulsar o pino de ferrolho para activar a sequê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
  • Os breadboard habituais, conectores e um Arduino básico

Se você tiver o kit Oomlout partida, você pode baixar o layout 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 já modificou o código original fornecido pela Ooolmout, mas se você gostaria de tentar que em vez disso, ele pode ser baixado na íntegra aqui. Explicação do código está incluído, para copiar e colar a coisa toda de baixo ou pastebin para ler uma explicação do 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 () {// definir os três pinos de controle para outputpinMode (dados, 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 escreve 8-bits para mostrar como um registo works.// turno outputIntegers () - // envia um valor inteiro como dados em vez de bytes, contando efectivamente em binário} outputIntegers void () {para (int i = 0-IGT, para ajustar directiondelay (100) -}}.

Bit-shifting (OutputBytes Função)

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

Bit-shifting é feito usando lt; lt; ou gt; gt; seguido pelo número de bits que você deseja mudar por.

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

byte val = B00011010val = val lt; lt; 3 // B11010000val = val lt; lt; 2 // B01000000, perdemos os outros pedaços! Val = val gt; gt; 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 sequê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, assim 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 uma série de-los juntos, empurrar em uma longa cadeia de bits, e tê-lo distribuído a cada registrar separadamente, todos sem codificação adicional de sua parte.

Embora não seremos detalhando o processo ou esquemas aqui, se você tem mais de um turno registrar, 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 incrível com base turno registo.


Artigos relacionados