ソースを参照

Code cleanup & re-formatting...

Vladimir N. Shilov 1 年間 前
コミット
c9c8f43aae
5 ファイル変更547 行追加659 行削除
  1. 4 2
      lib/lib.mk
  2. 67 0
      lib/stab/Changelog.txt
  3. 289 475
      lib/stab/stab.c
  4. 2 182
      lib/stab/stab.h
  5. 185 0
      lib/stab/stab_param.h

+ 4 - 2
lib/lib.mk

@@ -4,12 +4,14 @@ USERLIB = ./lib
 # List of all the Userlib files
 USERSRC =  $(USERLIB)/st7735/st7735.c \
 	$(USERLIB)/st7735/fonts.c \
-	$(USERLIB)/stab/stab.c
+	$(USERLIB)/stab/stab.c \
+	$(USERLIB)/eeprom/eeprom.c
           
 # Required include directories
 USERINC =  $(USERLIB) \
            $(USERLIB)/st7735 \
-           $(USERLIB)/stab
+           $(USERLIB)/stab \
+           $(USERLIB)/eeprom
 
 # Shared variables
 ALLCSRC += $(USERSRC)

+ 67 - 0
lib/stab/Changelog.txt

@@ -0,0 +1,67 @@
+//Регулятор ТЭНа полуволнами с программным детектором нуля
+//--https://github.com/JohnJohnov/Stab-avr
+//--https://alcodistillers.ru/forum/viewtopic.php?id=1549
+//--JohnJohnov-----------------------
+//--использован код OldBean----------
+//--v0.2-------------------
+//--добавлен дисплей
+//--v0.3-------------------
+//--ПИД-подстройка частоты сети по переходу через ноль
+//--опрос кнопок
+//--режим разгона
+//--v0.4-------------------
+//--выборки набираются за целое количество периодов
+//--v0.5-------------------
+//--оптимизация
+//--v0.6-------------------
+//--организована корректная обработка отсутствия сети
+//--v0.7-------------------
+//--исправлена ошибка выставления мощности менее 200Вт
+//--битовые переменные упакованы в структуры
+//--убрано ненужное мерцание символов на дисплее
+//--добавлена возможность вернуть установленную мощность после экстренного отключения (идея d.styler)
+//--v0.8-------------------
+//--менюшка при возвращении уст.мощности после экстр.откл.
+//--v0.81------------------
+//--сделано выравнивание значений по правому краю
+//--перекомпонован дежурный экран
+//--выводится установленная мощность в Вт и процентах
+//--напряжение сети выводится с одним знаком после запятой
+//--v0.9-------------------
+//--оптимизация кода
+//--переход на более другую библиотеку дисплея
+//--русский шрифт
+//--номинальная мощность устанавливается/записывается/выбирается в начальном меню
+//--уставки, выбираемые в меню после экстр.откл., могут быть записаны в EEPROM
+//--v0.95------------------
+//--исправлены ошибки
+//--значение задержки для защиты от дребезга вынесено в дефайны
+//--v0.96------------------
+//--исправлены ошибки, оптимизирован код
+//--расширены границы диапазона сетевой частоты для поддержки канадского коллеги
+//--добавлена поддержка универсального протокола общения с управляющей программой
+//--v0.97------------------
+//--добавлена поддержка протокола общения с Samovar (начало посылки кириллицей)
+//--добавлено моргание светодиода в отладочных целях
+//--добавлен таймаут менюшек
+//--добавлена поддержка протокола общения с РМВ-К
+//--логотип
+//--оптимизация кода
+//--v0.98------------------
+//--добавлен альтернативный интерфейс с большими символами для опытных пользователей
+//--изменена работа с EEPROM
+//--повышена точность регулировки (до 0,2%)
+//--оптимизация кода
+//--v0.98.4----------------
+//--оптимизация кода
+//--уменьшение размера кода для поддержки ATmega168
+//--добавлено отключение разгона внешним сигналом
+//--добавлено аварийное отключение нагрузки внешним сигналом
+//--работа с портами организована через регистры без использования ардуиновских функций
+//--v0.99.1----------------
+//--готуємось до заміни дісплея. видаляємо все зайве.
+//--v0.100.1----------------
+//--Перехід на платформу STM32.
+//--
+//--
+//-------------------------

ファイルの差分が大きいため隠しています
+ 289 - 475
lib/stab/stab.c


+ 2 - 182
lib/stab/stab.h

@@ -1,187 +1,7 @@
-/* vim: set ai et ts=4 sw=4: */
 #ifndef __STAB_H__
 #define __STAB_H__
 
-//================================================================
-//===========Настраиваемые параметры==============================
-//================================================================
-//#define Debug           // Раскомментить для дебажения
-//#define LED_debug       // Раскомментить для вывода на светодиод сигнала управления твердотельным реле
-#define INTERFACE_ALT     // Раскомментить для включения альтернативного интерфейса с большими символами
-#define High_level_triac  // Раскомментить, если твердотельное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
-#define High_level_relay  // Раскомментить, если контактное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
-//#define NOT_LM358       // Раскомментить, если в датчике напряжения стоит НЕ LM358, а rail-to-rail операционник
-//#define DisplayReset      // Раскомментить, если используется вывод сброса дисплея
-#define DEBOUNCE 26       // Значение для обеспечения защиты от дребезга кнопок DEBOUNCE=1 + <задержка в ms>/10
-//
-//#define U_LINE_FREQ_60    // Раскомментить, если частота сети 60Гц, иначе - 50Гц
-//
-#define U_LINE 230        // Номинальное значение действующего напряжения в сети, для которого указана номинальная мощность ТЭНа
-#define U_MIN 100         // Значение напряжения в сети, ниже которого сеть считается аварийной
-#define U_LINE_Q 52900    // Квадрат номинала сети, для которого указана номинальная мощность ТЭНа
-//
-#define MENU_TIMEOUT 120  // Таймаут выхода из меню в секундах (не более 255)
-//
-//=====Настройки коммуникации по последовательному порту============
-#define USE_USART           // Раскомментить для инициализации общения стаба с внешним контроллером
-  #ifdef USE_USART
-  //#define USE_RMVK        // Раскомментить для включения общения с внешним контроллером по протоколу Samovar и/или РМВ-К
-  #ifndef USE_RMVK
-    #define USE_ADprotocol  // По умолчанию используется универсальный протокол
-  #endif
-#endif
-//==================================================================
-//==================================================================
-//
-#ifdef U_LINE_FREQ_60
-  #define LINE_FREQ 129 // Определяет начальную частоту для фазовой автоподстройки частоты сети (60,1Гц)
-  #define PSUM_MAX 60   // Количество периодов для набора отсчетов АЦП (60 - это за 1 сек, это порядка 5000 отсчетов)
-  #define P_TIME_MAX 120  // Количество полупериодов сети в секунду для отсчета времени
-#else
-  #define LINE_FREQ 155   // Определяет начальную частоту для фазовой автоподстройки частоты сети (50,08Гц)
-  #define PSUM_MAX 50     // Количество периодов для набора отсчетов АЦП (50 - это за 1 сек, это порядка 5000 отсчетов)
-  #define P_TIME_MAX 100  // Количество полупериодов сети в секунду для отсчета времени
-#endif
-//
-//=============вход АЦП================
-#define pin_VACin 0       //  Пин входа измеряемого напряжения (A0)
-//
-//===========входные выводы============
-#define pin_PC_STATE(pin) (~(PINC >> (pin - 14)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
-#define pin_PC_InPullUp(pin) DDRC &=~(1 << (pin - 14)); PORTC |=(1 << (pin - 14)) // Инициализация входа с подтяжкой к VCC
-//
-#define pin_RAZGON_OFF 17 // Пин входа отключения разгона (A3 - это D17/PC3, при изменении подредактировать следующие два макроса)
-#define pin_RAZGON_OFF_INIT pin_PC_InPullUp(pin_RAZGON_OFF) // Определяем вывод отключения разгона, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_RAZGON_OFF_STATE pin_PC_STATE(pin_RAZGON_OFF)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-#define pin_STAB_OFF 16   //  Пин входа отключения стабилизатора (A2 - это D16/PC2, при изменении подредактировать следующие два макроса)
-#define pin_STAB_OFF_INIT pin_PC_InPullUp(pin_STAB_OFF) // Определяем вывод останова стаба, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_STAB_OFF_STATE pin_PC_STATE(pin_STAB_OFF)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-//===========вЫходные выводы===========
-#define pin_PD_Out(pin) DDRD |=(1 << pin)   // Инициализация выхода
-#define pin_PD_HIGH(pin) PORTD |=(1 << pin) // Установка выхода
-#define pin_PD_LOW(pin) PORTD &=~(1 << pin) // Сброс выхода
-#define pin_PD_INV(pin) PORTD ^=(1 << pin)  // Инверсия выхода
-//
-//#define pin_OLEDres 2     //  Пин сброса OLED индикатора.
-//#define pin_OLEDres_INIT pin_PD_Out(pin_OLEDres)
-//#define pin_OLEDres_HIGH pin_PD_HIGH(pin_OLEDres)
-//#define pin_OLEDres_LOW pin_PD_LOW(pin_OLEDres)
-//
-#define pin_TOut 6        //  Пин выхода управления ТЭНом (на твердотельное реле)
-#define pin_TOut_INIT pin_PD_Out(pin_TOut)
-#define pin_TOut_HIGH pin_PD_HIGH(pin_TOut)
-#define pin_TOut_LOW pin_PD_LOW(pin_TOut)
-//
-#define pin_TRelay 7      //  Пин выхода управления ТЭНом (на контактное реле в режиме максимальной мощности)
-#define pin_TRelay_INIT pin_PD_Out(pin_TRelay)
-#define pin_TRelay_HIGH pin_PD_HIGH(pin_TRelay)
-#define pin_TRelay_LOW pin_PD_LOW(pin_TRelay)
-//
-//===========тестовые выводы===========
-//#define pin_ZeroOut 5     //  Пин выхода импульса ноля (D5 - PD5)
-//#define pin_ZeroOut_INIT pin_PD_Out(pin_ZeroOut)
-//#define pin_ZeroOut_INV pin_PD_INV(pin_ZeroOut)
-//#define pin_ZeroOut_HIGH pin_PD_HIGH(pin_ZeroOut)
-//#define pin_ZeroOut_LOW pin_PD_LOW(pin_ZeroOut)
-//
-//#define pin_DebugOut 7    //  Пин для отладки (D7 - PD7)
-//#define pin_DebugOut_INIT pin_PD_Out(pin_DebugOut)
-//#define pin_DebugOut_INV pin_PD_INV(pin_DebugOut)
-//#define pin_DebugOut_HIGH pin_PD_HIGH(pin_DebugOut)
-//#define pin_DebugOut_LOW pin_PD_LOW(pin_DebugOut)
-//
-//#define pin_TestOut 3     //  Пин для отладки (D3 - PD3)
-//#define pin_TestOut_INIT pin_PD_Out(pin_TestOut)
-//#define pin_TestOut_INV pin_PD_INV(pin_TestOut)
-//#define pin_TestOut_HIGH pin_PD_HIGH(pin_TestOut)
-//#define pin_TestOut_LOW pin_PD_LOW(pin_TestOut)
-//
-//===========выводы подключения кнопок===========
-#define pin_PB_STATE(pin) (~(PINB >> (pin - 8)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
-#define pin_PB_InPullUp(pin) DDRB &=~(1 << (pin - 8)); PORTB |=(1 << (pin - 8)) // Инициализация входа с подтяжкой к VCC
-#define pin_PB_OutLOW(pin) DDRB |=(1 << (pin - 8)); PORTB &=~(1 << (pin - 8))   // Инициализация выхода и сброс его
-//
-#define pin_butt_1 3     // Пин кнопки "Р-". Уменьшение уставки мощности. (D10 - PB2)
-#define pin_butt_1_INIT pin_PB_InPullUp(pin_butt_1) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_butt_1_STATE pin_PB_STATE(pin_butt_1)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-#define pin_butt_2 2      // Пин кнопки "Р+". Увеличение уставки мощности. (D9 - PB1)
-#define pin_butt_2_INIT pin_PB_InPullUp(pin_butt_2) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_butt_2_STATE pin_PB_STATE(pin_butt_2)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-#define pin_butt_3 5     // Пин кнопки "Стоп". Экстренное отключение ТЭНа. (D12 - PB4)
-#define pin_butt_3_INIT pin_PB_InPullUp(pin_butt_3) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_butt_3_STATE pin_PB_STATE(pin_butt_3)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-#define pin_butt_4 4     // Пин кнопки "Разгон". Включение/отключение разгона. (D11 - PB3)
-#define pin_butt_4_INIT pin_PB_InPullUp(pin_butt_4) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
-#define pin_butt_4_STATE pin_PB_STATE(pin_butt_4)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
-//#define pin_buttGND 8     // Пин временного общего провода для подключения кнопок. (D8 - PB0)
-//#define pin_buttGND_INIT pin_PB_OutLOW(pin_buttGND) // Определяем вывод, как вЫход и устанавливаем низкий уровень
-//
-//===============бортовой светодиод==============
-// ???
-#define pin_LED 13  // Бортовой светодиод подключен к выводу D13 (PB5)
-#define pin_LED_INIT pin_PB_OutLOW(pin_LED)       // Определяем вывод, как вЫход и устанавливаем низкий уровень
-#define TURN_LED_ON  PORTB |=(1 << (pin_LED - 8)) // Включаем светодиод
-#define TURN_LED_OFF PORTB &=~(1 << (pin_LED - 8))// Выключаем светодиод
-//
-//==============управление релюшками=============
-#ifdef High_level_triac // управление твердотельным реле высоким уровнем
-#define TURN_SSR_ON pin_TOut_HIGH   // Включаем ТЭН
-#define TURN_SSR_OFF pin_TOut_LOW   // Выключаем ТЭН
-#else // управление твердотельным реле низким уровнем
-#define TURN_SSR_ON pin_TOut_LOW    // Включаем ТЭН
-#define TURN_SSR_OFF pin_TOut_HIGH  // Выключаем ТЭН
-#endif
-//
-#ifdef High_level_relay // управление контактным реле высоким уровнем
-#define TURN_RELAY_ON pin_TRelay_HIGH   // Включаем ТЭН
-#define TURN_RELAY_OFF pin_TRelay_LOW   // Выключаем ТЭН
-#else // управление контактным реле низким уровнем
-#define TURN_RELAY_ON pin_TRelay_LOW    // Выключаем ТЭН
-#define TURN_RELAY_OFF pin_TRelay_HIGH  // Включаем ТЭН
-#endif
-//
-//========коэффициенты для ПИД-регулировки=======
-#define Kp 2      // Коэффициент пропорциональности для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
-#define Ki 5      // Интегральный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
-#define Kd 1      // Дифференциальный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
-#define Km 6      // Коэффициент для целочисленной математики (степень двойки для регистрового сдвига)
-#define PHASE 8   // сдвиг фаз между детекцией ноля и прерыванием таймера (в тиках таймера)
-#define T_MAX 180 // ограничение максимальной длительности полупериода в тиках таймера
-#define T_MIN 100 // ограничение минимальной длительности полупериода в тиках таймера
-//
-//================прочие константы===============
-#define ZSUM_MAX 5000 // Количество отсчетов АЦП без детекции ноля (5000 отсчетов это порядка 1 сек)
-#define U_ZERO 512    // Значение нуля АЦП для двуполярного сигнала с постоянной составляющей на выходе ОУ
-#define T_ADC 49    // Определяет интервал между запусками АЦП (200 мкс) f_OCn = f_clk / 2*N*(1 + X), где N - коэффициент деления предделителя, X- содержимое регистра OCRnA
-#define CICLE 500   // Количество полупериодов в полном цикле регулирования (200 полупериодов - 2сек, 500 полупериодов - 5сек, больше ставить не надо)
-//
-#define ASOled LD // Заюзаем уже созданный в библиотеке дисплея объект LD
-//
-#define EMPTY_CELL_VALUE 0xFFFF  // Содержимое пустой ячейки памяти EEPROM
-#define SRVDATA_ARR_SIZE 14 // Размер блока памяти для вспомогательных данных
-#define Pnom_ARR_SIZE 8   // Макс. размер массива записанных номинальных мощностей ТЭНа sizeof(Pnom_arr)/sizeof(Pnom_arr[0])
-#define PDMset_ARR_SIZE 6     // Размер массива уставок мощности ТЭНа sizeof(PDMset)/sizeof(PDMset[0]) (ставить не меньше 4)
-#if Pnom_ARR_SIZE > PDMset_ARR_SIZE
-  #define ARRAY_SIZE Pnom_ARR_SIZE  // Размер массива для работы с номиналами в начальном меню и уставками
-#else
-  #define ARRAY_SIZE PDMset_ARR_SIZE  // Размер массива для работы с номиналами в начальном меню и уставками
-#endif
-//
-#ifdef __AVR_ATmega168__  // Выключение UARTа, чтобы влезало в 168атмегу
-  #undef USE_USART
-  #undef USE_RMVK
-  #undef USE_ADprotocol
-#else
-  #ifdef USE_USART
-    static uint8_t cnt_uartWDT;     // Счетчик секунд для организации отсчета ожидания окончания посылки по USART
-  #endif
-#endif
-//
+void Stab_Init(void);
+void Stab_WorkCycle(void);
 
 #endif // __STAB_H__

+ 185 - 0
lib/stab/stab_param.h

@@ -0,0 +1,185 @@
+#ifndef __STAB_PARAM_H__
+#define __STAB_PARAM_H__
+
+//================================================================
+//===========Настраиваемые параметры==============================
+//================================================================
+//#define Debug           // Раскомментить для дебажения
+//#define LED_debug       // Раскомментить для вывода на светодиод сигнала управления твердотельным реле
+#define INTERFACE_ALT     // Раскомментить для включения альтернативного интерфейса с большими символами
+#define High_level_triac  // Раскомментить, если твердотельное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
+#define High_level_relay  // Раскомментить, если контактное реле ТЭНа управляется ВЫСОКИМ уровнем, иначе НИЗКИМ
+//#define NOT_LM358       // Раскомментить, если в датчике напряжения стоит НЕ LM358, а rail-to-rail операционник
+//#define DisplayReset      // Раскомментить, если используется вывод сброса дисплея
+#define DEBOUNCE 26       // Значение для обеспечения защиты от дребезга кнопок DEBOUNCE=1 + <задержка в ms>/10
+//
+//#define U_LINE_FREQ_60    // Раскомментить, если частота сети 60Гц, иначе - 50Гц
+//
+#define U_LINE 230        // Номинальное значение действующего напряжения в сети, для которого указана номинальная мощность ТЭНа
+#define U_MIN 180         // Значение напряжения в сети, ниже которого сеть считается аварийной
+#define U_LINE_Q 52900    // Квадрат номинала сети, для которого указана номинальная мощность ТЭНа
+//
+#define MENU_TIMEOUT 120  // Таймаут выхода из меню в секундах (не более 255)
+//
+//=====Настройки коммуникации по последовательному порту============
+#define USE_USART           // Раскомментить для инициализации общения стаба с внешним контроллером
+  #ifdef USE_USART
+  //#define USE_RMVK        // Раскомментить для включения общения с внешним контроллером по протоколу Samovar и/или РМВ-К
+  #ifndef USE_RMVK
+    #define USE_ADprotocol  // По умолчанию используется универсальный протокол
+  #endif
+#endif
+//==================================================================
+//==================================================================
+//
+#ifdef U_LINE_FREQ_60
+  #define LINE_FREQ 129 // Определяет начальную частоту для фазовой автоподстройки частоты сети (60,1Гц)
+  #define PSUM_MAX 60   // Количество периодов для набора отсчетов АЦП (60 - это за 1 сек, это порядка 5000 отсчетов)
+  #define P_TIME_MAX 120  // Количество полупериодов сети в секунду для отсчета времени
+#else
+  #define LINE_FREQ 155   // Определяет начальную частоту для фазовой автоподстройки частоты сети (50,08Гц)
+  #define PSUM_MAX 50     // Количество периодов для набора отсчетов АЦП (50 - это за 1 сек, это порядка 5000 отсчетов)
+  #define P_TIME_MAX 100  // Количество полупериодов сети в секунду для отсчета времени
+#endif
+//
+//=============вход АЦП================
+#define pin_VACin 0       //  Пин входа измеряемого напряжения (A0)
+//
+//===========входные выводы============
+#define pin_PC_STATE(pin) (~(PINC >> (pin - 14)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
+#define pin_PC_InPullUp(pin) DDRC &=~(1 << (pin - 14)); PORTC |=(1 << (pin - 14)) // Инициализация входа с подтяжкой к VCC
+//
+#define pin_RAZGON_OFF 17 // Пин входа отключения разгона (A3 - это D17/PC3, при изменении подредактировать следующие два макроса)
+#define pin_RAZGON_OFF_INIT pin_PC_InPullUp(pin_RAZGON_OFF) // Определяем вывод отключения разгона, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_RAZGON_OFF_STATE pin_PC_STATE(pin_RAZGON_OFF)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+#define pin_STAB_OFF 16   //  Пин входа отключения стабилизатора (A2 - это D16/PC2, при изменении подредактировать следующие два макроса)
+#define pin_STAB_OFF_INIT pin_PC_InPullUp(pin_STAB_OFF) // Определяем вывод останова стаба, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_STAB_OFF_STATE pin_PC_STATE(pin_STAB_OFF)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+//===========вЫходные выводы===========
+#define pin_PD_Out(pin) DDRD |=(1 << pin)   // Инициализация выхода
+#define pin_PD_HIGH(pin) PORTD |=(1 << pin) // Установка выхода
+#define pin_PD_LOW(pin) PORTD &=~(1 << pin) // Сброс выхода
+#define pin_PD_INV(pin) PORTD ^=(1 << pin)  // Инверсия выхода
+//
+//#define pin_OLEDres 2     //  Пин сброса OLED индикатора.
+//#define pin_OLEDres_INIT pin_PD_Out(pin_OLEDres)
+//#define pin_OLEDres_HIGH pin_PD_HIGH(pin_OLEDres)
+//#define pin_OLEDres_LOW pin_PD_LOW(pin_OLEDres)
+//
+#define pin_TOut 6        //  Пин выхода управления ТЭНом (на твердотельное реле)
+#define pin_TOut_INIT pin_PD_Out(pin_TOut)
+#define pin_TOut_HIGH pin_PD_HIGH(pin_TOut)
+#define pin_TOut_LOW pin_PD_LOW(pin_TOut)
+//
+#define pin_TRelay 7      //  Пин выхода управления ТЭНом (на контактное реле в режиме максимальной мощности)
+#define pin_TRelay_INIT pin_PD_Out(pin_TRelay)
+#define pin_TRelay_HIGH pin_PD_HIGH(pin_TRelay)
+#define pin_TRelay_LOW pin_PD_LOW(pin_TRelay)
+//
+//===========тестовые выводы===========
+//#define pin_ZeroOut 5     //  Пин выхода импульса ноля (D5 - PD5)
+//#define pin_ZeroOut_INIT pin_PD_Out(pin_ZeroOut)
+//#define pin_ZeroOut_INV pin_PD_INV(pin_ZeroOut)
+//#define pin_ZeroOut_HIGH pin_PD_HIGH(pin_ZeroOut)
+//#define pin_ZeroOut_LOW pin_PD_LOW(pin_ZeroOut)
+//
+//#define pin_DebugOut 7    //  Пин для отладки (D7 - PD7)
+//#define pin_DebugOut_INIT pin_PD_Out(pin_DebugOut)
+//#define pin_DebugOut_INV pin_PD_INV(pin_DebugOut)
+//#define pin_DebugOut_HIGH pin_PD_HIGH(pin_DebugOut)
+//#define pin_DebugOut_LOW pin_PD_LOW(pin_DebugOut)
+//
+//#define pin_TestOut 3     //  Пин для отладки (D3 - PD3)
+//#define pin_TestOut_INIT pin_PD_Out(pin_TestOut)
+//#define pin_TestOut_INV pin_PD_INV(pin_TestOut)
+//#define pin_TestOut_HIGH pin_PD_HIGH(pin_TestOut)
+//#define pin_TestOut_LOW pin_PD_LOW(pin_TestOut)
+//
+//===========выводы подключения кнопок===========
+#define pin_PB_STATE(pin) (~(PINB >> (pin - 8)) & 1) // Запрос состояния вывода со сдвигом и инверсией результата
+#define pin_PB_InPullUp(pin) DDRB &=~(1 << (pin - 8)); PORTB |=(1 << (pin - 8)) // Инициализация входа с подтяжкой к VCC
+#define pin_PB_OutLOW(pin) DDRB |=(1 << (pin - 8)); PORTB &=~(1 << (pin - 8))   // Инициализация выхода и сброс его
+//
+#define pin_butt_1 3     // Пин кнопки "Р-". Уменьшение уставки мощности. (D10 - PB2)
+#define pin_butt_1_INIT pin_PB_InPullUp(pin_butt_1) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_butt_1_STATE pin_PB_STATE(pin_butt_1)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+#define pin_butt_2 2      // Пин кнопки "Р+". Увеличение уставки мощности. (D9 - PB1)
+#define pin_butt_2_INIT pin_PB_InPullUp(pin_butt_2) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_butt_2_STATE pin_PB_STATE(pin_butt_2)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+#define pin_butt_3 5     // Пин кнопки "Стоп". Экстренное отключение ТЭНа. (D12 - PB4)
+#define pin_butt_3_INIT pin_PB_InPullUp(pin_butt_3) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_butt_3_STATE pin_PB_STATE(pin_butt_3)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+#define pin_butt_4 4     // Пин кнопки "Разгон". Включение/отключение разгона. (D11 - PB3)
+#define pin_butt_4_INIT pin_PB_InPullUp(pin_butt_4) // Определяем вывод кнопки, как вход и подтягиваем его внутренним резюком к VCC
+#define pin_butt_4_STATE pin_PB_STATE(pin_butt_4)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+//
+#define pin_buttGND 8     // Пин временного общего провода для подключения кнопок. (D8 - PB0)
+#define pin_buttGND_INIT pin_PB_OutLOW(pin_buttGND) // Определяем вывод, как вЫход и устанавливаем низкий уровень
+//
+//===============бортовой светодиод==============
+#define pin_LED 13  // Бортовой светодиод подключен к выводу D13 (PB5)
+#define pin_LED_INIT pin_PB_OutLOW(pin_LED)       // Определяем вывод, как вЫход и устанавливаем низкий уровень
+#define TURN_LED_ON  PORTB |=(1 << (pin_LED - 8)) // Включаем светодиод
+#define TURN_LED_OFF PORTB &=~(1 << (pin_LED - 8))// Выключаем светодиод
+//
+//==============управление релюшками=============
+#ifdef High_level_triac // управление твердотельным реле высоким уровнем
+#define TURN_SSR_ON pin_TOut_HIGH   // Включаем ТЭН
+#define TURN_SSR_OFF pin_TOut_LOW   // Выключаем ТЭН
+#else // управление твердотельным реле низким уровнем
+#define TURN_SSR_ON pin_TOut_LOW    // Включаем ТЭН
+#define TURN_SSR_OFF pin_TOut_HIGH  // Выключаем ТЭН
+#endif
+//
+#ifdef High_level_relay // управление контактным реле высоким уровнем
+#define TURN_RELAY_ON pin_TRelay_HIGH   // Включаем ТЭН
+#define TURN_RELAY_OFF pin_TRelay_LOW   // Выключаем ТЭН
+#else // управление контактным реле низким уровнем
+#define TURN_RELAY_ON pin_TRelay_LOW    // Выключаем ТЭН
+#define TURN_RELAY_OFF pin_TRelay_HIGH  // Включаем ТЭН
+#endif
+//
+//========коэффициенты для ПИД-регулировки=======
+#define Kp 2      // Коэффициент пропорциональности для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
+#define Ki 5      // Интегральный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
+#define Kd 1      // Дифференциальный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
+#define Km 6      // Коэффициент для целочисленной математики (степень двойки для регистрового сдвига)
+#define PHASE 8   // сдвиг фаз между детекцией ноля и прерыванием таймера (в тиках таймера)
+#define T_MAX 180 // ограничение максимальной длительности полупериода в тиках таймера
+#define T_MIN 100 // ограничение минимальной длительности полупериода в тиках таймера
+//
+//================прочие константы===============
+#define ZSUM_MAX 5000 // Количество отсчетов АЦП без детекции ноля (5000 отсчетов это порядка 1 сек)
+#define U_ZERO 512    // Значение нуля АЦП для двуполярного сигнала с постоянной составляющей на выходе ОУ
+#define T_ADC 49    // Определяет интервал между запусками АЦП (200 мкс) f_OCn = f_clk / 2*N*(1 + X), где N - коэффициент деления предделителя, X- содержимое регистра OCRnA
+#define CICLE 500   // Количество полупериодов в полном цикле регулирования (200 полупериодов - 2сек, 500 полупериодов - 5сек, больше ставить не надо)
+//
+#define ASOled LD // Заюзаем уже созданный в библиотеке дисплея объект LD
+//
+#define EMPTY_CELL_VALUE 0xFFFF  // Содержимое пустой ячейки памяти EEPROM
+#define SRVDATA_ARR_SIZE 14 // Размер блока памяти для вспомогательных данных
+#define Pnom_ARR_SIZE 8   // Макс. размер массива записанных номинальных мощностей ТЭНа sizeof(Pnom_arr)/sizeof(Pnom_arr[0])
+#define PDMset_ARR_SIZE 6     // Размер массива уставок мощности ТЭНа sizeof(PDMset)/sizeof(PDMset[0]) (ставить не меньше 4)
+#if Pnom_ARR_SIZE > PDMset_ARR_SIZE
+  #define ARRAY_SIZE Pnom_ARR_SIZE  // Размер массива для работы с номиналами в начальном меню и уставками
+#else
+  #define ARRAY_SIZE PDMset_ARR_SIZE  // Размер массива для работы с номиналами в начальном меню и уставками
+#endif
+//
+#ifdef __AVR_ATmega168__  // Выключение UARTа, чтобы влезало в 168атмегу
+  #undef USE_USART
+  #undef USE_RMVK
+  #undef USE_ADprotocol
+#else
+  #ifdef USE_USART
+    static uint8_t cnt_uartWDT;     // Счетчик секунд для организации отсчета ожидания окончания посылки по USART
+  #endif
+#endif
+//
+
+#endif // __STAB_PARAM_H__

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません