Propaganda
Hoje vou tentar ensinar um pouco sobre os registros de turno. Essa é uma parte bastante importante da programação do Arduino, basicamente porque eles expandem o número de saídas que você pode usar, em troca de apenas 3 pinos de controle. Você também pode registrar registros de troca em série para obter ainda mais resultados.
Este é um salto significativo em dificuldade em relação aos tutoriais anteriores, e eu sugiro fortemente que você tenha uma muito bom entendimento do material anterior (links no final deste artigo), bem como entendimento a noções básicas de binário O que é binário? [Tecnologia explicada]Dado que o binário é tão absolutamente fundamental para a existência de computadores, parece estranho que nunca tenhamos abordado o assunto antes - então hoje eu pensei em dar uma breve visão geral do que o binário ... consulte Mais informação que escrevi da última vez.
O que é um Shift Register?
Um registro de deslocamento de saída, tecnicamente falando, recebe dados em série e os envia em paralelo. Em termos práticos, isso significa que podemos enviar rapidamente um monte de comandos de saída para o chip, solicitar a ativação e as saídas serão enviadas aos pinos relevantes. Em vez de iterar através de cada pino, simplesmente enviamos a saída necessária para todos os pinos de uma só vez, como um único byte ou mais informações.
Se isso ajuda a entender, você pode pensar em um registro de turno como uma "matriz" de saídas digitais, mas podemos pular os comandos habituais digitalWrite e simplesmente enviar uma série de bits para ativá-los ou fora.
Como funciona?
O registro de turno que usaremos - o 74HC595N incluído no kit inicial Oomlout - precisa de apenas 3 pinos de controle. O primeiro é um relógio - você não precisa se preocupar muito com isso, pois as bibliotecas seriais do Arduino controlam - mas um relógio é basicamente apenas um pulso elétrico ligado / desligado que define o ritmo do sinal de dados.
O pino de trava é usado para informar ao registrador de mudança quando deve ligar e desligar suas saídas de acordo com os bits que acabamos de enviar - ou seja, travando-os no lugar.
Finalmente, o pino de dados é o local onde enviamos os dados seriais reais com os bits para determinar o estado ligado / desligado das saídas do registrador de mudança.
Todo o processo pode ser descrito em 4 etapas:
- Defina o pino de dados como alto ou baixo para o primeiro pino de saída no registro de deslocamento.
- Pulsar o relógio para "transferir" os dados para o registro.
- Continue configurando os dados e pulsando o relógio até definir o estado necessário para todos os pinos de saída.
- Pulsar o pino da trava para ativar a sequência de saída.
Implementação
Você precisa dos seguintes componentes para este projeto:
- Chip de registro de deslocamento 7HC595N
- 8 LEDS e resistores apropriados, ou o que você deseja enviar para
- A placa de ensaio usual, conectores e um Arduino básico
Se você possui o kit inicial Oomlout, pode fazer o download do layout da placa de ensaio aqui.
Aqui está o vídeo da montagem:
O layout da placa:
E minha versão montada:
Modifiquei o código original fornecido pelo Ooolmout, mas se você quiser tentar, ele pode ser baixado na íntegra aqui. A explicação do código está incluída; portanto, copie e cole tudo a partir de baixo ou pastebin para ler uma explicação do código.
/ * * | Tutorial de Registro de Turno, baseado em | * Kit de Experimentação Arduino CIRC-05 | * |.: 8 Mais LEDs:. (74HC595 Shift Register) | * * Modificado por James @ MakeUseOf.com | * * / // Definições dos pinos. // 7HC595N possui três pinos. dados int = 2; // para onde enviamos os bits para controlar as saídas int clock = 3; // mantém os dados sincronizados. int trava = 4; // informa ao registrador de deslocamento quando ativar a sequência de saída void setup () {// defina os três pinos de controle na saída pinMode (data, OUTPUT); pinMode (relógio, SAÍDA); pinMode (trava, SAÍDA); Serial.begin (9600); // para que possamos enviar mensagens de depuração para o monitor serial. } void loop () {outputBytes (); // nossa saída básica que grava 8 bits para mostrar como um registrador de deslocamento funciona. //outputIntegers(); // envia um valor inteiro como dados em vez de bytes, contando efetivamente em binário. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (trava, LOW); Serial.println (i); // Depuração, enviando saída para o monitor serial shiftOut (data, clock, MSBFIRST, i); digitalWrite (trava, ALTO); atraso (100); }} void outputBytes () {/ * Bytes, ou 8 bits, são representados por um B seguido por 8 0 ou 1s. Nesse caso, considere isso como uma matriz que usaremos para controlar os 8 LEDs. Aqui, iniciei o valor do byte como 00000001 * / byte dataValues = B00000001; // altere isso para ajustar o padrão inicial / * No loop for, começamos puxando a trava para baixo, usando a função shiftOut Arduino para fale com o registrador de turnos, enviando nosso byte de dataValues representando o estado dos LEDs e puxe a trava alta para travá-los Lugar, colocar. Por fim, deslocamos os bits um lugar para a esquerda, o que significa que a próxima iteração acenderá o próximo LED da série. Para ver o valor binário exato sendo enviado, verifique o monitor serial. * / for (int i = 0; i <8; i ++) {digitalWrite (trava, LOW); Serial.println (dataValues, BIN); // Depuração, enviando saída para o monitor serial shiftOut (data, clock, MSBFIRST, dataValues); digitalWrite (trava, ALTO); dataValues = dataValues << 1; // Desloque os bits um lugar para a esquerda - mude para >> para ajustar o atraso da direção (100); } }
Deslocamento de bits (função OutputBytes)
No primeiro exemplo de loop - outputBytes () - o código utiliza uma sequência de 8 bits (um byte) que depois muda para a esquerda a cada iteração do loop for. É importante observar que, se você mudar mais do que é possível, a parte é simplesmente perdida.
A troca de bits é feita usando << ou >> seguido pelo número de bits que você deseja alternar.
Confira o exemplo a seguir e certifique-se de entender o que está acontecendo:
byte val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, perdemos esses outros bits! val = val >> 5 // B00000010.
Em vez disso, enviando números inteiros (função OutputIntegers)
Se você enviar um número inteiro para o registro de deslocamento em vez de um byte, ele simplesmente converterá o número em uma sequência de bytes binários. Nesta função (descomente o loop e faça o upload para ver o efeito), temos um loop for que conta de 0 a 255 (o número inteiro mais alto que podemos representar com um byte) e o envia. Como conta basicamente em binário, a sequência pode parecer um pouco aleatória, a menos que seus LEDs estejam dispostos em uma longa fila.
Por exemplo, se você ler o artigo explicado binário, saberá que o número 44 será representado como 00101100; portanto, os LEDs 3,5,6 acenderão nesse ponto da sequência.
Encadeamento de mais de um turno
O mais notável sobre os Registros de Turno é que, se eles receberem mais de 8 bits de informação (ou por maior que seja o registro deles), eles mudarão os outros bits adicionais novamente. Isso significa que você pode conectar uma série delas, inserir uma longa cadeia de bits e distribuí-la para cada registro separadamente, tudo sem nenhuma codificação adicional da sua parte.
Embora não detalhemos o processo ou os esquemas aqui, se você tiver mais de um turno, pode tentar o projeto no site oficial do Arduino aqui.
Outros artigos da série:
- O que é o Arduino e o que você pode fazer com ele O que é o Arduino e o que você pode fazer com ele?O Arduino é um pequeno dispositivo eletrônico notável, mas se você nunca usou um antes, exatamente o que são e o que você pode fazer com um? consulte Mais informação ?
- O que é um Arduino Starter Kit e o que ele contém? O que está incluído no kit inicial do Arduino? [MakeUseOf explica]Eu introduzi anteriormente o hardware de código aberto do Arduino aqui no MakeUseOf, mas você precisará mais do que apenas o Arduino real para criar algo com ele e realmente começar. Os "kits iniciais" do Arduino são ... consulte Mais informação
- Mais componentes interessantes para comprar com seu Starter Kit 8 componentes mais legais para seus projetos de ArduinoEntão, você está pensando em adquirir um kit inicial do Arduino, mas quer saber se alguns LEDs e resistores básicos serão suficientes para mantê-lo ocupado no fim de semana? Provavelmente não. Aqui estão mais 8 ... consulte Mais informação
- Começando com o seu Arduino Starter Kit? Instalação de drivers e configuração da placa e porta Introdução ao Arduino Starter Kit - Instalação de drivers e configuração da placa e da portaEntão, você comprou um kit inicial do Arduino e, possivelmente, outros componentes interessantes aleatórios - e agora? Como você realmente começou a programar essa coisa do Arduino? Como você configura... consulte Mais informação
- Fritzing, uma ferramenta gratuita para desenhar diagramas de circuitos Fritzing - A melhor ferramenta para esboçar projetos de eletrônicos [Cross Platform]Apesar de parecer um alcopop, o Fritzing é na verdade um pouco incrível de software livre que você pode usar para criar diagramas de circuitos e componentes para uso em placas eletrônicas de prototipagem rápida, como a fantástica fonte aberta Arduino ... consulte Mais informação
- Um olhar mais atento à estrutura de um aplicativo Arduino e ao programa Blink de exemplo Primeiros passos com o Arduino: um olhar mais atento à placa de circuito e à estrutura de um programaA última vez que deixei você configurou o seu Arduino para funcionar com Mac ou Windows e fez o upload de um aplicativo de teste simples que piscava no LED integrado. Hoje eu vou explicar o código ... consulte Mais informação
- Arduino Xmas tree lights project Um projeto do Arduino: Como fazer enfeites de luzes de Natal chamativasEsta é a próxima parte da nossa série de aprendizado do Arduino, e desta vez aprenderemos e usaremos as matrizes para fazer um pequeno enfeite de árvore de Natal com várias sequências piscantes. Isso seria um ... consulte Mais informação (AKA aprendendo sobre matrizes)
- O que é binário? O que é binário? [Tecnologia explicada]Dado que o binário é tão absolutamente fundamental para a existência de computadores, parece estranho que nunca tenhamos abordado o assunto antes - então hoje eu pensei em dar uma breve visão geral do que o binário ... consulte Mais informação
Isso é o que temos hoje em dia com os registros de turnos, pois acho que cobrimos muito. Como sempre, incentivamos você a brincar e ajustar o código, e sinta-se à vontade para fazer qualquer pergunta que possa ter nos comentários ou até mesmo compartilhar um link para seu incrível projeto baseado em registros de turnos.
James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.