LevelMeter-Display  2.0
An ultrasonic Level Meter for Stormwater Cisterns
display.h
Go to the documentation of this file.
1 // Display.h
2 
3 #ifndef DISPLAY_H_
4 #define DISPLAY_H_
5 
6 #include <stdbool.h>
7 #include <avr/io.h>
8 #include "lcd.h"
9 
10 #define WITH_UPDATE
11 
12 #define SIGNAL_PORT PORTA
13 #define SIGNAL_1_MASK 0b00000100
14 #define SIGNAL_2_MASK 0b00001000
15 
16 typedef double LITERS_T;
17 
18 LITERS_T LitersFromDist(double dist);
19 void ResetDisplayFlags(void);
20 
33 typedef struct
34 {
36  uint8_t literUnitChar;
41  double litersPerCent;
42  int8_t tempSemi;
44  uint8_t nlitersTemp;
49  char *error;
51 
53 extern uint16_t pulseTimeInt;
54 extern uint8_t pulseTimeMult;
55 extern uint8_t deadTime;
56 extern signed char tempSemi;
57 extern uint8_t tempRaw;
58 extern volatile char cmdline[81];
59 extern double lastReportedVolume;
60 
61 extern volatile uint8_t tickCnt,secCnt,minCnt,hrCnt;
62 
63 extern uint8_t wdrCnt;
64 extern uint8_t boCnt;
65 
67 typedef enum
68 {
72 } RTCAdj_t;
73 extern const char *RTCAdjTxt[];
74 extern volatile RTCAdj_t RTCAdj;
75 
77 typedef enum
78 {
83 } showScreen_t;
84 
85 #define SCREENABSPAGE_VERSION 128
86 
87 #define ADCVoltsPerLSB (2.56/1024)
88 #define dividerP3 (4.7/(4.7+8.2))
89 #define dividerP5 (4.7/(4.7+8.2))
90 #define dividerUnreg (4.7/(4.7+68))
91 #define dividerSWUnreg (4.7/(4.7+68))
92 
93 extern uint8_t bootLdPage[];
94 extern uint16_t bootLdAdr;
95 extern volatile uint8_t tFlags;
96 static const uint8_t TFLAG_SEC=1;
97 static const uint8_t TFLAG_MIN=2;
98 static const uint8_t TFLAG_HOUR=4;
99 static const uint8_t TFLAG_DAY=8;
100 
101 
102 extern volatile uint8_t cFlags;
103 static const uint8_t CFLAG_TIMERECEIVED=1;
104 static const uint8_t CFLAG_TEMPRECEIVED=2;
105 static const uint8_t CFLAG_PARITYERROR=4;
106 static const uint8_t CFLAG_CHECKSUMERROR=8;
107 static const uint8_t CFLAG_CMDRECEIVED=16;
108 static const uint8_t CFLAG_BYTERECEIVED=32;
109 static const uint8_t CFLAG_BTRECEIVED=64;
110 
111 extern volatile uint8_t blFlags;
112 static const uint8_t BOOTLDHELLO=1;
113 static const uint8_t BOOTLDDATA=2;
114 static const uint8_t BOOTLDOK=4;
115 static const uint8_t BOOTLDERROR=8;
116 static const uint8_t BOOTLDPROTECTED=16;
117 
118 extern volatile uint8_t dFlags;
119 static const uint8_t DFLAG_DCF77=1;
120 static const uint8_t DFLAG_SENSOR=2;
121 static const uint8_t DFLAG_ADC=4;
122 
123 extern double pulseTime;
124 extern double distance;
125 extern double speedOfSound;
126 
128 typedef enum
129 {
133 } displayType_t;
137 typedef struct {
138  uint8_t width;
139  uint8_t nLines;
140  uint8_t startLine[LCD_MAX_LINES];
142 extern const displayMetrics_T displayMetrics[];
143 
146 inline static void SensorPowerOn(void)
147 {
148  PORTA |= 0x01;
149 }
150 
153 inline static void SensorPowerOff(void)
154 {
155  PORTA &= ~0x01;
156 }
157 
160 inline static void BluetoothPowerOn(void)
161 {
162  PORTD |= 0xC0;
163 }
164 
167 inline static void BluetoothPowerOff(void)
168 {
169  PORTD &= ~0x80;
170 }
171 
174 inline static void Sig1ON (void)
175 {
177 }
178 
181 inline static void Sig1OFF (void)
182 {
184 }
185 
188 inline static void Sig2ON (void)
189 {
191 }
192 
195 inline static void Sig2OFF (void)
196 {
198 }
199 
203 inline static bool GetSig1(void)
204 {
205  return !(SIGNAL_PORT&SIGNAL_1_MASK);
206 }
207 
211 inline static bool GetSig2(void)
212 {
213  return !(SIGNAL_PORT&SIGNAL_2_MASK);
214 }
215 
216 typedef uint8_t delay_t;
217 
218 extern void delay10ms(delay_t delay10ms);
219 
220 extern void SetAnalogPerCent(double perCent);
221 
222 #endif
displayValues_t displayValues
Holds all values that are used for display.
Definition: display.c:99
static const uint8_t TFLAG_HOUR
Is set once per Hour at Minute 0.
Definition: display.h:98
#define SIGNAL_PORT
Definition: display.h:12
Display is a Winstar WH1602B3 or equivalent.
Definition: display.h:130
static const uint8_t CFLAG_TIMERECEIVED
Received a Travel Time from the Sensor.
Definition: display.h:103
We have no LCD at all, only analog output.
Definition: display.h:132
static const uint8_t CFLAG_CMDRECEIVED
Received the terminating CR of a Command.
Definition: display.h:107
void SetAnalogPerCent(double perCent)
Sets the analog Instrument display.
Definition: display.c:844
void delay10ms(delay_t delay10ms)
Delay for a multiple of 10ms.
Definition: display.c:827
char not10ErrorChar
Character to appear on Position "More or less than 10 Values received".
Definition: display.h:48
uint8_t boCnt
Counts the number of Brown Out Resets.
Definition: display.c:97
RTC is running faster by 1%.
Definition: display.h:70
uint8_t bootLdPage[]
Holds the data for boot loader write/read.
Definition: display.c:116
static void Sig1OFF(void)
Switches Signal Output Optocoupler 1 to OFF.
Definition: display.h:181
uint8_t literUnitChar
Holds a small or capital letter 'L'.
Definition: display.h:36
signed char tempSemi
static void SensorPowerOn(void)
Switches the Sensor Power on.
Definition: display.h:146
void ResetDisplayFlags(void)
Resets the Error Flags in the Display.
Definition: display.c:131
Display is a Winstar WH2004A or equivalent.
Definition: display.h:131
Advance to the next of all available pages.
Definition: display.h:80
LITERS_T liters
The current volume in liters.
Definition: display.h:35
static void SensorPowerOff(void)
Switches the Sensor Power off.
Definition: display.h:153
#define SIGNAL_1_MASK
Definition: display.h:13
uint8_t wdrCnt
Counts the number of Watchdog Resets.
Definition: display.c:96
uint8_t delay_t
Definition: display.h:216
static const uint8_t BOOTLDOK
Boot Loader Data received ("+")
Definition: display.h:114
char parityErrorChar
Character to appear on Position "Parity Error".
Definition: display.h:45
static void Sig1ON(void)
Switches Signal Output Optocoupler 1 to ON.
Definition: display.h:174
char sensorDeadChar
Character to appear on Position "SensorDead".
Definition: display.h:47
RTCAdj_t
Current speed of the RTC (Real Time Clock)
Definition: display.h:67
Do not change the page, just refresh the current one.
Definition: display.h:81
double lastReportedVolume
Last Volume spontaneously reported.
Definition: display.c:108
static const uint8_t TFLAG_DAY
Is set every Day at Midnight.
Definition: display.h:99
displayType_t
Constants for Display Type.
Definition: display.h:128
static bool GetSig1(void)
Gets State of Optocoupler 1 True means Optocoupler is ON.
Definition: display.h:203
displayType_t displayType
static void BluetoothPowerOff(void)
Switches the Bluetooth Power off.
Definition: display.h:167
RTC is running at normal speed (realtime)
Definition: display.h:69
static const uint8_t CFLAG_PARITYERROR
Parity Error in received Byte.
Definition: display.h:105
static const uint8_t CFLAG_TEMPRECEIVED
Received the current Sensor Temperature.
Definition: display.h:104
static const uint8_t CFLAG_CHECKSUMERROR
Checksum Error in received Telegram.
Definition: display.h:106
volatile uint8_t blFlags
Boot Loader Communication Flags.
Definition: display.c:82
#define LCD_MAX_LINES
Maximum allowable numbers of lines for all possible displays.
Definition: lcd.h:16
uint8_t nlitersTemp
Number of values added to liters_temp.
Definition: display.h:44
LITERS_T litersPerHour
The volume change for the running hour.
Definition: display.h:37
LITERS_T litersLastHour
The volume for the last hour.
Definition: display.h:38
int8_t tempSemi
The temperature in 0.5°C-units.
Definition: display.h:42
uint8_t pulseTimeMult
1 or 8 clocks from sensor timer1 prescaler
Definition: display.c:104
#define SIGNAL_2_MASK
Definition: display.h:14
double litersPerCent
Filling of the cistern in percent.
Definition: display.h:41
static bool GetSig2(void)
Gets State of Optocoupler 2 True means Optocoupler is ON.
Definition: display.h:211
double LITERS_T
Remember that liters may go negative.
Definition: display.h:16
static const uint8_t BOOTLDDATA
Boot Loader Data received ("=")
Definition: display.h:113
volatile uint8_t tFlags
Flags set by Timer Interrupt to signal Main Loop.
Definition: display.c:73
volatile uint8_t dFlags
Flags Controlling Debug Output.
Definition: display.c:83
static void BluetoothPowerOn(void)
Switches the Bluetooth Power on.
Definition: display.h:160
LITERS_T litersToday
The volume change for today.
Definition: display.h:39
double speedOfSound
In m/s, temperature calibrated.
Definition: display.c:102
uint8_t width
The width of the display in characters.
Definition: display.h:138
static const uint8_t DFLAG_SENSOR
Gives information about Sensor Communication.
Definition: display.h:120
uint8_t tempRaw
Raw value from the ADC.
Definition: display.c:106
uint16_t bootLdAdr
The address of the page.
Definition: display.c:117
volatile uint8_t hrCnt
Hours of the RTC.
Definition: display.c:64
static const uint8_t DFLAG_ADC
Gives information about ADC MIN/MAX Values.
Definition: display.h:121
LITERS_T litersTemp
For averaging.
Definition: display.h:43
Show a special page. Currently only used for the init-screen.
Definition: display.h:82
Parameters for each of the possible Displays.
Definition: display.h:137
volatile uint8_t secCnt
Seconds of the RTC.
Definition: display.c:62
uint16_t pulseTimeInt
Traveling time of the last pulse in timer1-clocks of the sensor CPU.
Definition: display.c:100
static const uint8_t CFLAG_BYTERECEIVED
Received a Byte from the host.
Definition: display.h:108
static const uint8_t BOOTLDPROTECTED
Boot Loader Protected Area received ("P")
Definition: display.h:116
LITERS_T LitersFromDist(double dist)
Computes the Volume in Liters from the Distance in Meters.
Definition: display.c:458
showScreen_t
Command for ShowScreen()
Definition: display.h:77
Advance to the next page of the frequently used.
Definition: display.h:79
static const uint8_t TFLAG_MIN
Is set once per Minute at Second 0.
Definition: display.h:97
static const uint8_t BOOTLDERROR
Boot Loader Error received ("-")
Definition: display.h:115
volatile uint8_t tickCnt
counter for timer0 interrupts
Definition: display.c:61
const displayMetrics_T displayMetrics[]
Metrics for each of the possible displays.
Definition: display.c:90
volatile uint8_t cFlags
Flags set by Serial Communication with the Sensor.
Definition: display.c:80
static void Sig2ON(void)
Switches Signal Output Optocoupler 2 to ON.
Definition: display.h:188
volatile RTCAdj_t RTCAdj
Soft Adjustment of the RTC (+-1%)
Definition: display.c:65
volatile uint8_t minCnt
Minutes of the RTC.
Definition: display.c:63
static const uint8_t TFLAG_SEC
Is set once per Second.
Definition: display.h:96
static const uint8_t DFLAG_DCF77
Gives information about DCF77 and RTC.
Definition: display.h:119
const char * RTCAdjTxt[]
Human readable interpretation of RTCAdj.
Definition: display.c:66
double pulseTime
In seconds.
Definition: display.c:103
uint8_t deadTime
Received dead time value from the sensor.
Definition: display.c:101
char * error
Pointer to a string describing the most urgent error.
Definition: display.h:49
Holds all values used for Display Purposes.
Definition: display.h:33
static const uint8_t BOOTLDHELLO
Boot Loader Hello received ("*")
Definition: display.h:112
uint8_t nLines
The number of lines.
Definition: display.h:139
char checksumErrorChar
Character to appear on Position "Checksum Error".
Definition: display.h:46
RTC is running slower by 1%.
Definition: display.h:71
volatile char cmdline[81]
Ready to hold 80 chars plus terminating 0.
Definition: display.c:110
static const uint8_t CFLAG_BTRECEIVED
Received a telegram from the Bluetooth-Module.
Definition: display.h:109
LITERS_T litersYesterday
The volume at last midnight.
Definition: display.h:40
static void Sig2OFF(void)
Switches Signal Output Optocoupler 2 to OFF.
Definition: display.h:195
double distance
To the reflecting surface in meters.
Definition: display.c:105