Помогите разобраться с назначением пинов Arduino Mega 2560 пинами прерываний.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Учитался про PCINT,но по причине малограмотности в голове все смешалось. Хочу попробовать пойти от  обратного:

Задача такая: сделать на этой плате пины от 22 до 37 пинами прерывания (необходимо подключить 8 энкодеров и 8 их кнопок). Как работать с энкодерами и кнопками на прерываниях, я разобрался,  а как сделать пины пинами прерывания - ну ни в какую. Друзья, набросайте, пожалуйста скетч для задачи, выделенной толстыми буквами. Ползая по нему, мне будет проще разобраться что к чему (особенно, если строки будут прокомментированы). Возможно (учитывая разные порты), удобнее взять другой ряд пинов (например, от 38 до 53). Понимаю, что наглею, но помогите.

Заранее спасибо! 

vvadim
Offline
Зарегистрирован: 23.05.2012

ну раз с гуглами и поисковиками не дружите

 

Плата int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3        
Mega2560 2 3 21 20 19 18

 

vvadim
Offline
Зарегистрирован: 23.05.2012

кстати, ваши энкодеры с кнопками не обязательно вешать на прерывания.

они и без них нормально читаются....

Onkel
Offline
Зарегистрирован: 22.02.2016

Sonologist пишет:

Учитался про PCINT,но по причине мал...Понимаю, что наглею, но помогите.

Заранее спасибо! 

У меня драйвера суровых станков на мегах, 8 прерываний сделаны на пинах  К0-К7

PCMSK2=0xFF;
PCICR=0x04;

Это значит все восемь пинов К.
У меня в С функция - обработчик прерываний

interrupt [PCINT2] void pin_change_isr2(void)

{}

в ардуине обработчик должен по другому называться, не помню сейчас.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Sonologist пишет:

Учитался про PCINT, ...  пины от 22 до 37 пинами прерывания 

А можно не поверить, что Вы что-то читали? На части из этих пинов просто нет PCIINT. Можно что-то не понять, но не увидеть что его там просто нет ... :(

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

[/quote]

А можно не поверить, что Вы что-то читали? На части из этих пинов просто нет PCIINT. Можно что-то не понять, но не увидеть что его там просто нет ... :(

[/quote]

Ну конечно, можно не верить. Понимаю, что из всех возможных родников истины не пил. Но вот тут:

http://arduinonsk.ru/blog/87-all-pins-interrupts

https://www.youtube.com/watch?v=hArPRYkx__0

https://ruvid.net/video/8-%D0%B1%D0%B8%D1%82-27-%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D0%BB%D1%8E%D0%B1%D0%BE%D0%BC-%D0%BF%D0%B8%D0%BD%D0%B5-arduino-hArPRYkx__0.html

https://ru-arduino.livejournal.com/

https://switch-case.ru/52706922

так и не нашел конкретных рекомендаций. Или не смог их найти. Поэтому и обратился в сообщество за помощью. Если есть возможность меня направить по правильной (неизвестной пока мне) ссылке - буду благодарен. Касательно "есть-нет" PCINT на каких-либо пинах - номера их я привел чисто формально, исключительно из соображений  использования длинной двухрядной панели. 

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А банально набрать в Гугле "arduino mega pinout" и посмотреть, никак?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Спасибо, аналогичнная карта есть, но эта побольше, лучше читается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Sonologist пишет:
Но вот тут:

И где там про пины от 22 до 37??? Нету там про это. А потому, что там написано про UNO. И по одной из ссылок об этом прямо говорится. А Вы вроде про Мегу тут талдычите?

Я же и говорю, что Вы ничего на самом деле не читали. Прочитали то, что попалось под руку, не относящееся к делу. Ну, почитайте ещё "Незнайку в Солнечном городе".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

А банально набрать в Гугле "arduino mega pinout" и посмотреть, никак?

 

Ну, чего Вы к человеку лезете, он же и так уже

Sonologist пишет:

Учитался 

sadman41
Offline
Зарегистрирован: 19.10.2016

Этот страшный человек ЕвгенийП имеет в виду, что на Uno и Mega стоят разные микроконтроллеры. Поэтому читать что-то про Uno и пытаться применить прочитанное на Mega - зачастую контрпродуктивно.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Приведенные ссылки читал не относительно конкретной платы, а чтобы понять принцип. Но, видимо, квалификации не хватает совсем: сути так и не уловил. Полночи пытался разобраться с Мегой (спасибо за большую картинку!) - тоже ум за разум. Видимо, рано мне такие задачи решать. Заход номер два (пока отказавшись от пинов прерывания): просто библиотека для энкодера, посаженного на обычные пины. В принципе все работает, но столкнулся вот с чем: если закомментировать блок работы с датчиками температуры и выведения температур на индикаторы, то реакция программы на поворот энкодера совершенно адекватная (переменная val нормально прописывается и в мониторе порта и на индикаторе). При выполнении же полного скетча эта переменная то меняется, то нет. Понимаю, что это связано с временем, которе требуется датчикам температуры для переваривания и выдачи данных в Ардуино (где-то 850 мсек). Вот как бы обойти этот момент: чтоб на фоне работы термометров энкодеры (а их будет несколько) действовали вне зависимости от задержки датчиков DS18b20? Скетч: 


//________Подключение библиотек

#include <iarduino_Encoder_tmr.h> // Библиотека энкодера
iarduino_Encoder_tmr enc(7,5);    //  Объявляем объект enc для работы с энкодером указывая (№ вывода A, № вывода B)
#include "LedControl.h" //Библиотека max7219
/*
din - пин 52  
cs -  пин 50
clk - пин 48
четвертая цифра "X" - количество модулей
создаём объект класса LedControl (din,cs,clk,X)*/
LedControl lc = LedControl(52, 48, 50, 2);
#include <OneWire.h> //Библиотека термодатчика
#include <DallasTemperature.h> //Библиотека термодатчика
//________Объявление пинов температурных датчиков
#define ONE_WIRE_BUS_rc 22
#define ONE_WIRE_BUS_water 23
#define ONE_WIRE_BUS_air 24
#define ONE_WIRE_BUS_tank 25
//________Подвязывание переменных к библиотекам
OneWire oneWire_out_rc(ONE_WIRE_BUS_rc);
OneWire oneWire_out_water(ONE_WIRE_BUS_water);
OneWire oneWire_out_air(ONE_WIRE_BUS_air);
OneWire oneWire_out_tank(ONE_WIRE_BUS_tank);
DallasTemperature sensor_rc(&oneWire_out_rc);
DallasTemperature sensor_water(&oneWire_out_water);
DallasTemperature sensor_air(&oneWire_out_air);
DallasTemperature sensor_tank(&oneWire_out_tank);
//________Объявляем переменнst
int rc;                 //Температура колонны
int water;              //Температура охладителя
int air;                //Температура воздуха
int tank;               //Температура куба
int val=0;              //Переменную энкодера 
byte gradus[1] = {B01100011}; //Массив "градус" (в SetRow нумеруются с 0!)

void setup()
{
  pinMode(5, INPUT);
  pinMode(7, INPUT);
  Serial.begin(115200);
  //Инициируем работу с энкодером
  enc.begin();                              
  //Инициализация модуля индикаторов
  lc.shutdown(0, false); //Выводим из спящего режима
  lc.setIntensity(0,4);  //Яркость дисплея на 4. Всего возможных режимов яркости от 0 до 15
  lc.clearDisplay(0);    //Очистить дисплей

  lc.shutdown(1, false); //Выводим из спящего режима
  lc.setIntensity(1,4);  //Яркость дисплея на 4. Всего возможных режимов яркости от 0 до 15
  lc.clearDisplay(1);    //Очистить дисплей    
  //Инициализация датчиков температуры
  sensor_rc.begin();
  sensor_water.begin();
  sensor_air.begin();
  sensor_tank.begin();
}

void loop()
{
    int a=enc.read(); //  Читаем состояние энкодера в переменную a
    if(a)
     {
      if(a==encLEFT){val--;} 
      if(a==encRIGHT){val++;} 
      lc.setDigit(1, 0, val, false);
      Serial.println (val);
     }

    //________Запрос датчикам на измерение температуры
    sensor_rc.requestTemperatures(); 
    sensor_water.requestTemperatures(); 
    sensor_air.requestTemperatures(); 
    sensor_tank.requestTemperatures(); 
    //________Формируем переменные для передачи в порт
    rc=sensor_rc.getTempCByIndex(0)*10;
    water=sensor_water.getTempCByIndex(0)*10;
    air=sensor_air.getTempCByIndex(0)*10;
    tank=sensor_tank.getTempCByIndex(0)*10;
    //________Индикация "градуса"
    lc.setRow(0, 4, gradus[0]);
    lc.setRow(0, 0, gradus[0]);
    lc.setRow(1, 4, gradus[0]);
    //________Раскладка данных температуры и индикация
    int sot=rc/100; // Т° колонны
    int des=rc%100/10;
    int edi=rc%100%10;
    lc.setDigit(0, 7, sot, false);
    lc.setDigit(0, 6, des, true);
    lc.setDigit(0, 5, edi, false);
    sot=water/100; // Т° охладителя
    des=water%100/10;
    edi=water%100%10;
    lc.setDigit(0, 3, sot, false);
    lc.setDigit(0, 2, des, true);
    lc.setDigit(0, 1, edi, false);
    sot=air/100;  // Т° воздуха
    des=air%100/10;
    edi=air%100%10;
    lc.setDigit(1, 7, sot, false);
    lc.setDigit(1, 6, des, true);
    lc.setDigit(1, 5, edi, false);
}


 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Sonologist пишет:
Полночи пытался разобраться с Мегой (спасибо за большую картинку!) - тоже ум за разум. Видимо, рано мне такие задачи решать. 

Ну, это Вы зря так. Ничего там страшного нет ни в UNO, ни в Меге.

Собственно там и разницы то особой нет, просто у UNO это есть практически на всех пинах, а в Меге только на части пинов. А так, принцип работы одинаковый.

Вы попробуйте без энкодера, а на простеньком, в несколько строк коде научиться оаботать с прерыванием как таковым. Выберите пин, на котором оно есть (если на UNO, то практически любой) и попрбойуте сделать просто ловлю прерывания на это пине.

Мы (ну, вот лично я) Вам с удовольствием поможем если чего.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Спасибо, Евгений, постепенно я, конечно, разберусь. Однако, не сразу: квалификации действительно катастрофически не хватает, многих вещей я не понимаю на базовом уровне, а времени на исправление этого недостатка тоже мало: все-таки, и работать надо и прочие дела :). Но не найдете ли возможности глянуть на приведенный выше скетч? Как задержку в работе ds18b20 обойти?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Sonologist, Вы странный человек.

Вот попытались реализовать один в принципе правильный вариант. Но с наскоку не удалось - не учли некоторые особенности.

Теперь пытаетесь подойти к задаче с другой стороны - в принципе с не совсем правильной. Из-за чего получаете некоторые негативные эффекты. Избавиться от них при этом подходе совершенно невозможно. Остается либо мириться, либо возвращаться к первому варианту.

И Евгений как раз пытается указать Вам на Ваши ошибки, чтобы облегчить возвращение к этому первому варианту. А Вы: "Спасибо, конечно, но как обойти проблемы присущие именно второму варианту?" 

Ответ единственный - вернуться к варианту первому.

Нет, возможно, конечно, кое-какие косметические улучшения и во втором варианте. И даже, возможно, они Вас вполне удовлетворят, а если нет? Попробовать, конечно, можно, но Вы ведь сами жалуетесь на нехватку времени.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Да не странный я, а просто слабый в нашем деле :) Согласенс Вами во всем и полностью. И буду пытаться разобраться и с назначением прерываний и просто "читать" энкодер. Видимо, более правильный вариант - советуемый от Евгения. По крайней мере, с функцией attachInterrupt я более или менее разобрался. Буду добивать вопрос обязательно. Но тут я столкнулся с побочной проблемой. Как бы  ни "читай" энкодеры (что через прерывания, что просто - как в представленном скетче) - все равно (насколько я понимаю) получится затыка с этой чортовой латенцией от датчиков температуры. Ее бы победить в первую очередь, а потом решить вопрос, как общаться с энкодерами. Кстати, насколько я сумел понять (возможно, снова ошибаюсь), исходя из приведенной выше коллегой большой картинки распиновки Меги, перенаправлению на прерывания подлежат пины, помеченные как "PCINTx". Например, №№ 50,51,52,53. С ними (и аналогичными) и надо экспериментировать. Так ли?

bwn
Offline
Зарегистрирован: 25.08.2014

А падпишусь, ибо чую, что ждет и меня дальняя дорога с энкодером и прерываниями. Чет энкодерная библиотека с дисплеем 16х02 и неоптимизированным выводом, совсем работать не желает, с более-менее оптимизированным, тоже не очень нравиться. Пичалька.

sadman41
Offline
Зарегистрирован: 19.10.2016

Если энкодер один, то основная проблема только в правильном подключении - чтобы дребезга не допустить. В даташите от Alpine схема есть на четырех резисторах.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

В даташите от Alpine схема есть на четырех резисторах.

Вот эта что ли?

Так вроде эти резисторы не про дребезг.

Хотя, здесь два резистора. А что там на четырёх?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

sadman41 пишет:

основная проблема только в правильном подключении - чтобы дребезга не допустить.

Проблема дребезга не зависит от количества энкодером или кнопок. Если в схеме только резисторы - пожалте в танцы с бубном в борьбе со всплесками. Я их прибиваю , шунтируя контакт конденсатором 100 нф, а для пущей важности дальше ставлю триггер Шмидта. На выходе почти идеальный прямоугольник. Цепочка, конечно, усложняет устройство, но зато нет надобности беспокоиться о дребезге. Как-то так, если не смотреть на распиновку на Ардуино (у каждого своя). Фотки осциллограммы нет, но поверьте, на С1-94 картинка приятная (без бород и завалов фронтов).

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Так вроде эти резисторы не про дребезг.

Хотя, здесь два резистора. А что там на четырёх?

https://www.alps.com/prod/info/E/HTML/Encoder/Incremental/EC11/EC11_common.html

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

Я  эту схему видел и пробовал "в натуре". В зоне переднего фронта все равно остается "борода". Справедливости ради замечу, что заментно меньшая, нежели при просто двух резисторах-подтяжках, но остается. Убивается конденсаторами в 10 раз большей емкости. Но тот же эффект при конденсаторах 0.1 uF и двух резисторах. То есть, два резистора получаются лишними. И повторюсь, использование сигнала с  выводов А и В через триггеры Шмидта устраняет все проблемы, хотя и чуть-чуть усложняют схему.

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, я тоже пускал в одной конструкции через Шмидта.  Всё хорошо, но работы (для меня) много )) 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

sadman41 пишет:

но работы (для меня) много )) 

Ну не так уж и много, если честно. Зато душа спокойна и меандр идеальный.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Сейчас не помню конкретных деталей, но на многих контроллерах входы сами по себе снабжены триггерами Шмидта (по крайней мере, некоторые, какие именно - можно посмотреть в дэйташите).

sadman41
Offline
Зарегистрирован: 19.10.2016

Это на STM-ках, про которые пишут, что у них есть входы под квадратурные энкодеры?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Триггер шмитта есть во всех МК на всех цифровых выводах. Так что вешать перед входом ещё один - совершенно бесполезно :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dimax пишет:

Триггер шмитта есть во всех МК на всех цифровых выводах. Так что вешать перед входом ещё один - совершенно бесполезно :)

Насколько я помню, на SAM3 не на всех.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Sonologist пишет:

все равно (насколько я понимаю) получится затыка с этой чортовой латенцией от датчиков температуры. Ее бы победить в первую очередь, а потом решить вопрос, как общаться с энкодерами. 

Дать тебе маааленькую беззадержечную библиотеку для Далласа?  Ну и для энкодера впридачу?

только я температуру в ей до целых мерю, мне достатошно

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

Ну и для энкодера впридачу?

Дида, мине. Дайте две.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Энкодер мне чуть переделать надо, он под очередь сообщений заточен, переделаю на callback и выложу.  По крайней мере, у меня без всяких прерываний и дребезга 4 энкодера обрабатываются независимо.  

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

DetSimen пишет:

 и выложу. 

Буду безмерно благодарен!!!!!! Особенно за Даллас без латенции!

 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

[/quote]

Дать тебе маааленькую беззадержечную библиотеку для Далласа?  Ну и для энкодера впридачу?

только я температуру в ей до целых мерю, мне достатошно

[/quote]

Да! Хочу! :)  А более точно (до десятой градуса) можно с ней замутить?

И в придачу хочу, которая для энкодера!

Заранее спасибо!

bwn
Offline
Зарегистрирован: 25.08.2014

Sonologist пишет:

Особенно за Даллас без латенции!

OneWire ))))). Тута, и с десятыми и с тысячными.

P/S Чет на далласы опять жор пошел. Давно не было.))))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Sonologist пишет:

Да! Хочу! :)  А более точно (до десятой градуса) можно с ней замутить?

А нахуа?, как говорят французики.  У него точность по даташиту полградуса. 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

[/quote]

А нахуа?, как говорят французики.  У него точность по даташиту полградуса. 

[/quote]

Спасибо, вечером  качну (на работе обгрызанный Линукс без возможности скачивания). Относительно точности - да, полградуса. Но это означает, что конкретный экземпляр датчика может при кипении воды показывать и 99,5 и 100,5 градусов. В ректификации температуру используют не абсолютную, а в виде некоей дельты. Дельта может быть 0,1-0,5-1,0 градус. Вот здесь и нужны десятые доли.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тогда моя биб-ка не пададёть.  Ну в сети полно других, разной степени тармознутости.  я специально избавлялся от плавающей точки, чтоб она занимала как можно меньше места.  Мне всё равно, -35 на улице или -34.9265

bwn
Offline
Зарегистрирован: 25.08.2014

Sonologist пишет:

В ректификации температуру используют не абсолютную, а в виде некоей дельты. Дельта может быть 0,1-0,5-1,0 градус. Вот здесь и нужны десятые доли.

Ток не забывайте, минимальный возможный шаг == 0,0625гр. Итого, на 0,2гр коридора, всего три шага. Хотя у меня, уже года три работает, сперва думал поменять, но понял, что устраивает.

P/S А нахрена тогда мега2560, там и 328 за глаза, с бааааальшим запасом?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

DetSimen пишет:

Я специально избавлялся от плавающей точки, чтоб она занимала как можно меньше места.

Во! А если эту плавающую точку выбросить и давать температуру просто в формате "888", что означает 88,8 градуса? Тут ведь тоже плавающая точке не нужна? Нет? Я в своих программах как раз для расчетов эту точку и выбрасываю, сразу умножая пришедшую температуру на 10.

bwn
Offline
Зарегистрирован: 25.08.2014

В той теме, что я дал, изначально, вообще в далласовских попугаях из даташита. На 16.0 не делите и пользуйтесь двумя крайними битами.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

[/quote]

Ток не забывайте, минимальный возможный шаг == 0,0625гр. Итого, на 0,2гр коридора, всего три шага. Хотя у меня, уже года три работает, сперва думал поменять, но понял, что устраивает.

P/S А нахрена тогда мега2560, там и 328 за глаза, с бааааальшим запасом?

[/quote]

Все правильно, минимальный шаг 0,0625.

А мега нужна затем, что хочу на нее возложить все функции автоматики. ПОэтому надо много входов в первую очередь.

 

bwn
Offline
Зарегистрирован: 25.08.2014

Не, просто интересно, что может превысить имеющихся 20 входов, из них 18 выходов?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Sonologist пишет:

хочу на нее возложить все функции 

Что, и потребление готовой продукции тоже?

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

bwn пишет:

Не, просто интересно, что может превысить имеющихся 20 входов, из них 18 выходов?

Щас посчитаем:

1.  Четыре ds18b20 - 4 пина

2. Восемь энкодеров с кнопками - 24 пина

3. Индикаторы на мах7219 - 3 пина

4. Управление клапанами отбора - 2 пина

5. Входной пин (аналоговый) для стабилизатора мощности - 1 пин

6. Выходной пин (ШИМ или обычный - пока не решил, как регулировать мощность: фазово или по Брезенхейму ) для стабилизатора мощности - 1 пин

7. Детектор перехода через 0 - 1 пин

Вот уже 36 отростков :( И, наверняка еще что-то понадобится.

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

[/quote]

Что, и потребление готовой продукции тоже?

[/quote]

Не... это уже я сам смогу, без помощи Ардуино :)

bwn
Offline
Зарегистрирован: 25.08.2014

Лана, по п.1 бесплатно сэкономлю Вам 3 пина, их все можно включить на один.
Но что будут делать восемь энкодеров? 
С остальными, более-менее ясно.

nik182
Offline
Зарегистрирован: 04.05.2015

Да уж. 8 энкодеров... Проще полноразмерную клаву на 2 пина повесить. Всё проще управлять будет. И экономии 22 пина. 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

bwn пишет:

Лана, по п.1 бесплатно сэкономлю Вам 3 пина, их все можно включить на один.
Но что будут делать восемь энкодеров? 
С остальными, более-менее ясно.

Их экономить не надо: удобнее работать с 4 шинами. Не нужно каждый раз определять, какой датчик куда сунут, жив ли он и т.д. Значительно проще датчики промаркировать. Щитаем энкодеры:

1. Установка паспортной мощности ТЭНа

2. Установка подаваемой мощности в ТЭН+ кнопка включения-выключения режима разгона

3. Установка температуры отсечки для клапана отбора + кнопка "температура отсечки=температуре колонны" (для удобства)

4. Установка скважности "клапан открыт-закрыт" + кнопка "клапан закрыт"

5. Установка температуры для реакции на показатели еще трех датчиков температуры (3 энкодера + 3 кнопки)

Извини, просчитался: энкодеров будет 7.

 

Sonologist
Sonologist аватар
Offline
Зарегистрирован: 08.06.2018

nik182 пишет:

Да уж. 8 энкодеров... Проще полноразмерную клаву на 2 пина повесить. Всё проще управлять будет. И экономии 22 пина. 

Проще? Может быть. Но не функционально. Работа с кнопками "больше-меньше-вправо-влево" неудобна и визуально недемонстративна. У меня уже были устройства, которые настривались двумя-тремя кнопками. Так там алгоритм обычно такой, что пока до нужного пункта меню доберешься - палец намозолишь. А с крутилками - и логично и наглядно: индикатор с показателем, а рядом - настроечный энкодер.

nik182
Offline
Зарегистрирован: 04.05.2015

Меню выбора регулируемой велечины - нет, не слышал!!! 

bwn
Offline
Зарегистрирован: 25.08.2014

Sonologist пишет:

Их экономить не надо: удобнее работать с 4 шинами. Не нужно каждый раз определять, какой датчик куда сунут, жив ли он и т.д. Значительно проще датчики промаркировать. Щитаем энкодеры:

1. Установка паспортной мощности ТЭНа

2. Установка подаваемой мощности в ТЭН+ кнопка включения-выключения режима разгона

3. Установка температуры отсечки для клапана отбора + кнопка "температура отсечки=температуре колонны" (для удобства)

4. Установка скважности "клапан открыт-закрыт" + кнопка "клапан закрыт"

5. Установка температуры для реакции на показатели еще трех датчиков температуры (3 энкодера + 3 кнопки)

Извини, просчитался: энкодеров будет 7.

Датчики вешаются на один шлейф и втыкаются в свои гнезда, по длине шлейфа. В сетапе проверить количество и все определилось.

Паспортная мощность тэна, они у Вас сменные?

Подаваемая мощность должна устанавливаться в зависимости от температуры куба и колонны. ИМХО.

Температуру отбора должен ограничивать МК, без Вашего вмешательства, иначе, нахрена он вообще нужен?

Установка скважности, я бы заставил это тоже МК делать.

Установка температур, возможно в меню, хотя это тоже дело МК. ИМХО.

Я Вас не отговариваю, дело Ваше. Но городить такую монструозную кострукцию там, где должна быть одна кнопка "Включить-выключить", извращение. Опять таки, ИМХО.