summaryrefslogtreecommitdiff
path: root/tuer-rfid/heartbeat.c
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-08-08 22:39:50 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-08-08 22:39:50 +0000
commit2c997f95cb167e9023c1a44abaeda4ea80bbc7d3 (patch)
tree66cd2988de8f233b80c8e9b83b597484c3a33607 /tuer-rfid/heartbeat.c
parentadded support for teenstep (diff)
moved usb-i2c-sl018 to tuer-rfid
git-svn-id: https://svn.spreadspace.org/avr/trunk@216 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'tuer-rfid/heartbeat.c')
-rw-r--r--tuer-rfid/heartbeat.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/tuer-rfid/heartbeat.c b/tuer-rfid/heartbeat.c
new file mode 100644
index 0000000..7700706
--- /dev/null
+++ b/tuer-rfid/heartbeat.c
@@ -0,0 +1,74 @@
+/*
+ * spreadspace avr utils
+ *
+ *
+ * Copyright (C) 2013 Christian Pointner <equinox@spreadspace.org>
+ * Othmar Gsenger <otti@wirdorange.org>
+ *
+ * This file is part of spreadspace avr utils.
+ *
+ * spreadspace avr utils is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+ *
+ * spreadspace avr utils is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <avr/sfr_defs.h>
+#include <avr/interrupt.h>
+
+#include "led.h"
+#include "heartbeat.h"
+
+#define HEARTBEAT_DURATION 10 // *10 ms, duration of heartbeat pulse
+#define HEARTBEAT_DELAY 200 // *10 ms, 1/heartbeat-frequency
+uint8_t heartbeat_cnt = 0;
+uint8_t heartbeat_flag;
+
+#define FASTBEAT_PORT PORTD
+#define FASTBEAT_DDR DDRD
+#define FASTBEAT_BIT 5
+
+// while running this gets called every ~10ms
+ISR(TIMER0_COMPA_vect)
+{
+ heartbeat_cnt++;
+ if(heartbeat_cnt == HEARTBEAT_DURATION)
+ heartbeat_flag = 0;
+ else if(heartbeat_cnt >= HEARTBEAT_DELAY) {
+ heartbeat_flag = 1;
+ heartbeat_cnt = 0;
+ }
+}
+
+void heartbeat_init(void)
+{
+ led_off();
+ heartbeat_cnt = 0;
+ heartbeat_flag = 1;
+
+ TCCR0A = 1<<WGM01; // OC0A and OC0B as normal output, WGM = 2 (CTC)
+ TCCR0B = 1<<CS02 | 1<<CS00; // Prescaler 1:1024
+ OCR0A = 155; // (1+155)*1024 = 159744 -> ~10 ms @ 16 MHz
+ TCNT2 = 0;
+ TIMSK0 = 1<<OCIE0A;
+
+ FASTBEAT_DDR |= 1<<FASTBEAT_BIT;
+}
+
+void heartbeat_task(void)
+{
+ FASTBEAT_PORT ^= 1<<FASTBEAT_BIT;
+
+ if(heartbeat_flag)
+ led_on();
+ else
+ led_off();
+}