TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: facundo_10 en 27 de Marzo de 2008, 21:12:00

Título: Termometro con Sensor Dallas o LM335
Publicado por: facundo_10 en 27 de Marzo de 2008, 21:12:00
Hola hace mucho que estoy en el foro pero muy pocas veces me dedique a postear, me dedique a programar para pic simulator ide y estoy con manuales todo! Entonces mi idea principal era hacer una especie de MP3, pero esto va a conllevar muchos exprimentos previos y si aunque no lo crean este termometro es uno de ellos para practicar escritura en eeprom por I2C luego sera en RAM, y luego escribire audio en ram, ya que son mas rapidas! Pero eso sera mas adelante..

Aqui esta el porgrama que hice.

Define CONF_WORD = 0x3f72
Define CLOCK_FREQUENCY = 12  'Frecuencia a 12Mhz
AllDigital  'Todo las salidas a digital

Define LCD_BITS = 4  'LCD BUS DE DATOS 4
Define LCD_DREG = PORTD  'Define el puerto a donde las lineas del lcd se conectan
Define LCD_DBIT = 0  'DREG A PIN 0
Define LCD_RSREG = PORTE  'PUERTO DE RS
Define LCD_RSBIT = 0  'RS A PIN 0
Define LCD_RWREG = PORTE  'PUERTO DE RW
Define LCD_RWBIT = 1  'RW A PIN 1
Define LCD_EREG = PORTE  'Enable A PUERTO E
Define LCD_EBIT = 2  'Enable A PIN 2
Define LCD_LINES = 2
Define LCD_CHARS = 16

Symbol scl = PORTC.3
Symbol sda = PORTC.4

Config PORTB.3 = Output
Config PORTB.1 = Output

Lcdinit  'Inicio LCD (normalmente tarda unos 100us)

Define 1WIRE_REG = PORTA  'Puerto de verificacion del sensor
Define 1WIRE_BIT = 2  'pin del puerto

Dim temp As Byte  'Temperatura variable BYTE (0 a 255)
Dim sign As Byte  'Sign varible BYTE (0-255)
Dim temp2 As Bit  'Temp2 as bit (0-1)
Dim addr As Byte
Dim data As Byte
Symbol pulsador = PORTB.1
Symbol pulsador2 = PORTB.3


loop:
DS18S20Start  'INICIO DEL SENSOR
WaitMs 1000  'ESPERA DE 10 SEGUNDOS
DS18S20ReadT temp, sign  'Sensor lee la temperatura del DS y la almacena en la variable SIGN
Lcdcmdout LcdClear  'Limpio el LCD
If sign > 0 Then  'Si la temperatura es menor a 0 en el display aparcera un -
   Lcdout "-"  'muestra en el LCD un menos si se cumple el IF
   temp = 255 - temp  'La temperatura es igual a 255 - los datos del sensor
   temp = temp + 1  'Temperatura es igual a la temperatura antes obtenida + 1
Endif  'fin del IF
temp2 = temp.0  'la variable temp2 = a la temperatua * 0
temp = temp / 2  'Temperatura es igual a temperatura divido 2
Lcdout #temp  'El lcd muestra finalmente la variable "temperatura" donde estan los datos
If temp2 = 1 Then  'Si temp2, (variable bit) es igual a 1, el lcd mostrara 0,5 decimales
   Lcdout ".5"
Else  'sino mostrar 0 decimal
   Lcdout ".0"
Endif  'Fin de la rutina IF
WaitMs 500  'Espera 5 segundos y vuelve a la rutina
If pulsador = 1 Then
Gosub eeprom1
Endif
WaitMs 300
If pulsador2 = 1 Then
Gosub eeprom2
Endif
Goto loop  'Volver a LOOP
End                                               

eeprom1:

For addr = 0 To 31
data = temp
I2CWrite sda, scl, 0xa0, addr, data
Lcdcmdout LcdClear
Lcdout "Escribiendo EEPROM"
Lcdcmdout LcdClear
WaitMs 500
Lcdcmdout LcdLine2Home
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr
Return                                           

eeprom2:

For addr = 0 To 31
data = temp
I2CRead sda, scl, 0xa0, addr, data
Lcdcmdout LcdClear
Lcdout "LEYENDO DATOS DE EEPROM"
Lcdcmdout LcdClear
Lcdout "(", #addr, ") = ", #data
WaitMs 500
Next addr
Return                                           



Nose si se entiende si alguien le podria dar un vistazo al programa y ayudarme para guardar los decimales tambien estaria muy agradecido.. USE PIC SIMULATOR IDE, ademas si alguien tiene ejemplos de escritura y lectura de memorias RAM agradeceria!!

Muchas gracias acepto comentario y criticaS!  :D :D :D :D                                       
Título: Re: Termometro con Sensor Dallas o LM335
Publicado por: navaismo en 27 de Marzo de 2008, 21:34:18
Has revisado el hilo de Dogflu que es una biblia del PSI tal vez exista algo que te sirva. O Todo :D
Título: Re: Termometro con Sensor Dallas o LM335
Publicado por: dogflu66 en 04 de Abril de 2008, 19:30:26
Hola, he estado mirando el programa y también lo he compilado para el 16F877
y todo parece correcto. Solo apuntar que para mi gusto hay muchos Wait.

Pero la verdadera satisfacción de estos programitas es poderlos ver funcionando en
una protoboard, por suerte ya no es tan caro hacerse con los componentes
básicos para ir practicando sobre la realidad.

PD. En la configuración de bit tienes habilitada la protección de la flash program memory write
y brown-out reset, que no son aconsejables tenerlos habilitados para trabajar con prototipos.