jueves, 24 de septiembre de 2015

Laboratorio # 5


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


  1. //*----------------------
  2. // Laboratorio #5
  3. // Programa Arduino
  4. // Display 7 segmentos conectado a Arduino por medio de un
  5. // Registro de desplazamiento IC 74HC595 recibiendo datos
  6. // seriales y enviado el mismo dato en paralelo.
  7. // Johnson Camilo Barona Sanchez
  8. //*----------------------
  9.  
  10. #define MAX 10
  11. // se inicializan los pines para en envio de los datos al integrado
  12. int latchPin = 8;
  13. int clockPin = 12;
  14. int dataPin = 11;
  15. // se inicializan los arreglos para cada patrón
  16. byte Num[10];
  17. // otras variables usadas
  18. int pin;
  19. int valor;
  20. int pot = A0;
  21.  
  22. // config del programa
  23. void setup() {
  24.  
  25.   // se configuran los pines como salidas y el modulo de com serial
  26.   pinMode(latchPin, OUTPUT);
  27.   pinMode(dataPin, OUTPUT);  
  28.   pinMode(clockPin, OUTPUT);
  29.   pinMode(pot, INPUT);
  30.  
  31.   // se guarda cada patron de bits dependiendo del numero
  32.   // que se va a visualizar
  33.   Num[0]= 0b00111111;    // o 0x3F o 63
  34.   Num[1]= 0b00000110;    // o 0x06 o 6
  35.   Num[2]= 0b01011011;    // o 0x5B o 91
  36.   Num[3]= 0b01001111;    // o 0x0F o 79
  37.   Num[4]= 0b01100110;    // o 0x66 o 102
  38.   Num[5]= 0b01101101;    // o 0x6D o 109
  39.   Num[6]= 0b01111101;    // o 0x7D o 125
  40.   Num[7]= 0b00000111;    // o 0x07 o 7
  41.   Num[8]= 0b01111111;    // o 0x7F o 127
  42.   Num[9]= 0b01101111;    // o 0x6F o 111
  43. }
  44.  
  45. // Bucle de ejecución del programa
  46. void loop() {
  47.   // se lee el dato analogo
  48.   valor = analogRead(pot);
  49.   // la funcion separa el valor recibido en rangos de datos
  50.   // y se guarda el rango correspondiente en un integer
  51.   int pin = map(valor, 0,1023,0,9);
  52.   // se condiciona la ejecucion del comando envio
  53.   // de acuerdo al rango detectado
  54.   if (pin == 0){
  55.     envio(Num[0]);
  56.   }
  57.   if (pin == 1){
  58.     envio(Num[1]);
  59.   }
  60.   if (pin == 2){
  61.     envio(Num[2]);
  62.   }
  63.   if (pin == 3){
  64.     envio(Num[3]);
  65.   }
  66.   if (pin == 4){
  67.     envio(Num[4]);
  68.   }
  69.   if (pin == 5){
  70.     envio(Num[5]);
  71.   }
  72.   if (pin == 6){
  73.     envio(Num[6]);
  74.   }
  75.   if (pin == 7){
  76.     envio(Num[7]);
  77.   }
  78.   if (pin == 8){
  79.     envio(Num[8]);
  80.   }
  81.   if (pin == 9){
  82.     envio(Num[9]);
  83.   }
  84. }
  85.  
  86. // la funcion envio selecciona el byte correcto y lo envia al integrado
  87.  
  88. void envio(byte A){
  89.  
  90.   // se pone el pin latch en cero para guardar el valor mientras se transmite.
  91.   digitalWrite(latchPin, 0);
  92.   // se envia el dato  
  93.   shiftOut(dataPin, clockPin, MSBFIRST, A);
  94.   // se regresa el pin latch a estado alto para esperar el nuevo valor
  95.   digitalWrite(latchPin, 1);
  96.   delay(100);
  97. }




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.











No hay comentarios:

Publicar un comentario