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
Graficar señal
@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
No hay comentarios:
Publicar un comentario