TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: hackyy en 08 de Noviembre de 2006, 04:06:24

Título: simulacion de termometro ayuda
Publicado por: hackyy en 08 de Noviembre de 2006, 04:06:24
tengo un problema y no se si es de programa o simulacion, porfavor echen una miradilla
al esquema y al programa.
A uso proteus 6.9 sp4 y proton+ beta8.
Gracias por adelantao.


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


adin_res 10
adin_tad frc
adin_stime 50

dim raw as word
dim value as word
dim rpm as word

delayms 100
cls

trisb.1=1
trisa =%00000001
adcon1=%10000010

again:
if porta.1=0 then DELAYMS 50:gosub alta
raw = adin 0
value= raw/2.1
print at 1,1,"TEMP"
print at 1,8,dec value,"ºC"
print at 2,1,@raw,"   "
gosub faranhei
goto again
faranhei:

rpm=value*9/5+32
print at 3,1,dec3 rpm,"F"
return
end
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 08 de Noviembre de 2006, 13:18:41
Hola casi no uso proton, pero en tu codigo por ningun lado veo donde adquieras el valor del ADC, si veo que lo configures pero no veo Var= adcin.....

Y al principio veo que pones all digital=true, eso no te hace digitales todos los puertos?????.

Y en si cual es el problema??
Título: Re: simulacion de termometro ayuda
Publicado por: LordLafebre en 08 de Noviembre de 2006, 13:24:15
Hola:

'all_digital= true

Eso no "lee" el compilador, esta entre comentarios, y si esta leyendo el valor analogico, con: raw = adin 0

comentanos mas cual es tu problema.
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 09 de Noviembre de 2006, 19:09:30
Perdonad la tardanza en responder, pero ando muy liado estos dias. El problema que tengo es que cuando el valor que mido es negativo (-0,010) no me visuliza en el lcd -1º se queda en cero. mi pregunta es si eso solo pasara en la simulacion o en el circuito montado tambien.
Gracias
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 10 de Noviembre de 2006, 02:53:26
generalmente el proteus hace lo mismo que el circuito fisico, pero eso es a veces.

Que sensor estas usando???, te pregunot para saber en que formato te da un valor negativo y asi saber si lo estas mostrando correctamente en el lcd.

Saludos
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 10 de Noviembre de 2006, 03:18:49
Voy a usar el lm35, de -50 a 150 ºC, pero en proteus he usado generador de -1V en la masa del potenciometro para simular el lm35 pero no baja de 0ºC por muy negativo que sea el voltaje. :( :(
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 10 de Noviembre de 2006, 21:11:54
Hola, pues el lm35 parece que entrega solo un rango de -1volt a 6volts, lo llegue a usar pero nunca con voltajes negativos. habria que ver. deja checo simulando yo tambien
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 11 de Noviembre de 2006, 04:42:02
Gracias navisimo, aqui te adjunto el datasheet del lm35, por que yo de ingle no se mucho a ver si nos ayuda en algo, creo que pone de -40, -55 a 150ºC.
Título: Re: simulacion de termometro ayuda
Publicado por: Mario en 11 de Noviembre de 2006, 05:30:12
Parte del problema es que tu código funciona solo para voltajes mayores de cero.

Esto se debe a que el convertidor trabaja solo con valores positivos.

A diferencia de los sensores digitales que contienen los valores en complemento 2', los que proporcionan voltaje nos lo dan "crudo" (como tu código).

Para superar este problema se me ocurren tres opciones:

1) Cambia de sensor por uno que te dé valores digitales (positivos y negativos).
2) Realiza un CAS (acondicionador de señal) con valores máximos y mínimos.
3) Implementa un "cambiador o elevador de nivel" para que con tu referencia de 0 a 5 volts puedas leer voltajes negativos (http://www.electronicdesign.com/Articles/ArticleID/12123/12123.html)

Si tu aplicación necesita temperatura negativa, deberás hacer lo que te propongo.

NUNCA podrás hacer que te marque temperaturas negativas con ese código; lo bueno es que es simulación, porque no debes meterle voltaje negativo al convertidor del µicro.

Espero te ayude la información.
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 11 de Noviembre de 2006, 16:56:49
Concuerdo con Mario y si el data lo tengo, ya lo he usado. La temeratura ala que trabaja es correcta, pero la salida es la que te decia lo que te entregaba de -1 a 6V

Yo estoy tratando de usar un TCN75 que tiene precision de .5 y tambien soporta temperaturas negativas al igual que un TC74 solo que este no tiene tanta precision
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 12 de Noviembre de 2006, 20:21:17
Gracias por la ayuda, pero podriais poner un ejemplo para poder entenderlo, soy nuevo en este mundillo, he visto algun ejemplo en pbp pero no se como aplicarlo en proton. Gracias de nuevo. :-/ :-/ :-/ :-/
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 12 de Noviembre de 2006, 23:45:18
perdon de cual sensor?????
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 13 de Noviembre de 2006, 18:56:24
Del lm35 o tc74, el que me resulte mas facil para programar :-/ :-/ :-/

Da gusto aprender con gente como la hay en este foro. :mrgreen: :mrgreen:
Título: Re: simulacion de termometro ayuda
Publicado por: Mario en 14 de Noviembre de 2006, 02:36:30
La pregunta aquí es:
¿Para qué lo vas a utilizar?
Si es para la escuela o para algún proyecto del trabajo, si medirás temperaturas negativas, todo eso.

Lo más sencillo es la adquicisión de voltaje (LM35) porque con lo otro necesitas tener una noción de I²C y leer la hoja de datos (aunque Navaismo ya lo utilizó).
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 14 de Noviembre de 2006, 03:34:53
el ejemplo del sensor i2c lo tienes el el post de como usar un sensor Tc74  (http://www.todopic.com.ar/foros/index.php?topic=14413.0) aqui mismo en el foro
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy 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.
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy en 14 de Noviembre de 2006, 04:19:45
En proton, para leer y escribir el tc74 sabeis si es shin y shout? :-/
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo 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
Título: Re: simulacion de termometro ayuda
Publicado por: Mario 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
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy 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. :-) :-)
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo 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
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy 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
 :-/ :-/ :-/
      
Título: Re: simulacion de termometro ayuda
Publicado por: Mario 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.
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy 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
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 20 de Noviembre de 2006, 22:28:04
Oye y tienes las resistencias PULLup en las lineas de comunicacion???
Título: Re: simulacion de termometro ayuda
Publicado por: Mario 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.
Título: Re: simulacion de termometro ayuda
Publicado por: hackyy 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.
 :-/ :-/ :-/ :-/ :-/ :-/
Título: Re: simulacion de termometro ayuda
Publicado por: Mario 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.
Título: Re: simulacion de termometro ayuda
Publicado por: navaismo en 26 de Noviembre de 2006, 18:34:32
Pues no necesitas subir de nivel para ayudarnos....