Practica 3- Contador digital en el MCU


Santiago Tobon- Diego Uribe
  • Objetivos

·       Familiarizarse con el manejo del microcontrolador.
·       Manipular los pines del PSoC como puertos de entrada/salida.
·       Usar los módulos de generación de tiempo: Retardas e interrupciones.

Introducción
En la práctica realizada se utilizó el microcontrolador para hacer un script que ejecuta un conteo desde el número 1 hasta el 9. Conteo que se va a mostrar en un display 7 segmentos, y el sentido del conteo se va a mostrar en 4 leds de colores.

  
Procedimiento.
Implementar un contador con una entrada que selecciona el sentido del conteo (arriba/abajo). El contador es visualizable en el display de 7 segmentos. Además de ello, se deberá implementar un registro de desplazamiento de 4 bits que indicará sentido del conteo: Desplazamiento a la derecha o la izquierda.




Materiales
  •   Protoboard 
  •  Cables 
  •  Diodos emisores de luz 
  •  Resistencias de 220Ω, 330Ω y 4.7kΩ 
  •  Dipswitch o pulsadores 
  • Tarjeta PSoC 5
  •  Computador con PSoC Creator 

 Descripción de la práctica
Para que el microcontrolador ejecute el conteo y lo muestre en los led's, se tiene que programar el script , se debe tener en cuenta que el display de 7 segmentos debe verificarse si es de ánodo común o de cátodo, luego de esto se procede a realizar el montaje en la protoboard, en la siguiente gráfica se muestra la distribución de los led's y la asignación que se le debe asignar en el código.




El display usado es de ánodo común, esto quiere decir que para que cada segmento se
prenda debe recibir un “cero” o un “bajo”, 
Para que el display encienda los segmentos correctamente se debe usar la lógica binaria, es decir debe realizar el conteo para llevarle los números al display.

identificó el problema y se corrigió fácilmente.
void conv2disp (uint8 conteo)
{
   if (conteo==0)
      Dis_Write(0b01000000);
    
    else if (conteo==1)
      Dis_Write(0b11111001);
    
    else if (conteo==2)
      Dis_Write(0b10100100);
    
    
    else if (conteo==3)
      Dis_Write(0b10110000);
    
    else if (conteo==4)
      Dis_Write(0b10011001);
    
    else if (conteo==5)
      Dis_Write(0b10010010);
    
    else if (conteo==6)
      Dis_Write(0b00000010);
    
    else if (conteo==7)
      Dis_Write(0b11111000);
    
    else if (conteo==8)
      Dis_Write(0b10000000);
    
    else if (conteo==9)
      Dis_Write(0b10010000);
}    

void conv2led(uint8 sentido)
{
    if (sentido==1)
        Sentidos_Write(0b00000001);
    else if (sentido==2)
        Sentidos_Write(0b00000010);
    else if (sentido==3)
        Sentidos_Write(0b00000100);
    else if(sentido==4)
        Sentidos_Write(0b00001000);
}
    
int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    
    uint8 Suiche;
    uint8 conteoup = 0;
    uint8 conteodown = 10;
    uint8 sentidoup = 0;
    uint8 sentidodown= 5;
    uint8 x=0;
    
    
    for(;;)
    {
    x = Suiche_Read();
    
    if (x==1) //UP
    {
        conteoup= conteoup+1;
        sentidoup= sentidoup +1;
        conv2disp (conteoup);
        conv2led (sentidoup);
        

        CyDelay (500);

        if (conteoup>9)
            conteoup = 0;
        
        if (sentidoup>4)
            sentidoup = 0;
        
     }
    
    else if(x==0)  //DOWN
    {
        conteodown = conteodown-1;
        sentidodown = sentidodown-1;
        conv2disp(conteodown);
        conv2led (sentidodown);
        
        if (conteodown==0)
            conteodown = 10;
        
        if (sentidodown==0)
            sentidodown = 4;
            
        CyDelay (500);   
    }   
   
    }
}


Resultados y análisis de resultados

En la practica realizada se debía familiarizar el manejo de las interrupciones, las cuales son más eficientes debido a que esta tiene una mejor frecuencia de tiempo al realizar el conteo, caso contrario a la función (CyDelay) la cúal usamos con una interrupción pero no es la forma más eficiente de realizarlo.
Por otra parte el conteo ascendente se tuvo un problema al momento de realizar dicha función , esto debido a que no mostraba el número cero en el display, esto es quizá debido a un error en la lógica o en la función que llamamos "conteoup"


A continuación se observa el desarrollo de esta.


Comentarios

Entradas populares de este blog

Practica 7 - Transistor en corte y saturación

Práctica 8 - Puente rectificador