diff options
-rw-r--r-- | lib/onewire.c | 176 | ||||
-rw-r--r-- | lib/onewire.h | 10 | ||||
-rw-r--r-- | usb-1wire/usb-1wire.c | 34 |
3 files changed, 110 insertions, 110 deletions
diff --git a/lib/onewire.c b/lib/onewire.c index b733b72..f28ef41 100644 --- a/lib/onewire.c +++ b/lib/onewire.c @@ -134,10 +134,10 @@ uint8_t owi_LastDeviceFlag; void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port) { owi_bitmask = _BV(pin); - owi_baseReg = pin_read_port; + owi_baseReg = pin_read_port; DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); #if ONEWIRE_SEARCH - owi_reset_search(); + owi_reset_search(); #endif } @@ -150,32 +150,32 @@ void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port) // uint8_t owi_reset(void) { - IO_REG_TYPE mask = owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - uint8_t r; - uint8_t retries = 125; - - cli(); - DIRECT_MODE_INPUT(reg, mask); - sei(); - // wait until the wire is high... just in case - do { - if (--retries == 0) return 0; - _delay_us(2); - } while ( !DIRECT_READ(reg, mask)); - - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - sei(); - _delay_us(480); - cli(); - DIRECT_MODE_INPUT(reg, mask); // allow it to float - _delay_us(70); - r = !DIRECT_READ(reg, mask); - sei(); - _delay_us(410); - return r; + IO_REG_TYPE mask = owi_bitmask; + register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; + uint8_t r; + uint8_t retries = 125; + + cli(); + DIRECT_MODE_INPUT(reg, mask); + sei(); + // wait until the wire is high... just in case + do { + if (--retries == 0) return 0; + _delay_us(2); + } while ( !DIRECT_READ(reg, mask)); + + cli(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + sei(); + _delay_us(480); + cli(); + DIRECT_MODE_INPUT(reg, mask); // allow it to float + _delay_us(70); + r = !DIRECT_READ(reg, mask); + sei(); + _delay_us(410); + return r; } // @@ -184,26 +184,26 @@ uint8_t owi_reset(void) // void owi_write_bit(uint8_t v) { - IO_REG_TYPE mask=owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - - if (v & 1) { - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - _delay_us(10); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - sei(); - _delay_us(55); - } else { - cli(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - _delay_us(65); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - sei(); - _delay_us(5); - } + IO_REG_TYPE mask=owi_bitmask; + register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; + + if (v & 1) { + cli(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + _delay_us(10); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + sei(); + _delay_us(55); + } else { + cli(); + DIRECT_WRITE_LOW(reg, mask); + DIRECT_MODE_OUTPUT(reg, mask); // drive output low + _delay_us(65); + DIRECT_WRITE_HIGH(reg, mask); // drive output high + sei(); + _delay_us(5); + } } // @@ -212,20 +212,20 @@ void owi_write_bit(uint8_t v) // uint8_t owi_read_bit(void) { - IO_REG_TYPE mask=owi_bitmask; - register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; - uint8_t r; - - cli(); - DIRECT_MODE_OUTPUT(reg, mask); - DIRECT_WRITE_LOW(reg, mask); - _delay_us(3); - DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise - _delay_us(10); - r = DIRECT_READ(reg, mask); - sei(); - _delay_us(53); - return r; + IO_REG_TYPE mask=owi_bitmask; + register volatile IO_REG_TYPE *reg IO_REG_ASM = owi_baseReg; + uint8_t r; + + cli(); + DIRECT_MODE_OUTPUT(reg, mask); + DIRECT_WRITE_LOW(reg, mask); + _delay_us(3); + DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise + _delay_us(10); + r = DIRECT_READ(reg, mask); + sei(); + _delay_us(53); + return r; } // @@ -239,13 +239,13 @@ void owi_write(uint8_t v, uint8_t power /* = 0 */) { uint8_t bitMask; for (bitMask = 0x01; bitMask; bitMask <<= 1) { - owi_write_bit( (bitMask & v)?1:0); + owi_write_bit( (bitMask & v)?1:0); } if ( !power) { - cli(); - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); - DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask); - sei(); + cli(); + DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); + DIRECT_WRITE_LOW(owi_baseReg, owi_bitmask); + sei(); } } @@ -268,7 +268,7 @@ uint8_t owi_read() { uint8_t r = 0; for (bitMask = 0x01; bitMask; bitMask <<= 1) { - if ( owi_read_bit()) r |= bitMask; + if ( owi_read_bit()) r |= bitMask; } return r; } @@ -300,9 +300,9 @@ void owi_skip() void owi_depower() { - cli(); - DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); - sei(); + cli(); + DIRECT_MODE_INPUT(owi_baseReg, owi_bitmask); + sei(); } #if ONEWIRE_SEARCH @@ -508,12 +508,12 @@ const uint8_t PROGMEM dscrc_table[] = { // uint8_t owi_crc8(const uint8_t *addr, uint8_t len) { - uint8_t crc = 0; + uint8_t crc = 0; - while (len--) { - crc = pgm_read_byte(dscrc_table + (crc ^ *addr++)); - } - return crc; + while (len--) { + crc = pgm_read_byte(dscrc_table + (crc ^ *addr++)); + } + return crc; } #else // @@ -522,18 +522,18 @@ uint8_t owi_crc8(const uint8_t *addr, uint8_t len) // uint8_t owi_crc8(const uint8_t *addr, uint8_t len) { - uint8_t crc = 0; - - while (len--) { - uint8_t inbyte = *addr++; - for (uint8_t i = 8; i; i--) { - uint8_t mix = (crc ^ inbyte) & 0x01; - crc >>= 1; - if (mix) crc ^= 0x8C; - inbyte >>= 1; - } - } - return crc; + uint8_t crc = 0; + + while (len--) { + uint8_t inbyte = *addr++; + for (uint8_t i = 8; i; i--) { + uint8_t mix = (crc ^ inbyte) & 0x01; + crc >>= 1; + if (mix) crc ^= 0x8C; + inbyte >>= 1; + } + } + return crc; } #endif diff --git a/lib/onewire.h b/lib/onewire.h index 21be0af..0cbd2a4 100644 --- a/lib/onewire.h +++ b/lib/onewire.h @@ -3,7 +3,7 @@ #include <inttypes.h> #include <stdbool.h> -#include <avr/pgmspace.h> +#include <avr/pgmspace.h> // You can exclude certain features from OneWire. In theory, this // might save some space. In practice, the compiler automatically @@ -103,7 +103,7 @@ #error "Please define I/O register types here" #endif -#define DS1820_FAMILY_ID 0x10 +#define DS1820_FAMILY_ID 0x10 #define DS1820_START_CONVERSION 0x44 #define DS1820_READ_SCRATCHPAD 0xbe #define DS1820_WRITE_SCRATCHPAD 0x4e @@ -127,7 +127,7 @@ #define DS2890_WRITE_POSITION 0x0f #ifndef _BV -#define _BV(bit) (1 << (bit)) +#define _BV(bit) (1 << (bit)) #endif void owi_init(uint8_t pin, volatile IO_REG_TYPE *pin_read_port); @@ -199,8 +199,8 @@ uint8_t owi_crc8(const uint8_t *addr, uint8_t len); // ReadBytes(net, buf+3, 10); // Read 6 data bytes, 2 0xFF, 2 CRC16 // if (!CheckCRC16(buf, 11, &buf[11])) { // // Handle error. -// } -// +// } +// // @param input - Array of bytes to checksum. // @param len - How many bytes to use. // @param inverted_crc - The two CRC16 bytes in the received data. diff --git a/usb-1wire/usb-1wire.c b/usb-1wire/usb-1wire.c index 6fed4f5..4480a0a 100644 --- a/usb-1wire/usb-1wire.c +++ b/usb-1wire/usb-1wire.c @@ -51,10 +51,10 @@ void discoverOWIBus(void) printf(" !something is there! ");
owi_reset_search();
_delay_ms(250);
-
+
//Search only for DS1820 temp sensors
owi_target_search(DS1820_FAMILY_ID);
-
+
while ( owi_search(owi_addr_[ d ]))
{
d++;
@@ -66,7 +66,7 @@ void discoverOWIBus(void) num_owi_dev_found_ = d;
printf(" done \r\n");
printf("%d devices found\r\n", d);
-
+
for (d=0; d<num_owi_dev_found_; d++)
{
printf("OW Dev #%d: addr = ", d);
@@ -75,13 +75,13 @@ void discoverOWIBus(void) if (owi_crc8(owi_addr_[d], 7) == owi_addr_[d][7])
printf(" CRC OK");
else
- printf(" CRC ERROR");
+ printf(" CRC ERROR");
printf("\r\n");
}
led_off();
}
-void tempToUSB(uint8_t resolution)
+void tempToUSB(uint8_t resolution)
{
uint8_t data[9];
int16_t celsius = 0;
@@ -90,7 +90,7 @@ void tempToUSB(uint8_t resolution) uint8_t d=0;
uint8_t cfg_res=12;
uint8_t crc_result = 0;
-
+
led_on();
owi_reset();
@@ -99,7 +99,7 @@ void tempToUSB(uint8_t resolution) for (d=0; d<num_owi_dev_found_; d++)
{
owi_select(owi_addr_[d]);
-
+
owi_write(DS1820_WRITE_SCRATCHPAD, 0);
owi_write(0xFF, 0);
owi_write(0x7F, 0);
@@ -109,19 +109,19 @@ void tempToUSB(uint8_t resolution) owi_write(DS1820_START_CONVERSION, 0);
}
- switch (resolution)
+ switch (resolution)
{
case DS1820_RESOLUTION_9BITS: _delay_ms(DS1820_TCONV_MS_9BITS); break;
case DS1820_RESOLUTION_10BITS: _delay_ms(DS1820_TCONV_MS_10BITS); break;
case DS1820_RESOLUTION_11BITS: _delay_ms(DS1820_TCONV_MS_11BITS); break;
default: _delay_ms(DS1820_TCONV_MS_12BITS); break;
}
-
+
if (owi_reset()) //reset is needed
printf("Sensor present\r\n");
else
- printf("Sensor NOT present\r\n");
-
+ printf("Sensor NOT present\r\n");
+
for (d=0; d<num_owi_dev_found_; d++)
{
owi_select(owi_addr_[d]);
@@ -135,7 +135,7 @@ void tempToUSB(uint8_t resolution) printf(" crc: %x is %s\r\n" , crc_result, (crc_result == data[8])? "OK": "ERRORENOUS");
// the first ROM byte indicates which chip
- switch (owi_addr_[d][0])
+ switch (owi_addr_[d][0])
{
case 0x10:
//~ Serial.println(" Chip = DS18S20"); // or old DS1820
@@ -151,8 +151,8 @@ void tempToUSB(uint8_t resolution) break;
default:
continue;
- }
-
+ }
+
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
@@ -186,7 +186,7 @@ void tempToUSB(uint8_t resolution) //// default is 12 bit resolution, 750 ms conversion time
}
celsius = raw / 16;
-
+
printf("Temperature: raw %d, celsius: %d, resolution: %d bits\r\n", raw, celsius, cfg_res);
}
led_off();
@@ -219,10 +219,10 @@ int main(void) DDRC &= ~7;
owi_init(7, &PINC);
- for(;;)
+ for(;;)
{
int16_t BytesReceived = usbio_bytes_received();
- while(BytesReceived > 0)
+ while(BytesReceived > 0)
{
int ReceivedByte = fgetc(stdin);
if(ReceivedByte != EOF) {
|