Browse Source

Reliability updates.

main
David Antliff 8 years ago
parent
commit
39eb377481
  1. 21
      main/app_main.c

21
main/app_main.c

@ -39,12 +39,13 @@
#define GPIO_DS18B20_0 (GPIO_NUM_5) #define GPIO_DS18B20_0 (GPIO_NUM_5)
#define MAX_DEVICES (8) #define MAX_DEVICES (8)
#define DS18B20_RESOLUTION (DS18B20_RESOLUTION_11_BIT) #define DS18B20_RESOLUTION (DS18B20_RESOLUTION_11_BIT)
#define SAMPLE_PERIOD (1000) // milliseconds
void app_main() void app_main()
{ {
esp_log_level_set("*", ESP_LOG_INFO); esp_log_level_set("*", ESP_LOG_INFO);
/// stable readings require a brief period before communication // Stable readings require a brief period before communication
vTaskDelay(1000.0 / portTICK_PERIOD_MS); vTaskDelay(1000.0 / portTICK_PERIOD_MS);
// Create a 1-Wire bus // Create a 1-Wire bus
@ -58,7 +59,7 @@ void app_main()
owb_init(owb, GPIO_DS18B20_0); owb_init(owb, GPIO_DS18B20_0);
owb_use_crc(owb, true); // enable CRC check for ROM code owb_use_crc(owb, true); // enable CRC check for ROM code
// find all connected devices // Find all connected devices
printf("Find devices:\n"); printf("Find devices:\n");
OneWireBus_ROMCode device_rom_codes[MAX_DEVICES] = {0}; OneWireBus_ROMCode device_rom_codes[MAX_DEVICES] = {0};
int num_devices = 0; int num_devices = 0;
@ -79,7 +80,7 @@ void app_main()
//uint64_t rom_code = 0x1502162ca5b2ee28; // orange //uint64_t rom_code = 0x1502162ca5b2ee28; // orange
//uint64_t rom_code = owb_read_rom(owb); //uint64_t rom_code = owb_read_rom(owb);
// known ROM codes (LSB first): // Known ROM code (LSB first):
OneWireBus_ROMCode known_device = { OneWireBus_ROMCode known_device = {
.fields.family = { 0x28 }, .fields.family = { 0x28 },
.fields.serial_number = { 0xee, 0xcc, 0x87, 0x2e, 0x16, 0x01 }, .fields.serial_number = { 0xee, 0xcc, 0x87, 0x2e, 0x16, 0x01 },
@ -122,7 +123,7 @@ void app_main()
ds18b20_set_resolution(ds18b20_info, DS18B20_RESOLUTION); ds18b20_set_resolution(ds18b20_info, DS18B20_RESOLUTION);
} }
// // read temperatures from all sensors sequentially // // Read temperatures from all sensors sequentially
// while (1) // while (1)
// { // {
// printf("\nTemperature readings (degrees C):\n"); // printf("\nTemperature readings (degrees C):\n");
@ -134,7 +135,7 @@ void app_main()
// vTaskDelay(1000 / portTICK_PERIOD_MS); // vTaskDelay(1000 / portTICK_PERIOD_MS);
// } // }
// read temperatures more efficiently by starting conversions on all devices at the same time // Read temperatures more efficiently by starting conversions on all devices at the same time
int crc_errors[MAX_DEVICES] = {0}; int crc_errors[MAX_DEVICES] = {0};
if (num_devices > 0) if (num_devices > 0)
{ {
@ -144,11 +145,11 @@ void app_main()
ds18b20_convert_all(owb); ds18b20_convert_all(owb);
// in this application all devices use the same resolution, // In this application all devices use the same resolution,
// so use the first device to determine the delay // so use the first device to determine the delay
ds18b20_wait_for_conversion(devices[0]); ds18b20_wait_for_conversion(devices[0]);
// read the results immediately after conversion otherwise it may fail // Read the results immediately after conversion otherwise it may fail
// (using printf before reading may take too long) // (using printf before reading may take too long)
float temps[MAX_DEVICES] = { 0 }; float temps[MAX_DEVICES] = { 0 };
for (int i = 0; i < num_devices; ++i) for (int i = 0; i < num_devices; ++i)
@ -156,7 +157,7 @@ void app_main()
temps[i] = ds18b20_read_temp(devices[i]); temps[i] = ds18b20_read_temp(devices[i]);
} }
// print results in a separate loop, after all have been read // Print results in a separate loop, after all have been read
printf("\nTemperature readings (degrees C):\n"); printf("\nTemperature readings (degrees C):\n");
for (int i = 0; i < num_devices; ++i) for (int i = 0; i < num_devices; ++i)
{ {
@ -168,8 +169,8 @@ void app_main()
printf(" %d: %.1f %d errors\n", i, temps[i], crc_errors[i]); printf(" %d: %.1f %d errors\n", i, temps[i], crc_errors[i]);
} }
// make up delay to approximately 1 second per measurement // Make up periodic delay to approximately one sample period per measurement
vTaskDelay(1000 / portTICK_PERIOD_MS - (xTaskGetTickCount() - start_ticks)); vTaskDelay(SAMPLE_PERIOD / portTICK_PERIOD_MS - (xTaskGetTickCount() - start_ticks));
} }
} }

Loading…
Cancel
Save