Pages: [1] 2 3 ... 5   Go Down
Author Topic: DS1307 [RESOLU]  (Read 6747 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour tout le monde.

Je me trouve devant une situation qui commence à me faire perdre le moral.
Mon module ds1307 ne veut pas me donner l'heure...!

J'ai essayé plusieurs librairie et rien n'y fait. Actuellement je m'attarde sur la librairie RTC de chez adafruit https://github.com/adafruit/RTClib .

Lorsque j'ouvre le moniteur l'heure et afficher et elle est bien celle de mon PC mais elle ne s’incrémente pas, les secondes ne tourne pas.

Pour le module c'est moi qui l'ai fait suivant le schéma du datasheet, les branchements sont ok
et pour le raccordement à l'arduino (uno) je me trouve avec SDA->A4 et SCL->A5 comme c'est expliquer dans le tuto de chez adafruit.  

Je suis tombé sur un topic d'un forum ou une personne avait le même problème et apparemment c'était à cause d'une erreur de bit qu'il faut forcé.
voici le lien: http://www.edaboard.eu/mon-ds1307-ne-demarre-pas-t376631.html

Quelqu'un à déjà eu ce problème ici?? ou une solution pour débugger??

Merci d'avance.
« Last Edit: February 23, 2013, 04:21:38 am by pouic13 » Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 259
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Avant de forcer des bits ou quoi que ce soit d'autre, tu nous donnes ton code stp? Histoire de savoir si tu actualises l'envoi sur le port série... (impression écran aussi tant qu'on y est, du moniteur série).
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3656
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est clair que sans code on risque pas de pouvoir t'aider ...
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici le code pour le premier imprim ecran ou le ds1307 n'est pas synchronisé 
et la ligne RTC.adjust(DateTime(__DATE__, __TIME__)); et mise en commentaire.

Code:
#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 midnight 1/1/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);
}



Pour le 2eme imprim j'ai simplement dé-commenté la ligne RTC.adjust(DateTime(__DATE__, __TIME__));

Ps: Les photos sont en pieces jointe je crois si ça a marché.



* Capture1.jpeg (71.73 KB, 1024x768 - viewed 43 times.)

* Capture2.jpeg (72.78 KB, 1024x768 - viewed 33 times.)
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as essayé mon tuto avec le code mis dans le sujet ?

http://arduino.cc/forum/index.php/topic,77849.0.html
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Jean-François, oui je l'ai déjà essayé je n'arrive pas à compiler ton code arduino. Je fais peut être une erreur de manip ou mon IDE et peut être trop ressente ça met déjà arrivé. J'ai mis un imp. écr. avec les erreurs.

J'ai aussi regardé ton montage. La différence avec le mien ce trouve au niveau des résistances de pullup et de la broche SQW/OUT (A noter que je ne mens sert pas, elle fait juste de la figuration). Mais apparemment la plupart des montage utilise des 2k2 7k5 ou 10k y a pas vraiment standard si je puis dire... certain mette aussi un condo de 0.1uF céramique entre la masse et l'alim.

Juste une petite question d’électronique au sujet des pullup, j'ai utiliser des 7k5 1/2W en carbone je sais qu'elles sont énormes (niveau puissance). Cela peut il entré en jeu?
Et aussi la pin 1 du ds1307 c'est bien celle-la je me suis pas trompé? (voir photo module)


 


* essai.jpeg (73.73 KB, 1024x768 - viewed 27 times.)

* schema.jpeg (34.61 KB, 1024x768 - viewed 32 times.)

* module.jpeg (306.46 KB, 3648x2736 - viewed 49 times.)
Logged

Malakoff
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La pin 1 est bien celle que tu as montrée.

Quartz HS ?
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5092
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut Jean-François, oui je l'ai déjà essayé je n'arrive pas à compiler ton code arduino. Je fais peut être une erreur de manip ou mon IDE et peut être trop ressente ça met déjà arrivé. J'ai mis un imp. écr. avec les erreurs.

J'ai aussi regardé ton montage. La différence avec le mien ce trouve au niveau des résistances de pullup et de la broche SQW/OUT (A noter que je ne mens sert pas, elle fait juste de la figuration). Mais apparemment la plupart des montage utilise des 2k2 7k5 ou 10k y a pas vraiment standard si je puis dire... certain mette aussi un condo de 0.1uF céramique entre la masse et l'alim.

Juste une petite question d’électronique au sujet des pullup, j'ai utiliser des 7k5 1/2W en carbone je sais qu'elles sont énormes (niveau puissance). Cela peut il entré en jeu?
Et aussi la pin 1 du ds1307 c'est bien celle-la je me suis pas trompé? (voir photo module)
bonjour
avec les ds1307 les 2 "bourdes" les plus communes
confondre les pin A4 A5 avec 4 et 5
utiliser une Bat 3V de recup "morte" , le ds1307 à besoin d'une batt de sauvegarde en bonne forme meme si alimenté en externe


  
« Last Edit: February 09, 2013, 08:11:57 am by Jean-François » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La puce et neuve le quartz et neuf c'est un 32...kHz la pile est une 3v neuve elle aussi.
J'ai essayé d'inverser SDA et SCL côté arduino rien ne bouge.

Je ne sais pas comment fonctionne les codes pour les librairies.
Vue que j'utilise un arduino uno je ne sais pas si les pin A4 et A5 sont configurés par default dans la librairie RTC ou ci celle-ci les reconnait seul.

Personne n'a eu de souci avec des ds1307?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 39
Ardui-Novice
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Quote
Personne n'a eu de souci avec des ds1307?

Si si rassure toi ! Voila ce qui m'a "sauvé"

http://code.google.com/p/libds1307/downloads/detail?name=DS1307.zip&can=2&q=

Bon tests ...
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut ludobabs merci pour ton aide mais j'ai déjà essayé ce code.
Le moniteur s'actualise bien mais les secondes reste figées.

Il n'y pas de manip à faire pour configurer le ds1307?
Ou juste une histoire de variable à remplacer dans la librairie?

Je bloque complètement. J'irais bien fouiller dans les librairies (ce que j'ai déjà fait) mais je ne connais pas du tout leur langage.
Comme je l'ai dit dans mon premier ou deuxième post je ne sais plus, une personne c'est retrouvée avec le même problème. Mais dans son cas c'était le bit des secondes qui foiré.

Il n'y pas un moyen de vérifier ça avec une lecture des port i2c ou un truc dans ce genre?   

 
 
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Essaye de changer la configuration du DS1307 à la main (registre "CONTROL") en utilisant la librairie Wire et le datasheet du composant.

J'ai fait un tutoriel qui pourrait te donner des indices sur la manip smiley-wink
http://skyduino.wordpress.com/2012/01/07/tutoriel-arduino-horloge-rtc-ds1307-librairie-liquidcrystal/
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci skywodd je vais essayé.
Pour la petite histoire j'ai deja vue tas page et j'ai pris peur en voyant le code  smiley-mr-green (je ne connais que les rudiments du langage C)
je vais m'attarder un peu decu.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 63
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lorsque je rentre ce code:
Code:
#include <Wire.h> // Inclusion de la librairie Wire pour
  //la gestion de l'I2C qui nous permettra de communiquer avec le DS1307
#include "structure.h" // Inclusion de notre fichier de structure qui définit le type "Date"
#include <avr/pgmspace.h> // Inclusion de la librairie PGMSPACE qui permet l'utilisation de PROGMEM

#define PSTR2(s) (__extension__({static unsigned char __c[] PROGMEM = (s); &__c[0];})) // Macro permettant de stocker facilement du texte en PROGMEM
#define DS1307_ADDRESS 0x68 // Adresse I2C du module DS1307

// Fonction de convertion bcd -> décimal
byte bcd2dec(byte bcd)
{
 return ((bcd / 16 * 10) + (bcd % 16));
}

// Fonction de convertion decimal -> bcd
byte dec2bcd(byte dec)
{
 return ((dec / 10 * 16) + (dec % 10));
}
 
// Fonction configurant le DS1307 avec la date/heure fourni
void ecrire(Date *date)
{
 Wire.beginTransmission(DS1307_ADDRESS); // Début de transaction I2C
 Wire.send(0); // Arrête l'oscillateur du DS1307
 Wire.send(dec2bcd(date->secondes)); // Envoi des données
 Wire.send(dec2bcd(date->minutes));
 Wire.send(dec2bcd(date->heures));
 Wire.send(dec2bcd(date->jourDeLaSemaine));
 Wire.send(dec2bcd(date->jour));
 Wire.send(dec2bcd(date->mois));
 Wire.send(dec2bcd(date->annee));
 Wire.send(0); // Redémarre l'oscillateur du DS1307
 Wire.endTransmission(); // Fin de transaction I2C
}
 
// Fonction récupérant l'heure et la date courante à partir du DS1307
void lire(Date *date)
{
 Wire.beginTransmission(DS1307_ADDRESS); // Début de transaction I2C
 Wire.send(0); // Demande les info à partir de l'adresse 0 (soit toutes les info)
 Wire.endTransmission(); // Fin de transaction I2C

 Wire.requestFrom(DS1307_ADDRESS, 7); // Récupère les info (7 octets = 7 valeurs
                                      // correspondant à l'heure et à la date courante)

 date->secondes = bcd2dec(Wire.receive()); // stockage et conversion des données reçu
 date->minutes = bcd2dec(Wire.receive());
 date->heures = bcd2dec(Wire.receive() & 0b111111);
 date->jourDeLaSemaine = bcd2dec(Wire.receive());
 date->jour = bcd2dec(Wire.receive());
 date->mois = bcd2dec(Wire.receive());
 date->annee = bcd2dec(Wire.receive());
}

// Fonction vérifiant la présence d'une demande de synchronisation en provenance du pc et récupérant les données de synchronisation ou à défaut récupérant la date et l'heure courante
void synchronisation(Date *date)
{
 Serial.print("SYNC"); // Envoi de la commande de synchronisation
 int i;
 for(i = 0 ; (Serial.available() < 3) && (i < 6) ; i++) // Attente de 3s max
 delay(500);
 if(i != 6)  // Il n'y as pas eu de timeout
  {
   if(Serial.read() == 'A')
    if(Serial.read() == 'C')
     if(Serial.read() == 'K') // Si le pc à répondu par une commande
      {      //ACK c'est que la synchronisation peut commencer
       while(Serial.available() < 7); // Attente des 7 octets de configuration
     date->secondes = Serial.read(); // Réception et conversion des données reçu
   date->minutes = Serial.read();
   date->heures = Serial.read();
           date->jourDeLaSemaine = Serial.read();
   date->jour = Serial.read();
   date->mois = Serial.read();
   date->annee = Serial.read();
   ecrire(date); // Stockage dans le DS1307 des donnes reçu
      }
  }

  else lire(date); // Si le pc n'as pas répondu à la demande de synchronisation
                  //la fonction ce content de lire les données courante du DS1307
}



// Setup()
void setup() {
Serial.begin(9600); // Initialisation du port série
Wire.begin(); // Initialisation du bus I2C
synchronisation(&date); // Tentative de synchronisation avec le pc
}

// loop()
void loop()
{
 Serial.print(lire(&date);
 delay(1000); // Rafraichissement de 1Hz
}

Il me ressort ces erreurs là:
Code:
sketch_feb09a.ino: In function ‘void ecrire(Date*)’:
sketch_feb09a:25: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:26: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:27: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:28: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:29: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:30: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:31: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:32: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:33: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a.ino: In function ‘void lire(Date*)’:
sketch_feb09a:41: error: ‘class TwoWire’ has no member named ‘send’
sketch_feb09a:47: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:48: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:49: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:50: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:51: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:52: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a:53: error: ‘class TwoWire’ has no member named ‘receive’
sketch_feb09a.ino: In function ‘void setup()’:
sketch_feb09a:91: error: ‘date’ was not declared in this scope
sketch_feb09a.ino: In function ‘void loop()’:
sketch_feb09a:97: error: ‘date’ was not declared in this scope

J'ai suivis ton tuto skywodd et j'ai bien créé un fichier nommé "structure.h" que j'ai placé au même endroit que mon sketch. Alor quesqu'y me raconte là... smiley-roll-sweat
Je suis passé a coté de quoi??

Esque c'est comme ça que je fait pour afficher la date dans mon moniteur avec le pointeur de la structure?
Code:
Serial.print(lire(&date);
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce tutoriel était fait pour arduino 0023 ou antérieur.
Remplace Wire.send par Wire.write et Wire.receive par Wire.read smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

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