comparison main.c @ 381:83c83014e5e3

report raw ds18b20 values instead
author Matt Johnston <matt@ucc.asn.au>
date Tue, 03 Jul 2012 22:44:21 +0800
parents d4c9c360448f
children 6e47a61edc47
comparison
equal deleted inserted replaced
380:180dc60140a4 381:83c83014e5e3
26 // 1 second. we have 1024 prescaler, 32768 crystal. 26 // 1 second. we have 1024 prescaler, 32768 crystal.
27 #define SLEEP_COMPARE 32 27 #define SLEEP_COMPARE 32
28 // limited to uint16_t 28 // limited to uint16_t
29 #define MEASURE_WAKE 60 29 #define MEASURE_WAKE 60
30 30
31 #define VALUE_NOSENSOR -9000 31 #define VALUE_NOSENSOR 0x07D0 // 125 degrees
32 #define VALUE_BROKEN -8000 32 #define VALUE_BROKEN 0x07D1 // 125.0625
33 33
34 // limited to uint16_t 34 // limited to uint16_t
35 #define COMMS_WAKE 3600 // XXX testing 35 #define COMMS_WAKE 3600 // XXX testing
36 // limited to uint8_t 36 // limited to uint8_t
37 #define WAKE_SECS 60 // XXX testing 37 #define WAKE_SECS 60 // XXX testing
79 static uint16_t measure_count; 79 static uint16_t measure_count;
80 // ---- End atomic guards required 80 // ---- End atomic guards required
81 81
82 static uint16_t n_measurements; 82 static uint16_t n_measurements;
83 83
84 // stored as decidegrees 84 // stored as
85 static int16_t measurements[NUM_MEASUREMENTS][MAX_SENSORS]; 85 static uint16_t measurements[NUM_MEASUREMENTS][MAX_SENSORS];
86 static uint32_t first_measurement_clock; 86 static uint32_t first_measurement_clock;
87 // last_measurement_clock is redundant but checks that we're not missing 87 // last_measurement_clock is redundant but checks that we're not missing
88 // samples 88 // samples
89 static uint32_t last_measurement_clock; 89 static uint32_t last_measurement_clock;
90 90
298 for (uint16_t n = 0; n < n_measurements; n++) 298 for (uint16_t n = 0; n < n_measurements; n++)
299 { 299 {
300 fprintf_P(crc_stdout, PSTR("meas%hu="), n); 300 fprintf_P(crc_stdout, PSTR("meas%hu="), n);
301 for (uint8_t s = 0; s < n_sensors; s++) 301 for (uint8_t s = 0; s < n_sensors; s++)
302 { 302 {
303 fprintf_P(crc_stdout, PSTR(" %hu"), measurements[n][s]); 303 fprintf_P(crc_stdout, PSTR(" %04hx"), measurements[n][s]);
304 } 304 }
305 fputc('\n', crc_stdout); 305 fputc('\n', crc_stdout);
306 } 306 }
307 fprintf_P(crc_stdout, PSTR("END\n")); 307 fprintf_P(crc_stdout, PSTR("END\n"));
308 fprintf_P(stdout, PSTR("CRC=%hu\n"), crc_out); 308 fprintf_P(stdout, PSTR("CRC=%hu\n"), crc_out);
660 do_measurement() 660 do_measurement()
661 { 661 {
662 uint8_t n_sensors; 662 uint8_t n_sensors;
663 eeprom_read(n_sensors, n_sensors); 663 eeprom_read(n_sensors, n_sensors);
664 664
665 blink();
666
665 simple_ds18b20_start_meas(NULL); 667 simple_ds18b20_start_meas(NULL);
666 // sleep rather than using a long delay 668 // sleep rather than using a long delay
667 deep_sleep(); 669 deep_sleep();
668 //_delay_ms(DS18B20_TCONV_12BIT); 670 //_delay_ms(DS18B20_TCONV_12BIT);
669 671
672 n_measurements = 0; 674 n_measurements = 0;
673 } 675 }
674 676
675 for (uint8_t s = 0; s < MAX_SENSORS; s++) 677 for (uint8_t s = 0; s < MAX_SENSORS; s++)
676 { 678 {
677 int16_t decicelsius; 679 uint16_t reading;
678 if (s >= n_sensors) 680 if (s >= n_sensors)
679 { 681 {
680 decicelsius = VALUE_NOSENSOR; 682 reading = VALUE_NOSENSOR;
681 } 683 }
682 else 684 else
683 { 685 {
684 uint8_t id[ID_LEN]; 686 uint8_t id[ID_LEN];
685 eeprom_read_to(id, sensor_id[s], ID_LEN); 687 eeprom_read_to(id, sensor_id[s], ID_LEN);
686 688
687 uint8_t ret = simple_ds18b20_read_decicelsius(id, &decicelsius); 689 uint8_t ret = simple_ds18b20_read_raw(id, &reading);
688 if (ret != DS18X20_OK) 690 if (ret != DS18X20_OK)
689 { 691 {
690 decicelsius = VALUE_BROKEN; 692 reading = VALUE_BROKEN;
691 } 693 }
692 } 694 }
693 measurements[n_measurements][s] = decicelsius; 695 measurements[n_measurements][s] = reading;
694 } 696 }
695 697
696 ATOMIC_BLOCK(ATOMIC_RESTORESTATE) 698 ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
697 { 699 {
698 if (n_measurements == 0) 700 if (n_measurements == 0)
814 do_comms(); 816 do_comms();
815 continue; 817 continue;
816 } 818 }
817 819
818 deep_sleep(); 820 deep_sleep();
819 if (clock_epoch % 60 == 0)
820 {
821 blink();
822 }
823 } 821 }
824 822
825 return 0; /* never reached */ 823 return 0; /* never reached */
826 } 824 }