TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: robifaria en 28 de Febrero de 2008, 00:17:09
-
Hola, he intentado simular con proteus la programacion del DS1820, pero no he sido capaz de hacerlo funcionar.
He encontrado en el foro de Pic´s una manera de hacerlo de la siguiente forma:
'Read_1620:
' RST = 1
' SHIFTOUT DQ,CLK0,LSBFIRST,[$0C,$02] ' Continuous convert, CPU mode
' RST = 0
' PAUSE 10 ' Minimum wait time after write
' RST = 1 ' Enable 1620
' SHIFTOUT DQ, CLK0, LSBFIRST, [$EE] ' Send start temp convert command
' RST = 0 ' Disable 1620
' PAUSE 1000 ' Wait for conversion to complete
' RST = 1 ' Enable 1620
' SHIFTOUT DQ, CLK0, LSBFIRST, [$AA] ' Send read temp command
' SHIFTIN DQ, CLK0, LSBPRE, [Temp\9] ' Read 9 bit temperature
' RST = 0 ' Disable 1620
' Temp = Temp/2 ' Scale reading to whole degrees C.
' Temp = (Temp */ $01CC) ' Multiply by 1.8.
' Temp = Temp + 32 ' Complete C to F conversion.
' IF Temp > 99 THEN Ouch ' Is Temp > 99 deg F..?
' HSEROUT [DEC Temp DIG 1,".",DEC Temp DIG 0,13,10]
' Temp = (Temp DIG 1*16)+Temp DIG 0 ' No. Convert to BCD
Esta es la configuración básica para usarlo como termómetro, no he probado simularlo con un pic
porque no tengo el picbasic pro.
Leyendo las hojas de datos y comparándo el código me dá la impresión de que tiene que funcionar.
Intenté traducir a bascom éstas líneas y me ha quedado de esta forma:
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
Portb = &B01000000
Ddrb = &B11110000
Dim Write_config_command As Byte
Dim Continuous_conversion As Byte
Dim Start_convert_t_command As Byte
Dim Read_temp_command As Byte
Dim Temp As Byte
Dim Temperatura As Integer
Write_config_command = &H0C
Continuous_conversion = &H02
Start_convert_t_command = &HEE
Read_temp_command = &HAA
Dq Alias Portb.4
Rst Alias Portb.7
Clk Alias Portb.6
Set Rst
Shiftout Dq , Clk , Write_config_command , Continuous_conversion , 2 , 8
Reset Rst
Waitms 100
Set Rst
Shiftout Dq , Clk , Start_convert_t_command , 2 , 8
Reset Rst
Waitms 100
Do
Set Rst
Shiftout Dq , Clk , Read_temp_command , 2 , 8
Shiftin Dq , Clk , Temperatura , 2 , 9
Reset Rst
Temp = Temperatura / 2
Print "temperature: " ; Temp
Waitms 1000
Loop
End
Tanto en el shiftin como el shiftout los he probado con los modos 2 y 3, pero no he notado ninguna diferencia en el funcionamiento.
Me he encontrado con una diferencia en el código que usé de ejemplo con la hoja de datos en que en el primero hace referencia a
que el valor para conseguir una conversión continua es &H02 y no &H00 como esta en la pagina 9 de la hoja de datos.
Según ésta &H02 es un comando de escritura del umbral de temperatura inferior.
Lo raro es que he visto utilizado &H02 en un ejemplo de Basic Stamp.
Como ven, no he seguido el ejemplo al 100% ya que las conversiones para poder ver la temperatura las he dejado por la mitad pero tiene que ser suficiente para poder ver que los valores cambian cuando modifico el DS1620.
Soy nuevo programando Atmel y aunque la información que trae bascom es buena muchas cosas se aprenden probando.
Para los que quieran usar constantes con shiftin y shiftout solo quiero comentar que estas no funcionan, dan error al compilar. por eso he tenido que declarar variables y luego pasarles el valor.
Si alguien tiene un poco de experiencia en esto se agradece un empujoncito para poder arrancar.
Saludos y buen fin de semana.
-
Quizas por querer aclarar demasiado lo que hice es empeorar las cosas.
Empiezo de nuevo,quizas esto desde un principio habría sido lo mejor.
¿Alguien podria explicarme como programar el DS1620 o DS1621 con el Bascom?.
Desde ya se agradece al que se involucre en mi problema.
-
Mira en Basic para PICs esta este ejemplo de rentron (http://www.rentron.com/PicBasic/SERLED.htm), igual el SHIFTOUT y SHIFTIN. quizas puedas adaptarlo al BASCOM
-
Hola navaismo, ese codigo lo transporté y no me ha funcionado la simulación.
En la página web de bascom hay un ejemplo para el ds1620 pero es un coñazo de programa que con los comentarios incluidos son 310 líneas de programa ( éste si se puede simular).
Curiosamente no utiliza las funciones shiftin ni shiftout.
Voy a comprarlo así sabré si el problema es de simulación o de programación.
Gracias.
-
La migracion no debe ser transparente, si cmabiaste aquellos comandos que no soy compatibles?
-
Ya encontre un error en el código que escribí, pero ahún no funciona.
Desisto por el momento de seguir con el DS1620 y lo reemplazaré por el DS1621 que tiene comunicación I2C.
Aquí hay un excelente ejemplo http://www.avrprojects.net/projects/digitalthermometer.txt (http://www.avrprojects.net/projects/digitalthermometer.txt)
Las configuraciones del termostato son definibles y no-volatiles, esto sumado a que tiene una salida que se activa/desactiva dependiendo de la temperatura y los valores de sus registros debería de ser suficiente para poder utilizarse sin un microcontrolador.
-
En ese código solo se visualizan valores positivos, para poder ver los valores negativos efectuar las siguientes modificaciones:
Luego de: Dim Slope As Byte
En la siguiente línea añadir:
Dim Signo As String * 1
Luego de: If Templsb = 128 Then Templsb = 5 Else Templsb = 0
En la siguiente línea añadir:
If Tempmsb > 128 Then
Tempmsb = 256 - Tempmsb
Signo = Chr(45)
Else
Signo = Chr(0)
End If
Modificar la línea: Lcd "**** " ; Tempmsb ; "," ; Templsb ; Chr(0) ; "C" ; " ****"
por
Lcd "**** " ; Signo ; Tempmsb ; "," ; Templsb ; Chr(0) ; "C" ; " ****"
Con esto queda resuelto la visualización de los valores negativos.
-
Aquí os dejo una imágen de la simulación con Proteus donde se vé la modificación para representar los valores negativos.
http://rapidshare.com/files/96295370/DS1621.jpg.html