luzie:
dies ist nun der aktuelle Code. habe die Änderungen gemacht, traue mich aber nicht ihn hochzuladen, da der kleine sonst wo wieder abstürzt und ich ewig brauche um wieder einen Code hoch laden zu können.
Das musst Du aber.
Ich habe Deine Hardware nicht und wenn der sich verabschiedet, dann ist was faul.
Ich hab mal den WDT auskommentiert und ne Handvoll serMon-Ausgaben eingepackt.
Der folgende Code ersetzt das setup und void md.
Einfach nur hier rauskopieren, im Originalcode markieren, ersetzen, hochladen.
Dann sollte erstmal alles durchlaufen.
Dann in der ISR mb deinen Code aktivieren - hochladen und die Ausgaben aus dem SerMon dann hier rein, wenn es nicht will.
ACHTUNG! Ich habe den SerMon auf 115200 gestellt, damit das Timing nicht solange dauert!!!
Ist ungetestet - aber ich hoffe, das klappt...
Irgendwann muss auf dem Sermon nur ein Bindestrich/Minuszeichen erscheinen.
void setup()
{
Serial.begin(115220);
Serial.begin(F("Start...."));
// slave address
Mb.remSlaveIP = (192, 168, 178, 114);
// Serial.println(Mb.remSlaveIP);
Wire.begin(); // enable I2C port.
Ethernet.begin(mac, ip); // start etehrnet interface
Serial.println(F("Schalte Interrupts ab"));
noInterrupts();
Serial.println(F("Setze Timer"));
Timer1.initialize(100 * 1000); // zeit in microsekunden (1 / 1 000 000) s
Serial.println(F("Setze ISR"));
Timer1.attachInterrupt(mb);
Serial.println(F("Setze Array"));
// Mb.SetBit(0,false);
Mb.MbData[0] = 72; //ph * 10.0;
Mb.MbData[1] = 6800; //orp * 10.0;
Mb.MbData[2] = 3; //pressure60 *10;
Mb.MbData[3] = 1160; //pressure5 * 10;
Serial.println(F("Watchdog"));
// wdt_enable(WDTO_8S); // Watchdog timer alle 8 s ohne timerreset wird das gerät neu gestartet
Serial.println(F("Schalte Interrupts ein"));
interrupts()
}
// #define DRAW_DELAY 118
// #define D_NUM 47
int i;
void mb()
{
// Mb.Req(MB_FC_READ_COILS, 0,1,0);
// Mb.Req(MB_FC_WRITE_MULTIPLE_REGISTERS, 21,4,0); // 16
// Mb.MbmRun();
Serial.println(F("-"));
}