Arduino Forum

International => Français => Tutoriels et cours => Topic started by: jfs on Nov 04, 2011, 04:26 pm

Title: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 04, 2011, 04:26 pm
Comme indiqué précédemment dans un autre topic, voici un petit tuto pour mettre votre ds1307 à l'heure NTP (network time protocol).
Il subsiste une petite latence de quelques dixièmes de secondes, mais pour du NTP c'est correct   :D.

J'ai utilisé ce schéma pour monter ma puce RTC sur une plaque de prototypage (pas de pcb laser pour cette fois :D).

(http://i49.servimg.com/u/f49/11/19/17/06/ds130710.jpg)

Ce qui a donné cela :

(http://i49.servimg.com/u/f49/11/19/17/06/img_1223.jpg)

Un quartz de 32.768kHz doit être monté sur les broches 1 et 2, pas besoins de condensateur (dixit le constructeur).

La pile est de 3V.

Le code Arduino n'utilise pas de librairie ds1307, je trouvais plus intéressant d'utiliser une partie de ce code ( source (http://www.glacialwanderer.com/hobbyrobotics/?p=12)).
J'ai ajouté la partie qui demande à Processing d'envoyer une chaine indiquant l'heure de l'ordinateur hôte.
Le code est commenté pour Arduino et Processing.

Une petite vidéo qui explique la procédure :

https://youtu.be/m_31BFl08Z4 (https://youtu.be/m_31BFl08Z4)


Le code coté Arduino :

Code: [Select]
/*
 Permet de mettre une horloge ds1307 en synchronisation avec l'heure NTP
 Par le biais d'une application Arduino-Processing
 */

/*

 Comporte des parties de code écrites par :
- Maurice Ribble
  4-17-2008
  http://www.glacialwanderer.com/hobbyrobotics
  Pour le ds1307
 
 - X. HINAULT
   01/2010
   http://www.mon-club-elec.fr
   Pour le LCD
 
 */
 
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68

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

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

// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
/*void stopDs1307()
 {
 Wire.beginTransmission(DS1307_I2C_ADDRESS);
 Wire.send(0);
 Wire.send(0x80);
 Wire.endTransmission();
 }*/

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second,        // 0-59
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock
  Wire.send(decToBcd(minute));
  Wire.send(decToBcd(hour));      // If you want 12 hour am/pm you need to set
  // bit 6 (also need to change readDateDs1307)
  Wire.send(decToBcd(dayOfWeek));
  Wire.send(decToBcd(dayOfMonth));
  Wire.send(decToBcd(month));
  Wire.send(decToBcd(year));
  Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(
byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}


#include <LiquidCrystal.h>

const int RS=2; //declaration constante de broche
const int E=3; //declaration constante de broche
const int D4=4; //declaration constante de broche
const int D5=5; //declaration constante de broche
const int D6=6; //declaration constante de broche
const int D7=7; //declaration constante de broche
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

int octetReception=0; // variable de stockage des valeurs reçues sur le port Série (ASCII)
char caractereRecu=0; // variable pour stockage caractère recu
int compt=0; // variable comptage caractères reçus

String chaineReception=""; // déclare un objet String vide pour reception chaine
int oldSecond;

void setup() {
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin(); // initialise 1wire

  Serial.begin(115200); // Initialise la communication série

  // lit les valeurs de l'horloge pour les replacer si elle est déjà à l'heure
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  if ((year)== NULL){ // si l'année = NULL
  // preinitialise l'horloge mets les valeurs lue précédement (à 0 si premier allumage)
  setDateDs1307(int(second), int(minute), int(hour), int(dayOfWeek), int(dayOfMonth), int(month), int(year));
  }

  //***** LCD *****//
  lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes
  delay(10); // pause rapide pour laisser temps initialisation
  lcd.print("initialisation") ; // affiche la chaîne texte - message de test
  lcd.setCursor(0, 1) ;
  lcd.print("de l'horloge") ;
  delay(2000); // pause de 2 secondes
  lcd.clear(); // // efface écran et met le curseur en haut à gauche
  delay(100); // pour laisser temps effacer écran

  //**** liaison pour l'heure NTP ****//
  Serial.println('A'); // envoi un "top" à Processing
  while (millis()<5000) {  // attente pendant 5 secondes d'une liaison série (ne fonctionne pas en dessous)
    while (Serial.available()>0) { // tant qu'un octet est dans la liaison série

      octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable      

      if (octetReception==13) { // si l'octet reçu est le retour chariot (CR ou 13)

        // converti la chaine en entier pour les valeurs de temps
        second = int((chaineReception.charAt(0)-48)*10)+int(chaineReception.charAt(1)-48) ;
        minute = int((chaineReception.charAt(2)-48)*10)+int(chaineReception.charAt(3)-48);
        hour = int((chaineReception.charAt(4)-48)*10)+int(chaineReception.charAt(5)-48);
        dayOfWeek = 1;
        dayOfMonth = int((chaineReception.charAt(6)-48)*10)+int(chaineReception.charAt(7)-48);
        month = int((chaineReception.charAt(8)-48)*10)+int(chaineReception.charAt(9)-48);
        year = int((chaineReception.charAt(12)-48)*10)+int(chaineReception.charAt(13)-48); //int((chaineReception.charAt(10)-48)*1000)+int((chaineReception.charAt(11)-48)*100)+

        //mets le DS1307 en syncronisation avec l'horloge de l'ordinateur
        setDateDs1307(int(second), int(minute), int(hour), int(dayOfWeek), int(dayOfMonth), int(month), int(year));

        chaineReception=""; //RAZ de la chaine de réception
        break; // sort de la boucle while
      }
      else { // si le caractère reçu n'est pas un saut de ligne
        caractereRecu=char(octetReception); // convertit l'octet reçu en caractère
        chaineReception=chaineReception+caractereRecu; // ajoute le caratère à la chaine
      }
    }
  }
}

void loop(){

  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

  if(second!=oldSecond){  // change l'affichage uniquement au changement de seconde
    Serial.print(hour, DEC);
    Serial.print(":");
    Serial.print(minute, DEC);
    Serial.print(":");
    Serial.print(second, DEC);
    Serial.print("  ");
    Serial.print(month, DEC);
    Serial.print("/");
    Serial.print(dayOfMonth, DEC);
    Serial.print("/");
    Serial.print(year, DEC);
    Serial.print("  Day_of_week:");
    Serial.println(dayOfWeek, DEC);

    lcd.home();
    if (int(hour)<=9)lcd.print(0);
    lcd.print(int(hour));
    lcd.print (":");
    if (int(minute)<=9)lcd.print(0);
    lcd.print(int(minute));
    lcd.print (":");
    if (int(second)<=9)lcd.print(0);
    lcd.print(int(second));
    lcd.setCursor (0,1);
    if (int(dayOfMonth)<=9)lcd.print(0);
    lcd.print(int(dayOfMonth));
    lcd.print ("/");
    if (int(month)<=9)lcd.print(0);
    lcd.print(int(month));
    lcd.print ("/20");
    lcd.print(int(year));

  }
  oldSecond=second;  // réinitialise oldSecond

}


Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 04, 2011, 04:27 pm
Pour installer Processing :

http://www.processing.org (http://www.processing.org)

Et le code coté Processing :

Code: [Select]
/*
 Permet de mettre une horloge ds1307 en synchronisation avec l'heure NTP
 Par le biais d'une application Arduino-Processing
 */

import processing.serial.*;

Serial myPort; // nom du port série

int oldsecond=second();

void setup() {

  println(Serial.list());// envoi dans le terminal les ports série disponibles

  myPort = new Serial(this, Serial.list()[0], 115200); // ouvre une liaison série sur le port '0'
}
int i=0;
void draw() {
  background(204); // défini la couleur de la fenetre de l'application

  while (myPort.available() > 0) {    
    char inByte = myPort.readChar();  // lit le port série de l'Arduino
    if (inByte == 65) { // si le caractère en entrée = A
      oldsecond=second();
      while(second()==oldsecond) {
      } //laisse continuer la boucle au changement de seconde

      // formate la chaine en mettant un '0' devant les unités
      String joinedTime =nf(second(),2)+nf(minute(),2)+nf(hour(),2)+nf(day(),2)+nf(month(),2)+str(year());
      println (joinedTime); // envoi la chaine dans le terminal
      myPort.write (joinedTime+"\r"); // envoi la chaine suivie d'un retour chariot sur le port série
    }
    break;  // sort de la boucle while
  }
}


Et voualààà.... enjoy  XD

Pour les commentaires.... pas de soucis, mais pas sur la tête, les coups  :smiley-mr-green:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: arduimat on Nov 04, 2011, 04:43 pm
J'adore la vidéo :) Merci pour ce tuto.

Question : Combien de temps peut tenir le module RTC avec la pile 3V plate ?
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 04, 2011, 04:49 pm
D'après ce que j'ai lu ça pourrait tenir 10 ans  XD, mais la pile n'est sollicitée que si l'alimentation principale est coupée.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: skywodd on Nov 04, 2011, 11:11 pm
Sympa ce petit tuto et aussi le support pour la pile très "DIY" :smiley-mr-green:

Justement je suis en train de faire un tuto sur l'I2C et le SPI avec une carte arduino ... coïncidence ? je ne crois pas. (/musique de X-files)


PS: Non mais elle est ou la boite de roquefort ! ... ralala il y a même plus d'emballage :smiley-mr-green:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 05, 2011, 08:43 am
Bon... à la demande de skywodd, voilà une horloge pour pas rater l'heure du petit déj  XD :

(http://i49.servimg.com/u/f49/11/19/17/06/img_1224.jpg)
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: skywodd on Nov 05, 2011, 11:24 am
JF-Clock, l'horloge avec 40% de matière grasse 8)

J'adore ! Faut que je trouve une boite pour mettre mon arduino dedans :P
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 05, 2011, 11:34 am
C'est tout ce que j'avais sous la main ce matin  :smiley-mr-green:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Artouste on Nov 06, 2011, 01:51 pm

Comme indiqué précédemment dans un autre topic, voici un petit tuto pour mettre votre ds1307 à l'heure NTP (network time protocol).
Il subsiste une petite latence de quelques dixièmes de secondes, mais pour du NTP c'est correct  XD.

J'ai utilisé ce schéma pour monter ma puce RTC sur une plaque de prototypage (pas de pcb laser pour cette fois XD).

(http://i49.servimg.com/u/f49/11/19/17/06/ds130710.jpg)



bonjour
sympa, j'ai retrouvé un DS1307 (caché au milieu de DS1337 DS1337C) dans mes "boites à grouilles"  :smiley-mr-green:
et vu la météo, je vais faire chauffer le fer .

perso, j'aime bien le DS1904 en RTC "sauvegardée" , j'aime bien le onewire   :)   pour de la gestion "calme" des evenements.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 07, 2011, 07:28 pm
Un petit soucis... mais je pense que cela vient du choix du quartz.
En trois jours mon horloge accuse un retard de 2-3 secondes.
Je vais faire des essais avec un ds32kHs afin de voir si c'est plus précis  :D
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Artouste on Nov 07, 2011, 08:01 pm

Un petit soucis... mais je pense que cela vient du choix du quartz.
En trois jours mon horloge accuse un retard de 2-3 secondes.
Je vais faire des essais avec un ds32kHs afin de voir si c'est plus précis  :D

oui c'est le probleme avec les quartz horloger "tout venant ou de recup"
et comme les capas sont integrées dans le ds on ne peut pas "jouer" à voir si une petite capa variable en //
ne pourrait pas quand même être utilisée pour réglage fin (en configurant et en utilisant la sortie SQW vers un fréquencemètre pour calibration.

le mien testé hier.  :smiley-mr-green:(http://cjoint.com/11nv/AKht3JPdjqc_DS1307.jpg)



Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 07, 2011, 09:01 pm
Elle est où la boite de margarine ?  XD
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: skywodd on Nov 07, 2011, 09:08 pm

le mien testé hier.  :smiley-mr-green:(http://cjoint.com/11nv/AKht3JPdjqc_DS1307.jpg)



Elle est où la boite de margarine ?  XD


La boite ! La boite ! On veut la boite !

--
SkyWodd, membre du parti pour les emballages réutilisable.

:smiley-mr-green:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Artouste on Nov 07, 2011, 09:42 pm

Elle est où la boite de margarine ?  XD

OOups  :smiley-mr-green:
désolé de l'oubli !
Et comme je n'ai pas là sous la main de pot de crème double de Gruyère, je vais tenter semaine prochaine et à la
louche d'intégrer ça comme ça pour que cela soit evidemment plus présentable,  parce que cela le "Vaud" bien.   :)

(http://cjoint.com/11nv/AKhvDYXeW3Y_clakosds.jpg)

artouste --->[]  déjà loin !  :smiley-red:

Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Nov 07, 2011, 09:50 pm
A la vache... parce que je le veau bien  XD

Va être bien dans un calandos, l'horloge  :smiley-mr-green:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: silverbeach on Nov 08, 2011, 04:33 pm
Pour le décalage, on m'a conseillé de mettre un condensateur (10nF pour l'un, 100nF pour l'autre personne) entre le +5 et le GND.
Je n'ai pas encore testé sur le long terme (je dois adapter le support de la pile) mais d'après ces personnes, ça réduit le décalage de l'heure.

De plus, on m'a dit que les résistances n'étaient pas nécéssaire.

Ps: je ne suis qu'un débutant donc je ne peux pas confirmer  ;)
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: skywodd on Nov 08, 2011, 05:10 pm

Pour le décalage, on m'a conseillé de mettre un condensateur (10nF pour l'un, 100nF pour l'autre personne) entre le +5 et le GND.
Je n'ai pas encore testé sur le long terme (je dois adapter le support de la pile) mais d'après ces personnes, ça réduit le décalage de l'heure.

De plus, on m'a dit que les résistances n'étaient pas nécéssaire.

Je vois pas trop en quoi le condensateur entre gnd et vcc va aider à la précision du module ?
A pars filtrer les parasites sur l'alim mais sinon ...

Pour les résistances de pul-up elle sont effectivement facultatives si il n'y a qu'un seul périphérique I2C sur le bus, mais c'est trés variable selon les périphériques, sans les résistances cela peut trés bien marcher avec un et pas du tout avec un autre.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Jan 14, 2014, 08:23 pm
La version pour Arduino 1.xx

Code: [Select]
/*
Permet de mettre une horloge ds1307 en synchronisation avec l'heure NTP
Par le biais d'une application Arduino-Processing
*/

/*

Comporte des parties de code écrites par :
- Maurice Ribble
  4-17-2008
  http://www.glacialwanderer.com/hobbyrobotics
  Pour le ds1307

- X. HINAULT
   01/2010
   http://www.mon-club-elec.fr
   Pour le LCD

*/

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68

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

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

// Stops the DS1307, but it has the side effect of setting seconds to 0
// Probably only want to use this for testing
/*void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(0x80);
Wire.endTransmission();
}*/

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second,        // 0-59
byte minute,        // 0-59
byte hour,          // 1-23
byte dayOfWeek,     // 1-7
byte dayOfMonth,    // 1-28/29/30/31
byte month,         // 1-12
byte year)          // 0-99
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));    // 0 to bit 7 starts the clock
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));      // If you want 12 hour am/pm you need to set
  // bit 6 (also need to change readDateDs1307)
  Wire.write(decToBcd(dayOfWeek));
  Wire.write(decToBcd(dayOfMonth));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(
byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f);  // Need to change this if 12 hour am/pm
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}


#include <LiquidCrystal.h>

const int RS=2; //declaration constante de broche
const int E=3; //declaration constante de broche
const int D4=4; //declaration constante de broche
const int D5=5; //declaration constante de broche
const int D6=6; //declaration constante de broche
const int D7=7; //declaration constante de broche
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

int octetReception=0; // variable de stockage des valeurs reçues sur le port Série (ASCII)
char caractereRecu=0; // variable pour stockage caractère recu
int compt=0; // variable comptage caractères reçus

String chaineReception=""; // déclare un objet String vide pour reception chaine
int oldSecond;

void setup() {
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin(); // initialise 1wire

  Serial.begin(115200); // Initialise la communication série

  // lit les valeurs de l'horloge pour les replacer si elle est déjà à l'heure
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  if ((year)== NULL){ // si l'année = NULL
  // preinitialise l'horloge mets les valeurs lue précédement (à 0 si premier allumage)
  setDateDs1307(int(second), int(minute), int(hour), int(dayOfWeek), int(dayOfMonth), int(month), int(year));
  }

  //***** LCD *****//
  lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes
  delay(10); // pause rapide pour laisser temps initialisation
  lcd.print("initialisation") ; // affiche la chaîne texte - message de test
  lcd.setCursor(0, 1) ;
  lcd.print("de l'horloge") ;
  delay(2000); // pause de 2 secondes
  lcd.clear(); // // efface écran et met le curseur en haut à gauche
  delay(100); // pour laisser temps effacer écran

  //**** liaison pour l'heure NTP ****//
  Serial.println('A'); // envoi un "top" à Processing
  while (millis()<5000) {  // attente pendant 5 secondes d'une liaison série (ne fonctionne pas en dessous)
    while (Serial.available()>0) { // tant qu'un octet est dans la liaison série

      octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable     

      if (octetReception==13) { // si l'octet reçu est le retour chariot (CR ou 13)

        // converti la chaine en entier pour les valeurs de temps
        second = int((chaineReception.charAt(0)-48)*10)+int(chaineReception.charAt(1)-48) ;
        minute = int((chaineReception.charAt(2)-48)*10)+int(chaineReception.charAt(3)-48);
        hour = int((chaineReception.charAt(4)-48)*10)+int(chaineReception.charAt(5)-48);
        dayOfWeek = 1;
        dayOfMonth = int((chaineReception.charAt(6)-48)*10)+int(chaineReception.charAt(7)-48);
        month = int((chaineReception.charAt(8)-48)*10)+int(chaineReception.charAt(9)-48);
        year = int((chaineReception.charAt(12)-48)*10)+int(chaineReception.charAt(13)-48); //int((chaineReception.charAt(10)-48)*1000)+int((chaineReception.charAt(11)-48)*100)+

        //mets le DS1307 en syncronisation avec l'horloge de l'ordinateur
        setDateDs1307(int(second), int(minute), int(hour), int(dayOfWeek), int(dayOfMonth), int(month), int(year));

        chaineReception=""; //RAZ de la chaine de réception
        break; // sort de la boucle while
      }
      else { // si le caractère reçu n'est pas un saut de ligne
        caractereRecu=char(octetReception); // convertit l'octet reçu en caractère
        chaineReception=chaineReception+caractereRecu; // ajoute le caratère à la chaine
      }
    }
  }
}

void loop(){

  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

  if(second!=oldSecond){  // change l'affichage uniquement au changement de seconde
    Serial.print(hour, DEC);
    Serial.print(":");
    Serial.print(minute, DEC);
    Serial.print(":");
    Serial.print(second, DEC);
    Serial.print("  ");
    Serial.print(month, DEC);
    Serial.print("/");
    Serial.print(dayOfMonth, DEC);
    Serial.print("/");
    Serial.print(year, DEC);
    Serial.print("  Day_of_week:");
    Serial.println(dayOfWeek, DEC);

    lcd.home();
    if (int(hour)<=9)lcd.print(0);
    lcd.print(int(hour));
    lcd.print (":");
    if (int(minute)<=9)lcd.print(0);
    lcd.print(int(minute));
    lcd.print (":");
    if (int(second)<=9)lcd.print(0);
    lcd.print(int(second));
    lcd.setCursor (0,1);
    if (int(dayOfMonth)<=9)lcd.print(0);
    lcd.print(int(dayOfMonth));
    lcd.print ("/");
    if (int(month)<=9)lcd.print(0);
    lcd.print(int(month));
    lcd.print ("/20");
    lcd.print(int(year));

  }
  oldSecond=second;  // réinitialise oldSecond

}
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: piflechien54 on Jan 15, 2014, 03:22 pm
Salut :)

p'tite question, avez vous trouvé le moyen de sauvegarder l'heure de réveil (par exemple) dans le DS1307 ?
skywodd ? tu te rappel ?  ;)
afin que quand il y a une panne de courant durant la nuit, on puisse quand même être réveillé  XD

Merci :)
@plus ;)
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: chabot380 on Jan 15, 2014, 03:42 pm
Salut   ;)
Un programme comme ça :
Code: [Select]
// RAM read and write functions using a DS1307 RTC connected via I2C and Wire lib.
    // 2012-11-06 www.idreammicro.com http://opensource.org/licenses/mit-license.php

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

    RTC_DS1307 RTC;

    void setup () {
        Serial.begin(57600);
        Wire.begin();
        RTC.begin();
       
        // Write bytes in RAM.
        uint8_t data[13] = {
            'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n',
        };
        RTC.writeBytesInRam(0x08, 13, data);
    }

    void loop () {
        // Read bytes in RAM.
        uint8_t data[13] = { 0 };
        RTC.readBytesInRam(0x08, 13, data);
       
        // Print bytes on Serial.
        Serial.write(data, 13);
        delay(5000);
    }


A+

Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: piflechien54 on Jan 16, 2014, 02:28 pm
Salut Chabot380  :)
Honnêtement je dirais :  :~ heu... oui... peut être ....   (ho lala.... j'suis complètement perdu, faut que je révise tout les tutos arduino moi, pfiou ....)
Je garde le post sous le coude  :D
Merci @vous tous ;)
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 02:28 pm
Hi,

j'aimerais savoir comment est-ce que l'upload des deux codes se fait ou plutôt comment est-ce qu'on fait fonctionner les deux code ?
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 05:53 pm
Tout est dans les deux premiers messages.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 06:09 pm
Oui relu et j'ai fait comme écrit mais je n'ai pas du tout de synchronisation. A la place j'ai ceci :

(http://hostingpics.net/pics/148805Capture.png)


Edit de Jean-François :  Pffff j'ai même du modifier l'url de ta photo....  :smiley-roll:
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 06:15 pm
C'est marrant, ton lcd il ressemble vachement pas au mien   XD

Tu as installé Processing ?
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 06:21 pm

Tu as installé Processing ?


Oui

Pour le LCD, j'ai juste mit les parties le concernant en commentaire. Je veux juste voir le résultat sur le moniteur série et je pourrai faire le reste après. Et puis je compte plutôt utiliser des afficheurs 7 segment à la place.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 06:26 pm
Tu fais l'initialisation sans la pile, Arduino sous tension avant le lancement du sketch Processing ?

Quelle version de Processing ?  (la version 1.5.1 fonctionne)
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 06:33 pm
La pile est déjà monté. J'utilise ce modèle (https://lh3.googleusercontent.com/-MPSp0KuOjxw/Ug-a_3sK9XI/AAAAAAAAAM8/COVd9shXn1M/w769-h577-no/rtc_pile_r2032.jpg). J'ouvre les deux sketch( celui d'arduino et celui de processing) ensuite je téléverse celui d'arduino et c'est à la suite de ça que je fais "Run" pour celui de processing. Pour processing j'ai, après compilation, COM3, COM4, COM5 au bas.

J'utilise la version 2.1
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 06:36 pm
Il faut que la pile soit enlevée pour l'initialisation.

Il y avait eu un problème, corrigé dans ce message :

http://forum.arduino.cc/index.php?topic=77849.msg1546598#msg1546598

Essaie avec P 1.5xx

Pour Processing 2.xx il y a peut être des choses à changer, mais la base est dans les sketchs d'origine.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 06:54 pm
ok, j'ai enlevé la pile pour le moment. Je vais maintenant télécharger la version 1.5.1 de processing pour voir ce que ça donne.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 07:01 pm
Après il y a aussi le choix du bon port série, il s'affiche normalement au démarrage du sketch Processing, il faut ensuite le changer directement dans le code, ici :

Quote
myPort = new Serial(this, Serial.list()[0], 115200); // ouvre une liaison série sur le port '0'
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 07:06 pm
Oui et cela ne serait-il pas dans cette ligne de code ?! (pour processing)

Code: [Select]


myPort = new Serial(this, Serial.list()[0], 115200); // ouvre une liaison série sur le port '0'



Comme je le disais tantôt, j'ai COM3 jusqu'au COM7 affiché au bas après compilation. Moi je met donc 3 à la place du zero dans la ligne de code précédente.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 07:09 pm
Oui, pour le port, d'un ordi et d'un OS à l'autre ça change.... il faut adapter, C'est ce que tu as fait

Après il y a eu des soucis lorsque l'on est passé de l'IDE Arduino 0.23 à 1.xx, mais C'est corrigé, mais il faut tout de même charger le bon sketch sur l'arduino.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 07:17 pm
Pour ce qui est du sketch, je ne crois pas qu'il y ait de problème à ce niveau car celui-ci (http://forum.arduino.cc/index.php?topic=210712.0) a confirmé l'exactitude du code pour arduino.
Après ... je ne sais pas ce qui ce passe chez moi.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 09:30 pm
Bonsoir,

Voilà j'ai téléchargé la version 1.5.1 de processing et j'ai fait comme ceci :
- J'ai enlevé la pile du rtc
- J'ai copier coller le code corrigé pour l'arduino
- j'ai copier coller le code pour processing
- j'ai téléversé le code pour Arduino
- j'ai ensuite fait "Run" pour processing

... après tout ça rien n'a changé

Et j'ai aussi ce message d'erreur de la version 1.5.1
Code: [Select]

Display 0 does not exist, using the default display instead.
WARNING:  RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Mar 26, 2014, 10:03 pm
J'arriverai pas à regarder plus avant ce week end.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Uzuma on Mar 26, 2014, 11:11 pm
ok, je vais continuer de chercher en attendant.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: Felix83 on Jul 21, 2014, 11:37 am
une question bête (la réponse m'a peut être échapé dans le code)

dans le montage du post d'origine, qu'i y a t'il pour initier la comm NTP ?  un shield wifi ? Ethernet ? Gsm ?

merci
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Jul 21, 2014, 11:42 am
une liaison série avec le pc par le biais de Processing.... donc pas de shield.
Title: Re: [Tuto] ds1307 Arduino Processing mise à l'heure NTP
Post by: jfs on Jun 14, 2020, 05:28 am
La vidéo a changé d'emplacement et se trouve maintenant ici :

https://youtu.be/g4dnDkGnESs (https://youtu.be/g4dnDkGnESs)