klokje met ds1307 en 1637 display

hallo
ik heb een klok printje deze ds 1307http://www.ebay.com/itm/I2C-RTC-AT24C32-DS1307-Real-Time-Clo...566a0d5464
en 4 digit display op printje de 1637
http://www.ebay.com/itm/4-Bits-Digital-Tube-LED-Display-Modu...485c6f674d
ik heb code die wel compileerd en display op juiste tijd zet als ik programma start.
maar de klok loopt verder niet.
ik heb arduino uno
dit is de code ,en waarom loopt hij niet,heb de code van internet gehaald .

c code:

#include <Wire.h>
#include <EEPROM.h>
#include "TM1637.h"
#include "DS1307new.h"
 
 
//Массив, содержащий время компиляции
char compileTime[] = __TIME__;
 
 
//Номера пинов Arduino, к которым подключается индикатор
#define DISPLAY_CLK_PIN 12  
#define DISPLAY_DIO_PIN 13
 int startClock;
//Для работы с микросхемой часов и индикатором мы используем библиотеки
//Классы TM1637 и DS1307 объявлены именно в них
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
DS1307new clock;
 
 
void setup()
{
 
  //Включаем и настраиваем индикатор
  display.set();
  display.init();
 
  //Запускаем часы реального времени
  startClock;
 
  //Получаем число из строки, зная номер первого символа
  byte hour = getInt(compileTime, 0);
  byte minute = getInt(compileTime, 3);
  byte second = getInt(compileTime, 6);
 
  //Готовим для записи в RTC часы, минуты, секунды
  clock.fillByHMS(hour, minute, second);
 
  //Записываем эти данные во внутреннюю память часов.
  //С этого момента они начинают считать нужное для нас время
  clock.setTime();
 
}
 
 
void loop()
{
  //Значения для отображения на каждом из 4 разрядов
  int8_t timeDisp[4];

  //Запрашиваем время с часов
  clock.getTime();

  //Получаем десятки часов с помощью целочисленного деления
  timeDisp[0] = clock.hour / 10;
 
  //Получаем единицы часов с помощью остатка от деления
  timeDisp[1] = clock.hour % 10;
 
  //Проделываем то же самое с минутами
  timeDisp[2] = clock.minute / 10;
  timeDisp[3] = clock.minute % 10;

  //... а затем выводим его на экран
  display.display(timeDisp);
 
  //у нас нет отдельных разрядов для секунд, поэтому
  //будем включать и выключать двоеточие каждую секунду
  display.point(clock.second % 2 ? POINT_ON : POINT_OFF);
 
}
 
//Содержимое функции объяснено ниже
char getInt(const char* string, int startIndex) {
  return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0';
}

hoe krijg ik hem lopend ,is wel russiche denk ik

[Bericht gewijzigd door Henry S. op 25 september 2014 19:47:39 (0%)]

Shiptronic

Golden Member

Nog even een linkje erbij waar de code vandaan komt ?

En tja Russen en tijd ;) daar doen ze niet aan !

Wie de vraag stelt, zal met het antwoord moeten leren leven.

misschien iets duidelijker?

c code:

#include <Wire.h>
#include <EEPROM.h>
#include "TM1637.h"
#include "DS1307new.h"
 
 

char compileTime[] = __TIME__;
 
 

#define DISPLAY_CLK_PIN 12  
#define DISPLAY_DIO_PIN 13
 int startClock;

TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
DS1307new clock;
 
 
void setup()
{

  display.set();
  display.init();
 

  startClock;
 
 
  byte hour = getInt(compileTime, 0);
  byte minute = getInt(compileTime, 3);
  byte second = getInt(compileTime, 6);
 
 
  clock.fillByHMS(hour, minute, second);
 

  clock.setTime();
 
}
 
 
void loop()
{
   int8_t timeDisp[4];
  clock.getTime();
  timeDisp[0] = clock.hour / 10;
  timeDisp[1] = clock.hour % 10;
  timeDisp[2] = clock.minute / 10;
  timeDisp[3] = clock.minute % 10;
 display.display(timeDisp);
 display.point(clock.second % 2 ? POINT_ON : POINT_OFF);
}
 

char getInt(const char* string, int startIndex) {
  return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0';
}

Heb je er wel een Batterij in die DS1307 zitten, en als je hem uitzet onthoud hij de tijd wel?

(Edit)

Site opgezocht en laten vertalen, probeer deze eens:

c code:

  #include <Wire.h>
 #include <EEPROM.h>
 #include "TM1637.h"
 #include "DS1307.h"

 //Массив, содержащий время компиляции
 char compileTime [ ] = __TIME__ ;

 //Номера пинов Arduino, к которым подключается индикатор
 #define DISPLAY_CLK_PIN 12
 #define DISPLAY_DIO_PIN 13

 //Для работы с микросхемой часов и индикатором мы используем библиотеки
 TM1637 display ( DISPLAY_CLK_PIN , DISPLAY_DIO_PIN ) ;
 DS1307 clock ;


 void setup ( )
 {

   //Включаем и настраиваем индикатор
   display. set ( ) ;
   display. init ( ) ;

   //Запускаем часы реального времени
   clock. begin ( ) ;

   //Получаем число из строки, зная номер первого символа
   byte hour = getInt ( compileTime , 0 ) ;
   byte minute = getInt ( compileTime , 3 ) ;
   byte second = getInt ( compileTime , 6 ) ;

   //Импровизированный хэш времени
   //Содержит в себе количество секунд с начала дня
   unsigned int hash = hour * 60 * 60 + minute * 60 + second ; 

   //Проверяем несовпадение нового хэша с хэшем в EEPROM
   if ( EEPROMReadInt ( 0 ) != hash ) {

     //Сохраняем новый хэш
     EEPROMWriteInt ( 0 , hash ) ;

     //Готовим для записи в RTC часы, минуты, секунды
     clock. fillByHMS ( hour , minute , second ) ;

     //Записываем эти данные во внутреннюю память часов.
     //С этого момента они начинают считать нужное для нас время
     clock. setTime ( ) ;
   }

 }


 void loop ( )
 {
   //Значения для отображения на каждом из 4 разрядов
   int8_t timeDisp [ 4 ] ;

   //Запрашиваем время с часов
   clock. getTime ( ) ;

   //Получаем десятки часов с помощью целочисленного деления
   timeDisp [ 0 ] = clock. hour / 10 ;

   //Получаем единицы часов с помощью остатка от деления
   timeDisp [ 1 ] = clock. hour % 10 ;

   //Проделываем то же самое с минутами
   timeDisp [ 2 ] = clock. minute / 10 ;
   timeDisp [ 3 ] = clock. minute % 10 ;

   //... а затем выводим его на экран
   display. display ( timeDisp ) ;

   //у нас нет отдельных разрядов для секунд, поэтому
   //будем включать и выключать двоеточие каждую секунду
   display. point ( clock. second % 2 ? POINT_ON : POINT_OFF ) ;

 }

 char getInt ( const char * string , int startIndex ) {
   return int ( string [ startIndex ] - '0' ) * 10 + int ( string [ startIndex + 1 ] ) - '0' ;
 }

 //Запись двухбайтового числа в память
 void EEPROMWriteInt ( int address , int value )
 {
   EEPROM. write ( address , lowByte ( value ) ) ;
   EEPROM. write ( address + 1 , highByte ( value ) ) ;
 }

 //Чтение числа из памяти
 unsigned int EEPROMReadInt ( int address )
 {
   byte lowByte = EEPROM. read ( address ) ;
   byte highByte = EEPROM. read ( address + 1 ) ;

   return ( highByte << 8 ) | lowByte ;
 } 

http://translate.google.nl/translate?hl=nl&sl=ru&tl=...0%BE%D1%80

LET OP BIJ VERTALING VERTAALD HIJ DE CODE OOK!!!

Shiptronic

Golden Member

Wie de vraag stelt, zal met het antwoord moeten leren leven.

ik heb ook de orginele zoals op site stond geprobeerd,maar dan geeft ie meldingen,zal de library van DS1307.h wel zijn,de goeie kan ik niet vinden.
dus toen vond ik library DS1307new.h,en de sketch op paar regels aangepast,toen compileerde hij wel.
maar als ik de sketch start zet ie de tijd goed ,maar verder loopt de klok niet.
zal wel komen door de aanpassing en library.
dus als iemand een oplossing weet???

Shiptronic

Golden Member

Dat blijf een probleem als je met knippen en plakken van het ww-Net iets in elkaar probeert te zetten, en geen idee hebt wat er op de achtergrond moet gebeuren .

Wie de vraag stelt, zal met het antwoord moeten leren leven.

je hebt volkomen gelijk,met van www afplukken,niet alles werkt.
maar ja ik moet wel wat ,ik kan zelf niet programmeren.
en die library's is een probleem.
maar af en toe vind ik wat op www ,wat wel goed werkt.
en ik ben blij als een kind als iets werkt.
en ja nog wat ,alle mensen zijn niet even slim he.

Lijkt het je wat om programmeren te leren?

Iets heel anders :-) http://www.echteworst.nl

nou ik vind het eerlijk gezegt te moeilijk,snap er niks van wat je waar moet zetten.
maar vind het leuk schakelingetjes na te bouwen op breadboard en arduino.verder vraag ik te veel schijnt het;)

Je vraagt niet teveel, maar als je wilt dat iemand kant en klaar iets voor je maakt moet het in de rubriek vraag en aanbod :-)

Iets heel anders :-) http://www.echteworst.nl

Moet je de klok niet initialiseren/configureren voordat je deze gebruikt? (ik kan het zo snel niet zien in je code)

Ik ken het in elk geval van de ds1302 waar je met een configuatiebit (Clock Halt Flag) de klok stil zet. En als die bit verkeerd staat doet je klokje niks.

ja hoor setTime set de DS1307 op de pc tijd,(is een ander program)
en ik heb nu de DS1307 met een 8 digit 7 segments MAX7219 printje.
met een ander programma en werkt perfect nu.
alleen die software van die rus site ,van alles geprobeerd ,dat kreeg ik niet aan de praat,vandaar de vraag hier gezet.
ik dacht er zijn hier mensen die goed kunnen programmeren,die zien de logica wel in die sketch.
maar bedankt allemaal