Autor Tema: inicio  (Leído 6637 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #15 en: 26 de Agosto de 2008, 10:31:25 »
Ok, todo muy bien. Hay algo que todavía no me cierra. Es lo siguiente : el pote en su recorrido creciente de 0 a 5 votlts se corresponde con el fconv que va de 0 a 1024 como corresponde. Cuando llevo el pote de 5 a 0volts la medida se muestra en el display en forma correcta decreciente  pero fconv continua creciendo y llega al orden de los 9000.Recien cuando reseteo el micro vuelve a lo que debería ser. Que puede estar sucendiendo, como lo solucionaría?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #16 en: 26 de Agosto de 2008, 10:58:01 »
Hola.

Coloca el codigo y alguna simulacion en proteus, no entiendo a que te refieres ... normalmente el valor debe bajar ... prueba dejar algunos espacios en blanco:
Código: [Seleccionar]
printf(lcd_putc,"fconv: %lu   ",valor);

Saludos.
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #17 en: 26 de Agosto de 2008, 12:16:40 »
Gracias por las respuesta. No tengo el proteus, trabajo con el mplab V8.10. donde los puedo conseguir?
El "fconv" y "medida" son dos variables que muestro por el Lcd y se corresponden a la captura del adc que va de 0 a 1024 y la otra a la variaciòn de tensiòn del pote que es de 0 a 5 volts respectivamente.
El problema es que fconv no regresa de 1024 a 0 cuando medida va de 5 a 0 volts
probarè lo que me dices

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #18 en: 27 de Agosto de 2008, 00:13:43 »
Hola.

Postea el codigo para probarlo listo?

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #19 en: 27 de Agosto de 2008, 18:52:43 »
Aqui va el codigo MLO, gracias por tu colaboración.
#include <16F877a.h>
#device adc=10
#include <STDLIB.H>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#byte portb=6
#include <lcd.c>

void main(void)
{
float const resoluc=5.0/1024.0;
int16 valor=0;
float kk=0;


set_tris_b(0x00);
set_tris_a(0xFF);
portb=0x00;

lcd_init();
lcd_gotoxy(1,1);

setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(20);

while(true)
{

valor=read_adc();
kk=valor*resoluc;
lcd_gotoxy(1, 1);
printf(lcd_putc,"fconv: %lu",valor);
lcd_gotoxy(1, 2);
printf(lcd_putc,"medida: %f",kk);
delay_ms(500);
}
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #20 en: 28 de Agosto de 2008, 11:03:51 »
Hola.

El programa esta bien. Efectivamente era lo que te habia dicho antes, coloca unos espacios en blanco despues de la asignacion de la variable de salida, ya que al pasar de 1024 a 900, en la LCD queda escrito el ultimo valor que es el 4 y se escribe el 900, lo que da la sensacion de 9004, y asi para los otros valores.

Colocalo asi:
Código: C#
  1. while(true)
  2. {
  3.         valor=read_adc();
  4.         kk=valor*resoluc;
  5.         lcd_gotoxy(1, 1);
  6.         printf(lcd_putc,"fconv: %lu  ",valor);
  7.         lcd_gotoxy(1, 2);
  8.         printf(lcd_putc,"medida: %f  ",kk);
  9.         delay_ms(500);
  10. }

y listo

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: inicio
« Respuesta #21 en: 28 de Agosto de 2008, 18:54:13 »
Saludos! MLO, corrígeme si estoy equivocado.
Yo suelo refrescar (borrar) el LCD antes de enviar nuevos datos para evitar cualquier colisión u "embasuramiento".
Lo hago con el comando \f, por ejemplo así:
Código: C
  1. printf(lcd_putc,"\f%f",kk);
Tú qué dices? A mí hasta ahora me ha funcionado bien, pero no sé... crees que sea óptimo hacerlo así?
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #22 en: 29 de Agosto de 2008, 09:36:14 »
Gracias muchachos,probaré lo aportado por Uds.
saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #23 en: 29 de Agosto de 2008, 11:08:55 »
Hola.

Tambien se puede hacer asi Javier, el problema es que hay un titileo en la pantalla cuando se hace, y si el tiempo de refresco es muy pequeno, se vera muy "destellante" la situa. Si se colocara en el ejemplo del amigo ncoliv se veria un titileo cada 500mS. Solo es por cuestion de presentacion  :mrgreen:

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: inicio
« Respuesta #24 en: 29 de Agosto de 2008, 13:03:31 »
Entendido!  :)
Saludos a todos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #25 en: 04 de Septiembre de 2008, 12:21:12 »
Ok.amigos todo sobre ruedas. Otra pregunta es la de como puedo incrementar los decimales en la variable medida, es decir por ejemplo de 3,42 que se mide llevarlo a 3,426 ( un decir). otra, Comopuedo lograr estabilidad en la mediciòn analogica, sucede que sin mover el potenciométro. tengo una variación en el valor analógico este oscila permanentemente por ejemplo de 215 a 220. Desde ya muchas gracias por las respuestas y su colaboración

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #26 en: 04 de Septiembre de 2008, 13:37:21 »
Hola.

Para aumentar el numero de decimales lo haces asi: %2.4f, donde el 4 es el numero de decimales a mostrar en la LCD. Para lo del titileo de los ultimos numeros, debes garantizar la estabilidad de la fuente y hacer un filtrado  en software ( un moving average de unos 20 datos es suficiente ).

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #27 en: 06 de Septiembre de 2008, 12:08:04 »
Gracias MLO tal cual, eso es lo que quería ver en el LCD. Con  respecto al filtrado por software como, se implementaria en este pequeño programita, escuche lo de filtrar mediante programa pero aun no tuve oprtunidad de implementar uno, seria bueno el realizarlo ahora con ayuda de este foro.
Muchas gracias!
Saludos y nuevamente uno aprende mucho en este medio.
dejaré el programita cuando lo tenga listo para que le sirva de guia a otro usuario en mis misma condiciones .
Gracias !!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: inicio
« Respuesta #28 en: 06 de Septiembre de 2008, 15:43:41 »
Hola.

El fitrado digital mas simple es hacer un promedio de varias muestras. Un prototipo de filtro podria ser el siguiente (para 8 bits):

Código: C#
  1. unsigned int8 filtro (int chan)
  2. {
  3.  int8 valor[100]="\0";//Espacio para 100 muestras
  4.  unsigned int16 sld=0;
  5.  int i=0, j=0, res=0;
  6.    
  7.    set_adc_channel(chan);//Seteo el canal a convertir
  8.    for (i=0;i<=99;++i)
  9.    {
  10.     delay_us(10);
  11.     valor[i] = read_adc();//Lleno el vector con 100 conversiones
  12.    }
  13.  
  14.    for (j=0;j<=99;j++)
  15.    {
  16.    sld += valor[j];//Sumo todos los valores del vector
  17.    }
  18.    res = sld/100;//Calculo el promedio de las medidas
  19.  
  20.  return res;//Retorno el valor
  21. }

A la funcion le envio como parametro el canal a convertir. Mira que saco el promedio de 100 muestras, lo cual me toma 1mS, que no es mucho tiempo que digamos.

Saludos
El papel lo aguanta todo

Desconectado ncoliv

  • PIC16
  • ***
  • Mensajes: 130
Re: inicio
« Respuesta #29 en: 16 de Septiembre de 2008, 12:59:22 »
es una pregunta fuera de línea de esta post. Es la siguiente. Tengo un pic 18fXXX .... Lo puedo programar con el CCS PCH


 

anything