#include <LibPrintf.h>
#include "directADC.h"
#define HARDWARE_ID 0x00 // Sensor hardware ID
#define SOFTWARE_ID 0x400 // Sensor software ID
#define SOFTWARE_ID2 0x410 // Sensor software ID
#define SERIAL_PORT_PIN 3 // S.port serial pin
#define ANALOG_PIN A0 // Пин входа термистора
#define RESISTOR_R1 4.7 // Сопротивление последовательного резистора, кОм (Резистор подключать к Vcc платы, референсное напряжение = Vcc)
#define NTC_R25 100 // Сопротивление термистора при 25 градусах Цельсия
#define NTC_BETA 3950 // Коэффициент Beta термистора
#define MY_PERIOD 1000 // период опроса термистора, мс
uint32_t tmr1 = 0; // переменная таймера
void setup() {
Serial.begin(9600);
pinMode(ANALOG_PIN, INPUT);
ADC_enable(); // вызывается обязательно
ADC_setPrescaler(128); // без вызова - делитель 2
//if (millis() - tmr1 >= MY_PERIOD) { // Цикл опроса термистора
//tmr1 = millis(); // сброс таймера
ADC_disable();
ADC_setReference(ADC_1V1);
setAnalogMux(ADC_1V1); //Тест! изменить на ADC_SENSOR
printf("Brick_ADMUX: %.8b\n", ADMUX);
ADC_enable();
ADC_startConvert(); // ручной старт преобразования
while (!ADC_available());
int _value1 = ADC_readWhenAvailable();
printf("Brick_ADC: %d\n", _value1);
_value1 = (_value1 - 324.31 ) / 1.22;
printf("Brick_T: %d\n", _value1);
ADC_disable();
ADC_setReference(ADC_VCC);
setAnalogMux(ADC_A0);
printf("Sensor_ADMUX: %.8b\n", ADMUX);
ADC_enable();
ADC_startConvert(); // ручной старт преобразования
while (!ADC_available());
int _value = ADC_readWhenAvailable();
printf("Sensor_ADC: %d\n", _value);
float _temperature;
_temperature = RESISTOR_R1 / ((float)1023 / _value - 1);
_temperature /= NTC_R25; // (R/Ro)
_temperature = log(_temperature) / NTC_BETA; // 1/B * ln(R/Ro)
_temperature += (float)1.0 / (25 + 273.15); // + (1/To)
_temperature = (float)1.0 / _temperature - 273.15; // инвертируем и конвертируем в градусы по Цельсию
printf("Sensor_T: %d\n", _temperature);
}
void loop() {
}