SoloCodigo
Programación Específica => Microcontroladores => Mensaje iniciado por: propic_00 en Jueves 18 de Marzo de 2010, 01:34
-
Hola ha todos estoy tratando de realizar la comunicación del puerto seria con labview pero ni problema esta que cuando trato de graficar la los datos que llagan por el puerto serial no me funciona la grafica de la señal ECG, debería ser igual a la del osciloscopio pero no lo es no sé si es el software que está mal diseñado o la Interfax porfa si alguien puede ayudarme se lo agradecería
Aquí le dejo el programa que diseñe
list p=16f877a ; list directive to define processor
#include <p16f877a.inc> ; INCLUIMOS LAS DEFINICIONES DEL PIC TILIZADO
#define BANCO_1 bsf STATUS,RP0 ;DEFINICION DE BANCO 1
#define BANCO_0 bcf STATUS,RP0 ;DEFINICION DE BANCO 0
ERRORLEVEL -306, -302 ;QUITAMOS LOS ERRORES DE BANCO EN MPLAB
RADIX HEX ; sistema de numeracion hexadecimal
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_ON& _DEBUG_OFF & _CPD_OFF
; ***********************************
; * DEFINICION DE ETIQUETAS *
; ***********************************
org 0
goto inicio
; **************************************************
; * RUTINA DE INICIO, AUQI CONFIGURAMOS EL PIC *
; **************************************************
inicio
clrf PORTA
clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1 ;Puerta A E/S digitales
clrf TRISB ;Puerta B se configura como
BANCO_1
clrf PORTC
movlw b'10111111'
movwf TRISC
movlw b'00100100' ; SYNC=0 (asincrono) y BRGH = 1 (alta velocidad)
movwf TXSTA
movlw .129
movwf SPBRG ;9600 CON UN CRISTAL DE 20MHz
BANCO_0
bsf RCSTA,SPEN ;USART en On
Init_ADC
BANCO_0
movlw b'10000001'
movwf ADCON0
Loop bsf STATUS,RP0 ;Selecciona página 1
movlw b'00000001'
movwf TRISA ;Puerta A entradas
clrf ADCON1 ;Puerta A entradas analógicas
bcf STATUS,RP0 ;Selecciona página 0
bcf PIR1,ADIF ;Restaura el flag del
nop
nop
bsf ADCON0,GO_DONE ;inicializa la conversion
ADC_TERNINO
btfss PIR1,ADIF ;Fin de conversión ??
goto ADC_TERNINO ;espera a terminar la conversion
bsf STATUS,RP0 ;Selecciona banco 1
movlw b'00000110'
movwf ADCON1
BANCO_0
movf ADRESH,w
andlw b'11111111'
BANCO_0
movwf TXREG ;el resultado es retornado (8bits)
nop
nop
nop
nop
nop
nop
nop
nop
nop
allsend
BANCO_1 ; Banco 1
btfss TXSTA,TRMT ; byte transmitido ?????
goto allsend ; No pues espera
goto Loop
END
-
bueno no he revisado tu programa (hace mucho que no programo en ensamblador)
pero puedes revisar algunos puntos para ver si el problema esta ahi
1) a que velocidad estas muestreando tu señal de ECG,
recuerda que si muestreas a una velocidad muy baja no podrás reconstruir correctamente tu señal
2) a que velocidad estas enviando los datos muestreados,
esto esta relacionado también con la forma en como estas haciendo todo el proceso de captura y transmisión,
por ejemplo : puedes tomar una muestra y transmitirla por el serial y al terminar la transmisión esperar un tiempo, tomar
otra muestra y enviarla por el serial, esperar .... y asi sucesivamente
esta forma no te servirá porque aquí pierdes tiempo durante la trasmisión serial
Otra forma de hacerlo es mediante el uso de timers e interrupciones, un timer que se encargue de la captura de datos, y otro de la trasmisión serial
esta es la mejor forma de hacerlo porque aquí puedes controlar las temporizaciones de captura y trasmisión
3) del lado del software del PC, como estas haciendo la lectura y la graficación? lees cada dato del puerto serial y lo graficas?
o almacenas en un buffer y luego graficas?
la segunda opcion es mejor porque en la primera el sistema debe estar muy ocupado leyendo datos que están constantemente llegando
bueno estas son algunas ideas,
espero te sirvan
Saludos
Victor Pasilla Campos
Puebla, Pue.
México