Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/04/2012 #1


DS1621 y PIC
Quiero leer un DS1621 y mostrarlo en una LCD

Quien me puede ayudar, no se hacerlo, siempre me sale 00

Un saludo
30/04/2012 #2


podrías poner tu codigo, tu esquema y todo lo que consideres necesario para que sea mas facil ayudarte
30/04/2012 #3


este es mi codigo
Código:
'Configuro los fuses
        @__CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
        @__CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
        @__CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
        @__CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        @__CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_OFF_3H
        @__CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L

'LCD
DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS
DEFINE LCD_DBIT 4     'DESDE EL BIT B.4 AL BIT B.7
DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO  DE CONTROL/DATOS EN EL PUERTO B
DEFINE LCD_RSBIT 1    'EN EL BIT B.1
DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 2     'EN EL BIT B.2

'I2C
CMCON = 7
ADCON1 = 7
SCL VAR PORTA.0 
SDA VAR PORTA.1
W0 var word
ds var byte
Startconvert var byte

Startconvert = $EE ' Initiates temperature conversion.
ds = %10010000 ' device address


start:
i2cwrite SDA,SCL,ds,$AC,[0] ' Access Config
pause 100 
i2cwrite SDA,SCL,ds,Startconvert ' Start Conversion
pause 750 
gosub gettemp
lcdout $fe,1
lcdout "Temperature = ",dec2 W0 

pause 800
goto start

gettemp: 
i2cread SDA,SCL,ds,$AA,[W0] ' Read last converted temperature value from temperature register.
W0 = W0 >> 8 
return
y adjunto el esquema
Imágenes Adjuntas
Tipo de Archivo: png esquema.PNG (38,0 KB (Kilobytes), 26 visitas)
30/04/2012 #4


Segun el esquematico, te olvidaste las resistencias de pull up. Es I2C el protocolo, verdad?
30/04/2012 #5


Si es i2c

Ni poniendo las Pull up funciona, se ve como la linea scl se activa pero no muestra lo que debe
01/05/2012 #6


Nadie ha hecho algo parecido?
02/05/2012 #7


Ayuda por favor, no encuentro la solucion!
03/05/2012 #8


He cambiado algo a ver si consigo haserlo funcionar pero no

Código:
'Configuro los fuses
        @__CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
        @__CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
        @__CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
        @__CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        @__CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_OFF_3H
        @__CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L

'LCD
DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS
DEFINE LCD_DBIT 4     'DESDE EL BIT B.4 AL BIT B.7
DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO  DE CONTROL/DATOS EN EL PUERTO B
DEFINE LCD_RSBIT 1    'EN EL BIT B.1
DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 2     'EN EL BIT B.2

'I2C
CMCON = 7
ADCON1 = 7
SCL VAR PORTA.0 
SDA VAR PORTA.1
WO var WORD
T1 var WO.byte0
T2 var WO.byte1
main:
i2cwrite SDA,SCL,%10010000 'Apunto al dispositivo
Pause 10
i2cwrite SDA,SCL,$90,$AC,[0] 'Lo configuro para modo continuo
Pause 10
i2cwrite SDA,SCL,$90,$EE 'Empieza a convertir
Pause 50
i2cwrite SDA,SCL,$90,$AA 'Lee  almacena en WO
pause 10
i2cread SDA,SCL,$91,[T1,T2]
pause 10
LCDout $FE,1
LCDout $FE,1, #WO
goto main
06/05/2012 #9
Moderador

Avatar de D@rkbytes

PBP I2c ds1621
Saludos rakata.
El código que pusiste esta algo mal.
Te adjunto un ejemplo para PBP con un PIC16F628A, ya lo podrás después migrar al PIC que uses.

No lo he probado físicamente, pero en la simulación que adjunto funciona bien.

Nota:
Encontre un BUG, pero ya lo corregí.
Hay que modificar esto:
IF TempX >= 128 THEN
TempNeg = "-"
TempX = 256 - (TempX + Temp.7)
ENDIF
Por esto.
IF TempX > 128 THEN ; Solo quitar el signo de =
TempNeg = "-"
TempX = 256 - (TempX + Temp.7)
ENDIF

Y eliminar esta otra parte que por descuido repetí.
TempX = Temp.HighByte <--

Suerte y hasta luego.
Archivos Adjuntos
Tipo de Archivo: rar 16F628A DS1621.rar (17,8 KB (Kilobytes), 41 visitas)
19/04/2016 #10


Archivos adjuntos
Saludos a todos. Estoy probando un ejemplo de supervision de temperatura en Proteus usando un PIC 16F876 y un DS1621.
Los datos de la fecha y hora se obtienen de un reloj en tiempo real DS1307 y se muestran en un lcd. Esta primera parte marcha bien, el problema esta en que cuando llamo a cualquier funcion de la libreria DS1621M.c entonces surgen las advertencias en Proteus y detenciones (breakpoints) en la simulacion por stack overflows y stack underflows, incluso desde el fichero del lcd, que no daba problemas. A continuacion les adjunto los archivos del proyecto. Si se descomenta la instruccion init_temp(0x01); en init() o en main() aparece el problema.

Muchas gracias de antemano. ...

---------- Actualizado después de 4 minutos ----------

Aqui estan los archivos del proyecto
Archivos Adjuntos
Tipo de Archivo: rar i2c_control_temperatura.rar (165,5 KB (Kilobytes), 6 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.