TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Martronica en 19 de Octubre de 2010, 19:02:00

Título: OSCILOSCOPIO - PIC 16F877 - LABVIEW
Publicado por: Martronica en 19 de Octubre de 2010, 19:02:00
Saludos amigos del foro...

He estado trabajando en un Osciloscopio digital usando el PIC-16F877 y LabView...

Me entro la idea a la cabeza de usar comunicacion entre dos PICs con la finalidad de hacer comunicacion inalambrica en un futuro.

Lo que tengo es lo siguiente:

- UN PIC 16F877 EL CUAL REALIZA LA CONVERSION ANALOGICO DIGITAL (con una etapa de adpatacion de voltajes previa) Y QUE A TRAVEZ DEL PUERTO PORTC.5 ENVIA LA INFORMACION A OTRO PIC.

- OTRO PIC 16F877 QUE RECIBE LA INFORMACION DE VOLTAJE A TRAVEZ DEL PUERTO PORBC.5, ESTE ULTIMO PIC ENVIA ESTA INFORMACION A UNA PC MEDIANTE EL PUERTO USB.

- UNA INTERFAZ HECHA EN LabVIEW PARA GRAFICAR LA INFORMACION ENVIADA Y DE HECHO LOGRO VER UNA SEÑAL SEÑOIDAL DE BAJA FRECUENCIA.


PROBLEMA:

EN PIC - La comunicacion PIC-PIC la hago por SOFTWARE y la comunicacion PIC-PC por hardware. No se como lograr identificar la frecuencia de la señal de entrada. Me explico mejor. quiero sincronizar los valores de amplitud que mido con el tiempo en que fue medido para poder graficar y observar el periodo de la señal.

EN LABVIEW:
la infomacion que me llega es solo voltaje, es por ello que solo he podido graficarla en un WAVEFORM CHART, pero me gustaria conocer tambien el periodo y graficar tal cual lo hace un Osciloscopio (claro con los errores propios de mi diseño)

EN RESUMEN:
COMO HAGO PARA SABER EN LABVIEW CUAL ES LA FRECUENCIA DE LA SEÑAL DE ENTRADA Y SU VALOR RMS


ENTIENDO QUE EN PURA TRANSMISION PIERDO TIEMPO, (por lo cual el ancho de banda por ahora no me interesa) PERO A FUTURO SE IMPLEMENTARA CON UN ADC Y MEMORIA RAM EXTERNA. EL CONVERTIDOR EXTERNO HARA LA CONVERSION ALMACENARA LA INFORMACION EN LA MEMORIA EXTERNA Y EL PIC LEERA ESTA INFORMACION A SU MAXIMA VELOCIDAD y TRANSMITIRA.

PARTE DEL CODIGO DEL PIS QUE REALIZA LA ADC

Código: [Seleccionar]
MedirVoltajeA:
    VoltajeA = ADIn 0                     'A/D por el canal A.0 y almacena en VoltajeA
    Tamano=Tamano_Dato(VoltajeA)          'Funcion determina el tamaño del dato convertido
   
    SerOut PORTC.5, 9600, ["A",Dec EscalaCanal_A,Dec Tamano,Dec VoltajeA]
Return

Realizo la conversion, verifico el tamaño del dato y envio al otro PIC el dato en el formato siguiente:
[A+ESCALA_VOLTAJE+TAMAÑO_DATO+DATO]

A: Ya que el dato pertenece a un canal de la trajeta
ESCALA_VOLTAJE: Ya que la trajete permite 4 escalas (2,5V, 5V, 10V y 15V), informacion que necesito para graficar
TAMAÑO_DATO: Para que el otro PIC sepa el tamaño del dato a leer (¿ALGUNA OTRA RECOMENDACION?)
DATO: EL DATO CONVERTIDO

PARTE DEL CODIGO QUE RECIBE LA CONVERSION (OTRO PIC) Y ENVIA A LA PC

Código: [Seleccionar]
SerIn PORTC.5, Baudios, [Canal]                       'Lee por SOFWARE

If Canal="A" Then                                           'Verifica el dato A
    SerIn PORTC.5, Baudios, [Escala]                  'Lee el proximo BYTE que es la escala
    SerIn PORTC.5, Baudios, [TamanoDato]          'Lee el proximo BYTE que es Tamaño_dato
    If TamanoDato="1" Then                              'Si el tamaño es 1
        SerIn PORTC.5, Baudios, [Voltaje[0]]          'Lee un solo BYTE
    EndIf
    If TamanoDato="2" Then                              'Si tamaño es 2
        SerIn PORTC.5, Baudios, [Str Voltaje\2]      'Lee dos BYTE
    EndIf
    If TamanoDato="3" Then                              'Si tamaño es 3
        SerIn PORTC.5, Baudios, [Str Voltaje\3]      'Lee tres BYTE
    EndIf
    If TamanoDato="4" Then                              'Si tamaño es 4
        SerIn PORTC.5, Baudios, [Str Voltaje\4]      'Lee cuatro BYTE
    EndIf
   
    HRSOut "A",Escala,TamanoDato,Str Voltaje      'Se envia a la PC por HARDWARE

QUE CREEN QUE PUEDA MEJORARSE EN ESE CODIGO (SOLO ES LA PARTE DE COMUNICACION YA QUE HAY VARIAS MAS RUTINAS QUE NO VI NECESARIAS MOSTRARLAS)

Gracias de antemano por la colaboracion prestada a este asunto