DCF77 + IF482 debugging
This commit is contained in:
parent
bfc8f13cc7
commit
ed5c7f46f3
@ -61,8 +61,8 @@ void doHousekeeping() {
|
||||
uxTaskGetStackHighWaterMark(BmeTask), eTaskGetState(BmeTask));
|
||||
#endif
|
||||
#ifdef HAS_DCF77
|
||||
ESP_LOGD(TAG, "DCF77loop %d bytes left | Taskstate = %d",
|
||||
uxTaskGetStackHighWaterMark(DCF77Task), eTaskGetState(DCF77Task));
|
||||
ESP_LOGD(TAG, "Clockloop %d bytes left | Taskstate = %d",
|
||||
uxTaskGetStackHighWaterMark(ClockTask), eTaskGetState(ClockTask));
|
||||
#endif
|
||||
|
||||
#if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED)
|
||||
|
@ -9,7 +9,7 @@ https://www-user.tu-chemnitz.de/~heha/viewzip.cgi/hs/Funkuhr.zip/
|
||||
#ifdef HAS_DCF77
|
||||
|
||||
#ifdef IF_482
|
||||
#error "You must define at most one of IF482 or DCF_77"
|
||||
#error "You must define at most one of IF482 or DCF77"
|
||||
#endif
|
||||
|
||||
#include "dcf77.h"
|
||||
@ -19,8 +19,9 @@ static const char TAG[] = "main";
|
||||
|
||||
#define DCF77_FRAME_SIZE (60)
|
||||
#define DCF77_PULSE_DURATION (100)
|
||||
#ifdef RTC_CLK
|
||||
#define PPS (RTC_CLK / DCF77_PULSE_DURATION)
|
||||
|
||||
#if defined RTC_INT && defined RTC_CLK
|
||||
#define PPS RTC_CLK
|
||||
#else
|
||||
#define PPS DCF77_PULSE_DURATION
|
||||
#endif
|
||||
@ -63,10 +64,14 @@ void DCF_Out(uint8_t startOffset) {
|
||||
#endif
|
||||
|
||||
if (!BitsPending) {
|
||||
// do we have confident time/date?
|
||||
if ((timeStatus() == timeSet) || (timeStatus() == timeNeedsSync)) {
|
||||
// prepare frame to send for next minute
|
||||
generateTimeframe(now() + DCF77_FRAME_SIZE + 1);
|
||||
// start blinking symbol on display and kick off timer
|
||||
BitsPending = true;
|
||||
} else
|
||||
return;
|
||||
}
|
||||
|
||||
// ticker out current DCF frame
|
||||
@ -124,11 +129,14 @@ void dcf77_loop(void *pvParameters) {
|
||||
|
||||
#if (PPS == DCF77_PULSE_DURATION) // we don't need clock rescaling
|
||||
DCF_Out(0);
|
||||
#else // we need clock rescaling by software timer
|
||||
for (uint8_t i = 1; i <= PPS; i++) {
|
||||
#elif (PPS > DCF77_PULSE_DURATION) // we need upclocking
|
||||
for (uint8_t i = 1; i <= PPS / DCF77_PULSE_DURATION; i++) {
|
||||
DCF_Out(0);
|
||||
vTaskDelayUntil(&wakeTime, pdMS_TO_TICKS(DCF77_PULSE_DURATION));
|
||||
}
|
||||
#elif (PPS < DCF77_PULSE_DURATION) // we need downclocking
|
||||
vTaskDelayUntil(&wakeTime, pdMS_TO_TICKS(DCF77_PULSE_DURATION - PPS));
|
||||
DCF_Out(0);
|
||||
#endif
|
||||
} // for
|
||||
} // dcf77_loop()
|
||||
|
@ -80,7 +80,7 @@ not evaluated by model BU-190
|
||||
#ifdef HAS_IF482
|
||||
|
||||
#ifdef HAS_DCF77
|
||||
#error "You must define at most one of IF482 or DCF_77"
|
||||
#error "You must define at most one of IF482 or DCF77"
|
||||
#endif
|
||||
|
||||
#include "if482.h"
|
||||
@ -90,8 +90,9 @@ static const char TAG[] = "main";
|
||||
|
||||
#define IF482_FRAME_SIZE (17)
|
||||
#define IF482_PULSE_DURATION (1000)
|
||||
|
||||
#ifdef RTC_CLK
|
||||
#define PPS (RTC_CLK / IF482_PULSE_DURATION)
|
||||
#define PPS RTC_CLK
|
||||
#else
|
||||
#define PPS IF482_PULSE_DURATION
|
||||
#endif
|
||||
@ -174,14 +175,20 @@ void if482_loop(void *pvParameters) {
|
||||
&wakeTime, // receives moment of call from isr
|
||||
portMAX_DELAY); // wait forever (missing error handling here...)
|
||||
|
||||
#if (PPS == DCF77_PULSE_DURATION) // we don't need clock rescaling
|
||||
#if (PPS == IF482_PULSE_DURATION) // we don't need clock rescaling
|
||||
// wait until it's time to start transmit telegram for next second
|
||||
vTaskDelayUntil(&wakeTime, shotTime); // sets waketime to moment of shot
|
||||
IF482.print(IF482_Out(now() + 1));
|
||||
#else // we need clock rescaling by software timer
|
||||
/*
|
||||
not yet implemented for IF482
|
||||
*/
|
||||
#elif (PPS > IF482_PULSE_DURATION) // we need upclocking
|
||||
for (uint8_t i = 1; i <= PPS / IF482_PULSE_DURATION; i++) {
|
||||
vTaskDelayUntil(&wakeTime, shotTime); // sets waketime to moment of shot
|
||||
IF482.print(IF482_Out(now() + 1));
|
||||
}
|
||||
#elif (PPS < IF482_PULSE_DURATION) // we need downclocking
|
||||
IF482.print(IF482_Out(now() + 1));
|
||||
vTaskDelayUntil(&wakeTime,
|
||||
shotTime - PPS); // sets waketime to moment of shot
|
||||
|
||||
#endif
|
||||
}
|
||||
} // if482_loop()
|
||||
|
@ -102,9 +102,9 @@ float get_rtctemp(void) {
|
||||
|
||||
#endif // HAS_RTC
|
||||
|
||||
int pps_init(uint32_t clk_freq_Hz) {
|
||||
int pps_init(uint32_t clk_freq_ms) {
|
||||
// use fixed pulse clock as time base
|
||||
#if defined RTC_INT && (RTC_CLK == clk_freq_Hz)
|
||||
#if defined RTC_INT && defined RTC_CLK
|
||||
|
||||
// setup external interupt for active low RTC INT pin
|
||||
pinMode(RTC_INT, INPUT_PULLUP);
|
||||
@ -123,11 +123,11 @@ int pps_init(uint32_t clk_freq_Hz) {
|
||||
|
||||
#else
|
||||
// use clock with adjustable frequency
|
||||
if (clk_freq_Hz) {
|
||||
if (clk_freq_ms) {
|
||||
ESP_LOGI(TAG, "Time base ESP32 clock");
|
||||
clockCycle = timerBegin(1, 8000, true); // set 80 MHz prescaler
|
||||
clockCycle = timerBegin(1, 8000, true); // set 80 MHz prescaler to 1/10000 sec
|
||||
timerAttachInterrupt(clockCycle, &CLOCKIRQ, true);
|
||||
timerAlarmWrite(clockCycle, 100 * clk_freq_Hz, true);
|
||||
timerAlarmWrite(clockCycle, 10 * clk_freq_ms, true); //ms
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Invalid pulse clock frequency");
|
||||
return 0; // failure
|
||||
|
Loading…
Reference in New Issue
Block a user