Algunos proyectos avanzados con microcontroladores PIC

gracias por tu ayuda dinoelectro, efectivamente pude compilar, y aunque no me prende el led (no se aun por qué, ya he revisado todo el circuito) mi pc si me reconoce el PIC (adjunto vista del reconocimiento del PIC en el administrador de dispositivos ), ahora voy a trabajar en la partde el software, como ya respondiste a algún compañero en este foro, voy a ver como me va con el NI-VISA para que labview me reconozca el dispositivo

saludos !!!!
 

Adjuntos

  • reconocimiento dispositivo.png
    reconocimiento dispositivo.png
    92.7 KB · Visitas: 47
En labVIEW, no hay ventaja de HID, ya que si bien te ahorras el pasatiempo de instalar el driver, necesitaras instalar NI-VISA y crear un driver que funcione con labview, asunto que es bastante engorroso.

HID Es excelente controlarlo con Visual Basic, C++ o JAVA.

Saludos!
 
Última edición:
Saludos. ¿Que tal dinoelectro?
Por favor. ¿Podrías echarme una mano con un inconveniente, el cual describo a continuación?:

Estoy desarrollando un proyecto con comunicación USB, para ello estoy empleando el PIC18F2550 que es el encargado de recibir y enviar datos desde y hacia la PC por medio del bus USB clase CDC, cuento con una tarjeta de proceso en la cual dispongo de un XMEGA de ATMEL el mismo que recibe y envía datos desde y hacia el PIC18F2550 por medio de comunicación serial RS-232, en la transmisión de datos en el sentido PC->PIC18F2550->XMEGA no tengo inconvenientes, el problema surge cuando quiero enviar los datos resultados del proceso en el sentido XMEGA->PIC18F2550->PC, ya que en el PIC he intentado recibir los datos por medio de la interrupción INT_RDA(Interrupción del puerto USART); pero dicha interrupción no se produce ya que al compilar el programa del PIC los warnings indican que las interrupciones se encuentran deshabilitadas, también he intentado recibir los datos de la comunicación serial sin utilizar la interrupción es decir directamente en la función MAIN() con la instrucción FGETS(DATOS) pero ocurre que se pierde la comunicación USB y el programa se queda como estancado en alguna de las librerías incluidas, porque no se ejecuta ni esta instrucción FGETS(DATOS).
He probado por separado la comunicación USB PIC18F2550<->PC y la comunicación XMEGA<->PIC18F2550 y funciona de maravilla.
Compilador: PCWHD Lenguaje: CCS
Librerías incluidas:
#INCLUDE <PIC18_USB.H>
#INCLUDE <USB.C>
Warnings al compilar el programa del PIC:
Interrupts disabled during call to prevent re-entrancy: (usb_token_reset)
Interrupts disabled during call to prevent re-entrancy: (usb_flush_out)
Interrupts disabled during call to prevent re-entrancy: (usb_flush_in)

Puede ser que el USB CDC al crear un Puerto serie virtual, ello puede estar interfiriendo en la comunicación serial.
Por favor, si me pueden echar una mano con este asunto.
De antemano muchas gracias.


Te lo agradeceré mucho.
Atentamente: Orlando. EL SHABRI.
 
Última edición por un moderador:
La comunicacion USB CDC y la USART pueden trabajar perfectamente, ya que el funcionamiento de la una no interfiere en la otra.

En la carpeta de instalacion de PIC CCS, encontraras un ejemplo donde trabaja la clase USB_CDC y la USART en conjunto, te recomiendo lo revices y lo adaptes a tus propias necesidades
 
Última edición:
Gracias por responder....Dinoelectro.

Te comento que he revisado los ejemplos de la carpeta de instalación del PIC CCS, pero tiene diferencias bastante notables respecto a lo que tengo yo en mi código de programa; por ejemplo yo tengo:
#DEFINE USB_HID_DEVICE FALSE
#DEFINE USB_EP1_TX_ENABLE USB_ENABLE_BULK
#DEFINE USB_EP1_RX_ENABLE USB_ENABLE_BULK
#DEFINE USB_EP1_TX_SIZE 64
#DEFINE USB_EP1_RX_SIZE 64

#INCLUDE <PIC18_USB.H>
#INCLUDE <DESCRIPTORES.H>
#INCLUDE <USB.C>
#INCLUDE <STDIO.H>
#INCLUDE <STDLIB.H>

Y para recibir o enviar datos por el bus USB estoy empleando lo siguiente:
USB_GET_PACKET(1,DATOS_INPUT,64);
USB_PUT_PACKET(1,DATOS_OUTPUT,64,USB_DTS_TOGGLE);

Al utilizar la comunicacion USART el inconveniente es al recibir los datos, ya que esto provoca que se pierda la comunicación USB y si intento recibir por interrupción la interrupción no se produce por los warnings que indica que las interrupciones se hallan desabilitadas.

Interrupts disabled during call to prevent re-entrancy: (usb_token_reset)
Interrupts disabled during call to prevent re-entrancy: (usb_flush_out)
Interrupts disabled during call to prevent re-entrancy: (usb_flush_in)

Entoces no sé como gestionar la comunicación USART de modo que no se pierda la comunicación USB.....
 
....mira, obiamente tu codigo esta mal, tienes que trabajar con el ejemplo que es el que funciona. (el ejemplo gestiona USB y USART perfectamente)
 
Última edición:
Por fin pude realizar el proyecto DAC con PIC18F4550 de dinoelectro. ¡Es una maravilla!
Muchas gracias por tu ayuda, me servirá mucho para mi proyecto en la universidad.
Mi idea es realizar mediante varias técnicas un control de temperatura a unos hornos de resistencia eléctrica que hay en los laboratorios.

¿Quisiera saber cual es la frecuencia de muestreo del dispositivo?

Gracias.
 
Última edición por un moderador:
por fin pude realizar el proyecto Daq Pic18f4550 de dinoelectro, es una maravilla !!!! muchas gracias por tu ayuda, me servira mucho para mi proyecto en la universidad, mi idea es realizar mediante varias tecnicas un control de temperatura a unos hornos de resistencia eléctrica que hay en los laboratorios, quisiersa saber cual es la frecuencia de muestreo del dispositivo... gracias

Cual era el problema que no te funcionaba?

Upsss!! ahi me pusiste dificil, voy a ponertme en la tarea de calcular la frecuencia de muestreo.

Saludos!!
 
irónicamente todo estaba bien pero no funcionaba, solo volví a instalar el driver ... muy raro, ahora si hace la adquisicion de datos perfectamente, lo de la frecuencia de muestreo lo necesito porque el barrido que realiza en 1 segundo es muy amplio y son demasiados datos, ademas del ruido que tiene (fluctúa en 0,15 v)

quiero filtrar la señal , estoy aplicando un filtro pasabaja pero no se a cual frecuencia de corte colocar
 
HOLA AMIGOS soy LUISATILIO y estoy muy contento de tener gente como ustedes, que no mezquinan la información de sus proyectos y estoy muy agradecido en especial con los amigos "dinoelectro" y "mnicolau" ya que con sus proyectos me han adelantado mucho en mis estudios de microcontroladores y de LabVIEW. Estoy intentando adentrarme en este mundo maravilloso de la electrónica y los micros y ya tengo mucha información y herramientas para mis pruebas y si todo va bien ya les contaré.
Gracias nuevamente a todos, un saludo.
 
Hola a todos,
Estoy muy agradecido al foro, especialmente a la Dinoelectro y Mnicolau por sus contribuciones en este y otros temas relacionadas con el USB y LabVIEW, donde tengo gran interés.
Monté el circuito con el 18F4550 y me alegré de ver las señales analógicas en LabVIEW.
Puse a prueba una señal sinusoidal en la entrada analógica, pero no fue posible si leer frecuencias superiores a 5 Hz, la señal aparece demasiado distorsionada en LabVIEW.
He modificado el programa para leer sólo una unica entrada analógica, pero no obtuvo mejoras significativas...
Me pregunto si esto es debido a velocidad de lectura del puerto analógic del 18F4550, comunicación USB muy lento o el programa en Labview?
Gracias por cualquier ayuda o explicaciones que me puedan dar.
Saludos!

Roberto
 
Hola junker, este programa lo que hace es leer la señal analógica y en seguida enviarla, por lo que se desperdicia tiempo, y tarda en procesar la siguiente señal

Para mejorar el tiempo de adquisición, lo que deberías hacer es, almacenar unas mil lecturas en una matriz y luego las envias al computador... Saludos!
 
Hola dinoelectro, una inquietud sobre el esquematico adjuntado, ¿a donde va conectado el componente J2 (CONN-SIL2), talvez a la fuente que proporciona el usb o a una fuente externa?, gracias por tu respuesta.
 

Adjuntos

  • DAQ.PNG
    DAQ.PNG
    66.7 KB · Visitas: 71
Hola Pedro..

J2 sirve para alimentar al circuito con una fuente externa de 9V a 20V asi el 7805 regula la tensión a 5V para alimentar al PIC. Sin embargo; cuando tienes alimentado el circuito a través del puerto USB ya no es necesario que dispongas de ninguna fuente de alimentación ..

en otras palabras.. esa parte del circuito puede ser omitida.

Saludos!
 
Última edición:
Hola a todos estoy buscando ayuda con una tarjeta que estoy haciendo, el problema es que en el tutorial que me base solo activan una entrada y una salida y no se como puedo agrandar mi programa para usar las demas entradas y salidas.
Tambien cheque otros tutoriales que hay aqui en el foro y cargo bien el programa y la computadora me detecta bien la tarjeta pero labview no me lo reconoce creo que hay problemas con el sub vi o algo asi, o no se si sea por el win7 de 64 bits
El chiste es que solo he hecho funcionar uno pero solo tiene una entrada y una salida y quiero usar mas, espero me puedan ayudar pronto saludos y gracias :)

Aqui dejo la carpeta del programa que quiero agrandarr::confused:
 

Adjuntos

  • usbhid.rar
    13 KB · Visitas: 37
Hola dinoelectro, gracias por compartir tus experiencias.
Mira, intento modificar la resolución de las entradas analógicas de la daq a 10 bits y me tira un error de un archivo de la librería del picc.
Ahí subo una imágenes, espero me puedas guiar, así puedo modificar eso.

Ahí espero se vean, 18 errores me salen de la librería.
Sólo modifiqué adc =8 por adc=10
También adjunto el archivo .c

Seguiré probando, saludos.
Gracias.
 

Adjuntos

  • image002.jpg
    image002.jpg
    88.5 KB · Visitas: 30
  • image004.jpg
    image004.jpg
    85.6 KB · Visitas: 24
  • image006.jpg
    image006.jpg
    78.4 KB · Visitas: 25
  • image008.jpg
    image008.jpg
    79.6 KB · Visitas: 20
  • image010.jpg
    image010.jpg
    77.6 KB · Visitas: 18
  • Nueva carpeta.zip
    11.8 KB · Visitas: 30
Última edición por un moderador:
Hola rafaPIC, estoy pensando cuando sacar un tiempito para mejorar el daq... mientras tanto talvez te interese ver el daq de Mariano Nicolau, adquiere datos de 10 Bits..

Interfaz de control para PICs USB-BULK (LabVIEW - C#)

Fijate en el codigo de Mariano, el truco esta en separar el resultado de la lectura de 10 bits en dos registros de 8 bits antes de enviarlo al computador, el programa en labVIEW tambien cambia ligeramente

Suerte!

Dejo el ejemplo de como adquirir una señal analógica RA0 con resolución de 10 bits y luego graficarla en labVIEW.

Espero te sirva. :apreton:



Dejo instrucciones de como instalar el driver en windows 8
 

Adjuntos

  • DAQ10Bits.rar
    607.1 KB · Visitas: 92
  • Instrucciones para instalar en W8.rar
    335.5 KB · Visitas: 72
Última edición por un moderador:
He coseguido adquirir hasta cuatro señales analogicas de diez bits. (si alguien tiene una mejor solucion, por favor comparta)

Adjunto programa que adquiere 4 señales analogicas (AN0,AN1,AN2 y AN3) de 10 bits + ejemplo de adquisicion en labVIEW
 

Adjuntos

  • DAQ10Bits Cuatro Analogicas.rar
    610.8 KB · Visitas: 89
Última edición:
Hola dinoelectro muchas gracias por responder,te comento que no puedo abrir los VI s, al parecer tu tienes labview 2012 o me equivoco?. yo tengo la 2011 y no me deja abrir jaja. bueno igual lo de mariano nicolau esta muy bueno bien tenga avances les aviso. gracias de nuevo.
 
Hola aquí les traigo un controlador pid con la daq de dinoelectro y algunas modificaciones para realizar el controlador, el controlador pid es un control que funciona en función del error que tomamos al realizar la lectura de una planta mediante un sensor, este proyecto es para el control de temperatura de un invernadero. la lectura la realizamos mediante el lm 35 sensor de temperatura. el control PID reacciona en función del error y para ello ustedes deben calcular las constantes de estas acciones dependiendo de la planta. recordando la acción proporcional es P=e(t)kp, la acción integral I=ki*integral e(t)dt la misma genera una rampa de acciona para anular el error de la planta dependiendo del set point que ustedes pongan y el valor sensado por el lm35, la acción derivativa D=kd*de(t)/dt esta acción se anticipa al error, la suma de estas 3 acciones es un controlador PID que se usa en la mayoría de la industria. en el panel frontal ustedes pueden ingresar las constantes, ademas el control es automático y manual, con la posibilidad de almacenar la temperatura la hora y la fecha como una base de dato. la salida del controlador acciona la etapa de potencia mediante el PWM que envia la señal a un moc 3041 (optotriac) para accionar un triac que activa la carga, que en este caso es un calefactor para mantener la temperatura de la planta. dependiendo de la carga(potencia) deberán calcular el disipador para el triac para no quemarlo. a su vez el triac posee en paralelo la red snuber para evitar los efectos del dV/dt, que son variaciones bruscas de tensión que producen falsos disparos por la red 220v.en la hoja de datos del moc tienen información de como calcular la red snuber. la acción final del controlador dependerá de los valores de las constantes que ustedes les asignen así que cuanto mas suave sea la respuesta mejor sera la acción del mismo. si su carga es resistiva no es necesaria la red snuber ahora si es como mi caso un calefactor (secadora de pelo 1250 W)si la necesitan, si bien no es tan inductivo tiene un motor adentro para hacer circular el aire caliente, esta red depende del factor de potencia de la carga y por lo tanto de ello dependera los valores de la misma. yo primero lo probé sin la red snuber y (n)andaba mal se me disparaba cuando no debia por el dv/dt le puse la red y:aplauso:. bueno adjunto archivos necesarios espero les agrade, luego subiré el vídeo que grabe donde esta funcionando lo debo buscar jaja, en fin se puede mejorar ahora la facu no me da tiempo.saludos
 

Adjuntos

  • PID18F4550HRO2013.rar
    147.6 KB · Visitas: 92
  • Nueva carpeta.rar
    2.4 MB · Visitas: 94
Atrás
Arriba