Beste mensen,
Met mijn huidige project heb ik een probleem waar ik niet uit kom. Ik heb een DCF77 klok gemaakt met een TM1637 LED display. Zie foto en code.
Hiervoor heb ik het programma van Thijs Ellenbaas gebruikt en dit zelf aangepast zodat het met een TM1637 6 digits display zou moeten werken.
Het probleem is dat nadat de tijd één maal is geupdated (en het LED display keurig de tijd aan geeft) er geen DCF77 tijd updates meer volgen. Zonder display (als ik het display spanningsloos maak door de + en - uit het breabord te trekken) volgen er weer netjes tijd updates iedere minuut.
Ik dacht eerst dat het misschien een storing is doordat het display via de pinnen 6 en 7 signaal geeft aan de Arduino UNO. Daarom het ik deze pinnen de met de functie "pinMode (xxx, OUTPUT); echt een output gemaakt. Dat werkte ook niet. Ik heb de pin 2 voor de DCF77 antenne de functie "input" gegeven. Ook dat werkt niet.
Ook als de hele schakeling op een accu is aangesloten heb ik nog steeds het probleem. Dus ik denk dat het meer een software matig probleem is.
De klok werkt wel prima met een LCD display (en natuurlijk een aangepast programma), maar met een LED display krijg ik het niet werkend.
Het LED display werkt dus wel, maar er volgen dus geen tijd updates meer als het display aan is.
Ik ben een beginner en ik vermoed dat ik wat verkeerd doe in de software, maar ik kom er gewoon zelf niet meer uit.... ;-(
Kan iemand mij tips of hulp geven? Zie mijn code hieronder en in de bijlage.
Met vriendelijke groet, Guido van Laere
#include "Utils.h"
#include "DCF77.h"
#include "TimeLib.h"
using namespace Utils;
#define DCF_PIN 2 // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin
time_t prevDisplay = 0; // when the digital clock was displayed
time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
#include "TM1637_6D.h"
#define CLK 7 //pins definitions for TM1637 and can be changed to other ports
#define DIO 6
TM1637_6D tm1637_6D(CLK,DIO);
int hh, mm, ss;
void setup() {
pinMode(CLK, OUTPUT);
pinMode(DIO, OUTPUT);
pinMode(DCF_PIN, INPUT);
tm1637_6D.init();
tm1637_6D.set(3); //DARKEST = 0, BRIGHTEST = 7
Serial.begin(9600);
DCF.Start();
setSyncInterval(30);
setSyncProvider(getDCFTime);
// It is also possible to directly use DCF.getTime, but this function gives a bit of feedback
//setSyncProvider(DCF.getTime);
Serial.println("Waiting for DCF77 time ... ");
Serial.println("It will take at least 2 minutes until a first update can be processed.");
while(timeStatus()== timeNotSet) {
// wait until the time is set by the sync provider
Serial.print(".");
delay(3000);
}
}
void loop()
{
if( now() != prevDisplay) //update the display only if the time has changed
{
prevDisplay = now();
digitalClockDisplay1();
digitalClockDisplay2();
}
}
void digitalClockDisplay1(){
hh = hour(), DEC;
mm = minute(), DEC;
ss = second(), DEC;
Serial.print(hh/10);
Serial.print(hh%10);
Serial.print(":");
Serial.print(mm/10);
Serial.print(mm%10);
Serial.print(":");
Serial.print(ss/10);
Serial.println(ss%10);
}
void digitalClockDisplay2(){
hh = hour(), DEC;
mm = minute(), DEC;
ss = second(), DEC;
tm1637_6D.display(2,hh/10,false);
tm1637_6D.display(1,hh%10,false);
tm1637_6D.display(0,mm/10,false);
tm1637_6D.display(5,mm%10,false);
tm1637_6D.display(4,ss/10,false);
tm1637_6D.display(3,ss%10,false);
}
unsigned long getDCFTime()
{
time_t DCFtime = DCF.getTime();
// Indicator that a time check is done
if (DCFtime!=0) {
Serial.println("time has an update");
}
return DCFtime;
}