TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kruskal en 07 de Septiembre de 2005, 13:47:00
-
Alguien podria, por favor, indicarme si existe una libreria para manejar el integrado sensor de temperatura DS1620. Y si existe me la puede enviar.
Salud2
-
Despues de varios dias de mi pregunta nadie ha respondido, creo que debo dar por hecho que dicha libreria no existe.
Salud2
-
Krustal yo tngo por aquí algunos de esos, si nos animamos podemos hecharlo andar juntos ... de todas maneras buscaré un poco antes por si nos ahorra el trabajo
-
Perdon, pero en el CCS viene una libreria para el DS1621, son muy diferentes entre si ??
Porque tal vez puedan adaptarlas...
Yo hice eso para el MCP3204, utilizando la del MCP3208....

-
Ahora mismo corro a mirar los datasheets

Pues entre otras cosas, (esta de bastante peso ...), uno es por I2C y el otro tiene protocolo propio creo
Edito:
¡¡Si lo se antes sampleo el DS1621 en vez del 20!! ![Helado Helado]()
(Suerte que tb tengo algunos DS1624, que son parecidos pero en vez de termostato son sensor de temp + memoria
)
-
En el foro CCS hablan algo del tema del 1620...aqui la dire:
http://www.ccsinfo.com/forum/viewtopic.php?t=2223&highlight=ds1620
Aqui tb:
http://www.ccsinfo.com/forum/viewtopic.php?t=19722&highlight=ds1620
Mas aqui:
http://www.rentron.com/CCS_C/SERLED_C.htm
-
Muy buena informacion la del foro de CCS. Me parece que es necesario construir una libreria para el integrado, lamentablemente no cuento con el tiempo para dedicarme a hacer eso tengo que terminar un proyecto para una feria tecnologica en que voy a participar. Salvare el problema usando lo mas simple y util que logre reunir
Gracias y Salud2
-
Navegando por los link"s que ofreci en el anterior mensaje me encontre un .pdf del ds1620, vamos su libreria....yo no la he provado aunque pienso hacerlo(en cuanto termine con la serie I2C jeje) aqui os la podeis descargar la libreria ds1620:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=3581236
PD: Yo no la he provado asi que no se si funciona o no...de todas formas lei en el foro de CCS que modificando algunas cositas de la libreria del ds1302 funcionaria correctamente....
-
hehe el ds1620 es unwire e el 21 es i2c la entrenadora mia tiene uno dessos e para probar programe un pic16f628 con la libreria que viene en el foro de ccs realmente funciona pero no da la temperactura correcta solo me da 3.0 grados si lo caliento um poco se verificam cambios en la lectura tal como mustra cambios en la lectura si le meto frio va asta -2 grados creo que seria cosa de ajustar um poco el codigo pero esso lo dejo a los professores e maestros que si le pego yo seguro que lo ago esplotar

edito porque e metido la pata hehe el mio no es un 1620 sino 1820 este si que es unwire perdon
-
Ayer estube con nocturno mirando la libreria del DS1624 que no iba fina, pero una vez arreglada, este sensor es impresionante, 0.03ºC de resolución

Todavia no lo he podido poner a temperaturas negativas porque por mucho hielo que le acerce y le pose con el papel de plata no baja de 3ºC
, supuestamente llega hasta -55ºC.
¿Alguien tiene una gotita de nitrógeno líquido? 


-
hehe radon tienes nieve en spray yo la uso en el talher e te baja de 20 grados a -20 o menos en menos de um segundo el bote vale unos 6€
-
Joer, que pasada, ¿donde venden esas cosas?
-
Bueno y aqui otra mas que me encontre no se donde.....jeje tampoco esta provada pero le metere mano a la anterior y a esta haber si funcionan:
// Define DS1620 interface pins
#define DQ PIN_B2 // Wire rb2 to pin #1 on DS1620
#define CLKD PIN_B3 // Wire rb3 to pin #2 on DS1620
#define RST PIN_B4 // Wire rb4 to pin #3 on DS1620
// DS1620 & temp related function prototypes
void write_1620(byte cmd); // write to DS1620
void init_1620(void); // initialize DS1620
void read_temp(void); // read temp from DS1620
void convert(void); // convert C to F then to BCD for display
void ouch(void); // display OUCH when >= high temp setpoint
char toBCD(char bin_val); // conversion to BCD
// write a byte to the DS1620
void write_1620(byte cmd)
{
byte i;
for(i=0; i<8; i++)
{
output_low(CLKD);
output_bit(DQ, shift_right(&cmd,1,0));
output_high(CLKD);
}
}
// initialize the DS1620
void init_1620(void)
{
// set CLK and RST to correct states
output_high(CLKD);
delay_us(2);
output_low(RST);
// set DS1620 config to continuous convert
// and CPU communications mode
output_high(RST);
write_1620(0x0C); // send Write Config command
write_1620(0x02); // configure for CPU mode, continuous convert
output_low(RST);
// start conversion
output_high(RST);
write_1620(0xEE); // send Start Convert command
output_low(RST);
}
// read & display temperature from DS1620.
void read_temp(void)
{
byte i;
output_high(RST);
write_1620(0xAA); // send Read Temp command
temp_data = 0; // clear temp_data on entry
for(i=0; i<9; i++) // loop for 9-bits
{
output_low(CLKD);
temp_data = temp_data >> 1;
if (input(DQ))
{
temp_data = temp_data | 0x100;
}
output_high(CLKD);
}
temp_data = temp_data/2; // convert temp_data to whole deg C
output_low(RST);
convert(); // convert C to F then to BCD
if (temp_r >= setpoint) // if temp >= setpoint display OUCH
{
ouch(); // call OUCH function if temp >= high setpt
return; // do not update temp display when temp >= setpt
}
enable(); // enable SLED4C data entry
send_byte(0b11001011); // digits 5,4,2 HEX decode. Digits 3,1 special
disable(); // write config value into config register
delay_ms(1); // short pause between config & display reg write
enable(); // enable SLED4C data entry
send_nib(0x00); // DIM display + DP"s off
send_byte(temp_r); // display temp on digits 5/4
send_byte(0xFF); // display Deg F on digits 3/2
send_nib(0x00); // turn colon off
disable(); // write data into display registers
delay_ms(2000); // wait 2 seonds between temp & time updates
}
// convert temp from deg C to deg F, then pass
// to BCD conversion conversion function
void convert(void)
{
temp_data = (temp_data * 9/5)+32; // convert C to F
temp_r = toBCD(temp_data); // convert to BCD for display
}
// this function converts an 8 bit binary value
// to an 8 bit BCD value. Input range from 0 to 99.
char toBCD(char bin_val)
{
char temp;
char retval;
temp = bin_val;
retval = 0;
while(1)
{
// get tens digit by multiple subtraction
// of 10 from bin_val
if(temp >= 10)
{
temp -= 10;
retval += 0x10; // increment tens digit
}
else // get ones digit by adding remainder
{
retval += temp; // adjusted result
break;
}
}
return(retval);
}
// say the temperature
void say_temp(void)
{
printf("say=the temperature iz %Ld degrees faren hyte;",temp_data);
delay_ms(2000); // allow time for message to play
} // adjust as required for message length
-
Holaa ke tal!!! bueno estaba aburrido en el avion y decidi hacer un apaño del la libreria ds1302.c del CCS y adaptarla para el dispositivo ds1620, aqui esta:
///////////////////////////////////////////////////////////////////////////////////
/// VsZeNeR"05 ///
/// 15/Octubre/05 ///
/// ///
/// Libreria: DS1620.C Compilador: CCS ///
/// Version: 0.0 ///
/// ///
/// Notas: Controlador para temperatura del dispositivo ds1620 ///
/// de Dallas Instruments ///
/// ///
/// Funciones: ds1620_init() -> inicializacion del dispositivo ///
/// read_ds1620(0xAA) -> obtiene la temperatura ///
/// ///
/// ·Libreria inspirada del archivo del compilador CCS ds1302.c ///
/// ·Libreria solamente provada en simulador PROTEUS ///
///////////////////////////////////////////////////////////////////////////////////
#ifndef DS1620_DQ
#define DS1620_DQ PIN_B5 //declaracion...
#define DS1620_CLK PIN_B6
#define DS1620_RST PIN_B7 //...de pines
#endif
void write_ds1620_byte(BYTE cmd) {
BYTE i;
for(i=0;i<=7;++i) {
output_bit(DS1620_DQ, shift_right(&cmd,1,0) );
output_high(DS1620_CLK);
output_low(DS1620_CLK);
}
}
void write_ds1620(BYTE cmd, BYTE data) {
output_high(DS1620_RST);
write_ds1620_byte(cmd);
write_ds1620_byte(data);
output_low(DS1620_RST);
}
BYTE read_ds1620(BYTE cmd) {
BYTE i,data;
output_high(DS1620_RST);
write_ds1620_byte(cmd);
for(i=0;i<=7;++i) {
shift_right(&data,1,input(DS1620_DQ));
output_high(DS1620_CLK);
delay_us(2);
output_low(DS1620_CLK);
delay_us(2);
}
output_low(DS1620_RST);
return(data/2);
}
void ds1620_init() {
BYTE x;
output_low(DS1620_RST);
delay_us(2);
output_low(DS1620_CLK);
write_ds1620(0x8e,0);
write_ds1620(0x90,0xa6);
x=read_ds1620(0x81);
if((x & 0x80)!=0)
write_ds1620(0x80,0);
}
Repito esta muyyyy BETA haber si tengo tiempo de ponerla perfect! pero de momento funciona, eso si solamente provada en PROTEUS! aqui os dejo el enlace para bajarsela: http://miarroba.com/foros/ver.php?foroid=348538&temaid=3740041
-
Excelente una libreria la voy a probar en un circuito real, al final termine usando el LM35 para medir temperatura ambiente mucho mas sencillo de manejar pero menos sensible en la medicion.
Saludos.