added macro _DEBUG_DISPLAY
This commit is contained in:
parent
efa9fd8ea0
commit
54b3399aca
|
@ -369,7 +369,7 @@ void setPSensor(const PSensor &sensor) {
|
|||
|
||||
void setup() {
|
||||
#if _DEBUG == 1
|
||||
Serial.begin(19200);
|
||||
Serial.begin(115200);
|
||||
#endif
|
||||
|
||||
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.
|
||||
|
||||
## 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
|
||||
|
||||
- ***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 ;-) ).
|
||||
***Frage:*** Ist die Mittelung der Temperatur wirklich nicht notwendig?
|
||||
|
||||
|
@ -52,8 +60,8 @@ Verschiedenes: Ausgangszustände Ventile, Betriebsart Regler, Flags:
|
|||
Messwerte:
|
||||
|
||||
- ***0x02***: Temperatur 1 - aktuelle Temperatur als INT16 in Hundertstel-°C
|
||||
- ***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)
|
||||
- ***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
|
||||
|
||||
gespeicherte Ereignisse:
|
||||
|
||||
|
|
|
@ -11,13 +11,15 @@
|
|||
|
||||
#define _DEBUG 1
|
||||
#define _DEBUG_SENSORS 0
|
||||
#define _DEBUG_DISPLAY 0
|
||||
#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
|
||||
|
||||
#if _DEBUG == 1
|
||||
#define _print(x) Serial.print(x)
|
||||
#define _println(x) Serial.println(x)
|
||||
#if _DEBUG_DISPLAY == 1
|
||||
struct __printTimeStruct {
|
||||
__printTimeStruct(const char *text) : _text(text) {
|
||||
_t0 = millis();
|
||||
|
@ -31,6 +33,9 @@ struct __printTimeStruct {
|
|||
const char *_text;
|
||||
};
|
||||
#define _printtime(text) __printTimeStruct __printt(text)
|
||||
#else
|
||||
#define _printtime(text)
|
||||
#endif // _DEBUG_DISPLAY
|
||||
#if _DEBUG_SENSORS == 1
|
||||
#define _prints(x) Serial.print(x)
|
||||
#define _printsln(x) Serial.println(x)
|
||||
|
|
|
@ -26,6 +26,8 @@ Display::Display(
|
|||
, _pSensor(sensor)
|
||||
, _vStates(vStates)
|
||||
{
|
||||
// Bei 2 MHz funtionierte im Test das Display schon nicht mehr
|
||||
// setBusClock(1000000);
|
||||
}
|
||||
|
||||
void Display::process()
|
||||
|
@ -278,11 +280,11 @@ void Display::_select(const uint8_t selection, const bool restoreCursor=false)
|
|||
|
||||
void Display::_select()
|
||||
{
|
||||
// _printtime("select screen");
|
||||
setFont(_SEL_FONT);
|
||||
setFontRefHeightAll();
|
||||
_inputValueActive = false;
|
||||
_stepSize = 1;
|
||||
_printtime("select screen");
|
||||
switch (_selection) {
|
||||
case _MENU_MAIN:
|
||||
_menu_depth = 0;
|
||||
|
@ -387,7 +389,7 @@ void Display::_home()
|
|||
bool tState = _vStates->t1;
|
||||
// %u in sprintf() geht nur bis uint16_t
|
||||
String baudStr(_modbusParams->baudrate);
|
||||
// _printtime("homescreen");
|
||||
_printtime("homescreen");
|
||||
firstPage();
|
||||
do {
|
||||
setFont(u8g2_font_fub20_tf);
|
||||
|
|
Loading…
Reference in New Issue