Autor Tema: simulacion de termometro ayuda  (Leído 8369 veces)

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

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #15 en: 14 de Noviembre de 2006, 04:09:07 »
Lo voy a usar para un cungelador, que no tiene reloj de temperatura y el termostato que tiene es una pequeña rueda que pone 1, 2, 3, 4.
Pero por usarlo en algo, pero lo mas inportante es para ir aprendiendo mas cosas de este mundillo que me roba el sueño.
Pero me gusta.

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #16 en: 14 de Noviembre de 2006, 04:19:45 »
En proton, para leer y escribir el tc74 sabeis si es shin y shout? :-/

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: simulacion de termometro ayuda
« Respuesta #17 en: 14 de Noviembre de 2006, 04:23:05 »
Bien bien, yo creo que seria mejor un sensor I2C ya que estos te entregan el valor ya leido, con los TC74 y TCN75 estamos aun en pruebas, hay un sensor en el mercado muy bueno segun se, es el DS1620 y no necestitas hacer conversiones AD. El DS1620 seria como el equivalente al TCN75 que aun no se prueba bueno aun no lo pruebo por falta de herramientas pero aqui hay codigo ejemplos de ese sensor ya calado. Checalo es una opcion tiene resolucion de .5°C y se netrega en 9bits el valor el data lo consigues facil.

Y en cuanto a lo de proton le voy mas BUSIN y BUSOUT
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: simulacion de termometro ayuda
« Respuesta #18 en: 14 de Noviembre de 2006, 05:13:53 »
Ese sensor ya lo van a descontinuar (DS1620).
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2735

De todas maneras, aquí hay un ejemplo de cómo usarlo.
Lo único malo es que está en PBP y no en Proton, y Proton no lo he utilizado.
http://www.rentron.com/PicBasic/SERLED.htm
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #19 en: 14 de Noviembre de 2006, 18:23:00 »
Bueno voy a ver como funciona el ds1620, ya habia empezado con el tc74 y nada, me visualiza 0ºC. Les pongo el codigo que he hecho.

device = 16f877
xtal = 20

lcd_dtpin = portd.4
lcd_rspin = porte.0
lcd_enpin = porte.1
lcd_interface = 4
lcd_lines = 4
lcd_type = 0
all_digital= true

symbol sclk portb.0
symbol sda portb.1


dim temp as byte


inicio:

busout sda,sclk,[$90,$00]
delayms 100


lectura:

temp= busin sda,sclk,$91
delayms 10
print at 1,1,"TEMPERTURA:",dec2 temp,"C"
goto lectura

end

por si iba en buen camino, no creo.
Probare el ds1620 ya que con el ds1307 ya lo esprimi al maximo. :-) :-)

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: simulacion de termometro ayuda
« Respuesta #20 en: 15 de Noviembre de 2006, 00:25:01 »
Como hacias el codigo del TC74??, que tereminacion era el tuyo los hay TC74A0 hasta TC74A5.

Desconozco la sintaxis bien bien de Proton, pero en PBP era I2Cwrite sda, scl, $90,[00] para configuarcion normal.

No tengo DS1620 asi que no puedo probar tu codigo, sorry

Saludos
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #21 en: 17 de Noviembre de 2006, 03:05:44 »
Hola, amigos, no me olvide del hilo, pero el curro no me deja mucho tiempo, navaismo, el codigo que pegue en el foro es del tc74, pero seguro que le falta codigo para la configuracion de arranque del tc74 y por eso no me funciona.
He seguido vuestra recomendacion de pasar al ds1620, y he tenido mas exito que con el tc74, pero me surgio un problema. El lcd me visualiza el doble de la temperatura que marca el ds1620, pero lo solucione gracias a un ejemplo que vi en proton.
Pero ahora tengo otro problema, cuando mido por bajo de cero me visualiza -255,254,253...etc.
aqui posteo el codigo que tengo:


device = 16f877
xtal = 4

lcd_dtpin = portd.4
lcd_rspin = porte.0
lcd_enpin = porte.1
lcd_interface = 4
lcd_lines = 4
lcd_type = 0
all_digital= true

      Symbol RST     =     PORTc.0            ' Reset pin
      Symbol DQ      =     PORTc.1            ' Data pin
      Symbol CLK     =     PORTc.3            ' Reloj
      
dim temp as word
dim conv1 as word
dim conv2 as word
dim bcd_a_bin as word
dim index as word
index=9

 Delayms 400                        ' Wait for PICmicro to stabilise
        Low RST                             ' Reset the device
      Cls
      conv2=1
      
MAINLOOP:
        RST = 1                             ' Enable device
        Shout DQ, CLK, LSBFIRST, [$EE]          ' Start conversion
        RST = 0

        Delayms 1000                          ' Wait 1 second for conversion to complete

        RST = 1
        Shout DQ, CLK, LSBFIRST, [$AA]          ' Send read command
        Shin DQ, CLK, LSBPRE, [TEMP\9]          ' Read 9 bit temperature
        RST = 0
      gosub bin_a_bcd
      if conv2=0 then print at 1,1,"-",
      if conv2=1 then print at 1,1,"+"
      print at 3,1, bin temp
      print at 4,1, dec conv1

' Display the decimal temperature
        'Cls
        Print at 1,3, Dec (TEMP >> 1), ".", Dec (TEMP.0 * 5), " Grados C"

        Goto MAINLOOP                       ' Do it forever
      
bin_a_bcd:


select temp
     case %111111110
     temp=1 and conv2=0
endselect

return

        End
 :-/ :-/ :-/
      

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: simulacion de termometro ayuda
« Respuesta #22 en: 17 de Noviembre de 2006, 04:27:09 »
Eso que te dé el doble lo especifica en la hoja de datos, cada incremento es ½ grado, por eso te daba el doble:
para 50 grados te da (100)(0.5) = 50

¿Podrías explicar qué hace la subrutina BIN_A_BCD?
No le entiendo a lo que pusiste.


Lo de que te marque -255, -254... no es raro.

Te recomiendo que preguntes por el último bit, ya que ese determina si es será positivo o negativo. Si es 1 es negativo, si es cero es positivo.


El que te dé 255, 254... no es muy complicado de saber, simplemente lee la hoja de datos:
para ½ grado es 0 0000 0001 porque cada incremento es ½ grado.

Para -½ grado sería el complemento a dos:
complementas 0 0000 0001
                      1 1111 1110
y le sumas                      1
                      1 1111 1111 que es el 255 que te dá.


Para solucionar esto debes hacerlo a la inversa:
le restas a 1 1111 1111
              -                 1
                1 1111 1110

y complementas
                1 1111 1110
                0 0000 0001 y tienes tu ½ grado pero negativo.

Espero te sirva.
« Última modificación: 17 de Noviembre de 2006, 04:32:32 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #23 en: 20 de Noviembre de 2006, 20:47:35 »
Hola Mario, he intentado interpretar lo que me dices pero no consigo nada, llevo todo el fin de semana probando sin exito, te pongo el codigo para ver si ves el error.

device = 16f877
xtal = 4

lcd_dtpin = portd.4
lcd_rspin = porte.0
lcd_enpin = porte.1
lcd_interface = 4
lcd_lines = 4
lcd_type = 0
all_digital= true

      Symbol RST     =     PORTc.0            ' Reset pin
      Symbol DQ      =     PORTc.1            ' Data pin
      Symbol CLK     =     PORTc.3            ' Reloj
      
dim temp as word
dim conv1 as word
dim conv2 as word
dim conv3 as word
dim conv4 as word
dim conv5 as word
dim conv6 as word
dim conv7 as word
dim total as word
dim bcd_a_bin as word
dim index as word
index=9

 Delayms 400                        ' Wait for PICmicro to stabilise
        Low RST                             ' Reset the device
      Cls
      
      
MAINLOOP:
        RST = 1                             ' Enable device
        Shout DQ, CLK, LSBFIRST, [$EE]          ' Start conversion
        RST = 0

        Delayms 1000                          ' Wait 1 second for conversion to complete

        RST = 1
        Shout DQ, CLK, LSBFIRST, [$AA]          ' Send read command
        Shin DQ, CLK, LSBPRE, [TEMP\9]          ' Read 9 bit temperature
        RST = 0
      

' Display the decimal temperature
        Cls
      if temp>>8 =1 then print at 1,1,"-"
      if temp>>8=1 then gosub bin_a_bcd
      if temp>>8=0 then print at 1,1,"+"
        Print at 1,3, Dec TEMP>>1 , ".", Dec TEMP.0 * 5, " degrees C"
      print at 4,1,bin conv2
        Goto MAINLOOP                       ' Do it forever
      
bin_a_bcd:

let conv1= temp
conv2=conv1-1       'aqui le resto 1
conv2=conv2 rev 9  'aqui complemento, eso creo pero no me funciona
let temp=conv2

return

        End
sigue mostrandome -255 en vez de -1 :( :( :(

El gosub bin_a_bcd del codigo anterior, era para hacer pruebas.
gracias

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: simulacion de termometro ayuda
« Respuesta #24 en: 20 de Noviembre de 2006, 22:28:04 »
Oye y tienes las resistencias PULLup en las lineas de comunicacion???
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: simulacion de termometro ayuda
« Respuesta #25 en: 21 de Noviembre de 2006, 01:06:36 »
Manda al LCD CONV2 después de restarle 1. Despliégalo en forma binaria.
Complementa CONV2 y mándalo al LCD en binario.

Con eso te darás cuenta si está complementando o no.

Supongo que rotas la variable 8 espacios al hacer:
      if temp>>8 =1 then print at 1,1,"-"
      if temp>>8=1 then gosub bin_a_bcd
      if temp>>8=0 then print at 1,1,"+"

Creo que deberías rotarla 9 veces ya que el noveno bit es el que te dice si es positivo o negativo; partiendo que no puedes rotar 0 veces, no puedes rotar el bit 0.

Lo que entiendo es que estás rotando del bit 1 al 8, no del bit 1 al 9. Sabemos que es bit 0,1,2,3,4,5,6,7,8,9. Pero (aunque no uso PROTON) no creo que al decirle al compilador 8 entienda que va el cero incluido.

Es mejor preguntar por el bit directamente. En PBP se hace asi:
IF TEMP.8=1 THEN ................     Pregunto si el bit 9 es 1. Aquí si puedes hacerlo así porque el compilador asume el bit cero de TEMP como el primero (0,1,2,3,4,5,6,7,8) y el bit 8 como el bit 9.


Navaismo:
Creo que sí tiene todo en orden ya que puede mostrar temperaturas positivas, solo que a la hora de desplegar la información no lo hace de manera correcta.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado hackyy

  • PIC10
  • *
  • Mensajes: 19
Re: simulacion de termometro ayuda
« Respuesta #26 en: 26 de Noviembre de 2006, 08:06:50 »
Bueno por fin, lo consegui.
Navaismo, si que tengo las resistencias pull-up, aunque en la simulacion del proteus, las quito y me funciona igual.

Mario, en proton el bit 9 es el 8 va de 0,1,2,3,4,5,6,7,8.
Y ahora el problema que tenia, resulta que el ds1820 deberia devolverme para -255 el valor 111111111, pero no es asi, me está devolviendo 111111110, o sea que el ds 1820 me devuelve el valor con la resta de 1:
111111111
             -1
__________
111111110
Y yo sin darme cuenta, pero bueno os pongo el codigo final, si encontrais mejoras os agradezco que me las sugieran:
Codigo:

device = 16f877
xtal = 4

lcd_dtpin = portd.4
lcd_rspin = porte.0
lcd_enpin = porte.1
lcd_interface = 4
lcd_lines = 4
lcd_type = 0
all_digital= true

      Symbol RST     =     PORTc.0            ' Reset pin
      Symbol DQ      =     PORTc.1            ' Data pin
      Symbol CLK     =     PORTc.3            ' Reloj
      
dim temp as word
dim conv1 as word
dim conv2 as word
dim conv3 as word
dim c as byte
dim conv5 as word
dim conv6 as word
dim conv7 as word
dim total as word
dim bcd_a_bin as word
dim index as word
index=9

 Delayms 400                        ' Wait for PICmicro to stabilise
        Low RST                             ' Reset the device
      Cls
      
      
MAINLOOP:
        RST = 1                             ' Enable device
        Shout DQ, CLK, LSBFIRST, [$EE]          ' Start conversion
        RST = 0

        Delayms 1000                          ' Wait 1 second for conversion to complete

        RST = 1
        Shout DQ, CLK, LSBFIRST, [$AA]          ' Send read command
        Shin DQ, CLK, LSBPRE, [TEMP\9]          ' Read 9 bit temperature
        RST = 0
      

' Display the decimal temperature
        Cls
      if temp.8 =1 then print at 1,1,"-"
      if temp.8 =1 then gosub bin_a_bcd
      if temp.8 =0 then print at 1,1,"+"
      if temp.8 =0 then conv5= temp
      if temp.8=1 then conv5= conv2
        Print at 1,3, Dec conv5>>1 , ".", Dec conv5.0 * 5, " GRADOS C"
   
        Goto MAINLOOP                       ' Do it forever
      
bin_a_bcd:

let conv2= temp
if temp.0 = 1 then conv2.0= 0
if temp.0 = 0 then conv2.0= 1
if temp.1 = 1 then conv2.1= 0
if temp.1 = 0 then conv2.1= 1
if temp.2 = 0 then conv2.2= 1
if temp.2 = 1 then conv2.2= 0
if temp.3 = 1 then conv2.3= 0
if temp.3 = 0 then conv2.3= 1
if temp.4 = 1 then conv2.4= 0
if temp.4 = 0 then conv2.4= 1
if temp.5 = 1 then conv2.5= 0
if temp.5 = 0 then conv2.5= 1
if temp.6 = 1 then conv2.6= 0
if temp.6 = 0 then conv2.6= 1
if temp.7 = 1 then conv2.7= 0
if temp.7 = 0 then conv2.7= 1
if temp.8 = 1 then conv2.8=0
if temp.8 = 0 then conv2.8=1
conv2=conv2+1


return

        End

P.D.: Y ahora a por el presostato.
Gracias a todos por la ayuda que me abies dado, espero subir de nivel y poder ayudar como ustedes.
 :-/ :-/ :-/ :-/ :-/ :-/

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: simulacion de termometro ayuda
« Respuesta #27 en: 26 de Noviembre de 2006, 17:44:28 »
Pues era eso.

No manejo ese integrado (aunque lo tengo) y no sabía que ya te daba la resta, solo necesitabas complementarla.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: simulacion de termometro ayuda
« Respuesta #28 en: 26 de Noviembre de 2006, 18:34:32 »
Pues no necesitas subir de nivel para ayudarnos....
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."