DCF77 Modul in Arduino Code einbinden nur wie?
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Re: DCF77 Modul in Arduino Code einbinden nur wie?
DCF Modul und Rheinturm-Uhr Schaltung funktionieren.
Auf dem Arduino Uno habe ich nurnoch die Analogports A3 bis A5 frei.
Auf dem Arduino Uno habe ich nurnoch die Analogports A3 bis A5 frei.
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Welchen Port du nutzt ist ja egal, so lange es nicht Komplikationen mit den beiden Codes gibt.
Also tut die DCF77 und die Uhr auf der selben Hardware funktionieren, nur nicht beide Programme gleichzeitig?
Also tut die DCF77 und die Uhr auf der selben Hardware funktionieren, nur nicht beide Programme gleichzeitig?
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Genau beides funktioniert auf den gleichen Arduino.
Für das DCF77 benutze ich ein Testprogramm das ich weiter oben schon einmal gepostet hatte. Dort ist auch der Code für die Uhr ohne DCF77 Modul vorhanden.
Beide habe ich unabhängig voneinander laufen lassen. Beide Programme funktionieren, sowie die Hardware.
Morgen mal den Pin2 für das DCF77 Modul auf dem Analog Pin A3 umschreiben.
Update: Vorhin festgestellt das ich morgen nochmal mit dem Code von vorne anfangen darf.
Für das DCF77 benutze ich ein Testprogramm das ich weiter oben schon einmal gepostet hatte. Dort ist auch der Code für die Uhr ohne DCF77 Modul vorhanden.
Beide habe ich unabhängig voneinander laufen lassen. Beide Programme funktionieren, sowie die Hardware.
Morgen mal den Pin2 für das DCF77 Modul auf dem Analog Pin A3 umschreiben.
Update: Vorhin festgestellt das ich morgen nochmal mit dem Code von vorne anfangen darf.
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Ich habe heute Vormittag versucht den Arduino Code von der Rheinturmfunkuhr mit Arduino http://www.hjberndt.de/soft/rtctftdcf.html
auf dem Code der Rheinturmuhr mit Arduino http://www.hjberndt.de/soft/rtc.html anzupassen.
Das ist mein Arduino Code.
Habe leider keinen Plan mehr was ich im Code verändern muss, da mit es funktioniert.
auf dem Code der Rheinturmuhr mit Arduino http://www.hjberndt.de/soft/rtc.html anzupassen.
Das ist mein Arduino Code.
Code: Alles auswählen
//DCF77
#include <DCF77.h>
#include <TimeLib.h>
#define DCF_PIN 2
#define DCF_INTERRUPT 0
//time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
#define A0 14 //ANALOG 0
#define A1 15
#define A2 16
#define INTERVAL 1000
//PINS SEKUNDEN MINUTEN STUNDEN
byte oneSecond[] = {0,1,2,3,4,5,6,7,8}; //No Serial on 0/1
byte tenSecond[] = {9,10,11,12,13}; //
byte theSwitch[] = {14,15,16}; //SEKUNDE MINUTE STUNDE
int s10=0,s1=0; //ONESECOND TENSECOND BAND
int m10=2,m1=4;
int h10=1,h1=9;
#define STIME 60
int sync=STIME; //SyncSignTime
unsigned long t,t0; //TIMEINIT
void INTITIME(void){t0=millis();}
unsigned long TIMEREAD(void){return millis()-t0;}
void setup()
{int i;
for(i=0; i<sizeof(oneSecond);i++)pinMode(oneSecond[i],OUTPUT);
for(i=0; i<sizeof(tenSecond);i++)pinMode(tenSecond[i],OUTPUT);
for(i=0; i<sizeof(theSwitch);i++)pinMode(theSwitch[i],OUTPUT);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
}
void loop()
{int i;
t=TIMEREAD();
do
{for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],s1<=i?LOW:HIGH); //EINERBAND SEKUNDEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],s10<=i?LOW:HIGH); //ZEHNERBAND SEKUNDEN
digitalWrite(A0, HIGH);//Masse an Sekunden
delay(1); //SHOWTIME SEKUNDEN
digitalWrite(A0, LOW);
for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],m1<=i?LOW:HIGH); //EINERBAND MINUTEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],m10<=i?LOW:HIGH); //ZEHNERBAND MINUTEN
digitalWrite(A1, HIGH);//Masse an MINUTEN
delay(1); //SHOWTIME MINUTEN
digitalWrite(A1, LOW);
for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],h1<=i?LOW:HIGH); //EINERBAND STUNDEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],h10<=i?LOW:HIGH); //ZEHNERBAND STUNDEN
digitalWrite(A2, HIGH);//Masse an STUNDEN
delay(1); //SHOWTIME STUNDEN
digitalWrite(A2, LOW);
}while(TIMEREAD()<(t+INTERVAL));
//---------------------------------
sync++;
time_t DCFtime = DCF.getTime();
if (DCFtime!=0)
{char n='0';
tmElements_t tm;
breakTime(DCFtime, tm);
//sprintf(s,"%02d:%02d:%02d",tm.Hour,tm.Minute,tm.Second);
//Serial.println(s);
h10=s[0]-n; h01=s[1]-n;
//m10=s[3]-n; m01=s[4]-n;
//s10=s[6]-n; s01=s[7]-n;
//tft.setCursor(3, 4);
//sprintf(s,"%02d.%02d.%02d",tm.Day,tm.Month,
// tm.Year+1970-2000);
//tft.print(s);
sync=0;
}
else
{s1++; //s++;
if(s01>=10){s01=0;s10++;}
if(s10>=6){s10=0;m01++;} //m++;
if(m01>=10){m01=0;m10++;}
if(m10>=6){m10=0;h01++;} //h++;
if(h01>=10){h01=0;h10++;}
if(h10>=2 && h01>=4){h10=0;h01=0;}
}
//waiting ...
while(TIMEREAD()<(t+interval));
//one second
interval=analogRead(A0)==0?100:1000;
}
// s1++; //s++;
// if(s1>=10){s1=0;s10++;}
// if(s10>=6){s10=0;m1++;} //m1++;
// if(m1>=10){m1=0;m10++;}
// if(m10>=6){m10=0;h1++;} //h1++;
// if(h1>=10){h1=0;h10++;}
// if(h10>=2 && h1>=4){h10=0;h1=0;}
//}
-
- Beiträge: 1506
- Registriert: Di 13. Aug 2013, 19:10
- Wohnort: Niedersachsen Süd-Ost
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Dann bemühe den Lötkolben und schaffe Pin2 frei.
Ich bin nicht sicher, ob die Zuweisung "A3" zulässig ist, für digitalen Betrieb sind die Ports A0..5 als 14..19 ansprechbar, "#define DCF_PIN 17".Andreas_P hat geschrieben: ↑Sa 8. Mai 2021, 14:24 Ich habe es mal so versucht.Code: Alles auswählen
#define DCF_PIN A3 #define DCF_INTERRUPT 0
Aber, ich lese da Interrupt
https://www.arduino.cc/reference/de/lan ... interrupt/ :
Benutzbare Digitalpins für Interrupts Uno, Nano, Mini, andere 328-basierte 2, 3
Ich interpretiere das so, dass Du zwingend 2 oder 3 benutzen musst.
Es sollte doch machbar sein, in den Einsprung der DCF-Decodierung ein
Serial.print ("Routine erreicht ") reizubasteln und zu gucken?
Ich bin nicht der große Programmierkünstler, aber wenn bei mir etwas nicht laufen will, mache ich das so: Ich stricke Ausgaben dazwischen und gucke, wie weit ich komme. Anstatt seriell kann man auch ins Display schreiben, so man hat oder eine LED anknipsen.
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Als Eingangspin für das Funkuhrmodul habe ich als DCF_Pin 2 in verwendung.
Folgender Fehler wird von der IDE ausgegeben.
Folgender Fehler wird von der IDE ausgegeben.
Re: DCF77 Modul in Arduino Code einbinden nur wie?
So der nächste Versuch, leider bin ich kein Fachinformatiker oder Diplom-Informatiker.
Der Digitalpin des Ardruinos ist der Eingang für das DCF Modul.
Diesmal meldet Compiler keine Fehler, aber die Uhrzeit von dem DCF Modul wird nicht
über die LEDs ausgegeben. Irgendwo wird was nicht richtig verwurstet aber nur wo?
Der Digitalpin des Ardruinos ist der Eingang für das DCF Modul.
Diesmal meldet Compiler keine Fehler, aber die Uhrzeit von dem DCF Modul wird nicht
über die LEDs ausgegeben. Irgendwo wird was nicht richtig verwurstet aber nur wo?
Code: Alles auswählen
//DCF77
#include <DCF77.h>
#include <TimeLib.h>
#define DCF_PIN 2
#define DCF_INTERRUPT 0
//time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
#define A0 14 //ANALOG 0
#define A1 15
#define A2 16
#define INTERVAL 1000
//PINS SEKUNDEN MINUTEN STUNDEN
byte oneSecond[] = {0,1,3,4,5,6,7,8}; //No Serial on 0/1
byte tenSecond[] = {9,10,11,12,13}; //
byte theSwitch[] = {14,15,16}; //SEKUNDE MINUTE STUNDE
int s10=0,s1=0; //ONESECOND TENSECOND BAND
int m10=0,m1=0;
int h10=0,h1=0;
#define STIME 60
int sync=STIME; //SyncSignTime
unsigned long t,t0,interval=1000; //TIMEINIT
unsigned long TIMEREAD(void){return millis()-t0;}
void setup()
{int i;
for(i=0; i<sizeof(oneSecond);i++)pinMode(oneSecond[i],OUTPUT);
for(i=0; i<sizeof(tenSecond);i++)pinMode(tenSecond[i],OUTPUT);
for(i=0; i<sizeof(theSwitch);i++)pinMode(theSwitch[i],OUTPUT);
digitalWrite(A0, LOW);
digitalWrite(A1, LOW);
digitalWrite(A2, LOW);
DCF.Start();
t0=millis();
}
void loop()
{int i;
t=TIMEREAD();
do
{for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],s1<=i?LOW:HIGH); //EINERBAND SEKUNDEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],s10<=i?LOW:HIGH); //ZEHNERBAND SEKUNDEN
digitalWrite(A0, HIGH);//Masse an Sekunden
delay(1); //SHOWTIME SEKUNDEN
digitalWrite(A0, LOW);
for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],m1<=i?LOW:HIGH); //EINERBAND MINUTEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],m10<=i?LOW:HIGH); //ZEHNERBAND MINUTEN
digitalWrite(A1, HIGH);//Masse an MINUTEN
delay(1); //SHOWTIME MINUTEN
digitalWrite(A1, LOW);
for(i=0;i<sizeof(oneSecond);i++)digitalWrite(oneSecond[i],h1<=i?LOW:HIGH); //EINERBAND STUNDEN
for(i=0;i<sizeof(tenSecond);i++)digitalWrite(tenSecond[i],h10<=i?LOW:HIGH); //ZEHNERBAND STUNDEN
digitalWrite(A2, HIGH);//Masse an STUNDEN
delay(1); //SHOWTIME STUNDEN
digitalWrite(A2, LOW);
}while(TIMEREAD()<(t+INTERVAL));
//---------------------------------
sync++;
time_t DCFtime = DCF.getTime();
if (DCFtime!=0)
{char n='0';
tmElements_t tm;
breakTime(DCFtime, tm);
sync=0;
}
s1++; //s++;
if(s1>=10){s1=0;s10++;}
if(s10>=6){s10=0;m1++;} //m1++;
if(m1>=10){m1=0;m10++;}
if(m10>=6){m10=0;h1++;} //h1++;
if(h1>=10){h1=0;h10++;}
if(h10>=2 && h1>=4){h10=0;h1=0;}
}
Re: DCF77 Modul in Arduino Code einbinden nur wie?
Naja, so grundsätzlich muss man den Code schon verstehen, sonst wird das nix.
Soweit ich das erkannt habe, wird die Rheinturmuhr aus der TIMEREAD() Funktion mit der "Uhrzeit" versorgt, und zwar wir die über die Zeitbasis millis() bebildet, was eigentlich nur ein hochlaufender Zähler ist in Millisekunden.
Die DCF-Uhr gibt die Zeit in die Variable "DCFtime"
Das heißt ja, man muss die Variable DCFtime an die Rheinturmuhr weitergeben.
Leider ist die Rheinturmuhr keine Funktion, an die man schlicht die Uhrzeit geben kann.
Man muss die DCFtime in millis umrechnen und dann in die Funktion TIMEREAD einbauen.
So, das wenn die Rheinturmuhr die Funktion TIMEREAD() aufruft, dort die DCFtime ausgelesen wird und in der richtigen Form übergeben wird.
Soweit ich das erkannt habe, wird die Rheinturmuhr aus der TIMEREAD() Funktion mit der "Uhrzeit" versorgt, und zwar wir die über die Zeitbasis millis() bebildet, was eigentlich nur ein hochlaufender Zähler ist in Millisekunden.
Die DCF-Uhr gibt die Zeit in die Variable "DCFtime"
Das heißt ja, man muss die Variable DCFtime an die Rheinturmuhr weitergeben.
Leider ist die Rheinturmuhr keine Funktion, an die man schlicht die Uhrzeit geben kann.
Man muss die DCFtime in millis umrechnen und dann in die Funktion TIMEREAD einbauen.
So, das wenn die Rheinturmuhr die Funktion TIMEREAD() aufruft, dort die DCFtime ausgelesen wird und in der richtigen Form übergeben wird.