Pages: [1] 2 3   Go Down
Author Topic: Arduino mega 2560 con DS 1307  (Read 2079 times)
0 Members and 1 Guest are viewing this topic.
Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
ho una SD card shield con DS1307. L'RTC fino ad oggi andava benissimo, e caricava l'ora e la data perfettamente. Tutto questo con Arduino UNO Rev 3... Oggi sono passato ad ArduinoMega 2560 Rev 3, inserita la SD card (la piedinatura mi pare uguale) e basta, non legge più la data correttamente.
Mi segna sempre le 165:165:85 de 2165/165/165.
Premetto che non ho cambiato una virgola sul programma, sono solo passato da Arduino UNO al Mega.
Quale potrebbe essere il problema?
Grazieeeee

PS Il programma che uso è quello incluso nella libreria RTClib, ovvero il DS_1307

Code:
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
  }

}

void loop () {
    DateTime now = RTC.now();
   
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
    Serial.print(" since 1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
   
    // calculate a date which is 7 days and 30 seconds into the future

DateTime future (now.unixtime() + 7 * 86400L + 30);
   
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
   
    Serial.println();
    delay(3000);
}
« Last Edit: May 04, 2012, 12:49:34 pm by 9six4 » Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai ricompilato il programma per arduino mega o hai lasciato arduino uno?
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho cambiato la COM, la board e ho rieseguito la verifica. Ho provato anche mettendo una COM minore, ora uso la COM10 ma niente, non va.
Con Arduino UNO funzionava perfettamente! I pin presumo siano gli stessi no?
Ho letto una discussione simile e si diceva di controllare l'hardware, ma quello sono sicuro funzioni, con Arduino UNO andava fino a 3 ore fa...
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

per la comunicazione con device I2C (tipo il tuo RTC) servono (oltre all'alimentazione) 2 PIN, sigliati SDA e SCL.
Su Arduino Uno questi pin corrispondono ai pin numero A4 e A5, su Arduino Mega ai pin 20 e 21.

Quasi sicuramente inserendo lo shield su Arduino Mega, i segnali SDA e SCL non corrispondono ai nuovi pin e quindi non riesci più a "vedere" i dispositivi I2C. Prova a non inserire lo shield e a collegare volanti i 4 segnali (oltre a SDA e SCL ti servono 5V e GND) al Mega.
Logged

lucadentella.it

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vero i pin sono differenti, devi controllare anche nella libreria Wire che tu non debba cambiare qualche cosa per associare i differenti piedini
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Credo abbiate proprio ragione, ho trovato questa discussione ed il tema è lo stesso:

http://forums.adafruit.com/viewtopic.php?f=31&p=133019

ho trovato anche lo schema della shield:

http://www.ladyada.net/make/logshield/design.html

Come dice luca giustamente SDA e SCL passano da A4 ed A5 per Arduino UNO ai pin 20 e 21 su Arduino Mega. Provo a fare dei collegamenti volanti e vediamo. Sul topic che ho trova modificano una libreria, ma il linguaggio di programmazione che usano proprio non lo capisco quindi preferirei mantere quello corrente anche perchè ho già scritto tutto il programma che in buona parte si basa sull'RTC e non vorrei dover fare modifiche sostanziali  smiley-confuse
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le versioni R3 della Uno e della Mega2560 hanno vicino a Aref riportati i pin SDA e SCL. cosí é possibile costruire shield I2C che funzionano sia per la UNO che per la MEGA. Se guardi l'Arduino da sotto lo vedi.
Ciao Uwe
« Last Edit: May 04, 2012, 04:54:36 pm by uwefed » Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

10 Punti a Luca  smiley-lol
Come mi hai consigliato tu ho fatto i collegamenti volanti, collegando SDA ed SCL ai pin 20 e 21 e funziona!
Ora però mi dice che non riesce ad inizializzare la SD card e che la devo riformattare!
L'ho formattata ma nulla... Sempre su Arduino UNO funzionava alla grande, ma qui niente.
Qualcuno ha qualche idea?
Grazie
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao

la sdcard è in SPI,quasi sicuramente anche qui dovrai sistemare il pin di CS (chip select) che sarà collegato a qualche altro pin di Arduino
Logged

lucadentella.it

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sa che hai proprio ragione Luca, mi sa che mi dovrò armare di pazienza e rivedere connessioni e sketch!
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In teoria dovrei avere risolto, per chi dovesse avere problemi consiglio il seguente link:

http://forums.adafruit.com/viewtopic.php?f=31&t=24867

Ho una domanda però ora... ho aggiunto una procedura che mi consenta di interrompere il logging dei dati.
Quando vado per ricominciare il logging mi da un errore "open root". Qualcuno sa dirmi se per caso centri col fatto che il file, nonostante mi salvi correttamente i dati, mi dia sempre data file 01/01/2000?
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao

dovresti metterci la parte del tuo sketch che gestisce la SD...
Logged

lucadentella.it

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo dell'open root era saltato fuori tempo fa. Mi pare che dipenda dal fatto che il file non può avere nel nome la parte per indicare le sottocartelle, quindi "cartella/nome.ext" non va bene.

Non mi ricordo però se è un limite della libreria SD allegata ad Arduino oppure anche di altre librerie.

No, forse è questo il problema:
http://arduino.cc/forum/index.php/topic,104109.0.html
« Last Edit: May 08, 2012, 03:00:54 pm by leo72 » Logged


Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo:

Code:

 // initialize the SD card
 if (!card.init()) error("card.init, Reformat card");
 
  // initialize a FAT volume
  if (!volume.init(card)) error("volume.init");
 
  // open root directory
  if (!root.openRoot(volume)) error("openRoot");
 
  // create a new file
  char name[] = "LOGGER00.CSV"; //File names will follow this format, and increment automatically
  for (uint8_t i = 0; i < 100; i++) {
    name[6] = i/10 + '0';
    name[7] = i%10 + '0';
    if (file.open(root, name, O_CREAT | O_EXCL | O_WRITE)) break;
  }
  if (!file.isOpen()) error ("file.create");
  lcd.clear();
  lcd.home();
  lcd.print("Logging to: ");
  lcd.setCursor(0,1);
  lcd.print(name);
  delay(1000);
  lcd.clear();

  // write header
  file.writeError = 0;

  if (!RTC.begin()) {
    file.println("RTC failed");
    lcd.clear();
    lcd.home();
    lcd.print("RTC failed");
    delay(250);
  }
 
  //Write the output file header row to our file so that we can identify the data later
  file.println("unixtime,datetime,pH (C)"); //VERIFICARE!!!
  if (file.writeError || !file.sync()) {
    error("write header");
  } 
  saveInterval = saveInt(); //call saveInt sub-function and return value
  menu.toRoot();
  }
//************************item1SubItem2**************************   
  else if( used.item == Item1SubItem2 ){
    abilitazioneLog = 0;
    lcd.clear();
    lcd.print("Logging stopped");
    delay(3000);
    menu.toRoot();
  }

La parte subItem2 l'ho messa perchè la uso per fermare il logging. Il problema è che si ferma si ma poi non posso più riprenderlo e non ne capisco il perchè. Sembra che tenga il file aperto ed inoltre non mi salva mai i file con la data di creazione, ma sempre e solo con 01/01/2000 00:00
L'RTC funziona perfettamente, lo visualizzo allo startup e la data e l'ora sono corretti.
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io però non cerco di riaprirlo, a me andrebbe bene anche se ne creasse un altro, infatti la pressione del tasto richiama la funzione che ho copiato per intera dall'inizio, ma niente, da errore.
Logged

Pages: [1] 2 3   Go Up
Jump to: