Descripción:
Este laboratorio consiste en recibir un valor convertido de un potenciometro conectado a la entrada análoga A0 del arduino, esta señal debe ser tratada con una función para determinar el intervalo del valor de 0 a 9 para asi mostrarlo en un display 7-segmentos conectados a la salida del integrado en este caso el IC 74HC595.
Mediante un array de datos de tipo byte se manejan los patrones a mostrar en el dislay. Los datos estan escritos en binario.
0b00111111 = 0
0b00000110 = 1
0b01011011 = 2
0b01001111 = 3
0b01100110 = 4
0b01101101 = 5
0b01111101 = 6
0b00000111 = 7
0b01111111 = 8
0b01101111 = 9
Para el enviar los patrones al display el integrado hace una conversión serial paralelo para reducir el numero de pines necesarios para mostrar el numero de 7 pines a 3 pines solamente (Data, Latch, Clock).
Materiales:
- Arduino UNO
- Circuito integrado IC 74HC595
- Display 7-Segmentos cátodo común
- 7 Resistencias
- Computador con su respectivo programa de desarrollo arduino
- Protoboard
- Cables
Diagramas:
Montaje
Esquemático
Código
- //*----------------------
- // Laboratorio #5
- // Programa Arduino
- // Display 7 segmentos conectado a Arduino por medio de un
- // Registro de desplazamiento IC 74HC595 recibiendo datos
- // seriales y enviado el mismo dato en paralelo.
- // Johnson Camilo Barona Sanchez
- //*----------------------
- #define MAX 10
- // se inicializan los pines para en envio de los datos al integrado
- int latchPin = 8;
- int clockPin = 12;
- int dataPin = 11;
- // se inicializan los arreglos para cada patrón
- byte Num[10];
- // otras variables usadas
- int pin;
- int valor;
- int pot = A0;
- // config del programa
- void setup() {
- // se configuran los pines como salidas y el modulo de com serial
- pinMode(latchPin, OUTPUT);
- pinMode(dataPin, OUTPUT);
- pinMode(clockPin, OUTPUT);
- pinMode(pot, INPUT);
- // se guarda cada patron de bits dependiendo del numero
- // que se va a visualizar
- Num[0]= 0b00111111; // o 0x3F o 63
- Num[1]= 0b00000110; // o 0x06 o 6
- Num[2]= 0b01011011; // o 0x5B o 91
- Num[3]= 0b01001111; // o 0x0F o 79
- Num[4]= 0b01100110; // o 0x66 o 102
- Num[5]= 0b01101101; // o 0x6D o 109
- Num[6]= 0b01111101; // o 0x7D o 125
- Num[7]= 0b00000111; // o 0x07 o 7
- Num[8]= 0b01111111; // o 0x7F o 127
- Num[9]= 0b01101111; // o 0x6F o 111
- }
- // Bucle de ejecución del programa
- void loop() {
- // se lee el dato analogo
- valor = analogRead(pot);
- // la funcion separa el valor recibido en rangos de datos
- // y se guarda el rango correspondiente en un integer
- int pin = map(valor, 0,1023,0,9);
- // se condiciona la ejecucion del comando envio
- // de acuerdo al rango detectado
- if (pin == 0){
- envio(Num[0]);
- }
- if (pin == 1){
- envio(Num[1]);
- }
- if (pin == 2){
- envio(Num[2]);
- }
- if (pin == 3){
- envio(Num[3]);
- }
- if (pin == 4){
- envio(Num[4]);
- }
- if (pin == 5){
- envio(Num[5]);
- }
- if (pin == 6){
- envio(Num[6]);
- }
- if (pin == 7){
- envio(Num[7]);
- }
- if (pin == 8){
- envio(Num[8]);
- }
- if (pin == 9){
- envio(Num[9]);
- }
- }
- // la funcion envio selecciona el byte correcto y lo envia al integrado
- void envio(byte A){
- // se pone el pin latch en cero para guardar el valor mientras se transmite.
- digitalWrite(latchPin, 0);
- // se envia el dato
- shiftOut(dataPin, clockPin, MSBFIRST, A);
- // se regresa el pin latch a estado alto para esperar el nuevo valor
- digitalWrite(latchPin, 1);
- delay(100);
- }
Proceso de Montaje
Display 7-Segmentos
Integrado IC 74HC595
Procedemos a montar en la protoboard el display 7-segmentos con sus respectivas resistencias de protección y luego estas al negativo del arduino.
Luego Procedemos a conectar el integrado con las conexiones indicadas en su datasheet.
Finalmente cuando todas las conexiones eléctricas están listas, procedemos a programar y luego enviar el código ya apreciado anteriormente a nuestro circuito para su funcionamiento.