TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: josemanuelosunarios en 16 de Agosto de 2018, 19:42:19

Título: Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 16 de Agosto de 2018, 19:42:19
buenas amigos . traigo un nuevo tema el cual me esta generando algunas dudas con respecto a la adquisicion de datos que vengo haciendo . y resulta que estoy trabajando para obtener la lectura de tres señales analogicas las cuales ingresan al pic 16f877 y por medio del protocolo rs232 son enviadas a labview . pero esta señal es seleccionada previamente a traves de un caracter que es enviado desde labview. actualmente tengo 2 problemas .
 1: al seleccionar el canal a leer ( n,p o t (nivel, presion y temperatura respectivamente) es  me manda un pico que sobrepasa el rango de lectura y estabiliza a su valor normal, este pico me afecta la grafica y el control de proceso .
 2: como puedo hacer que la lectura sea constante, es decir en este momento tengo un pulsador para enviar el dato y si lo cambio a switch no me trabaja como pensaba . dejo adjunta los archivos con los que estoy trabajando. espero puedan ayudarme y gracias . saludos
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: Pinolillo16 en 16 de Agosto de 2018, 21:24:49
Porque no compartes tu codigo para que sea mas claro.

Saludos
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 05:18:00
habia subido tres imagenes, proteus, ccs y labview . al parecer solo en vio la del labview . aqui dejo otras
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 05:29:59
he hecho unas modificaciones en el codigo. para darle mejor presentacionn y he habilitado 3 salidas digitales, una para cada proceso (puerto D) y ahora en vez de if, he colocado switch. y me funciona bien .. el detalle esta en los picos que me  muestra al enviar un dato desde labview (picos de valores fuera de rango, como por ejemplo 110 y 116 y luego pasado el segundo estabiliza ) .. ahora he notado algo curioso y es que estas variaciones solo son percibidas por labview ya que el microcontrolador no detecta estos, lo digo porque si detectara este pico, estaria complementando su salida en el puerto D por estar por encima del valor 80 y no lo hace. por la tanto pienso que el problema esta en el codigo de labview. asi tengo mi codigo actual:
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 05:32:46
estos picos son a los que me refiero
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: KILLERJC en 17 de Agosto de 2018, 09:50:53
Esto parece mas una mala interpretacion del labview, es decir un error en el "codigo" de labview
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 14:29:05
asi es me parece que es un problema con el codigo de labview .. ya que  para leer datos sin el write no tenido problemas . pero ahora que inserto  el write en e codigo me genera este problema . noc que este haciendo mal en este codigo
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: KILLERJC en 17 de Agosto de 2018, 20:05:49
Lamentablemente no te puedo ayudar, ojala que alguien que use Labview pueda, a mi realmente cuando lo tuve en la universidad que utilizar fue un CAOS, pienso que de "simple" no posee nada y me desespero. Por eso siempre lo odie y nunca le di importancia.

Asi que espero que alguien que posea mas experiencia pueda ayudarte.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 21:13:07
Lamentablemente no te puedo ayudar, ojala que alguien que use Labview pueda, a mi realmente cuando lo tuve en la universidad que utilizar fue un CAOS, pienso que de "simple" no posee nada y me desespero. Por eso siempre lo odie y nunca le di importancia.

Asi que espero que alguien que posea mas experiencia pueda ayudarte.

Y QUE OPINAS DEL CODIGO para el pic ? se ve bien cierto ?
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: KILLERJC en 17 de Agosto de 2018, 23:30:47
Si, por ahi no usaria tanto delay... Y podrias por las dudas, tomar varias lecturas y promediarlas. Idealmente la cantidad que sean potencia de 2 (8,16 lecturas).

Es lo unico que cambiaria, eso si, me aseguraria de que nunca envies "peticiones" al PIC mas rapido que los delays que pusiste.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 17 de Agosto de 2018, 23:35:53
cuando dices tomar varias lecturas te refieres a usar un for ? y como asi de no hacer peticiones al pic mas rapido que los delays ?
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: KILLERJC en 18 de Agosto de 2018, 11:49:10
Hago un paso a paso de tu codigo.

Espero caracter de la PC.
LLego alguno que me interese?
SI -> Delay de 2s Tomo lectura del ADC y envio.


El problema esta si por ejemplo tu computadora envia 1 caracter cada 0.5s supongamos, exigiendo al PIC que le responda con lo que le pide.
Veamos que pasa.

El primer caracter llega, y entra al switch case que le corresponde, y luego entra al delay de 2s.
Y aca es donde ocurre el problema... la PC a los 0.5s va a enviar otro caracter, y ocupar el unico espacio libre que posee el PIC para recibir, al segundo va a enviar OTRO mas pero vos nunca sacaste ese caracter que llego (porque estas en el delay). Internamente el PIC cuando ocurre esto deja de recibir y marca un error avisando que se intento sobreescribir el dato que habia llegado. CCS tiene sus formas raras de manejarse y tal ves omita el error

Pero te comento lo que puede suceder.

---------------------------------------------

Respecto a tomar varias lecturas y promediarlas podes hacer:

Código: C
  1. int16 suma
  2.  
  3. for ( i = 0; i < 8; i++ )
  4. {
  5.    suma += read_adc();
  6. }
  7. suma /= 8;
  8. // Y enviar suma


Asi promedias tus valores. Y si hay alguna medida que posee algun "impulso" o valor grande no afecte en gran medida la lectura.
No creo que necesites GRAN velocidad si es que tenes un delay de 2s

-------------------------

Ahora que me fijo en el codigo ( que te recomiendo que lo copies y pegues, en ves de poner capturas de pantalla )
Deberias mover los setup_adc() afuera del while. Ya que estos deberias usarlos una sola ves nomas.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 18 de Agosto de 2018, 12:47:31
exelente muy buena tu observacion . voy a promediar esos valores a ver que tal me resulta  .. muchas gracias por la ayuda .. luego te digo como va
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 30 de Agosto de 2018, 17:50:49
como estan por aqui . ps les cuento que efectivamente el problema de los picos era con respecto a la programacion . ordene un poco el codigo grafico y ahora si me trabaja bien tanto en simulacion como en fisico y asi viene quedando mi codigo, interfaz y simulacion muchachos.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 30 de Agosto de 2018, 18:17:53
como ingreso otras imagenes para subir lo que llevo de proyecto me faltan 4 mas pero dice que es muy pesado ... alguien me ayuda ?
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: elreypic2 en 30 de Agosto de 2018, 18:46:34
Windows 7 y windows 10 tiene una herramienta que se llama "snipping tool" que sirve para capturar imágenes de la pantalla. Con esta herramienta puede capturar, una ventana o una sección de la ventana a tu gusto de forma rectangular, generando archivos jpeg muy compactos. Y una vez tengas las imagenes, las adjuntas de igual manera como lo estas haciendo actualmente.

elreypic.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 30 de Agosto de 2018, 18:56:07
disculpa en donde consigo esa herramienta ? en el menu de inicio ?
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: elreypic2 en 30 de Agosto de 2018, 19:39:46
disculpa en donde consigo esa herramienta ? en el menu de inicio ?

Simplemente ve al menu de inicio--->buscador y teclea "snipping tool"

https://support.microsoft.com/en-us/help/13776/windows-use-snipping-tool-to-capture-screenshots

elreypic.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 31 de Agosto de 2018, 16:10:34
increible pero busque la herramienta y no me sale
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 31 de Agosto de 2018, 16:12:56
aqui el codigo en lenguaje C
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 31 de Agosto de 2018, 16:19:33
y por ultimo el circuito de proteus . aqui lo dejo
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: Fer_TACA en 31 de Agosto de 2018, 16:25:45
Intenta comprimirlos.
Otra opción es colocarlas en un servidor externo y adjuntar el link al mismo.
Título: Re:Diseño e implementacion de una tarjeta de adquisicion de datos con pic 16f877a e
Publicado por: josemanuelosunarios en 31 de Agosto de 2018, 16:36:10
ok amigos con estos archivos podemos decir que podemos controlar un proceso directamente desde el pic . estableciendo los valores de nivel bajo y alto para ejecutar acciones y establecer un control todo o nada .

Pero ahora viene la verdadera prueba en el cual realizaremos un programa para grabar en el pic , y este programa no establecera los valores del setpoint sino que ahora este valor lo controlaremos directamente desde labview . y para ello dejo la interfaz grafica que he realizado para el control de peso a traves de una celda de carga. aqui la transmision de datos se me ha complicado un poco y bueno espero podamos resolver este tema juntos.

dejo adjunta la imagen del proceso:

el proceso esta conformado por un contenedor principal tipo tolva el cual tendra un sensor capacitivo  que indicara la presencia o no de producto solido. luego le sigue una valvula que controla el ingreso de producto al contenedor secundario, este ultimo contenedor posee una celda de carga que trabaja de 0 a 50 kg . de acuerdo al setpoint que vayamos a elegir este mandara la señal que cerrara esta primera valvula . esta señal sera una señal analoga que ingresaremos al conversor A/D de nuestro pic 16f877a y luego sera enviada por protocolo rs232 a nuestra pc por medio de un convertidor rs232 a usb , sin mas que agregar con respecto al proceso . les indico que no tengo idea de como enviar tantos caracteres al pic sin que se descontrole .. ps enviaria datos para control automatico, manual y tambien para el aumento y disminucion del setpoint el cual debe ser modificado en el pic desde labview