From 126853a0314b2c055c401da0cdbf9719b72f10af Mon Sep 17 00:00:00 2001 From: Bernhard Tittelbach Date: Wed, 9 Oct 2013 01:29:24 +0000 Subject: add ds18x20 support git-svn-id: https://svn.spreadspace.org/avr/trunk@235 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- usb-ajar/usb-ajar.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'usb-ajar/usb-ajar.c') 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); + } } } -- cgit v1.2.3