Nuvoton N76E003AT20 в термостате

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Кинг
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн дек 07, 2009 19:29:29

Nuvoton N76E003AT20 в термостате

Сообщение Кинг »

Попался мне в руки термостат STC-3008 там стоит N76E003AT20 который не особо то и распространен. на панели стоят 4 кнопки которые сидят на земле и прямиком идут в мк без подтяжки к питанию. посмотрев даташит я не нашел режим входа с pull up как у STM32, как тогда считывается состояние кнопки?
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1312
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: Nuvoton N76E003AT20 в термостате

Сообщение tonyk »

А куда они делись? Страница 87 даташита.
Вложения
Screenshot_254.jpg
(19.11 КБ) 325 скачиваний
Реклама
Кинг
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн дек 07, 2009 19:29:29

Re: Nuvoton N76E003AT20 в термостате

Сообщение Кинг »

Если открыть верхний полевик и подать на ногу минус он должен бахнуть
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: Nuvoton N76E003AT20 в термостате

Сообщение Flasher »

А если подумать и внимательно прочитать?
Реклама
Эиком - электронные компоненты и радиодетали
Кинг
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн дек 07, 2009 19:29:29

Re: Nuvoton N76E003AT20 в термостате

Сообщение Кинг »

Я подумал это какие то быстро действующие транзисторы, а то что у них высокое сопротивление даже в голову не пришло. Резумирую мне нужен режим quasi
Реклама
Кинг
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн дек 07, 2009 19:29:29

Re: Nuvoton N76E003AT20 в термостате

Сообщение Кинг »

пытаюсь подключить NTC термистор к МК. т.к он не линейный воспользовался сайтомhttps://aterlux.ru/article/ntcresistor для расчета градуированной таблицы. получил код
Спойлер

Код: Выделить всё

#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"

#define TEMPERATURE_UNDER 1250// Значение температуры, возвращаемое если сумма результатов АЦП больше первого значения таблицы

#define TEMPERATURE_OVER 0// Значение температуры, возвращаемое если сумма результатов АЦП меньше последнего значения таблицы

#define TEMPERATURE_TABLE_START 1250// Значение температуры соответствующее первому значению таблицы

#define TEMPERATURE_TABLE_STEP -50// Шаг таблицы 


typedef uint16_t temperature_table_entry_type;	// Тип каждого элемента в таблице, если сумма выходит в пределах 16 бит - uint16_t, иначе - uint32_t

typedef uint8_t temperature_table_index_type;// Тип индекса таблицы. Если в таблице больше 256 элементов, то uint16_t, иначе - uint8_t

#define TEMPERATURE_TABLE_READ(i) termo_table[i]// Метод доступа к элементу таблицы, должна соответствовать temperature_table_entry_type

/* Таблица суммарного значения АЦП в зависимости от температуры. От большего значения к меньшему
   Для построения таблицы использованы следующие парамертры:
     R1(T1): 22кОм(25°С)
     R2(T2): 1.211034кОм(100°С)
     Схема включения: C
     Ra: 10кОм
     Напряжения U0/Uref: 5В/5В
*/
const temperature_table_entry_type termo_table[]= {
    3869, 3837, 3801, 3759, 3710, 3654, 3588, 3512,
    3424, 3323, 3207, 3076, 2927, 2761, 2579, 2381,
    2169, 1948, 1723, 1498, 1280, 1074, 885, 716,
    568, 443
};

// Функция вычисляет значение температуры в десятых долях градусов Цельсия
// в зависимости от суммарного значения АЦП.
signed short calc_temperature(temperature_table_entry_type adcsum) 
{
  temperature_table_index_type l = 0;
  temperature_table_index_type r = (sizeof(termo_table) / sizeof(termo_table[0])) - 1;
  temperature_table_entry_type thigh = TEMPERATURE_TABLE_READ(r);
  
 
  if (adcsum <= thigh)  // Проверка выхода за пределы и граничных значений
  {
    #ifdef TEMPERATURE_UNDER
      if (adcsum < thigh) 
        return TEMPERATURE_UNDER;
    #endif
    return TEMPERATURE_TABLE_STEP * r + TEMPERATURE_TABLE_START;
  }
  temperature_table_entry_type tlow = TEMPERATURE_TABLE_READ(0);
  if (adcsum >= tlow) {
    #ifdef TEMPERATURE_OVER
      if (adcsum > tlow)
        return TEMPERATURE_OVER;
    #endif
    return TEMPERATURE_TABLE_START;
  }
 
  while ((r - l) > 1)  // Двоичный поиск по таблице
  {
    temperature_table_index_type m = (l + r) >> 1;
    temperature_table_entry_type mid = TEMPERATURE_TABLE_READ(m);
    if (adcsum > mid) {
      r = m;
    } else {
      l = m;
    }
  }
  temperature_table_entry_type vl = TEMPERATURE_TABLE_READ(l);
  if (adcsum >= vl) {
    return l * TEMPERATURE_TABLE_STEP + TEMPERATURE_TABLE_START;
  }
  temperature_table_entry_type vr = TEMPERATURE_TABLE_READ(r);
  temperature_table_entry_type vd = vl - vr;
  int16_t res = TEMPERATURE_TABLE_START + r * TEMPERATURE_TABLE_STEP; 
  if (vd)  // Линейная интерполяция
  {
   
    res -= ((TEMPERATURE_TABLE_STEP * (int32_t)(adcsum - vr) + (vd >> 1)) / vd);
  }
  return res;
}

если значение ацп(например 1498) совпадает с данными из таблицы выдает температуру правильно 300, но если например 1522 уже температура 14.
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Nuvoton N76E003AT20 в термостате

Сообщение Zhuk72 »

Вместо такой таблицы лучше бы по формуле рассчитали.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Кинг
Встал на лапы
Сообщения: 145
Зарегистрирован: Пн дек 07, 2009 19:29:29

Re: Nuvoton N76E003AT20 в термостате

Сообщение Кинг »

по формуле погрешность приличная.
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Nuvoton N76E003AT20 в термостате

Сообщение musor »

совет переходите на платиновые термометры сопротивления напр ПТС100 они линейны и могцт от -100до+1400
ну или копечные термопары тамс правда не R а ЭДС+возня с компенсацией холодног спая но линейность на 2 порядка лучше обычныхNTC
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Nuvoton N76E003AT20 в термостате

Сообщение Eddy_Em »

Я просто делал кусочно-линейную интерполяцию после калибровки по платиновому терморезистору. Очень даже сносно получалось (в ЖЖ все расписал).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

Вернуться в «Разные вопросы по МК»