Mostrando entradas con la etiqueta HP 50g. Mostrar todas las entradas
Mostrando entradas con la etiqueta HP 50g. Mostrar todas las entradas

viernes, 13 de mayo de 2011

Gráfico de señales eviadas por PIC16F877a en Hp50g

El siguiente programa consiste en:

1. Muestrear una señal analógica de 0 a 5 V con periodo de muestreo
    de 1 segundo por 1 minuto.
2. Convertir las muestras analógicas a digitales.
3. Enviar las muestras digitales a la calculadora HP50g. Transmisión en serie.
4. Convertir las muestras digitales a valores analógicos correspondientes 0-5 V.
5.Graficar la señal continua en tiempo discreto(cada segundo).

En el PIC16F877a

1. La señal analógica se muestrea y se digitaliza utilizando el módulo ADC.

       - Periodo de muestro=1 s
       - 8 bits/muestra

2. Al completarse 60 muestras se pasa a otra rutina de envio de datos por
    USART.

     - 9600 baudios
     - 8 bits de datos
     - 2 bit Stop
     - No paridad

3. Se enciende un Led por 0.5 s indicando transferencia completa.

4. En seguida se toman muestras nuevamente por 1 minuto.

En la calculadora HP50g 

1. Los datos se reciben en la HP50g en forma de cadena.

2. La cadena se separa en caracteres utilizando los comandos HEAD y TAIL.

3. Los caracteres se convierten a valores numéricos (0 - 255) utilizando el
    comando NUM.

4. Los números obtenidos se agrupan en una matríz 1x60.

5. Se convierten los valores digitales a los analógicos correspondientes (0- 5V).

6. Se genera una matríz [0 1 2 ... 59] 1x60 (base de tiempo).

7. La matríz de datos y la matríz base de tiempo forman una matríz 60x2 con los
    comandos AUGMENT y TRAN.

8. Se grafica las muestras (Dispersión) con el comando SCATTER.

9. Se unen los puntos graficados con líneas para un gráfico continuo con el
    comando LINE.


Esquema de circuito:



Programa para PIC16F877a en Pic Basic (Microcode)

'****************************************************************
'*  Name    : graficar_hp50g.BAS                                      *
'*  Author  : LONELY113                                         *
'*  Notice  : Copyright (c) 2011 LONELY113                      *
'*          : All Rights Reserved                               *
'*  Date    : 13/05/2011                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC16F877a                                        *
'*          : 9600 baudios con cristal de 10 MHz                *
'*          : Pin RC6/Tx a pin RxD de Hp50g                     *
'*          : Pin GND de Hp50g a GND de circuito                *
'*          : Requiere adaptador de nivel 5V a 3.3V             *
'*          : Led en Pin RB4                                    *
'****************************************************************

@ __CONFIG _WDT_OFF & _PWRTE_OFF & _CP_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF

DEFINE OSC 10          ; 10 MHz

'Definiciones USART
DEFINE HSER_RCSTA 90h  ' Habilitar registro de recepción
DEFINE HSER_TXSTA 20h  ' Habilitar registro de trsnsmisión
DEFINE HSER_BAUD 9600  ' 9600 baudios

'Definiciones ADC
DEFINE ADC_BITS 8      ' Número de bits/muestra
DEFINE ADC_CLOCK 3     ' Fuente de reloj (RC=3)
DEFINE ADC_SAMPLEUS 50 ' Periodo de muestreo en us

TRISB.4=0              'Pin RB4 como salidai VAR BYTE
volt VAR BYTE          'Variable que almacena temporalmente una muestra
signal VAR BYTE[60]    'Variable que almacena 60 muestras
TRISA = 255            'Puerto A como entradas
ADCON1 = 2             'PORTA analógico
PAUSE 5000             'Retardo de 5 segundos

'Inicio de programa
loop1:
 FOR i=0 TO 59          
  ADCIN 0, volt         'Muestrea y guarda en volt
  signal[i]= volt       'signal almacena todas las muestras
  PAUSE 1000            'Muestrear cada segundo
 NEXT

 HSEROUT [STR signal \60] 'Enviar cadena por Tx
 PORTB.4=1                'Encender LED (envio completo)
 PAUSE 500
 PORTB.4=0                'Apagar LED
GOTO loop1
END

Programas para HP50g en UserRPL

Configurar puerto serie

 @Configuracion puerto serie
  <<
    9600 BAUD 0 PARITY
    -33 CF -78 SF
    CLOSEIO OPENIO 1 STIME
  >>

Graficar señal
<<
  {X1 X2 Y1 Y2 j1 j2 m n DATA} PURGE
  
 @Leer datos de Buffer
  BUFLEN
  DROP SRECV DROP 

 @guardar datos en matriz fila 
  DATA STO 
  DATA
  1 60
  FOR i
   DUP HEAD NUM SWAP TAIL
  NEXT
  DROP 60 ROW→ 

 @Convertir a niveles analogicos 0-5V
  255 / 5 *

 @Generar una matriz fila [0 1 2 ...59]
  1 60
  FOR i
   i 1 -
  NEXT 
  60 ROW→ 

 @Formar una matriz 60x2 datos y base de tiempo
  SWAP AUGMENT TRAN
  DUP 'DATA' STO 

 @Graficar muestras (dispersion) 
  ΣDAT STO
  ERASE SCATTER AUTO DRAX DRAW

 @Unir puntos (grafica continua)
  DATA SIZE {m n} STO
  1 m 1 -
  FOR j1
   j1 1 + 'j2' STO
   DATA {j1 1} GET 'X1' STO
   DATA {j1 2} GET 'Y1' STO
   DATA {j2 1} GET 'X2' STO
   DATA {j2 2} GET 'Y2' STO
   X1 Y1 R→C X2 Y2 R→C LINE
 NEXT
 PICTURE
{X1 X2 Y1 Y2 j1 j2 m n ΣDAT ΣPAR PPAR} PURGE
>>

Capturas en pantalla de Hp50g:



Programas *.BAS y HP UserRPL:
Descargar

lunes, 11 de abril de 2011

Envio de caracteres de PIC16F877A a calculadora HP50g

Programa para PIC16F877A

Este programa envía una cadena de 10 caracteres a 9600 baudios utilizando transmisión USART.


   Funcionamiento
  • Los datos a enviar se encuentran en una tabla de datos en la memoria de programa, en este caso una cadena de 10 caracteres "HOLA MUNDO".
  • Se configura el microcontrolador para transmisión serial asíncrona a 9600 baudios (mayor detalle en el archivo . ASM).
  • El programa incluye una rutina de retardo antes de enviar los caracteres para poder inicializar la configuración en la calculadora HP50g.
  • Se puede conectar un led en el pin RA0. Cuando se conecta la alimentación al pic el led se enciende y se ejecuta la rutina de retardo. Finalizada ésta el led se apaga indicando el inicio de la transmisiñon de datos.
  • Los carateres se envian y se almacenan automáticamente en el buffer de entrada de la HP50g una vez abierto el puerto serial con el comando OPENIO.
  • El circuito formado por los transistores 2N2222A es un adaptador de nivel de tensión. El PIC trabaja a 0 - 5 V pero la calculadora opera 0 - 3.3 V.
  • Crear el siguiente programa en la calculadora y almacenar en una variable. Ejecutar una vez que se conecta la alimetación al PIC16F877A o luego de resetearlo.
                 <<9600 BAUD
                      0 PARITY
                     -33 CF
                     -78 SF
                     CLOSEIO
                     OPENIO
                    10 STIME
                    BUFLEN
                    DROP
                    SRECV
                    DROP
                >>


 Archivos .ASM y .HEX

Descargar

****Programa en Pic Basic (Microcode)****

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : LONELY113                                         *
'*  Notice  : Copyright (c) 2011 LONELY113                      *
'*          : All Rights Reserved                               *
'*  Date    : 12/05/2011                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC16F877a                                        *
'*          : 9600 baudios con cristal de 10 MHz                *
'*          : Pin RC6/Tx a pin RxD de Hp50g                     *
'*          : Pin GND de Hp50g a GND de circuito                *
'*          : Requiere adaptador de nivel 5V a 3.3V             *
'****************************************************************

@ __CONFIG _WDT_OFF & _PWRTE_OFF & _CP_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF

DEFINE OSC 10         '10 MHz

'Definiciones para USART
DEFINE HSER_RCSTA 90h 'Habilitar registro de recepción
DEFINE HSER_TXSTA 20h 'Habilitar registro de transmisión
DEFINE HSER_BAUD 9600 '9600 baudios

'Inicio de programa
PAUSE 5000            'Retardo de 5 segundos
HSEROUT ["Hola Mundo!!!!!!",13,10] 'Enviar cadena
END

viernes, 8 de abril de 2011

Envio de cadena de caracteres de hp50g a PIC16F877A

Programa para PIC16F877A

Estos dos programas cumplen la misma función que los publicados anteriormente. La diferencia es que se aprovecha la comunicación USART de la que dispone el pic16f877a.


Envio de caracter y visualización en Leds (ASCII)

  Funcionamiento

  El caracter se recibe en el registro RCREG, se mueve al acumulador y se envia al Puerto D para la       visualización.

Envio de una cadena de 16 caracteres


   Funcionamiento
  • Se genera una interrupción cada vez que se recibe un caracter.
  • La rutina de interrupción guarda los caracteres recibidos en posiciones de memoria sucesivas, mediante direccionamiento indirecto, hasta que se reciben 16 caracteres.
  • Una vez recibidos 16 caracteres se pasa a la rutina de visualización en LCD, finalizada ésta se reinicia el programa a la espera de una nueva cadena.
Archivos .ASM y HEX

Envio de caracter

Envio de cadena

Programa para hp50g:

                       << '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 >>


****Programa en Pic Basic (Microcode)****


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : LONELY113                                         *
'*  Notice  : Copyright (c) 2011 LONELY113                      *
'*          : All Rights Reserved                               *
'*  Date    : 12/05/2011                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC16F877a                                        *
'*          : Pines de LCD:  RD7-RD4=D7-D4  (Modo de 4 bits)    *
'*          :               RB0=RS, RB1=RW, RB2=E               *  
'*          : Pin RC7/Rx=TxD de Hp50g                           *
'*          : unir GND de Hp50g a GND de circuito               *
'*          : Requiere adaptador de nivel 5V a 3.3V             *
'****************************************************************

@ __CONFIG _WDT_OFF & _PWRTE_OFF & _CP_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF

DEFINE OSC 10 '10 MHz

'Definiciones para módulo LCD
DEFINE LCD_BITS 4      'Bus de 4 bits
DEFINE LCD_LINES 2     'LCD de 2 filas 
DEFINE LCD_DREG PORTD  'Puerto de datos a LCD 
DEFINE LCD_DBIT 4      'Bits 4 a 7 de PORTD
DEFINE LCD_RSREG PORTB 'Puerto B seleccion de registro  
DEFINE LCD_RSBIT 0     'RB0=RS de LCD
DEFINE LCD_RWREG PORTB 'Puerto B Lectura/Escritura  
DEFINE LCD_RWBIT 1     'RB1=RW de LCD 
DEFINE LCD_EREG PORTB  'Puerto B Habilitacionde LCD 
DEFINE LCD_EBIT 2      'RB2=E de LCD 
DEFINE LCD_COMMANDUS 2000 'Retardo ente comandos en us 
DEFINE LCD_DATAUS 50      'Retardo entre datos en us 

'Definiciones USART
DEFINE HSER_RCSTA 90h  'Habilitar registro de recepción
DEFINE HSER_TXSTA 20h  'Habilitar registro de transmisión
DEFINE HSER_BAUD 9600  '9600 baudios

dato VAR BYTE[16]
i VAR BYTE
loop1:
 HSERIN [sTR dato\16] 'Espera 16 caracteres y guarda en dato
 LCDOUT $FE,1         'Borrar LCD
 LCDOUT $FE, $0C      'Primera fila, cursor off
 FOR i=0 TO 15        
  LCDOUT dato[i]      'Enviar 16 caracteres ( en ASCII)
 NEXT i
GOTO loop1
END

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.