dcf routines for microbit

Fork of microbit-dcf by Kurt Schuster

Committer:
qrti
Date:
Fri Feb 24 07:52:08 2017 +0000
Revision:
3:baecb5137d1a
Parent:
1:f5f3ea306641
Child:
4:eda8c18d0564
automatic sec correction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
qrti 3:baecb5137d1a 1 // dcf V0.3 170224 qrt@qland.de
qrti 1:f5f3ea306641 2
qrti 1:f5f3ea306641 3 #ifndef _DCF_H_
qrti 1:f5f3ea306641 4 #define _DCF_H_
qrti 1:f5f3ea306641 5
qrti 1:f5f3ea306641 6 #include "MicroBit.h"
qrti 1:f5f3ea306641 7
qrti 1:f5f3ea306641 8 #define DCF_INPUT_PIN MICROBIT_ID_IO_P16 // DCF input pin
qrti 1:f5f3ea306641 9 #define PIN P16 //
qrti 1:f5f3ea306641 10
qrti 1:f5f3ea306641 11 #define PULL PullUp // PullNone or PullUp or PullDown
qrti 1:f5f3ea306641 12
qrti 1:f5f3ea306641 13 #define NEGATIVE 0 // DCF receiver signal logic
qrti 1:f5f3ea306641 14 #define POSITIVE 1
qrti 1:f5f3ea306641 15 #define DCF_LOGIC POSITIVE
qrti 1:f5f3ea306641 16
qrti 1:f5f3ea306641 17 #define SYNCINI (1<<0) // DCF sync init
qrti 1:f5f3ea306641 18 #define SYNCSEC (1<<1) // second
qrti 1:f5f3ea306641 19 #define SYNC59 (1<<2) // second 59
qrti 1:f5f3ea306641 20 #define SYNCDAT (1<<3) // data taken
qrti 1:f5f3ea306641 21 #define SYNCDAV (1<<4) // verified
qrti 1:f5f3ea306641 22 #define SYNCDAR (1<<5) // ready to take
qrti 1:f5f3ea306641 23
qrti 1:f5f3ea306641 24 #define SYNCRES ~(SYNCSEC | SYNC59 | SYNCDAT | SYNCDAV | SYNCDAR) // sync restart
qrti 1:f5f3ea306641 25
qrti 1:f5f3ea306641 26 class Dcf
qrti 1:f5f3ea306641 27 {
qrti 1:f5f3ea306641 28 public:
qrti 1:f5f3ea306641 29 static uint8_t sec; // time
qrti 1:f5f3ea306641 30 static uint8_t min;
qrti 1:f5f3ea306641 31 static uint8_t hou;
qrti 1:f5f3ea306641 32 static uint8_t day;
qrti 1:f5f3ea306641 33 static uint8_t wday;
qrti 1:f5f3ea306641 34 static uint8_t month;
qrti 1:f5f3ea306641 35 static uint8_t year;
qrti 1:f5f3ea306641 36
qrti 1:f5f3ea306641 37 static uint8_t status; // DCF status
qrti 3:baecb5137d1a 38 static uint16_t secMs; // second in system ms
qrti 1:f5f3ea306641 39
qrti 1:f5f3ea306641 40 static void init(MicroBit *uBit);
qrti 1:f5f3ea306641 41 static void receive();
qrti 1:f5f3ea306641 42
qrti 1:f5f3ea306641 43 private:
qrti 1:f5f3ea306641 44 static MicroBit *uBit; // reference
qrti 1:f5f3ea306641 45
qrti 1:f5f3ea306641 46 static uint8_t hsec; // help time
qrti 1:f5f3ea306641 47 static uint8_t hmin;
qrti 1:f5f3ea306641 48 static uint8_t hhou;
qrti 1:f5f3ea306641 49 static uint8_t hday;
qrti 1:f5f3ea306641 50 static uint8_t hwday;
qrti 1:f5f3ea306641 51 static uint8_t hmonth;
qrti 1:f5f3ea306641 52 static uint8_t hyear;
qrti 1:f5f3ea306641 53
qrti 1:f5f3ea306641 54 static uint8_t bit;
qrti 1:f5f3ea306641 55 static uint8_t parity;
qrti 1:f5f3ea306641 56
qrti 1:f5f3ea306641 57 static uint32_t nextSec;
qrti 3:baecb5137d1a 58 static uint32_t secStart;
qrti 3:baecb5137d1a 59 static uint32_t secStartL;
qrti 3:baecb5137d1a 60 static uint32_t bitEnd;
qrti 3:baecb5137d1a 61 static uint32_t incStart;
qrti 3:baecb5137d1a 62 static uint32_t ct;
qrti 1:f5f3ea306641 63 static uint32_t dt;
qrti 1:f5f3ea306641 64
qrti 1:f5f3ea306641 65 static void secPulse(MicroBitEvent e);
qrti 1:f5f3ea306641 66 static void bitPulse(MicroBitEvent e);
qrti 1:f5f3ea306641 67
qrti 1:f5f3ea306641 68 static void incTime();
qrti 1:f5f3ea306641 69 static uint8_t getData();
qrti 1:f5f3ea306641 70 static void takeData();
qrti 1:f5f3ea306641 71 static uint8_t verifyData();
qrti 1:f5f3ea306641 72
qrti 1:f5f3ea306641 73 static uint8_t decBin(uint8_t b);
qrti 1:f5f3ea306641 74 // static uint8_t parity(uint8_t b);
qrti 1:f5f3ea306641 75 };
qrti 1:f5f3ea306641 76
qrti 3:baecb5137d1a 77 #endif