Browse Source

Setup input/output pins for Stab.

Vladimir N. Shilov 1 year ago
parent
commit
a974a08241
3 changed files with 88 additions and 127 deletions
  1. 52 21
      board/board.h
  2. 6 25
      lib/stab/stab.c
  3. 30 81
      lib/stab/stab_param.h

+ 52 - 21
board/board.h

@@ -45,6 +45,28 @@
 /* on-board */
 
 #define GPIOC_LED               13
+#define GPIOA_RELAY		0
+#define GPIOA_SSR		1
+
+#define LCD_LED_ON		palClearLine(LINE_LCD_DC)
+#define LCD_LED_OFF		palSetLine(LINE_LCD_DC)
+
+#define LINE_LED		PAL_LINE(GPIOC, 13U)
+#define LINE_RELAY		PAL_LINE(GPIOA, 0U)
+#define LINE_SSR		PAL_LINE(GPIOA, 1U)
+
+#define LINE_STAB_OFF	        PAL_LINE(GPIOA, 2U)
+#define LINE_RAZGON_OFF	        PAL_LINE(GPIOA, 3U)
+
+/* Buttons */
+#define LINE_BTN_4	        PAL_LINE(GPIOA, 8U)
+#define LINE_BTN_3      	PAL_LINE(GPIOB, 15U)
+#define LINE_BTN_2      	PAL_LINE(GPIOB, 14U)
+#define LINE_BTN_1      	PAL_LINE(GPIOB, 13U)
+#define LINE_BTN_G      	PAL_LINE(GPIOB, 12U)
+
+#define BTNS_ON			palClearLine(LINE_BTN_G)
+#define BTNS_OFF		palSetLine(LINE_BTN_G)
 
 /* LCD */
 #define LINE_LED		PAL_LINE(GPIOC, 13U)
@@ -62,10 +84,10 @@
 #define GPIOC_TAMPER_RTC        13      // pin 2
 #define GPIOC_OSC32_IN          14      // pin 3
 #define GPIOC_OSD32_OUT         15      // pin 4
-#define GPIOA_USART2_CTS        0       // pin 5
-#define GPIOA_USART2_RTS        1       // pin 6
-#define GPIOA_USART2_TX         2       // pin 7
-#define GPIOA_USART2_RX         3       // pin 8  
+#define GPIOA_USART2_CTS        0       // pin 5  RELAY
+#define GPIOA_USART2_RTS        1       // pin 6  SSR
+#define GPIOA_USART2_TX         2       // pin 7  STAB_OFF
+#define GPIOA_USART2_RX         3       // pin 8  RAZGON_OFF
 #define GPIOA_SPI1_NSS          4       // pin 9  LCD_CS
 #define GPIOA_SPI1_SCK          5       // pin 10 LCD_SCL
 #define GPIOA_SPI1_MISO         6       // pin 11 LCD_DC
@@ -84,23 +106,23 @@
 // pin 1:        3V3
 // pin 2:        GND
 // pin 3:        5V
-#define GPIOB_TIM4_CH4          9       // pin 4
-#define GPIOB_TIM4_CH3          8       // pin 5
-#define GPIOB_I2C1_SDA          7       // pin 6
-#define GPIOB_I2C1_SCL          6       // pin 7
-#define GPIOB_I2C1_SMBA         5       // pin 8
-#define GPIOB_JTRST             4       // pin 9
-#define GPIOB_JTDO              3       // pin 10
+#define GPIOB_PIN9              9       // pin 4  TIM4_CH4/I2C1_SDA/CANTX
+#define GPIOB_PIN8              8       // pin 5  TIM4_CH3/I2C1_SCL/CANRX
+#define GPIOB_PIN7              7       // pin 6  I2C1_SDA/TIM4_CH2/USART1_RX
+#define GPIOB_PIN6              6       // pin 7  I2C1_SCL/TIM4_CH1/USART1_TX
+#define GPIOB_PIN5              5       // pin 8  I2C1_SMBA/TIM3_CH2/SPI1_MOSI
+#define GPIOB_JTRST             4       // pin 9  TIM3_CH1/PB4/SPI1_MISO
+#define GPIOB_JTDO              3       // pin 10 TIM2_CH2/PB3/TRACESWO/SPI1_SCK
 #define GPIOA_JTDI              15      // pin 11
 #define GPIOA_USBDP             12      // pin 12
 #define GPIOA_USBDM             11      // pin 13
 #define GPIOA_USART1_RX         10      // pin 14
 #define GPIOA_USART1_TX         9       // pin 15
-#define GPIOA_USART1_CK         8       // pin 16
-#define GPIOB_SPI2_MOSI         15      // pin 17
-#define GPIOB_SPI2_MISO         14      // pin 18
-#define GPIOB_SPI2_SCK          13      // pin 19
-#define GPIOB_SPI2_NSS          12      // pin 20
+#define GPIOA_USART1_CK         8       // pin 16 BTN_4
+#define GPIOB_SPI2_MOSI         15      // pin 17 BTN_3
+#define GPIOB_SPI2_MISO         14      // pin 18 BTN_2
+#define GPIOB_SPI2_SCK          13      // pin 19 BTN_1
+#define GPIOB_SPI2_NSS          12      // pin 20 BTN_GND
 
 /*
  * I/O ports initial setup, this configuration is established soon after reset
@@ -129,18 +151,27 @@
 /*
  * Port A setup.
  * Everything input with pull-up except:
- * PA4  - Push Pull output  (LCD_CS).
- * PA5  - Alternate output  (LCD_SCL - SPI1 SCK).
- * PA6  - Push Pull output  (LCD_DC).
- * PA7  - Alternate output  (LCD_DSA - SPI1 MOSI).
+ * PA0  - Push Pull output   (LCD_RELAY).
+ * PA1  - Push Pull output   (LCD_SSR).
+ * PA2  - Input with Pull-Up (STAB_OFF)
+ * PA3  - Input with Pull-Up (RAZGON_OFF)
+ * PA4  - Push Pull output   (LCD_CS).
+ * PA5  - Alternate output   (LCD_SCL - SPI1 SCK).
+ * PA6  - Push Pull output   (LCD_DC).
+ * PA7  - Alternate output   (LCD_DSA - SPI1 MOSI).
+ * PA8  - Input with Pull-Up (BTN_1)
  */
-#define VAL_GPIOACRL            0xB3B38888      /*  PA7...PA0 */
+#define VAL_GPIOACRL            0xB3B38833      /*  PA7...PA0 */
 #define VAL_GPIOACRH            0x88888888      /* PA15...PA8 */
 #define VAL_GPIOAODR            0xFFFFFFFF
 
 /*
  * Port B setup.
  * Everything input with pull-up except:
+ * PB15 - Input with Pull-Up (BTN_2)
+ * PB14 - Input with Pull-Up (BTN_3)
+ * PB13 - Input with Pull-Up (BTN_4)
+ * PB12 - Push Pull output   (BTN_G)
  */
 #define VAL_GPIOBCRL            0x88888888      /*  PB7...PB0 */
 #define VAL_GPIOBCRH            0x88888888      /* PB15...PB8 */

+ 6 - 25
lib/stab/stab.c

@@ -275,29 +275,6 @@ static void Timers_init(void) {
   TIMSK2 |= (1 << OCIE2A); // Разрешаем прерывания по совпадению с OCR2A
 }
 
-/**
- * @brief Инициализация входов/выходов контроллера
- */
-static void Pins_init(void) {
-#ifdef DisplayReset
-  pin_OLEDres_INIT;
-  pin_OLEDres_LOW;  // Сбрасываем дисплей (!!! НЕ ЗАБЫТЬ ПЕРЕКЛЮЧИТЬ НА ВЫСОКИЙ !!!) TODO!
-#endif
-  pin_RAZGON_OFF_INIT;
-  pin_STAB_OFF_INIT;
-
-  pin_TOut_INIT;
-  pin_TRelay_INIT;
-  TURN_RELAY_OFF; // Выключаем ТЭН (контактное реле)
-  TURN_SSR_OFF;   // Выключаем ТЭН (твердотельное реле)
-
-  pin_buttGND_INIT;
-  pin_butt_1_INIT;
-  pin_butt_2_INIT;
-  pin_butt_3_INIT;
-  pin_butt_4_INIT;
-}
-
 /**
  * @brief Подпрограмма обработки режима разгона
  * Обеспечивает шунтирование контактов контактного реле
@@ -878,10 +855,14 @@ static void menu_print_minus(const uint8_t str) {
  */
 void Stab_Init(void) {
   cnt_dspMenu = 2; // Сначала - начальное меню
-  Pins_init();    // Инициализируем входы/выходы
+
+  /* Инициализируем входы/выходы - was done in board.h */
+  TURN_RELAY_OFF; // Выключаем ТЭН (контактное реле)
+  TURN_SSR_OFF;   // Выключаем ТЭН (твердотельное реле)
+  BTNS_ON;  // Activate buttons
+
   ADC_init();     // Инициализируем АЦП
   Timers_init();  // Инициализируем таймеры
-  sei();          // Разрешаем глобальные прерывания
 
   pp_Delay(20);   // Подождем 20 полупериодов
 

+ 30 - 81
lib/stab/stab_param.h

@@ -40,103 +40,52 @@
 //
 //===========входные выводы============
 #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)   // Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
-//
+
+// Пин входа отключения разгона (A3)
+// Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+#define pin_RAZGON_OFF_STATE palReadLine(LINE_RAZGON_OFF)
+
+//  Пин входа отключения стабилизатора (A2)
+#define pin_STAB_OFF_STATE palReadLine(LINE_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))// Выключаем светодиод
 
+// Пин кнопки "Р-". Уменьшение уставки мощности.
+// Читаем состояние пина и переводим в булев формат с учетом инверсии (активный - низкий)
+#define pin_butt_1_STATE palReadLine(LINE_BTN_1)
+
+// Пин кнопки "Р+". Увеличение уставки мощности.
+#define pin_butt_2_STATE palReadLine(LINE_BTN_2)
+
+// Пин кнопки "Стоп". Экстренное отключение ТЭНа.
+#define pin_butt_3_STATE palReadLine(LINE_BTN_3)
+
+// Пин кнопки "Разгон". Включение/отключение разгона.
+#define pin_butt_4_STATE palReadLine(LINE_BTN_4)
+//===============бортовой светодиод==============
+#define TURN_LED_ON  LCD_LED_ON // Включаем светодиод
+#define TURN_LED_OFF LCD_LED_OFF // Выключаем светодиод
 //==============управление релюшками=============
 #ifdef High_level_triac // управление твердотельным реле высоким уровнем
-#define TURN_SSR_ON pin_TOut_HIGH   // Включаем ТЭН
-#define TURN_SSR_OFF pin_TOut_LOW   // Выключаем ТЭН
+#define TURN_SSR_ON palSetLine(LINE_SSR)   // Включаем ТЭН
+#define TURN_SSR_OFF palClearLine(LINE_SSR)   // Выключаем ТЭН
 #else // управление твердотельным реле низким уровнем
-#define TURN_SSR_ON pin_TOut_LOW    // Включаем ТЭН
-#define TURN_SSR_OFF pin_TOut_HIGH  // Выключаем ТЭН
+#define TURN_SSR_ON palClearLine(LINE_SSR)    // Включаем ТЭН
+#define TURN_SSR_OFF palSetLine(LINE_SSR)  // Выключаем ТЭН
 #endif
 
 #ifdef High_level_relay // управление контактным реле высоким уровнем
-#define TURN_RELAY_ON pin_TRelay_HIGH   // Включаем ТЭН
-#define TURN_RELAY_OFF pin_TRelay_LOW   // Выключаем ТЭН
+#define TURN_RELAY_ON palSetLine(LINE_RELAY)   // Включаем ТЭН
+#define TURN_RELAY_OFF palClearLine(LINE_RELAY)   // Выключаем ТЭН
 #else // управление контактным реле низким уровнем
-#define TURN_RELAY_ON pin_TRelay_LOW    // Выключаем ТЭН
-#define TURN_RELAY_OFF pin_TRelay_HIGH  // Включаем ТЭН
+#define TURN_RELAY_ON palClearLine(LINE_RELAY)    // Выключаем ТЭН
+#define TURN_RELAY_OFF palSetLine(LINE_RELAY)  // Включаем ТЭН
 #endif
-
 //========коэффициенты для ПИД-регулировки=======
 #define Kp 2      // Коэффициент пропорциональности для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)
 #define Ki 5      // Интегральный коэффициент для ПИД-подстройки ФЧ сети (степень двойки для регистрового сдвига)