Go Down

Topic: ds1904 (Read 570 times) previous topic - next topic

camba192

ho a casa un ds1904 un RTC della maxim in formato ibutton. ho cercato un po come farlo funzionare e naturalmente sul datasheet ce tutto, ma volevo sapere se c'era qualche libreria gia pronta per utilizzarlo. ce qualcuno che puo darmi una mano?   :)

c

uwefed

ciao camba192

Hai provato di cercare con un motore di ricerca "arduino ds1904" ?

Ciao Uwe

camba192

si come gia detto ho cercato ma non sono riuscito a capire molto da questo topic che ho trovato .. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1248727122/0

c

camba192

ok ho risolto grazie lo stesso  :)

c

uwefed

Allora spiegalo per favore cosí puoi aiutare altri che vorranno usare il DS1904.
Ciao Uwe

camba192

#5
Sep 29, 2010, 12:12 am Last Edit: Sep 29, 2010, 12:12 am by camba192 Reason: 1
ho usato questo codice
Code: [Select]
#include <OneWire.h>

// DS1904 Real Time Clock iButton I/O
OneWire ds(10);  // on pin 10

void setup(void) {
 Serial.begin(9600);
}

void loop(void) {
 int rtc;
 int  a,e,g,s,m,o;
 byte i;
 byte present = 0;
 byte data[8];
 byte addr[8];
 

 if ( !ds.search(addr)) {
     /*Serial.print("No more addresses found.\n");*/
     ds.reset_search();
     delay(500);  // for readability
     return;
 }
/*
 Serial.print("ROM: ");
 for( i = 0; i < 8; i++) {
   Serial.print(addr[i], HEX);
   Serial.print(" ");
 }
*/
 if ( OneWire::crc8( addr, 7) != addr[7]) {
     Serial.print("CRC is not valid!\n");
     return;
 }

 if ( addr[0] != 0x24) {
     Serial.print("\t\tDevice is not a DS1904 family device.\n");
     return;
 }

/*
 // write!
 Serial.println("writing to RTC...");
 present = ds.reset();
 ds.select(addr);
 ds.write(0x99,1);   // write RTC
 ds.write(0xAC);
 ds.write(0x00);
 ds.write(0x00);
 ds.write(0x00);
 ds.write(0x00);
 present = ds.reset();
 delay(1500);     // unknown if wait needed
*/

 // read!
 present = ds.reset();
 ds.select(addr);
 ds.write(0x66,1);   // read RTC
/*
 Serial.print("PR: ");
 Serial.print(present, HEX);
*/  
 for ( i = 0; i < 5; i++) {
   data[i] = ds.read();
 }
 /*
 Serial.print(" CTRL BYTE:  ");
 Serial.print(data[0], BIN);*/
  rtc = ((uint32_t)data[1]); //LSB
 rtc |= ((uint32_t)data[2]) << 8;
 rtc |= ((uint32_t)data[3]) << 16;
 rtc |= ((uint32_t)data[4]) << 24;  //MSB
 
 g=rtc/86400;
 Serial.print("\n");
 Serial.print(g, DEC);
 o=rtc/3600;
 o=o-g*24;
 Serial.print("  ");
 Serial.print(o, DEC);
 m=rtc/60;
 m=m-o*60-g*1440;
 Serial.print(":");
 Serial.print(m, DEC);
 s=rtc;
 s=s-m*60-o*3600-g*86400;
 Serial.print(":");
 Serial.print(s, DEC);
 Serial.print(" ");
 
 


}


che manda in seriale i giorni  ora:mionuti:secondi

la libreria si puo scaricare a questo indirizzo http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip   :)

c

Go Up