kopia lustrzana https://github.com/SP8EBC/ParaTNC
reseting +12V_SW in meteo watchdog and rebooting whole controller in case of hard temperature measurement fault
rodzic
879a8950b6
commit
483ea68c21
|
@ -4,8 +4,8 @@
|
|||
#include "aprs/ax25.h"
|
||||
#include "drivers/serial.h"
|
||||
|
||||
#define SW_VER "DF15"
|
||||
#define SW_DATE "04042021"
|
||||
#define SW_VER "DF16"
|
||||
#define SW_DATE "18052021"
|
||||
|
||||
#define SYSTICK_TICKS_PER_SECONDS 100
|
||||
#define SYSTICK_TICKS_PERIOD 10
|
||||
|
@ -13,6 +13,8 @@
|
|||
#define INTERNAL_WATCHDOG
|
||||
#define EXTERNAL_WATCHDOG
|
||||
|
||||
#define PWR_SWITCH_BOTH
|
||||
|
||||
#define OWN_APRS_MSG_LN 160
|
||||
|
||||
extern uint32_t master_time;
|
||||
|
|
|
@ -0,0 +1,239 @@
|
|||
/*
|
||||
* config.h
|
||||
*
|
||||
* Created on: 03.07.2017
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef STATION_CONFIG_H_
|
||||
#define STATION_CONFIG_H_
|
||||
|
||||
/* ------------------ */
|
||||
/* MODES OF OPERATION */
|
||||
|
||||
#define _METEO // Enable meteo station
|
||||
#define _DIGI // Enable WIDE1-1 digipeater
|
||||
#define _DIGI_ONLY_789 // Limit digipeater to handle only -7, -8 and -9 SSIDs
|
||||
//#define _VICTRON // Enable support for Victron VE.Direct protocol
|
||||
|
||||
|
||||
/* MODES OF OPERATION */
|
||||
/* ------------------ */
|
||||
|
||||
//#define PARATNC_HWREV_A
|
||||
//#define PARATNC_HWREV_B
|
||||
#define PARATNC_HWREV_C
|
||||
|
||||
/* ---------------------------- */
|
||||
/* WEATHER/METEO CONFIGURATION */
|
||||
|
||||
// If none of those three sources are chosen (uncommented) the software will use internal sensors
|
||||
|
||||
//#define _UMB_MASTER
|
||||
//#define _DAVIS_SERIAL
|
||||
#define _MODBUS_RTU // use Modbus RTU slave devices as a external meteo data source. For more configuration
|
||||
// (slave ids, registers...) please look into MODBUS RTU CONFIGURATION section of this file
|
||||
|
||||
#define _INTERNAL_AS_BACKUP // if defined ParaTNC will switch to internal sensors in case of
|
||||
// the communication with UMB/Dallas Serial/Modbus external sensors will hang up
|
||||
|
||||
|
||||
//#define _DALLAS_AS_TELEM // Use Dallas one-wire thermometer as a 5th telemetry channel
|
||||
// May be used even if _METEO is not enabled
|
||||
#define _DALLAS_SPLIT_PIN // Must be enabled for all ParaTNC hardware revisions
|
||||
|
||||
|
||||
/******** INTERNAL SENSORS CONFIGURATION *****************/
|
||||
|
||||
#define _ANEMOMETER_TX20 // Use TX20 as an internal anemometer
|
||||
//#define _ANEMOMETER_ANALOGUE // Use analogue/mechanical (like Davis 6410) as an internal anemometr
|
||||
//#define _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED 10
|
||||
|
||||
//#define _SENSOR_MS5611
|
||||
#define _SENSOR_BME280
|
||||
|
||||
#define _UMB_SLAVE_ID 1
|
||||
#define _UMB_SLAVE_CLASS 8
|
||||
#define _UMB_CHANNEL_WINDSPEED 460
|
||||
#define _UMB_CHANNEL_WINDGUSTS 440
|
||||
#define _UMB_CHANNEL_WINDDIRECTION 580
|
||||
#define _UMB_CHANNEL_TEMPERATURE 100
|
||||
#define _UMB_CHANNEL_QFE 300
|
||||
|
||||
/******** INTERNAL SENSORS CONFIGURATION *****************/
|
||||
|
||||
/* WEATHER/METEO CONFIGURATION */
|
||||
/* ---------------------------- */
|
||||
|
||||
//#define _MUTE_RF // TODO: Not yet implemented - This will make station RXonly and disable all data transmission
|
||||
//#define _MUTE_OWN // TODO: Not yet implemented - This will disable all self-generated packets (wx, telemetry, beacon)
|
||||
// and switch device to "pure" kiss TNC operation. Packets from PC will be transmitted normally.
|
||||
|
||||
// Coordines should be in APRS decimal format DDDMM.SS for Longitude and DDMM.SS for latitude
|
||||
#define _CALL "SP8EBC"
|
||||
#define _SSID 0
|
||||
#define _LAT 4948.01
|
||||
#define _LATNS 'N'
|
||||
#define _LON 01903.00
|
||||
#define _LONWE 'E'
|
||||
#define _COMMENT "test"
|
||||
|
||||
// You can use only one of these below defines to choose symbol. Meteo data are are always transmitted with blue WX symbol
|
||||
//#define _SYMBOL_DIGI // uncomment if you want digi symbol(green star with D inside)
|
||||
#define _SYMBOL_WIDE1_DIGI // uncomment if you want 'little' digi symbol (green star with digit 1 overlaid)
|
||||
//#define _SYMBOL_HOUSE // uncomment if you want house symbol
|
||||
//#define _SYMBOL_RXIGATE // uncomment if you want rxigate symbol (black diamond with R)
|
||||
//#define _SYMBOL_IGATE // uncomment if you want igate symol (black diamond with I)
|
||||
|
||||
// Or you can keep commented all symbol defines and choose custom one based on data from APRS symbols table
|
||||
//#define _SYMBOL_F '/'
|
||||
//#define _SYMBOL_S '#'
|
||||
|
||||
// Uncomment one of these two defines to choose what path You want. If you uncommend both of them or
|
||||
// if you keep both commended path will be completely disabled. CALL-S>AKLPRZ:data
|
||||
//#define _WIDE1_PATH // CALL-S>AKLPRZ,WIDE1-1:data
|
||||
#define _WIDE21_PATH // CALL-S>AKLPRZ,WIDE2-1:data
|
||||
|
||||
// Comment this to disable beacon auto sending during startup (this can be risky if RF feedback occur)
|
||||
//#define _BCN_ON_STARTUP
|
||||
|
||||
#define _WX_INTERVAL 4 // WX packet interval in minutes
|
||||
#define _BCN_INTERVAL 25 // Own beacon interval in minutes
|
||||
|
||||
#define _PTT_PUSHPULL // Uncomment this if you want PTT line to work as Push-pull instead of Open Drain
|
||||
#define _SERIAL_BAUDRATE 9600
|
||||
|
||||
// Transmitting delay
|
||||
#define _DELAY_BASE 8 // * 50ms. For example setting 10 gives 500msec delay. Maximum value is 20
|
||||
//#define _RANDOM_DELAY // adds random delay TO fixed time set by _DELAY_BASE. This additional time can be
|
||||
// from 100ms up to 1 sec in 100ms steps. Values are drawn from samples going from ADC
|
||||
// so it is better to use Unsquelched output in radio to provide much more randomness
|
||||
//After waiting time declared above ParaTNC will check DCD (Data Carrier Detect) flag, which works as some
|
||||
//kind of semaphore. If radio channel is not occupied by any other transmission TX will be keyed up immediately,
|
||||
//otherwise software will wait for clear conditions.
|
||||
|
||||
// Few IMPORTANT hints about setting transmit delay properly.
|
||||
//
|
||||
// Transmit delay is key parameter to maintain RF network free from packet losses and collisions. If your station will be
|
||||
// installed on tall object, without any other digi's close to it, you can set _DELAY_BASE to very low value and disable
|
||||
// _RANDOM_DELAY. If you wanna rather auxiliary station, witch should only fill gap in RF coverage in small area, then
|
||||
// _DELAY_BASE parameter should be not less than 12 (600msec), the smallest range the higher _DELAY_BASE should be.
|
||||
// Additionally for gapfillers (auxiliary stations) _RANDOM_DELAY schould be enabled.
|
||||
//
|
||||
// This delay will ensure that while other station will be transmitting repeated packets from mobile, Yours will keep
|
||||
// always quiet and won't jam RF network. This greatly improve DCD based access to channel. Various controllers uses
|
||||
// various lenght of preamble, some of them produce signal which might be impossible to decode by ParaTNC, so DCD
|
||||
// is only one part of effective multiaccess to medium.
|
||||
|
||||
/* ---------------------------- */
|
||||
/* MODBUS RTU CONFIGURATION */
|
||||
|
||||
// scaling coefficients are used as follows
|
||||
//
|
||||
// A * x ^ 2 + B * x + C
|
||||
// real value = ---------------------------
|
||||
// D
|
||||
//
|
||||
// because of that D cannot be set to zero
|
||||
#define _RTU_SLAVE_SPEED 9600u
|
||||
#define _RTU_SLAVE_PARITY 0
|
||||
#define _RTU_SLAVE_STOP_BITS 2
|
||||
|
||||
#define _RTU_SLAVE_ID_1 0x01
|
||||
#define _RTU_SLAVE_FUNC_1 0x03
|
||||
#define _RTU_SLAVE_ADDR_1 0x00
|
||||
#define _RTU_SLAVE_LENGHT_1 0x04
|
||||
#define _RTU_SLAVE_SCALING_A_1 0
|
||||
#define _RTU_SLAVE_SCALING_B_1 1
|
||||
#define _RTU_SLAVE_SCALING_C_1 0
|
||||
#define _RTU_SLAVE_SCALING_D_1 10
|
||||
|
||||
#define _RTU_SLAVE_ID_2 0x01
|
||||
#define _RTU_SLAVE_FUNC_2 0x03
|
||||
#define _RTU_SLAVE_ADDR_2 0x01
|
||||
//#define _RTU_SLAVE_LENGHT_2 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_2 0
|
||||
#define _RTU_SLAVE_SCALING_B_2 1
|
||||
#define _RTU_SLAVE_SCALING_C_2 0
|
||||
#define _RTU_SLAVE_SCALING_D_2 1
|
||||
|
||||
#define _RTU_SLAVE_ID_3 0x01
|
||||
#define _RTU_SLAVE_FUNC_3 0x03
|
||||
#define _RTU_SLAVE_ADDR_3 0x02
|
||||
//#define _RTU_SLAVE_LENGHT_3 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_3 0
|
||||
#define _RTU_SLAVE_SCALING_B_3 1
|
||||
#define _RTU_SLAVE_SCALING_C_3 0
|
||||
#define _RTU_SLAVE_SCALING_D_3 1
|
||||
|
||||
#define _RTU_SLAVE_ID_4 0x01
|
||||
#define _RTU_SLAVE_FUNC_4 0x03
|
||||
#define _RTU_SLAVE_ADDR_4 0x03
|
||||
//#define _RTU_SLAVE_LENGHT_4 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_4 0
|
||||
#define _RTU_SLAVE_SCALING_B_4 1
|
||||
#define _RTU_SLAVE_SCALING_C_4 0
|
||||
#define _RTU_SLAVE_SCALING_D_4 1
|
||||
|
||||
//#define _RTU_SLAVE_TEMPERATURE_SOURCE 1
|
||||
#define _RTU_SLAVE_HUMIDITY_SOURCE 2
|
||||
//#define _RTU_SLAVE_PRESSURE_SOURCE 3
|
||||
//#define _RTU_SLAVE_WIND_DIRECTION_SORUCE 4
|
||||
//#define _RTU_SLAVE_WIND_SPEED_SOURCE 4
|
||||
|
||||
|
||||
/* MODBUS RTU CONFIGURATION */
|
||||
/* ---------------------------- */
|
||||
|
||||
// Do not touch this
|
||||
#if defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '/'
|
||||
#define _SYMBOL_S '#'
|
||||
#elif !defined (_SYMBOL_DIGI) && defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '1'
|
||||
#define _SYMBOL_S '#'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '/'
|
||||
#define _SYMBOL_S '-'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F 'I'
|
||||
#define _SYMBOL_S '&'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F 'R'
|
||||
#define _SYMBOL_S '&'
|
||||
#elif !defined (_SYMBOL_F) && !defined (_SYMBOL_S)
|
||||
#error "Missing symbol configuration in station_config.h"
|
||||
#elif defined (_SYMBOL_F) && defined (_SYMBOL_S)
|
||||
#else
|
||||
#error "Wrong symbol configuration in station_config.h"
|
||||
#endif
|
||||
#if defined (_METEO) && !defined (_DIGI)
|
||||
#define _DIGI
|
||||
#endif
|
||||
|
||||
#if defined(PARATNC_HWREV_A) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
||||
#define _DALLAS_SPLIT_PIN
|
||||
#endif
|
||||
|
||||
#if defined(PARATNC_HWREV_B) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
||||
#define _DALLAS_SPLIT_PIN
|
||||
#endif
|
||||
|
||||
#if defined(_ANEMOMETER_TX20) && defined(_ANEMOMETER_ANALOGUE)
|
||||
#error "You cannot use two anemometers at once!!!"
|
||||
#endif
|
||||
|
||||
#if defined(_MOBUS_RTU) && defined(_DAVIS_SERIAL)
|
||||
#error "You cannot use modbus RTU devices and Davis weather station at once!!!"
|
||||
#endif
|
||||
|
||||
#if !defined(_ANEMOMETER_TX20) && !defined(_ANEMOMETER_ANALOGUE) && !defined(_UMB_MASTER) && defined(_METEO)
|
||||
#define _ANEMOMETER_TX20
|
||||
#endif
|
||||
|
||||
#endif /* STATION_CONFIG_H_ */
|
|
@ -0,0 +1,285 @@
|
|||
/*
|
||||
* config.h
|
||||
*
|
||||
* Created on: 03.07.2017
|
||||
* Author: mateusz
|
||||
*/
|
||||
|
||||
#ifndef STATION_CONFIG_H_
|
||||
#define STATION_CONFIG_H_
|
||||
|
||||
/* ------------------ */
|
||||
/* MODES OF OPERATION */
|
||||
|
||||
#define _METEO // Enable meteo station
|
||||
#define _DIGI // Enable WIDE1-1 digipeater
|
||||
//#define _DIGI_ONLY_789 // Limit digipeater to handle only -7, -8 and -9 SSIDs
|
||||
//#define _VICTRON // Enable support for Victron VE.Direct protocol
|
||||
|
||||
|
||||
/* MODES OF OPERATION */
|
||||
/* ------------------ */
|
||||
|
||||
//#define PARATNC_HWREV_A
|
||||
#define PARATNC_HWREV_B
|
||||
//#define PARATNC_HWREV_C
|
||||
|
||||
/* ---------------------------- */
|
||||
/* WEATHER/METEO CONFIGURATION */
|
||||
|
||||
|
||||
|
||||
// If none of those three sources are chosen (uncommented) the software will use internal sensors
|
||||
|
||||
//#define _UMB_MASTER
|
||||
//#define _DAVIS_SERIAL
|
||||
#define _MODBUS_RTU // use Modbus RTU slave devices as a external meteo data source. For more configuration
|
||||
// (slave ids, registers...) please look into MODBUS RTU CONFIGURATION section of this file
|
||||
|
||||
#define _INTERNAL_AS_BACKUP // if defined ParaTNC will switch to internal sensors in case of
|
||||
// the communication with UMB/Dallas Serial/Modbus external sensors will hang up
|
||||
|
||||
|
||||
//#define _DALLAS_AS_TELEM // Use Dallas one-wire thermometer as a 5th telemetry channel
|
||||
// May be used even if _METEO is not enabled
|
||||
#define _DALLAS_SPLIT_PIN // Must be enabled for all ParaTNC hardware revisions
|
||||
|
||||
|
||||
/******** INTERNAL SENSORS CONFIGURATION *****************/
|
||||
|
||||
//#define _ANEMOMETER_TX20 // Use TX20 as an internal anemometer
|
||||
#define _ANEMOMETER_ANALOGUE // Use analogue/mechanical (like Davis 6410) as an internal anemometr
|
||||
#define _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED 10
|
||||
|
||||
#define _SENSOR_MS5611
|
||||
//#define _SENSOR_BME280
|
||||
|
||||
#define _UMB_SLAVE_ID 1
|
||||
#define _UMB_SLAVE_CLASS 8
|
||||
#define _UMB_CHANNEL_WINDSPEED 460
|
||||
#define _UMB_CHANNEL_WINDGUSTS 440
|
||||
#define _UMB_CHANNEL_WINDDIRECTION 580
|
||||
#define _UMB_CHANNEL_TEMPERATURE 100
|
||||
#define _UMB_CHANNEL_QFE 300
|
||||
|
||||
/******** INTERNAL SENSORS CONFIGURATION *****************/
|
||||
|
||||
/*************** DATA SOURCES CONFIG ***********************/
|
||||
#define _TEMPERATURE_INTERNAL
|
||||
//#define _TEMPERATURE_UMB
|
||||
//#define _TEMPERATURE_RTU
|
||||
//#define _TEMPERATURE_DAVIS
|
||||
//
|
||||
#define _PRESSURE_INTERNAL
|
||||
//#define _PRESSURE_UMB
|
||||
//#define _PRESSURE_RTU
|
||||
//#define _PRESSURE_DAVIS
|
||||
//
|
||||
//#define _HUMIDITY_INTERNAL
|
||||
//#define _HUMIDITY_UMB
|
||||
#define _HUMIDITY_RTU
|
||||
//#define _HUMIDITY_DAVIS
|
||||
//
|
||||
//
|
||||
#define _WIND_INTERNAL
|
||||
//#define _WIND_UMB
|
||||
//#define _WIND_RTU
|
||||
//#define _WIND_FULL_RTU
|
||||
//#define _WIND_DAVIS
|
||||
/*************** DATA SOURCES CONFIG ***********************/
|
||||
|
||||
|
||||
/* WEATHER/METEO CONFIGURATION */
|
||||
/* ---------------------------- */
|
||||
|
||||
//#define _MUTE_RF // TODO: Not yet implemented - This will make station RXonly and disable all data transmission
|
||||
//#define _MUTE_OWN // TODO: Not yet implemented - This will disable all self-generated packets (wx, telemetry, beacon)
|
||||
// and switch device to "pure" kiss TNC operation. Packets from PC will be transmitted normally.
|
||||
|
||||
// Coordines should be in APRS decimal format DDDMM.SS for Longitude and DDMM.SS for latitude
|
||||
#define _CALL "SP8EBC"
|
||||
#define _SSID 1
|
||||
#define _LAT 4948.82
|
||||
#define _LATNS 'N'
|
||||
#define _LON 01903.50
|
||||
#define _LONWE 'E'
|
||||
#define _COMMENT "Set Your configuration"
|
||||
|
||||
// You can use only one of these below defines to choose symbol. Meteo data are are always transmitted with blue WX symbol
|
||||
//#define _SYMBOL_DIGI // uncomment if you want digi symbol(green star with D inside)
|
||||
#define _SYMBOL_WIDE1_DIGI // uncomment if you want 'little' digi symbol (green star with digit 1 overlaid)
|
||||
//#define _SYMBOL_HOUSE // uncomment if you want house symbol
|
||||
//#define _SYMBOL_RXIGATE // uncomment if you want rxigate symbol (black diamond with R)
|
||||
//#define _SYMBOL_IGATE // uncomment if you want igate symol (black diamond with I)
|
||||
|
||||
// Or you can keep commented all symbol defines and choose custom one based on data from APRS symbols table
|
||||
//#define _SYMBOL_F '/'
|
||||
//#define _SYMBOL_S '#'
|
||||
|
||||
// Uncomment one of these two defines to choose what path You want. If you uncommend both of them or
|
||||
// if you keep both commended path will be completely disabled. CALL-S>AKLPRZ:data
|
||||
#define _WIDE1_PATH // CALL-S>AKLPRZ,WIDE1-1:data
|
||||
//#define _WIDE21_PATH // CALL-S>AKLPRZ,WIDE2-1:data
|
||||
|
||||
// Comment this to disable beacon auto sending during startup (this can be risky if RF feedback occur)
|
||||
//#define _BCN_ON_STARTUP
|
||||
|
||||
#define _WX_INTERVAL 4 // WX packet interval in minutes
|
||||
#define _BCN_INTERVAL 45 // Own beacon interval in minutes
|
||||
|
||||
#define _PTT_PUSHPULL // Uncomment this if you want PTT line to work as Push-pull instead of Open Drain
|
||||
#define _SERIAL_BAUDRATE 9600
|
||||
|
||||
// Transmitting delay
|
||||
#define _DELAY_BASE 20 // * 50ms. For example setting 10 gives 500msec delay. Maximum value is 20
|
||||
//#define _RANDOM_DELAY // adds random delay TO fixed time set by _DELAY_BASE. This additional time can be
|
||||
// from 100ms up to 1 sec in 100ms steps. Values are drawn from samples going from ADC
|
||||
// so it is better to use Unsquelched output in radio to provide much more randomness
|
||||
//After waiting time declared above ParaTNC will check DCD (Data Carrier Detect) flag, which works as some
|
||||
//kind of semaphore. If radio channel is not occupied by any other transmission TX will be keyed up immediately,
|
||||
//otherwise software will wait for clear conditions.
|
||||
|
||||
// Few IMPORTANT hints about setting transmit delay properly.
|
||||
//
|
||||
// Transmit delay is key parameter to maintain RF network free from packet losses and collisions. If your station will be
|
||||
// installed on tall object, without any other digi's close to it, you can set _DELAY_BASE to very low value and disable
|
||||
// _RANDOM_DELAY. If you wanna rather auxiliary station, witch should only fill gap in RF coverage in small area, then
|
||||
// _DELAY_BASE parameter should be not less than 12 (600msec), the smallest range the higher _DELAY_BASE should be.
|
||||
// Additionally for gapfillers (auxiliary stations) _RANDOM_DELAY schould be enabled.
|
||||
//
|
||||
// This delay will ensure that while other station will be transmitting repeated packets from mobile, Yours will keep
|
||||
// always quiet and won't jam RF network. This greatly improve DCD based access to channel. Various controllers uses
|
||||
// various lenght of preamble, some of them produce signal which might be impossible to decode by ParaTNC, so DCD
|
||||
// is only one part of effective multiaccess to medium.
|
||||
|
||||
/* ---------------------------- */
|
||||
/* MODBUS RTU CONFIGURATION */
|
||||
|
||||
// scaling coefficients are used as follows
|
||||
//
|
||||
// A * x ^ 2 + B * x + C
|
||||
// real value = ---------------------------
|
||||
// D
|
||||
//
|
||||
// because of that D cannot be set to zero
|
||||
#define _RTU_SLAVE_SPEED 9600u
|
||||
#define _RTU_SLAVE_PARITY 0
|
||||
#define _RTU_SLAVE_STOP_BITS 2
|
||||
|
||||
#define _RTU_SLAVE_ID_1 0x01
|
||||
#define _RTU_SLAVE_FUNC_1 0x03
|
||||
#define _RTU_SLAVE_ADDR_1 0x00
|
||||
#define _RTU_SLAVE_LENGHT_1 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_1 0
|
||||
#define _RTU_SLAVE_SCALING_B_1 1
|
||||
#define _RTU_SLAVE_SCALING_C_1 0
|
||||
#define _RTU_SLAVE_SCALING_D_1 10
|
||||
|
||||
#define _RTU_SLAVE_ID_2 0x01
|
||||
#define _RTU_SLAVE_FUNC_2 0x03
|
||||
#define _RTU_SLAVE_ADDR_2 0x01
|
||||
//#define _RTU_SLAVE_LENGHT_2 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_2 0
|
||||
#define _RTU_SLAVE_SCALING_B_2 1
|
||||
#define _RTU_SLAVE_SCALING_C_2 0
|
||||
#define _RTU_SLAVE_SCALING_D_2 1
|
||||
|
||||
#define _RTU_SLAVE_ID_3 0x01
|
||||
#define _RTU_SLAVE_FUNC_3 0x03
|
||||
#define _RTU_SLAVE_ADDR_3 0x02
|
||||
//#define _RTU_SLAVE_LENGHT_3 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_3 0
|
||||
#define _RTU_SLAVE_SCALING_B_3 1
|
||||
#define _RTU_SLAVE_SCALING_C_3 0
|
||||
#define _RTU_SLAVE_SCALING_D_3 1
|
||||
|
||||
#define _RTU_SLAVE_ID_4 0x01
|
||||
#define _RTU_SLAVE_FUNC_4 0x03
|
||||
#define _RTU_SLAVE_ADDR_4 0x03
|
||||
//#define _RTU_SLAVE_LENGHT_4 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_4 0
|
||||
#define _RTU_SLAVE_SCALING_B_4 1
|
||||
#define _RTU_SLAVE_SCALING_C_4 0
|
||||
#define _RTU_SLAVE_SCALING_D_4 1
|
||||
|
||||
#define _RTU_SLAVE_ID_5 0x00
|
||||
#define _RTU_SLAVE_FUNC_5 0x00
|
||||
#define _RTU_SLAVE_ADDR_5 0x03
|
||||
//#define _RTU_SLAVE_LENGHT_4 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_5 0
|
||||
#define _RTU_SLAVE_SCALING_B_5 1
|
||||
#define _RTU_SLAVE_SCALING_C_5 0
|
||||
#define _RTU_SLAVE_SCALING_D_5 1
|
||||
|
||||
|
||||
#define _RTU_SLAVE_ID_6 0x00
|
||||
#define _RTU_SLAVE_FUNC_6 0x00
|
||||
#define _RTU_SLAVE_ADDR_6 0x00
|
||||
//#define _RTU_SLAVE_LENGHT_4 0x01
|
||||
#define _RTU_SLAVE_SCALING_A_6 0
|
||||
#define _RTU_SLAVE_SCALING_B_6 1
|
||||
#define _RTU_SLAVE_SCALING_C_6 0
|
||||
#define _RTU_SLAVE_SCALING_D_6 1
|
||||
|
||||
//#define _RTU_SLAVE_TEMPERATURE_SOURCE 1
|
||||
#define _RTU_SLAVE_HUMIDITY_SOURCE 2
|
||||
//#define _RTU_SLAVE_PRESSURE_SOURCE 3
|
||||
//#define _RTU_SLAVE_WIND_DIRECTION_SORUCE 4
|
||||
//#define _RTU_SLAVE_WIND_SPEED_SOURCE 4
|
||||
|
||||
|
||||
/* MODBUS RTU CONFIGURATION */
|
||||
/* ---------------------------- */
|
||||
|
||||
// Do not touch this
|
||||
#if defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '/'
|
||||
#define _SYMBOL_S '#'
|
||||
#elif !defined (_SYMBOL_DIGI) && defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '1'
|
||||
#define _SYMBOL_S '#'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F '/'
|
||||
#define _SYMBOL_S '-'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && defined (_SYMOL_RXIGATE) &&\
|
||||
!defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F 'I'
|
||||
#define _SYMBOL_S '&'
|
||||
#elif !defined (_SYMBOL_DIGI) && !defined (_SYMBOL_WIDE1_DIGI) && !defined (_SYMBOL_HOUSE) && !defined (_SYMOL_RXIGATE) &&\
|
||||
defined (_SYMBOL_IGATE)
|
||||
#define _SYMBOL_F 'R'
|
||||
#define _SYMBOL_S '&'
|
||||
#elif !defined (_SYMBOL_F) && !defined (_SYMBOL_S)
|
||||
#error "Missing symbol configuration in station_config.h"
|
||||
#elif defined (_SYMBOL_F) && defined (_SYMBOL_S)
|
||||
#else
|
||||
#error "Wrong symbol configuration in station_config.h"
|
||||
#endif
|
||||
#if defined (_METEO) && !defined (_DIGI)
|
||||
#define _DIGI
|
||||
#endif
|
||||
|
||||
#if defined(PARATNC_HWREV_A) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
||||
#define _DALLAS_SPLIT_PIN
|
||||
#endif
|
||||
|
||||
#if defined(PARATNC_HWREV_B) && (defined (_METEO) || defined (_DALLAS_AS_TELEM)) && !defined(_DALLAS_SPLIT_PIN)
|
||||
#define _DALLAS_SPLIT_PIN
|
||||
#endif
|
||||
|
||||
#if defined(_ANEMOMETER_TX20) && defined(_ANEMOMETER_ANALOGUE)
|
||||
#error "You cannot use two anemometers at once!!!"
|
||||
#endif
|
||||
|
||||
#if defined(_MOBUS_RTU) && defined(_DAVIS_SERIAL)
|
||||
#error "You cannot use modbus RTU devices and Davis weather station at once!!!"
|
||||
#endif
|
||||
|
||||
#if !defined(_ANEMOMETER_TX20) && !defined(_ANEMOMETER_ANALOGUE) && !defined(_UMB_MASTER) && defined(_METEO)
|
||||
#define _ANEMOMETER_TX20
|
||||
#endif
|
||||
|
||||
#endif /* STATION_CONFIG_H_ */
|
|
@ -21,15 +21,16 @@ typedef enum wx_pwr_state_t {
|
|||
WX_PWR_DISABLED
|
||||
}wx_pwr_state_t;
|
||||
|
||||
void wx_check_force_i2c_reset(void);
|
||||
void wx_get_all_measurements(void);
|
||||
void wx_pool_dht22(void);
|
||||
void wx_pool_anemometer(void);
|
||||
void wx_pwr_init(void);
|
||||
void wx_pwr_periodic_handle(void);
|
||||
void wx_pwr_disable_12v_sw(void);
|
||||
void wx_pwr_disable_5v_isol(void);
|
||||
void wx_pwr_enable_12v_sw(void);
|
||||
void wx_pwr_enable_5v_isol(void);
|
||||
//void wx_pwr_disable_12v_sw(void);
|
||||
//void wx_pwr_disable_5v_isol(void);
|
||||
//void wx_pwr_enable_12v_sw(void);
|
||||
//void wx_pwr_enable_5v_isol(void);
|
||||
|
||||
|
||||
#endif /* WX_HANDLER_H_ */
|
||||
|
|
|
@ -415,7 +415,7 @@ int main(int argc, char* argv[]){
|
|||
IWDG_Enable();
|
||||
|
||||
// do not disable the watchdog when the core is halted on a breakpoint
|
||||
DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE); // TODO
|
||||
DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE);
|
||||
|
||||
// reload watchdog counter
|
||||
IWDG_ReloadCounter();
|
||||
|
@ -811,6 +811,8 @@ int main(int argc, char* argv[]){
|
|||
|
||||
if (main_two_second_pool_timer < 10) {
|
||||
|
||||
wx_check_force_i2c_reset();
|
||||
|
||||
wx_pwr_periodic_handle();
|
||||
|
||||
#ifdef INTERNAL_WATCHDOG
|
||||
|
|
121
src/wx_handler.c
121
src/wx_handler.c
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <rte_wx.h>
|
||||
#include <rte_rtu.h>
|
||||
#include <rte_main.h>
|
||||
#include <math.h>
|
||||
#include <stm32f10x.h>
|
||||
#include "drivers/_dht22.h"
|
||||
|
@ -40,6 +41,7 @@ uint32_t wx_last_good_wind_time = 0;
|
|||
wx_pwr_state_t wx_pwr_state;
|
||||
uint8_t wx_inhibit_slew_rate_check = 1;
|
||||
uint32_t wx_wind_pool_call_counter = 0;
|
||||
uint8_t wx_force_i2c_sensor_reset = 0;
|
||||
|
||||
static const float direction_constant = M_PI/180.0f;
|
||||
|
||||
|
@ -51,6 +53,24 @@ static const float direction_constant = M_PI/180.0f;
|
|||
#define MODBUS_QF_PRESSURE_FULL (1 << 5)
|
||||
#define MODBUS_QF_PRESSURE_DEGR (1 << 6)
|
||||
|
||||
void wx_check_force_i2c_reset(void) {
|
||||
|
||||
if (wx_force_i2c_sensor_reset == 1) {
|
||||
wx_force_i2c_sensor_reset = 0;
|
||||
|
||||
#if defined (_SENSOR_BME280)
|
||||
bme280_reset(&rte_wx_bme280_qf);
|
||||
bme280_setup();
|
||||
#endif
|
||||
|
||||
#if defined (_SENSOR_MS5611)
|
||||
ms5611_reset(&rte_wx_ms5611_qf);
|
||||
ms5611_trigger_measure(0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void wx_get_all_measurements(void) {
|
||||
|
||||
int8_t j = 0;
|
||||
|
@ -232,6 +252,17 @@ void wx_get_all_measurements(void) {
|
|||
// calculate the slew rate
|
||||
rte_wx_temperature_dalls_slew_rate = rte_wx_temperature_dallas - rte_wx_temperature_dallas_valid;
|
||||
|
||||
// check the positive slew rate for a hard sensor error
|
||||
if (rte_wx_temperature_dalls_slew_rate > (3 * WX_MAX_TEMPERATURE_SLEW_RATE) && wx_inhibit_slew_rate_check == 0) {
|
||||
rte_main_reboot_req = 1;
|
||||
}
|
||||
|
||||
// the same but for negative slew
|
||||
if (rte_wx_temperature_dalls_slew_rate < (-WX_MAX_TEMPERATURE_SLEW_RATE * 3) && wx_inhibit_slew_rate_check == 0) {
|
||||
rte_main_reboot_req = 1;
|
||||
|
||||
}
|
||||
|
||||
// chcecking the positive (ascending) slew rate of the temperature measuremenets
|
||||
if (rte_wx_temperature_dalls_slew_rate > WX_MAX_TEMPERATURE_SLEW_RATE && wx_inhibit_slew_rate_check == 0) {
|
||||
|
||||
|
@ -636,6 +667,10 @@ void wx_pwr_periodic_handle(void) {
|
|||
// pull the output down to switch the relay and disable +5V_ISOL (VDD_SW)
|
||||
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
|
||||
|
||||
#ifdef PWR_SWITCH_BOTH
|
||||
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
|
||||
#endif
|
||||
|
||||
// setting the last_good timers to current value to prevent reset loop
|
||||
wx_last_good_temperature_time = master_time;
|
||||
wx_last_good_wind_time = master_time;
|
||||
|
@ -672,6 +707,12 @@ void wx_pwr_periodic_handle(void) {
|
|||
// Turn on the +5V_ISOL (VDD_SW) voltage
|
||||
GPIO_SetBits(GPIOB, GPIO_Pin_8);
|
||||
|
||||
#ifdef PWR_SWITCH_BOTH
|
||||
GPIO_SetBits(GPIOA, GPIO_Pin_6);
|
||||
|
||||
wx_force_i2c_sensor_reset = 1;
|
||||
#endif
|
||||
|
||||
wx_pwr_state = WX_PWR_ON;
|
||||
|
||||
break;
|
||||
|
@ -680,43 +721,43 @@ void wx_pwr_periodic_handle(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void wx_pwr_disable_12v_sw(void) {
|
||||
#if (defined PARATNC_HWREV_C)
|
||||
wx_pwr_state = WX_PWR_DISABLED;
|
||||
|
||||
GPIO_ResetBits(GPIOA, GPIO_Pin_6);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void wx_pwr_disable_5v_isol(void) {
|
||||
wx_pwr_state = WX_PWR_DISABLED;
|
||||
|
||||
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void wx_pwr_enable_12v_sw(void) {
|
||||
#if (defined PARATNC_HWREV_C)
|
||||
wx_pwr_state = WX_PWR_OFF;
|
||||
|
||||
// setting last good measurements timers to inhibit relay clicking
|
||||
// just after the power is applied
|
||||
wx_last_good_temperature_time = master_time;
|
||||
wx_last_good_wind_time = master_time;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void wx_pwr_enable_5v_isol(void) {
|
||||
#if (defined PARATNC_HWREV_C)
|
||||
wx_pwr_state = WX_PWR_OFF;
|
||||
|
||||
// setting last good measurements timers to inhibit relay clicking
|
||||
// just after the power is applied
|
||||
wx_last_good_temperature_time = master_time;
|
||||
wx_last_good_wind_time = master_time;
|
||||
|
||||
#endif
|
||||
}
|
||||
//void wx_pwr_disable_12v_sw(void) {
|
||||
//#if (defined PARATNC_HWREV_C)
|
||||
// wx_pwr_state = WX_PWR_DISABLED;
|
||||
//
|
||||
// GPIO_ResetBits(GPIOA, GPIO_Pin_6);
|
||||
//
|
||||
//#endif
|
||||
//}
|
||||
//
|
||||
//void wx_pwr_disable_5v_isol(void) {
|
||||
// wx_pwr_state = WX_PWR_DISABLED;
|
||||
//
|
||||
// GPIO_ResetBits(GPIOB, GPIO_Pin_8);
|
||||
//
|
||||
//
|
||||
//}
|
||||
//
|
||||
//void wx_pwr_enable_12v_sw(void) {
|
||||
//#if (defined PARATNC_HWREV_C)
|
||||
// wx_pwr_state = WX_PWR_OFF;
|
||||
//
|
||||
// // setting last good measurements timers to inhibit relay clicking
|
||||
// // just after the power is applied
|
||||
// wx_last_good_temperature_time = master_time;
|
||||
// wx_last_good_wind_time = master_time;
|
||||
//
|
||||
//#endif
|
||||
//}
|
||||
//
|
||||
//void wx_pwr_enable_5v_isol(void) {
|
||||
//#if (defined PARATNC_HWREV_C)
|
||||
// wx_pwr_state = WX_PWR_OFF;
|
||||
//
|
||||
// // setting last good measurements timers to inhibit relay clicking
|
||||
// // just after the power is applied
|
||||
// wx_last_good_temperature_time = master_time;
|
||||
// wx_last_good_wind_time = master_time;
|
||||
//
|
||||
//#endif
|
||||
//}
|
||||
|
|
Ładowanie…
Reference in New Issue