///////////////////////////////////////////////////////////////////////////////////
///		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);
}

