spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 13-01-2016, 00.26.55
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 23
888vita E' per ora ancora un mistero
Predefinito help DS1307 Maxim e memoria 24C32 Atmel

ciao ragazzi spero che qualcuno mi possa aiutare o un problema con DS1307 Maxim e memoria 24C32 Atmel carico il seguente sketchup che troverete sotto subito dopo i secondi cominciano a sballare
effettua un ciclo che parte da 09 secondi e arrivano a 59 secondi dopo
parte da 09 - 19 - 29 - 39 - 49 - 59 - 69 - 79 - 89 - 99 per poi ricominciare con 10 secondi e arrivare a 59 secondi
questo e alternato non capisco cosa sbaglio spero che qualcuno mi aiuti gentilmente grazie



#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 = 54; //0-59
byte hour = 0; //0-23
byte weekDay = 2; //1-7
byte monthDay = 13; //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);

}
Rispondi citando
  #2  
Vecchio 13-01-2016, 08.36.07
L'avatar di SoldatoSemplice
SoldatoSemplice SoldatoSemplice non è collegato
Robottaro master
 
Data registrazione: 06-07-2009
Residenza: Roma
Età : 36
Messaggi: 263
Potenza reputazione: 132
SoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua famaSoldatoSemplice La sua reputazione è oltre la sua fama
Predefinito

Io non ho capito una sola parola.
Non hai messo un punto, od una virgola.
Cos'è un'affermazione od una domanda?
Rispondi citando
  #3  
Vecchio 13-01-2016, 10.29.32
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 23
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da SoldatoSemplice Visualizza messaggio
Io non ho capito una sola parola.
Non hai messo un punto, od una virgola.
Cos'è un'affermazione od una domanda?
ero di fretta.

Quando carico lo sketchup che hai visto mi da il problema hai secondi.

In questa seguenza.

I secondi iniziano da 9 e arriva a 59 secondi non arriva mai a 00.

Quando ricomincia vengono scritti in questa seguenza
09 - 19 - 29 - 39 - 49 - 59 - 69 - 79 - 89 - 99 .

per poi ricominciare con 10 secondi e arrivare a 59 secondi.

questo e alternato, cosa sbaglio?
Rispondi citando
  #4  
Vecchio 15-01-2016, 10.56.50
bernie bernie non è collegato
Robottaro sostenitore
 
Data registrazione: 24-07-2003
Messaggi: 628
Potenza reputazione: 82
bernie E' sulla buona strada
Predefinito

Mi verrebbe da dire che quando inizi a scrivere i secondi non cancelli il valore precedente , lo sovrascrivi solo , quindi quando passi da 59 secondi a 0 , potrebbe essere che sovrascrivi solo il primo carattere,( quello che precedentemente erano le decine ) mentre quello delle unità rimane invariato ( a 9 ) fino a che non arrivi a 10 , quindi li sovrascrivi entrambi .
Potresti provare a cancellare il display ogni volta prima di scriverlo
Rispondi citando
  #5  
Vecchio 15-01-2016, 14.49.15
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 23
888vita E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da bernie Visualizza messaggio
Mi verrebbe da dire che quando inizi a scrivere i secondi non cancelli il valore precedente , lo sovrascrivi solo , quindi quando passi da 59 secondi a 0 , potrebbe essere che sovrascrivi solo il primo carattere,( quello che precedentemente erano le decine ) mentre quello delle unità rimane invariato ( a 9 ) fino a che non arrivi a 10 , quindi li sovrascrivi entrambi .
Potresti provare a cancellare il display ogni volta prima di scriverlo
ok grazie o risolto inserendo il comando (lcd.clear ();.

volevo chiederti un'altro cosa che mi sfugge come faccio a mantenere l'ora e la data corretta?

la batterie e funzionante ma la data e l'ora si sballa una volta che spengo il pc
Rispondi citando
  #6  
Vecchio 17-01-2016, 11.46.56
bernie bernie non è collegato
Robottaro sostenitore
 
Data registrazione: 24-07-2003
Messaggi: 628
Potenza reputazione: 82
bernie E' sulla buona strada
Predefinito

Se sei sicuro che la batteria alimenta correttamente l'integrato ?
Io ho usato i moduli RTC per alcune cose , ma evito di mettere nello sketch il settaggio dell'ora , faccio uno sketch per settare data e ora , poi dopo carico lo sketch definitivo .
Nel caso che tu voglia aggiornare la data ogni volta che colleghi il tutto a un PC , in questo caso il mio sistema non va bene .
Quando spegni il PC , il circuito rimane alimentato ?
Non potrebbe essere che quando spegni il PC ti si resetta l'arduino e quando si rialimenta , rifa il ciclo e ricarica la "void setDateTime(){" ?
Aloha
Rispondi citando
  #7  
Vecchio 24-01-2016, 20.04.48
888vita 888vita non è collegato
Robottaro senior
 
Data registrazione: 13-02-2015
Residenza: ITALIA
Messaggi: 53
Potenza reputazione: 23
888vita E' per ora ancora un mistero
Predefinito

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

}
Rispondi citando
  #8  
Vecchio 25-01-2016, 21.04.57
bernie bernie non è collegato
Robottaro sostenitore
 
Data registrazione: 24-07-2003
Messaggi: 628
Potenza reputazione: 82
bernie E' sulla buona strada
Predefinito

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 .
Rispondi citando
  #9  
Vecchio 27-01-2016, 08.46.26
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 303
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

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?
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Problema funzionamento ds1307 stecamux Arduino 27 09-03-2015 21.48.14
problemi grossi con time clock ds1307 e mikroC VILLO P. in C, C++ 0 26-09-2009 11.31.30
maxim 7300 dwz Elettronica 1 25-08-2005 13.59.44
maxim 4427 dwz Elettronica 5 02-12-2004 14.01.19
maxim rinux Forum generale 0 07-04-2003 16.20.00


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


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB