miércoles, 16 de marzo de 2011

Envio de cadena de caracteres y visualización en LCD

Programa para PIC16F84A
  • Este programa recibe una cadena de 16 caracteres ASCII de la calculadora HP 50g y la muestra en un LCD con controlador Hitachi 44780.
  • Se utiliza Direccionamiento Indirecto para guardar la cadena de caracteres en registros sucesivos a partir de la dirección 20h.
  • Los datos en serie se reciben a 9600 baudios por el pin RA4.
Funcionamiento:
  • Según el siguiente diagrama de tiempos de envio de datos en serie:
  •  El programa espera a que se presente un "0" (bit START). Cuando esto ocurre se ejecuta una rutina que guarda los bits que llegan en serie, a partir del menos significativo, en la dirección de memoria al que apunta el registro FSR (Direccionamiento indirecto). 
  • Una vez recibidos los 8 bits, debidamente sincronizados a 9600 baudios mediante retardos, se ejecuta un retardo más a la espera del primer bit STOP (para evitar falsas lecturas de "0" que podría ser el 8 bit de datos).
  • Se incrementa FSR para apuntar a la dirección sucesiva y se incrementa un contador de caracteres recibidos.
  • Si ya se recibieron 16 caracteres se salta a la rutina que muestra la cadena en un LCD, una vez finalizada se repite el proceso nuevamente . Caso contrario se espera un nuevo "0" (bit START) para recibir el siguiente caracter. 
Diagrama de Conexión:

  • La cantidad de caracteres a recibir se puede modificar en el archivo .ASM (donde se indica).
  • Opcional: para enviar caracteres desde la calculadora crear el siguiente programa que permite enviar 10 cadenas cada vez que se ejecuta. Escribir la cadena entre comillas (".....") cuando se solicite.
                       << 'a'    PURGE  
                            1    10
                            FOR   j
                               "CADENA   A   ENVIAR"
                               {":a:"  {0 0}   V}
                               INPUT
                                OBJ→    'a'    STO    a
                                9600 BAUD
                                XMIT
                                DROP
                            NEXT
                            'a'   PURGE >>

Archivos .ASM y .HEX:


    lunes, 14 de marzo de 2011

    Envio de datos por puerto serie de calculadora HP 50g

    Programa para PIC16F84A

    • Programa que recibe datos del puerto serie de la HP 50g a 9600 baudios.
    • La HP 50g envia caracteres ASCII por el puerto serie (Compatible con interfaz RS232, necesario adaptador de niveles de tensión) según el siguiente gráfico de tiempos:



    • Se utiliza el bit START para generar una interrupción por el pin RB0/INT por flanco de bajada.
    • La rutina de interrupción guarda los bits de datos recibidos en serie en el registro DATO.
    • Se incluye rutinas de retardo para sincronizar a 9600 baudios.
    • Una vez finalizada la recepción de datos se muestran los bits (en ASCII) mediante leds en los pines: RB7-RB4 y RA3 - RA0, nibles superior e inferior respectivamente.
    • Para enviar un caracter ASCII de la calculadora HP 50g crear el siguiente programa:
                                                <<9600 BAUD XMIT>>

              Guardar en una variable.
    • En modo RPN poner el caracter que se desea enviar en el nivel 1 de la pila entre " " y ejecutar el programa.

    Esquema de conexión:


    El transistor 2N3904 es necesario como adaptador de nivel de tensión ya que la calculadora transmite en niveles CMOS (3.3 V).

    Archivos .ASM y .HEX para PIC
    Descargar

    Se publicará mas información según avance.

    miércoles, 9 de marzo de 2011

    Ejemplos Ruta de Datos

    1. Ruta de datos simple.
        - 1 registro de 8 bit.
        - ALU de 8 operaciones. A: Registro y B: Inmediato

     
        Component: alu.vhd
        Component: registro_r0.vhd
        Programa principal: ruta_datos.vhd

    2. Ruta de datos sin acceso a memoria.
        - Banco de 4 registros de 1 byte.
        - Memoria de programa de 16 x 15 bits.
        - ALU de 8 operaciones
        - Ejecución de instrucción por cada pulso de botón.
        - Visualización de contenido de registros en display.
        - Sin acceso a memoria.    


        
        Palabra de comando:


    2
    2

    3
    1
    1
    SELA
    SELB
    6
    OP
    WR
    SELI
    SELD
    INMEDIATO

       Component para procesador.vhd : alu.vhd y registro.vhd
       Component para ruta_datos.vhd: procesador.vhd, mem16x15.vhd
                                                              y visor.vhd

    3. Ruta de datos con acceso a memoria.
        - Banco de 4 registros.
        - Memoria de programa de 16 x 17 bits.
        - ALU de 8 operaciones.
        - Acceso a memoria RAM de lectura/escritura de 16 bytes.
        - Ejecución de instrucción por cada pulso de botón.
        - Visualización de registros en display.        
                     
     

        Palabra de comando:



    2
    2


    2
    SELB


    3
    1
    1
    1
    1
    SELA
    DIR
    4
    OP
    WR
    W
    SELM
    SELI
    SELD
    INMEDIATO

       Component para procesador.vhd: alu.vhd y registro.vhd
       Component para ruta_datos.vhd: procesador.vhd, mem16x17.vhd,  
                                                              ram16x8.vhd, visor.vhd

       Todos los archivos:
        Descargar

    Ejemplos Estilo Estructural

    1. Sumador de 16 bit. Sentencia For..Generate.
        Component: full_adder.vhd

     
     
        Programa principal: add16.vhd


    2.Contador hexadecimal de pulsaciones de 4 botones. Bisualización en Display.

       Component: visor.vhd

       Programa principal: contador_4.vhd

    3. Memoria RAM 256 bytes. Para utilizar como componente para Ruta de Datos.


         Programa: ram256x8.vhd

      Todos los archivos:
       Descargar

    Ejemplos Máquina de Estados

    1. Semaforo peatonal 1: Luz normalmente en Verde para tráfico vehicular.   
              Cuando se presiona BOTON cambia a luz Roja por 20 segundos. 
              Los últimos 5 segundos se muestran en un Display.

               Diagrama de estados tipo Moore:


                 Archivo: semaforo_peatonal.vhd
           
           2. Luz normalmente en Verde para tráfico vehicular.
               Cuando se presiona botón STOP cambia a luz Ámbar y parpadea 
               por 3 segundos.  Cambia a luz Roja por 17 segundos. 
               Los últimos 5 segundos se muestran en un Display.
               Para un oscilador de 50 MHz.


          Diagrama de estados tipo Moore:
                      
     

                      Archivo: semaforo_peatonal_2.vhd
            
          3. Semáforo simple de cruce de 2 calles. Para un oscilador de 50 MHz.

        
               Diagrama de estados tipo Moore:
              
                   Archivo: semaforo_simple.vhd
           
          4. Semáforo en la intersección de una calle de tráfico muy denso con una calle de tráfico
              moderado.   La calle principal tiene luz Verde durante un mínimo de 25 segundos o 
              mientras no haya ningún vehículo en la calle perpendicular.
              La calle lateral tiene luz Verde hasta que no circule ningún coche por ella o durante un
        máximo de 25 segundos.  
        La luz ámbar de precaución dura 4 s en los cambios de luz Verde a Roja en ambas
        calles, principal y  lateral.

      
              Diagrama de estados tipo Moore:

             
        Archivo: semaforo.vhd

     Todos los archivos:

    Ejemplos Máquina de Estados

          1. Generador de paridad impar. Envío de bits en serie al presionar START.
                
                Archivo: paridad_serial.vhd
                
          2.  Detector de fraude y monedas falsas.
        Moneda falsa (SENSOR=01) => Z: Oscilador por 10 s.
        Fraude (SENSOR=10)=> X<=1 y Z<=0. STOP para apagar
        Moneda falsa y fraude (SENSOR=11)=>Ambas alertas activas. Z por 10 s
        y STOP para apagar X.
      
           Archivo: casino.vhd

    3.  Contador en doble sentido de la secuencia 0,4,7,1,5,9.
         UP=1 => Sentido 1
         UP=0 => Sentido 2

           Archivo: contador_u_d.vhd

    4.  Circuito generador de la secuencia 11010 cuando se presiona START. 
         La duración de bit es 100 veces el periodo del Oscilador.
          Archivo: secuencia.vhd

    5. Detector de secuencia 1011 con traslape.

          Archivo: detector1.vhd

    6.  Detector de secuencia 11X011


         Archivo: detector2.vhd

    7. Permite detectar el primer botón presionado de un grupo de 3.
        El número de participante se muestra en un Display.
        Se reinicia sólo cuando se presiona RESET.


                   Archivo: concurso.vhd

           8.  Un tanque de agua abierto por la parte superior dispone de tres sensores de 
           detección de llenado (A, B, C) que determinan 4 posibles niveles de llenado
           (VACIO, NORMAL, LLENO, ALARMA). El  nivel del tanque se controla 
            mediante dos válvulas (E, entrada y S, salida).
    • En condiciones de llenado normal, las válvulas E y S se encuentran abiertas.
    • Si el líquido llega al nivel de vacío, se  cierra la válvula de salida y se mantiene abierta la de entrada.
    • Si el líquido llega al nivel de lleno, se cierra la válvula de entrada y se mantiene abierta la de salida.
    • Si por cualquier circunstancia, por ejemplo lluvia, se llegara al nivel de alarma, se deberá cerrar la válvula de entrada y abrir la de salida. Esta situación se mantendrá hasta que el tanque llegue al estado de vacío.
     Datos adicionales: 

     El funcionamiento de los sensores digitales y las válvulas E y S se encuentra resumido en las tablas adjuntas:

            Entrada: SENSOR=ABC
            Salida: VALVULA=ES
         
            Diagrama de estados tipo Mealy:
     
           
         Archivo: tanque.vhd (Tipo Moore)
                       tanquemealy.vhd (Tipo Mealy)

    Todos los archivos:

    martes, 8 de marzo de 2011

    Ejemplos de programación VHDL

    1. Codificador BCD con prioridad. El circuito tiene las entradas desde E1,E2,…..E9 y las salidas Z3, Z2, Z1 y Z0.

    E9 E8  E7  E6 E5 E4  E3 E2  E1   Z3 Z2 Z1 Z0
    1    X   X   X   X   X   X   X   X      1   0   0   1
    0    1    X   X   X   X   X   X   X      1   0   0   0
    0    0    1    X   X   X   X   X   X      0   1   1   1
     ………….
    0    0    0    0    0    0    0    0   1      0   0   0   1
    0    0    0    0    0    0    0    0   0      0   0   0   0
         
         Archivo: codificador_bcd.vhd
    2. Circuito generador de paridad par de un conjunto de datos de 8 bits. El circuito tiene 8 entradas y 9 salidas (las mismas 8 entradas más el bit de paridad par).

          
         Archivo: paridad.vhd

    3. Contador BCD con CLR activo en nivel bajo.
      

        Archivo: contador_bcd.vhd

    4. Divisor de frecuencia. 4 frecuencias seleccionables.


        Archivo:  divisor4.vhd

           5. Divisor de frecuencia con selector. 16 frecuencia seleccionables.
      
       Archivo: divisor16.vhd

    6. LED parpadeante. La frecuencia de parpadeo se duplica cada vez que se presiona  BOTON (hasta
                8 veces).


        
         Archivo: led8.vhd

    7. Contador decimal de pulsaciones de BOTON. Visualización en Display.

         Archivo: cuenta_bcd.vhd
     
    8. Generador de las señales: 


           Archivo: generador.vhd

       Todos los Archivos .VHD
         Descargar