pt gl es ca gl gl gl gl es gl en gl es en pt ceb pt gl it gl gl gl gl pt gl gl gl gl gl pt gl gl gl gl gl gl id gl en gl gl gl gl gl gl gl gl gl gl gl gl gl en gl gl gl gl en gl es es gl gl gl pt es gl gl gl pt pt en gl ar es gl en en en gl gl gl ca gl ca gl gl gl gl gl gl gl gl it gl gl gl gl gl gl gl gl gl gl en it es es gl es gl es es gl pt en gl gl ca fr fr gl gl gl pt es sv es gl sv pt en gl hu en gl gl en gl it it es uk pt gl gl gl gl gl en gl gl es gl gl vi gl gl gl gl es es gl gl gl gl gl it gl es en en en gl en en en en gl en en en en gl
Nesta práctica imos controlar 8 LEDs facendo distintas secuencias con eles. Realmente iso é o mesmo que o que fixemos nos xogos de luces, pero ímolo usar como escusa para traballar cun rexistro de desprazamento.
Se non tes problemas de pins dispoñibles na túa placa non necesitarás isto, pero se queres engadir moitos LEDs ao teu proxecto consumirás enseguida os pins dixitais do Arduíno e non quedarán para poder conectar outras cousas. Utilizar un rexistro de desprazamento vainos permitir aforrar pins de Arduíno.
Se non tes problemas de pins non te compliques, pasa desta sección e traballa como fixeches ata agora.
Un rexistro de desprazamento é un circuíto secuencial que cumpre as seguintes funcións:
É capaz de almacenar un conxunto de n bits.
Permite realizar a conversión de datos de serie a paralelo e viceversa.
Nós imos utilizar o 74HC595 (Shift Register de 8 bits serial-in, parallel-out) para cargar datos en serie e que o rexistro os vaia cargando nas saídas en paralelo. Con isto aforramos pins do Arduíno pois con só tres pins podemos controlar 8 saídas dixitais.
A forma de conectalo é a que se mostra na figura.
Hai tres pins importantes que conectaremos á placa Arduíno, no noso caso conectámolos aos pins 8, 11 e 12:
DATA IN ou DS: pin para enviar los bits en serie
Clock ou SH_CP: indica cando hai que ler o bit.
LATCH ou ST_CP: Cando os 8 bits de entrada se leron no rexistro, o LATCH escribe estes bits nos pins de saída do chip e mantenos ata que se reciban novos datos.
Os LEDs coas súas resistencias de protección irán nos pins 15, 1, 2, 3, … 7 (os marcados na figura como a, b, c,  etc.). Utilizamos 8 LEDs
Para enviar os datos ao rexistro imos utilizar a función
shiftOut(dataPin, clockPin, LSBFIRST, n);
n é o número que imos enviar. Se n=1 envía 00000001, se n=7 envía 00000111, se n=255 envía 11111111 etc. É dicir, hai que indicar o equivalente ao binario que se quere mostrar.
LSBFIRST indica que enviamos o número binario empezando polo menos significativo. Se n=7 (00000111) mostra 00000111
MSBFIRST indica que enviamos o número binario empezando polo máis significativo. Se n=7 (00000111) mostra 11100000
Tamén usaremos os operadores de desprazamento lóxico:
a<<n Despraza o número “a” n bits cara á esquerda. Por exemplo, 1<<2 despraza o número 00000001 dous lugares cara á esquerda, quedando 00000100
a>>n Despraza o número “a” n bits cara á dereita. Por exemplo, 128>>1 despraza o número 10000000 un lugar cara á dereita, quedando 01000000
Neste programa podes ver varios modos de funcionamento:
// Declaración de variables: int latchPin = 8 ; //Pin ST_CP do 74HC595 - Escritura na saída int clockPin = 12; //Pin SH_CP do 74HC595 - Reloxo int dataPin = 11; //Pin DS do 74HC595 - Datos // Configuración: void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } // Programa: void loop() { // Programa que envía bytes determinados digitalWrite(latchPin, LOW) ; // Latch a LOW mentres introducimos os datos shiftOut(dataPin, clockPin, LSBFIRST, 7); // Enviamos 7 (00000111) LSBFIRST -> queda 00000111 digitalWrite(latchPin, HIGH) ; // Latch a HIGH fixa os valores na saída delay(1000); digitalWrite(latchPin, LOW) ; shiftOut(dataPin, clockPin, MSBFIRST, 7); // Enviamos 7 (00000111) MSBFIRST -> queda 11100000 digitalWrite(latchPin, HIGH) ; delay(1000); // Programa que representa nos LEDs os números binarios de 0 a 256 for (int n = 0; n  >i); // Despraza 11100000 (224) cara á dereita digitalWrite(latchPin, HIGH) ; delay(500); } // Programa que vai apagando leds cara á esquerda for (int i = 0; i  >i); // Despraza 11111111 (255) cara á dereita digitalWrite(latchPin, HIGH) ; delay(300); } }
Fai os teus xogos de luces co rexistro de desprazamento.
Se necesitas axuda para converter de binario a decimal e viceversa pode resultarche útil esta aplicación feita con Scratch:
[Scratch: Convertedor de sistemas de numeración]
Deixa un comentario Cancelar a resposta
Nome Correo electrónico Sitio web
Gardar o meu nome, correo electrónico e web neste navegador para a próxima vez que faga un comentario.
Descrición de Arduíno UNO
O IDE de Arduíno
Entradas e saídas dixitais
Condicional if … else
Sinais PWM e lectura serial
Array de LEDs e funcións
A posición dun servo
Servos de xiro continuo
Motor de corrente continua
Motores paso a paso
Sensor de Luz LDR
Sensor de temperatura LM35 e TMP36
Sensor de temperatura e humidade DHT11
Sensor de temperatura DS18B20
Sensor de movemento PIR
Sensor de cor TCS3200
Sensor de cor TCS34725 RGB
Sensor de auga no solo
Medindo o tempo 1
Medindo o tempo 2: RTC
Bluetooth mestre + escravo
O tanque de auga
Reloxo de area dixital
A máquina máis inútil
Clasificador M&M’s por cor
Alarma para a cortadora láser
© 2022 Arduino • Creado con GeneratePress
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.