Advertisement
Guest User

DCF77gen3

a guest
Jun 24th, 2017
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. #define Antenna D8
  2.  
  3. // Generator for 77,5 kHz (DCF-77) by Jonas woerner (c)
  4. #include <Time.h>
  5. byte dcfBits[60] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 };
  6. //int Minuten = 15;
  7. //int Stunden = 12;
  8. const int anzahlMinutenBits = 7;
  9. const int anzahlStundenBits = 6;
  10. const int offsetMinutenBits = 21;
  11. const int offsetStundenBits = 29;
  12. byte MinutenBits[anzahlMinutenBits] = { 0 };
  13. byte StundenBits[anzahlStundenBits] = { 0 };
  14. int parity = 0;
  15. // lowered signal. always on:
  16. const byte pin1 = 11; // = OC2A. goes to antenna
  17. const byte pin2 = 12; // set to LOW. goes via 22 ohms to antenna
  18. const byte led1 = 10;
  19. const byte led2 = 8;
  20. const int stdled = 13;
  21.  
  22. unsigned long freq = 80000000L * 1/float(775) ;
  23. volatile unsigned long next;
  24. boolean TickTock = false;
  25.  
  26. void inline radioISR(void){
  27.  
  28.  
  29. TickTock = !TickTock;
  30. digitalWrite(Antenna,TickTock);
  31. timer0_write(ESP.getCycleCount()+freq);
  32.  
  33.  
  34. }
  35.  
  36. void setup()
  37. {
  38. DCF_BITS(15,13); //set time to 15:13
  39.  
  40. pinMode(Antenna,OUTPUT);
  41.  
  42. digitalWrite(Antenna,HIGH);
  43.  
  44. noInterrupts();
  45. timer0_isr_init();
  46. timer0_attachInterrupt(radioISR);
  47. timer0_write(ESP.getCycleCount()+freq);
  48. interrupts();
  49.  
  50. }
  51.  
  52. void loop()
  53. {
  54.  
  55. for (int i = 0;i<58;++i)
  56. {
  57. modulate(dcfBits[i]);
  58. delay(1000);
  59. }
  60. digitalWrite(Antenna,HIGH);
  61. delay(1000);
  62. }
  63.  
  64.  
  65. void DCF_BITS(int Minuten, int Stunden)
  66. {
  67.  
  68. //MINUTE\\
  69.  
  70. if (Minuten > 39)
  71. {
  72. MinutenBits[6] = 1;
  73. Minuten -= 40;
  74. }
  75. if (Minuten > 19)
  76. {
  77. MinutenBits[5] = 1;
  78. Minuten -= 20;
  79. }
  80.  
  81. if (Minuten > 9)
  82. {
  83. MinutenBits[4] = 1;
  84. Minuten -= 10;
  85. }
  86.  
  87. for (int i = 0; i < 4; ++i)
  88. {
  89. //MinutenBits[i] = (Minuten & (1 << i)) ? true : false;
  90.  
  91. if ((Minuten & (1 << i)) > 0)
  92. {
  93. MinutenBits[i] = true;
  94. }
  95. else
  96. {
  97. MinutenBits[i] = false;
  98. }
  99. }
  100. for (int i = 0; i < anzahlMinutenBits; ++i)
  101. {
  102. dcfBits[offsetMinutenBits + i] = MinutenBits[i];
  103. }
  104. //Stunde\\
  105.  
  106. if (Stunden > 19)
  107. {
  108. StundenBits[5] = 1;
  109. Stunden -= 20;
  110. }
  111. if (Stunden > 9)
  112. {
  113. StundenBits[4] = 1;
  114. Stunden -= 10;
  115. }
  116.  
  117.  
  118.  
  119.  
  120. for (int i = 0; i < 4; ++i)
  121. {
  122. //MinutenBits[i] = (Minuten & (1 << i)) ? true : false;
  123.  
  124. if ((Stunden & (1 << i)) > 0)
  125. {
  126. StundenBits[i] = true;
  127. }
  128. else
  129. {
  130. StundenBits[i] = false;
  131. }
  132. }
  133.  
  134. for (int i = 0; i < anzahlStundenBits; ++i)
  135. {
  136. dcfBits[offsetStundenBits + i] = StundenBits[i];
  137. }
  138.  
  139. /*for (int n = 0; n < 6; ++n)
  140. {
  141.  
  142. }*/
  143. ////////////////////////////
  144. {
  145. parity += dcfBits[21];
  146. parity += dcfBits[22];
  147. parity += dcfBits[23];
  148. parity += dcfBits[24];
  149. parity += dcfBits[25];
  150. parity += dcfBits[26];
  151. parity += dcfBits[27];
  152. if (parity % 2 == 0)
  153. {
  154. dcfBits[28] = 0;
  155. }
  156. else
  157. {
  158. dcfBits[28] = 1;
  159. }
  160. parity = 0;
  161. }
  162. ////////////////////////////
  163. {
  164. parity += dcfBits[29];
  165. parity += dcfBits[30];
  166. parity += dcfBits[31];
  167. parity += dcfBits[32];
  168. parity += dcfBits[33];
  169. parity += dcfBits[34];
  170. if (parity % 2 == 0)
  171. {
  172. dcfBits[35] = 0;
  173. }
  174. else
  175. {
  176. dcfBits[35] = 1;
  177. }
  178. parity = 0;
  179. }
  180. /////////////////////////////
  181. {
  182. parity += dcfBits[36];
  183. parity += dcfBits[37];
  184. parity += dcfBits[38];
  185. parity += dcfBits[39];
  186. parity += dcfBits[40];
  187. parity += dcfBits[41];
  188. parity += dcfBits[42];
  189. parity += dcfBits[43];
  190. parity += dcfBits[44];
  191. parity += dcfBits[45];
  192. parity += dcfBits[46];
  193. parity += dcfBits[47];
  194. parity += dcfBits[48];
  195. parity += dcfBits[49];
  196. parity += dcfBits[50];
  197. parity += dcfBits[51];
  198. parity += dcfBits[52];
  199. parity += dcfBits[53];
  200. parity += dcfBits[54];
  201. parity += dcfBits[55];
  202. parity += dcfBits[56];
  203. parity += dcfBits[57];
  204. if (parity % 2 == 0)
  205. {
  206. dcfBits[58] = 0;
  207. }
  208. else
  209. {
  210. dcfBits[58] = 1;
  211. }
  212. parity = 0;
  213. }
  214. }
  215.  
  216.  
  217. void modulate(byte b)
  218. {
  219.  
  220. if (b == 0)
  221. {
  222. digitalWrite(Antenna,LOW);
  223.  
  224. delay(100);
  225.  
  226. digitalWrite(Antenna,HIGH);
  227. }
  228. else
  229. {
  230. digitalWrite(Antenna,LOW);
  231.  
  232. delay(200);
  233.  
  234. digitalWrite(Antenna,HIGH);
  235. }
  236.  
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement