summaryrefslogtreecommitdiff
path: root/usb-ajar
diff options
context:
space:
mode:
authorBernhard Tittelbach <xro@realraum.at>2013-10-09 01:29:24 +0000
committerBernhard Tittelbach <xro@realraum.at>2013-10-09 01:29:24 +0000
commit126853a0314b2c055c401da0cdbf9719b72f10af (patch)
treec96505d362f0f40895539dd7ce3df74113b8b092 /usb-ajar
parentusb-ajar (with anyio) (diff)
add ds18x20 support
git-svn-id: https://svn.spreadspace.org/avr/trunk@235 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-ajar')
-rw-r--r--usb-ajar/Makefile2
-rw-r--r--usb-ajar/usb-ajar.c52
2 files changed, 52 insertions, 2 deletions
diff --git a/usb-ajar/Makefile b/usb-ajar/Makefile
index 5ca8860..612745c 100644
--- a/usb-ajar/Makefile
+++ b/usb-ajar/Makefile
@@ -23,7 +23,7 @@
NAME := usb-ajar
BOARD_TYPE := minimus32
OBJ := $(NAME).o
-LIBS := util led lufa-descriptor-usbserial anyio
+LIBS := util led lufa-descriptor-usbserial anyio onewire ds1820
EXTERNAL_LIBS := lufa
RESET_FUNC := ../tools/reset_lufa_cdc
RESET_PARAM := 'r'
diff --git a/usb-ajar/usb-ajar.c b/usb-ajar/usb-ajar.c
index 18698eb..2c978e1 100644
--- a/usb-ajar/usb-ajar.c
+++ b/usb-ajar/usb-ajar.c
@@ -32,6 +32,8 @@
#include "led.h"
#include "anyio.h"
+#include "onewire.h"
+#include "ds1820.h"
#define PIN_HIGH(PORT, PIN) PORT |= (1 << PIN)
#define PIN_LOW(PORT, PIN) PORT &= ~(1 << PIN)
@@ -46,10 +48,46 @@
#define HIGHv OP_SETBIT
#define LOWv OP_CLEARBIT
+uint8_t num_temp_sensors_ = 0;
+
+void tempToUSB(uint8_t bit_resolution)
+{
+ uint8_t sensor_index = 0;
+ uint16_t raw_temp = 0;
+ double temp=0.0;
+
+ if (num_temp_sensors_ == 0)
+ {
+ printf("No DS1820 sensors ?? running bus discovery... \r\n");
+ num_temp_sensors_ = ds1820_discover();
+ }
+
+ for (sensor_index=0; sensor_index < num_temp_sensors_; sensor_index++)
+ {
+ ds1820_set_resolution(sensor_index, bit_resolution);
+ ds1820_start_measuring(sensor_index);
+ }
+
+ ds1820_wait_conversion_time(bit_resolution);
+
+ for (sensor_index=0; sensor_index < num_temp_sensors_; sensor_index++)
+ {
+ raw_temp = ds1820_read_temperature(sensor_index);
+ if (raw_temp == DS1820_ERROR)
+ {
+ printf("CRC comm error\r\n");
+ } else {
+ temp = ds1820_raw_temp_to_celsius( raw_temp );
+ printf("temp%d: %d.%d", sensor_index +1, raw_temp / 16, 10 * (raw_temp % 16) / 16);
+ }
+ }
+}
+
void handle_cmd(uint8_t cmd)
{
switch(cmd) {
case 'r': reset2bootloader(); break;
+ case '1': num_temp_sensors_ = ds1820_discover(); break;
default: printf("error\r\n"); return;
}
printf("ok\r\n");
@@ -65,15 +103,19 @@ int main(void)
led_init();
anyio_init(115200, 0);
sei();
+ owi_init(PINC4, &PINC);
PIN_HIGH(PORTB, PINB1);
PINMODE_INPUT(DDRB, PINB1);
char door_ajar = 0;
char last_door_ajar = 0;
+ num_temp_sensors_ = ds1820_discover();
+ uint16_t ms_elapsed = 0;
+
led_off();
led2_on();
-
+
for(;;) {
int16_t BytesReceived = anyio_bytes_received();
while(BytesReceived > 0) {
@@ -101,12 +143,20 @@ int main(void)
anyio_task();
if (door_ajar) {
_delay_ms(100);
+ ms_elapsed += 100;
led_toggle();
led2_toggle();
} else
{
_delay_ms(1200);
+ ms_elapsed += 1200;
led2_toggle();
}
+
+ if (ms_elapsed & (1<<14))
+ {
+ ms_elapsed = 0;
+ tempToUSB(12);
+ }
}
}