added macro _DEBUG_DISPLAY
This commit is contained in:
parent
efa9fd8ea0
commit
54b3399aca
|
@ -369,7 +369,7 @@ void setPSensor(const PSensor &sensor) {
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
#if _DEBUG == 1
|
#if _DEBUG == 1
|
||||||
Serial.begin(19200);
|
Serial.begin(115200);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pinMode(53, OUTPUT); // Mega CS-Pin (um Slave-Betrieb zu vermeiden)
|
pinMode(53, OUTPUT); // Mega CS-Pin (um Slave-Betrieb zu vermeiden)
|
||||||
|
|
14
README.md
14
README.md
|
@ -4,10 +4,18 @@ Experimentelle Firmware für einen Tankregler, der die Temperatur und den Druck
|
||||||
|
|
||||||
Das Programm ist für den Atmega2560 (Arduino Mega 2560) geschrieben.
|
Das Programm ist für den Atmega2560 (Arduino Mega 2560) geschrieben.
|
||||||
|
|
||||||
|
## Abhängigkeiten
|
||||||
|
|
||||||
|
Die aktuell einzige externe Abhängigkeit ist die [U8g2-Library von olikraus](https://github.com/olikraus/u8g2), da diese sehr groß ist (> 30 MB), und deshalb nicht in dieses Repository aufgenommen wird. Diese lässt sich einfach mit dem Arduino Library Manager installieren.
|
||||||
|
|
||||||
## Probleme, offene Fragen
|
## Probleme, offene Fragen
|
||||||
|
|
||||||
- ***Großes Problem:*** Während des Gedrückthaltens einer Menütaste am Regler blockiert das Programm fast (nur noch ca. 10 Loops / Sekunde). In diesem Fall funktioiert Modbus nicht mehr.
|
- ***Großes Problem:*** Während des Gedrückthaltens einer Menütaste am Regler blockiert das Programm fast (nur noch ca. 10 Loops / Sekunde). In diesem Fall funktioiert Modbus nicht mehr.
|
||||||
***### TODO - Das liegt an der Zeit, die gebraucht wird, um das Display zu beschreiben (70 - 100+ ms). Wenn praktisch dauernd das Display neu beschrieben wird, bleibt einfach keine Zeit für was anderes -- SCHNELL EINE LÖSUNG FINDEN***
|
***### TODO - Das liegt an der Zeit, die gebraucht wird, um das Display zu beschreiben (70 - 100+ ms). Wenn praktisch dauernd das Display neu beschrieben wird, bleibt einfach keine Zeit für was anderes -- SCHNELL EINE LÖSUNG FINDEN***
|
||||||
|
Eine Erhöhung der SPI-Clockrate kommt leider nicht in Frage, da im Test das Display dabei nicht mehr richtig funktionierte. Folgend die ungefähr benötigten Zeiten in ms, um den Displayinhalt aufzubauen (Homescreen, Startmenü):
|
||||||
|
- U8G2_ST7920_128X64_1_HW_SPI: 192, 125
|
||||||
|
- U8G2_ST7920_128X64_2_HW_SPI: 131, 92
|
||||||
|
- U8G2_ST7920_128X64_F_HW_SPI: 87, 67
|
||||||
- Der Durchschnittswert der Temperatur wird nicht mehr gebildet (außer das Macro _MODBUS_AVERAGE_TEMPERATURES ist 1 - dafür reicht der RAM aber eh nicht ;-) ).
|
- Der Durchschnittswert der Temperatur wird nicht mehr gebildet (außer das Macro _MODBUS_AVERAGE_TEMPERATURES ist 1 - dafür reicht der RAM aber eh nicht ;-) ).
|
||||||
***Frage:*** Ist die Mittelung der Temperatur wirklich nicht notwendig?
|
***Frage:*** Ist die Mittelung der Temperatur wirklich nicht notwendig?
|
||||||
|
|
||||||
|
@ -52,8 +60,8 @@ Verschiedenes: Ausgangszustände Ventile, Betriebsart Regler, Flags:
|
||||||
Messwerte:
|
Messwerte:
|
||||||
|
|
||||||
- ***0x02***: Temperatur 1 - aktuelle Temperatur als INT16 in Hundertstel-°C
|
- ***0x02***: Temperatur 1 - aktuelle Temperatur als INT16 in Hundertstel-°C
|
||||||
- ***0x03***: Temperatur 2 (noch nicht genutzt – gibt *0xFFFF* zurück)
|
- ***0x03***: Temperatur 2 - noch nicht genutzt – gibt *0xFFFF* zurück
|
||||||
- ***0x04***: Druck (Durchschnittswert zwischen 2 Abfragen (der letzten 409,6 Sekunden bzw. der letzten Referenzierung - siehe Holding-Register ***0xC0***) als INT16 in Hundertstel-Bar, einzeln vorkommende Sensorfehler werden ignoriert, bei häufigeren Fehlern wird *0xFFFF* zurückgegeben)
|
- ***0x04***: Druck - Durchschnittswert zwischen 2 Abfragen (der letzten 409,6 Sekunden bzw. der letzten Referenzierung - siehe Holding-Register ***0xC0***) als INT16 in Hundertstel-Bar, einzeln vorkommende Sensorfehler werden ignoriert, bei häufigeren Fehlern wird *0xFFFF* zurückgegeben
|
||||||
|
|
||||||
gespeicherte Ereignisse:
|
gespeicherte Ereignisse:
|
||||||
|
|
||||||
|
|
|
@ -11,13 +11,15 @@
|
||||||
|
|
||||||
#define _DEBUG 1
|
#define _DEBUG 1
|
||||||
#define _DEBUG_SENSORS 0
|
#define _DEBUG_SENSORS 0
|
||||||
|
#define _DEBUG_DISPLAY 0
|
||||||
#define _MODBUS 1
|
#define _MODBUS 1
|
||||||
// Das Ermitteln einer Durchschnittstemperatur braucht viel RAM und ist wahrscheinlich unnötig
|
// Das Ermitteln einer Durchschnittstemperatur braucht (zu) viel RAM und ist wahrscheinlich unnötig
|
||||||
#define _MODBUS_AVERAGE_TEMPERATURES 0
|
#define _MODBUS_AVERAGE_TEMPERATURES 0
|
||||||
|
|
||||||
#if _DEBUG == 1
|
#if _DEBUG == 1
|
||||||
#define _print(x) Serial.print(x)
|
#define _print(x) Serial.print(x)
|
||||||
#define _println(x) Serial.println(x)
|
#define _println(x) Serial.println(x)
|
||||||
|
#if _DEBUG_DISPLAY == 1
|
||||||
struct __printTimeStruct {
|
struct __printTimeStruct {
|
||||||
__printTimeStruct(const char *text) : _text(text) {
|
__printTimeStruct(const char *text) : _text(text) {
|
||||||
_t0 = millis();
|
_t0 = millis();
|
||||||
|
@ -31,6 +33,9 @@ struct __printTimeStruct {
|
||||||
const char *_text;
|
const char *_text;
|
||||||
};
|
};
|
||||||
#define _printtime(text) __printTimeStruct __printt(text)
|
#define _printtime(text) __printTimeStruct __printt(text)
|
||||||
|
#else
|
||||||
|
#define _printtime(text)
|
||||||
|
#endif // _DEBUG_DISPLAY
|
||||||
#if _DEBUG_SENSORS == 1
|
#if _DEBUG_SENSORS == 1
|
||||||
#define _prints(x) Serial.print(x)
|
#define _prints(x) Serial.print(x)
|
||||||
#define _printsln(x) Serial.println(x)
|
#define _printsln(x) Serial.println(x)
|
||||||
|
|
|
@ -26,6 +26,8 @@ Display::Display(
|
||||||
, _pSensor(sensor)
|
, _pSensor(sensor)
|
||||||
, _vStates(vStates)
|
, _vStates(vStates)
|
||||||
{
|
{
|
||||||
|
// Bei 2 MHz funtionierte im Test das Display schon nicht mehr
|
||||||
|
// setBusClock(1000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Display::process()
|
void Display::process()
|
||||||
|
@ -278,11 +280,11 @@ void Display::_select(const uint8_t selection, const bool restoreCursor=false)
|
||||||
|
|
||||||
void Display::_select()
|
void Display::_select()
|
||||||
{
|
{
|
||||||
// _printtime("select screen");
|
|
||||||
setFont(_SEL_FONT);
|
setFont(_SEL_FONT);
|
||||||
setFontRefHeightAll();
|
setFontRefHeightAll();
|
||||||
_inputValueActive = false;
|
_inputValueActive = false;
|
||||||
_stepSize = 1;
|
_stepSize = 1;
|
||||||
|
_printtime("select screen");
|
||||||
switch (_selection) {
|
switch (_selection) {
|
||||||
case _MENU_MAIN:
|
case _MENU_MAIN:
|
||||||
_menu_depth = 0;
|
_menu_depth = 0;
|
||||||
|
@ -387,7 +389,7 @@ void Display::_home()
|
||||||
bool tState = _vStates->t1;
|
bool tState = _vStates->t1;
|
||||||
// %u in sprintf() geht nur bis uint16_t
|
// %u in sprintf() geht nur bis uint16_t
|
||||||
String baudStr(_modbusParams->baudrate);
|
String baudStr(_modbusParams->baudrate);
|
||||||
// _printtime("homescreen");
|
_printtime("homescreen");
|
||||||
firstPage();
|
firstPage();
|
||||||
do {
|
do {
|
||||||
setFont(u8g2_font_fub20_tf);
|
setFont(u8g2_font_fub20_tf);
|
||||||
|
|
Loading…
Reference in New Issue