Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale

Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale (http://forum.roboitalia.com/index.php)
-   Arduino (http://forum.roboitalia.com/forumdisplay.php?f=71)
-   -   help DS1307 Maxim e memoria 24C32 Atmel (http://forum.roboitalia.com/showthread.php?t=11030)

888vita 24-01-2016 19.04.48

chi mi spiega questo?

quando carico il primo sketchup e regolo l'ora e la data e scollego l'Arduino l'ora rimane ferma,


primo sketchup

#include "Wire.h"
#include <LiquidCrystal.h> //include la libreria per il funzionamento dell'lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //settia le uscite di arduino per lcd
float tempC; //dichiarazione di variabile
int tempPin = 0; //inizializzazione del pin di Arduino

#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527

void setup(){
lcd.begin(16, 2); // setta del numero delle colonne e delle righe
Wire.begin();

Serial.begin(9600);
setDateTime(); //MUST CONFIGURE IN FUNCTION
}

void loop(){
printDate();
delay(100);
}

void setDateTime(){

byte second = 0; //0-59
byte minute = 30; //0-59
byte hour = 20; //0-23
byte weekDay = 2; //1-7
byte monthDay = 24; //1-31
byte month = 01; //1-12
byte year = 16; //0-99

Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //stop Oscillator

Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));

Wire.write(zero); //start

Wire.endTransmission();

}

byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}

void printDate(){

// Reset the register pointer
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();

Wire.requestFrom(DS1307_ADDRESS, 7);

int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());

//print the date EG 3/1/11 23:59:59
lcd.setCursor(0, 0); // setta il cursore sulla seconda riga al primo carattere
lcd.print(monthDay);
lcd.print("/");
lcd.print(month);
lcd.print("/");
lcd.print(year);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.print(second);

}



ma se regolo l'ora con il primo sketchup e subito dopo carico un il secondo sketchup l'ora e la data rimane memorizzata e continua a funzionare con la sua batteria tampone.


chi mi spiegate come mai?



questo e il secondo sketchup, non e mio lo trovato su internet


#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
lcd.begin(16, 2);
Wire.begin();
Serial.begin(9600);
}

void loop(){
printDate();
delay(1000);
}

byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}

void printDate(){

// Reset the register pointer
Wire.beginTransmission(DS1307_ADDRESS);

byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();

Wire.requestFrom(DS1307_ADDRESS, 7);
lcd.clear ();
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());

//print the date EG 3/1/11 23:59:59
lcd.setCursor(0, 0);
lcd.print(monthDay);
lcd.print("/");
lcd.print(month);
lcd.print("/");
lcd.print(year);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.print(second);

}

bernie 25-01-2016 20.04.57

Penso che le ragioni potrebbero essere due ,
il primo sketch non riavvia l'orologio e quindi l'ora non cambia anche se viene memorizzata , quando carichi il secondo sketch riparte l'orologio

altra possibilità , potrebbe essere che ti ricarica sempre l'ora e quindi tu non la vedi cambiare , ma se carichi il secondo ( che non scrive l'ora) va bene .

sergio_camici 27-01-2016 07.46.26

il ciclo loop del primo attende solo 100mS mentre nel secondo aspetta 1s, errore di battitura o è veramente così?
Non sarà che 100mS sono troppo pochi per reinterrogare il chip?


Tutti gli orari sono GMT. Adesso sono le: 09.52.01.

Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.