Autor Tema: Problema Sensor de temp y 3 displays  (Leído 6389 veces)

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

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #15 en: 04 de Diciembre de 2008, 10:09:30 »
AHi puse el switch como dijiste.....pero en vez de incrementar la variable interrupciones a la salida del switch, lo hago en cada case....y a la salida del switch puse set_timer0(252);. Con el valor de precarga calculado es MUY lenta la muestra de los valores en los displays,,,mas o menos a ojo fui probando y quedo en 220...pero sigue viendose como se prenden y se apagan los displays, no quedan siempre prendidos como en tu ejemplo.....

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema Sensor de temp y 3 displays
« Respuesta #16 en: 04 de Diciembre de 2008, 13:52:59 »
Hola.

Hay que hacer unas correcciones en el codigo que te puse:

quitar la linea interrupciones++; y colocar mejor
Código: [Seleccionar]
...
switch(interrupciones++)
{
 ...
}
...

Ya que de no hacerlo, no se deplegaria nunca el valor de los decimales.

Otra correccion que hay que hacer es en tu codigo de pasar a bcd decimal2bcd(), pon en lugar de while(temperatura>10):
Código: [Seleccionar]
while(temperatura>=10)

Con respecto a la multiplexacion, se puede ver lento por los displays que usas en la simulacion, busca unos que vienen todos juntos ya, creo que se llaman 7SEG-MPX4.., con esos da mejor resultado.

Saludos
El papel lo aguanta todo

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #17 en: 04 de Diciembre de 2008, 14:46:37 »
Ahora anda PERFECTO el tema de los displays. Cuando use los displays de 7 segs comunes no voy a tener el mismo problema que en la simulacion, no?

Ahora, no se que paso, no anda la conversion....sera algo de la simulacion? es raro porque no toque nada de eso...Si tengo saltos de 0,1v/°C, tendria que hacer (1024/5)*0.1?
« Última modificación: 04 de Diciembre de 2008, 15:01:49 por aripod »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema Sensor de temp y 3 displays
« Respuesta #18 en: 04 de Diciembre de 2008, 19:23:37 »
Hola.

Debes tener en cuenta el manejo de la corriente, lo ideal es activar los displays por medio de transistores.

Pon un delay de 1 milisegundo despues de temperatura=read_adc()*(100/51);. Si vas a hacer conversiones a 10 bits debes avisarle al compilador con la directiva de compilacion:
Código: [Seleccionar]
#device adc=10
Me imagino que la temperatura no pasa de los 99.9 grados no?  :mrgreen:

Saludos
El papel lo aguanta todo

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #19 en: 04 de Diciembre de 2008, 20:25:02 »
En la simulacion esta sin transistores, pero en el circuito estan los transistores :D
AHi puse el delay de 1ms despuies de temperatura=read_adc(), pero ahora como puse que sea el conversor de 10 bits, multiplico read_adc()*((1024/5)*0.1). Una duda de sintaxis,,,es 0.1 o 0,1? Punto o coma?
Bueno, como sea, ninguno de las dos opciones me esta entregando el valor que quiero. EN la entrada del RA0 tengo una fuente de tension, en 1,23v; por lo que deberia ver 12.3 en los displays, pero veo 252 con la coma y -40 con el punto (En el -, esta apagado el display).

La temperatura es de ambiente, asi que como maximo seria de 50° C que NO creo que llegue nunca ni a un valor cercano...asi que no hay problema por eso :)

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema Sensor de temp y 3 displays
« Respuesta #20 en: 04 de Diciembre de 2008, 20:42:11 »
Hola.

Es con punto (0.1).

Si vas a pasar a voltaje analogico deberia ser read_adc() * (5/1024) * 10, o lo que seria igual:

Código: [Seleccionar]
temperatura = (float) (read_adc() * 0.04883);

Saludos
El papel lo aguanta todo

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #21 en: 04 de Diciembre de 2008, 21:19:02 »
AHi anda, pero cuando pongo en la misma linea (5/1024)*10 no lo hace me muestra 000, pero si pongo el resultado de la operacion directamente me muestra bien el numero.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema Sensor de temp y 3 displays
« Respuesta #22 en: 05 de Diciembre de 2008, 12:04:17 »
Hola.

Es por el tipo de variable. Tu al hacer la operacion vas a obtener un float, si tu no le avisas al compilador mediante el casting, o sea el: (float), el te retornara el valor decimal de la operacion, es decir 0.

Saludos
El papel lo aguanta todo

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #23 en: 05 de Diciembre de 2008, 14:21:45 »
la variable es float, pero igual sigue dando cero con
Código: [Seleccionar]
temperatura=(float) read_adc()*(500/1024);

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema Sensor de temp y 3 displays
« Respuesta #24 en: 05 de Diciembre de 2008, 14:48:22 »
Hola.

 :-)

El resultado de la division es 0.04883 ... aunque el compilador haga bien la operacion, es decir, con la precision de un float, nosotros estamos guardando la variable en un long, por lo tanto guarda la parte entera de la division, es decir cero.

Podrias usar una variable auxiliar tipo float para guardar el resultado de la division y luego multiplicarla por el valor retornado por read_adc() ... pero seria mas memoria ...

Yo acostumbro ha dejar solo las operaciones necesarias ... en este caso el valor 50/1024 va a ser siempre constante por lo que lo pre-calculo y lo uso en el programa como una constante.

Saludos
El papel lo aguanta todo

Desconectado aripod

  • PIC16
  • ***
  • Mensajes: 170
Re: Problema Sensor de temp y 3 displays
« Respuesta #25 en: 05 de Diciembre de 2008, 15:03:13 »
Cambie el tipo de la variable temperatura a float ahora tambien....Yo decia ponerlo en el calculo para no perder presicion en el calculo, aunque puse varios decimales....Aunke es cierto que poner la constante seria menos memoria en el programa.....