zepete: (Default)
[personal profile] zepete
Я придумал такую программу для измерения температуры arduino.

#include <arduino.h>
#include <wiring_private.h>
const float ct2=72;   // температура второй точки
const float ct1=26.5; // температура первой точки
const float cu2=418;  // данные ADC второй точки
const float cu1=370;  // данные ADC первой точки
const unsigned long AREFdelay=6*10; // время задержки для установки AREF

int8_t GetTemperature(bool bDelay=true);
uint16_t GetTemperatureADC(bool bDelay=true);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(GetTemperatureADC());
}

int8_t GetTemperature(bool bDelay)
{
  const float kt=(ct2-ct1)/(cu2-cu1);
  const float t0=(ct1*cu2-ct2*cu1)/(cu2-cu1);
  unsigned long ul=0;
  float t;
  ADMUX=0xc8;
  if(bDelay)
    delay(AREFdelay);
    // возможный код для минимальной задержки
    //delay(6);
    //for(uint32_t i=0;i<9362;i++) ADMUX=0xc8;
  sbi(ADCSRA, ADEN);
  for(int i=1<<6;i;i--)
  {
    sbi(ADCSRA, ADSC);
    while (bit_is_set(ADCSRA, ADSC));
    ul+=ADCW;
  };
  t=(ul>>6)*kt+t0;
  return t;
}

uint16_t GetTemperatureADC(bool bDelay)
{
  const float kt=(ct2-ct1)/(cu2-cu1);
  const float t0=(ct1*cu2-ct2*cu1)/(cu2-cu1);
  unsigned long ul=0;
  ADMUX=0xc8;
  if(bDelay)
    delay(AREFdelay);
    // возможный код для минимальной задержки
    //delay(6);
    //for(uint32_t i=0;i<9362;i++) ADMUX=0xc8;
  sbi(ADCSRA, ADEN);
  for(int i=1<<13;i;i--)
  {
    sbi(ADCSRA, ADSC);
    while (bit_is_set(ADCSRA, ADSC));
    ul+=ADCW;
  };
  return ul>>13;
}


Требуется обязательная калибровка по двум точкам. Программа простая, поэтому объяснять не буду как работает. Два замечания.

1. После изменения AREF необходима задержка больше 6мс для стабилизации напряжения.
2. Восстанавливать ADMUX и ADCSRA необязательно, так как встроенная функция analogRead эти регистры устанавливает при каждом вызове.

Date: 2021-03-09 11:11 pm (UTC)
From: [identity profile] axsmyth.livejournal.com
Два лупа у вас

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 05:32 am
Powered by Dreamwidth Studios