Heizungssteuerung mit WIFI ESP8266

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hallo Franz,

      Franz schrieb:

      Hast du verstanden, wofür die verschiedenen Stacks verwendet werden?
      Im Prinzip schon (kleiner_bascom_avr_kurs), aber Erfahrung habe ich keine.

      Ich hatte den "Stack Check" im Programm eingebaut (ich hoffe richtig!!!) und die Werte waren immer sehr klein (unter 10).

      Welche Werte würdest du den vorschlagen? Wäre kein Problem die mal zu ändern.


      Franz schrieb:

      Wo willst du denn das Int Disable einfügen? Dabei ist ja wichtig, dass du den Rest deines Programmes möglichst wenig beeinflusst.
      Das ist eine gute Frage. Ich denke darüber gerade nach.

      Horst
    • Topgun schrieb:

      Ich hatte den "Stack Check" im Programm eingebaut ...
      Ich denke darüber gerade nach
      Da hab ich noch nie brauchbare Werte von bekommen. ich würde Hard und Software verdoppeln , Frame darf kleiner werden (falls bei Erweiterungen Ramnot auftritt).
      Je vor der Stringkonvertierung die Probleme macht. Zeile 1677, 1706 (Wiedereinschalten bei 1695,1712)
      Sollten dann dort keine Fehler mehr vorkommen war das der Grund
    • Ich weiß jetzt nicht, ob das Programm aus Post #1 noch aktuell so in Verwendung ist.
      Etwas anderes hab ich jetzt aber nicht gesehen.

      In dem besagten Programm sind einige Fehler, die im Code-Explorer angezeigt werden.
      Ich empfehle, diese Hinweise zu beherzigen und die angezeigten Fehler erst mal zu eliminieren.

      Angezeigt wird beispielsweise und berechtigterweise folgendes:
      • Config Date = Dmy , Separator = -
        Das muss heißen:
        Config Date = Dmy , Separator = MINUS
      • Uartstring = ""
        UartString ist als Byte dimensioniert, daher kann man nur Bytewerte zuweisen. Muss also richtig heißen:
        Uartstring = 0
        Das kommt an mehreren Stellen im Programm vor!
      • Switch(6) = "Off"
        String an ein Array zuweisen?
        Wie wäre es Mit String als Overlay auf das SwitchArray() ?
      Was die Staclwerte betrifft.
      Du verwendest weder Sub oder Funktionen (Labels verwendet man eigentlich nur in Ausnahmen), Daher werden weder lokale Variablen noch Parameter auf dem Frame abgelegt.
      Das Framesize kann daher relativ klein gehalten werden.
      Framesize= 40 halte ich für mehr als ausreichend.

      Der HWStack nimmt i.d.R. nur Rücksprungadresse auf, die bei Gosub (und Aufrufen von Sub/Function, die du nicht benutzt) verwendet werden.
      Was der User nicht direkt sieht sind die Interrupt-Aufrufe. Hier werden Register auf dem HWStack gesichert.
      Ein HWStack = 64 halte ich ausreichend, kann man nach der Software-Entwicklung wahrscheinlich noch reduzieren.

      Der SWStack speichert Adressen auf Parameter, die beim Aufruf von Routinen benötigt werden.
      Also pro Parameter/Rückgabewert/Locale Variable immer 2 Byte.
      Ein SWStack = 64 halte ich daher auch für ausreichend.

      Der Einfachheit kann man ja Anfangs auch alles mal auf 64 oder 128 setzen, das reicht bis auf wenige Ausnahmen eigentlich immer.

      Fallen einem Effekte auf, die sich nicht richtig lokalisieren lassen, Sollte man immer die Stackwerte mal überdenken.

      In der Bascomhilfe ist ein langer und gut beschriebener Artikel drin über die Speicherverwendung.
      Das sollte man auf jeden Fall mal gelesen und auch verstanden haben.

      Noch was ist mir am Programm aufgefallen.
      Irgendwie scheint das ein Standard-Fehler zu sein.

      Eine Uhr Routine mit Preload von Timer-Werten wird nie genau sein. Wenn's stimmen soll, bietet sich ein CTC-Mode an, was der Timer1 auf jeden Fall kann. Und die Uhr ist nur so genau wie der Takt, also Quarz ist Pflicht, falls das nicht schon verwendet wird.

      Im Lexikon findet sich dazu ein Timer-Tutorial mit Beispielen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mitch64 ()

    • Hallo Mitch64,

      vielen Dank für deinen Betrag.


      Mitch64 schrieb:

      Config Date = Dmy , Separator = MINUS
      Hab ich geändert.

      Mitch64 schrieb:

      UartString ist als Byte dimensioniert,
      Uartstring ist doch als String dimensioniert oder ?
      Dim Uartstring As String * 151

      Kann es sein, dass du Uartchar meinst?


      Mitch64 schrieb:

      Switch(6) = "Off"
      Danke für den Hinweis. Ist in der neuen Version raus.

      Mitch64 schrieb:

      Und die Uhr ist nur so genau wie der Takt, also Quarz ist Pflicht, falls das nicht schon verwendet wird.
      Es wird ein 8MHz Quarz verwendet.
      Das mit dem CTC-Mode schau ich mir an.

      Danke
      Horst
    • Hallo zusammen,

      hier meine neuen Erkenntnisse. Leider hat sich das Problem noch nicht aufgelöst.

      Meine Änderungen:
      SW-Stack und HW-Stack von 64 auf 256 geändert (vervierfacht) === keine Änderung

      Disable/enable Interrupts während der Ausgabe eingebaut === keine Änderung

      CTC-Mode eingebaut (wie von Mitch64) vorgeschlagen

      Im Anhang habe ich eine neue Version mit einigen Änderungen die jedoch keine Auswirkung auf den Fehler haben.

      Bitte um weitere Vorschläge

      Horst
      Dateien
    • Wahrscheinlich wolltest du in Zeile 1689 Disable Interrupts schreiben.

      Ich habe mir gerade nochmal deinen Mitschnitt der Ausgabe angesehen.
      Dort ist um 2020-11-20 21:05:20 dies zu sehen
      2020-11-20 21:05:20 Küche #5 20.00 16280023.43 Off
      ...
      2020-11-20 21:05:20 GET /store.php?&s1=16280023.43&s1s ...
      Um 2020-11-20 22:10:21 wieder so ein Fehler.
      Das sagt mir, dass du an der falschen Stelle suchst, weil es total unwahrscheinlich ist, dass durch einen Interrupt zwei mal exakt der gleiche Fehler in dem Format auftritt.
      Folglich würde ich denken, dass der Fehle schon beim Zuweisen von i_wert(1) auftritt.
      Ich bin mir nicht sicher, aber es könnte Zeile 1046 sein
      I_wert(i) = Str(temp_istwert(i))
      Temp_istwert ist ein Array von Long Werten, theoretisch könnte Temp_istwert(1)= 1628002343 sein.
      An der anderen Stelle steht aber s3=7:720021.87, was jetzt eher keine Long ist.
      Jedenfalls würde ich da mal suchen.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Franz ()

    • Hallo zusammen,

      ich bin begeistert von eurem Engagement!!! Danke

      Franz schrieb:

      Wahrscheinlich wolltest du in Zeile 1689 Disable Interrupts schreiben.
      Natürlich. Man sollte auch mal abschalten bevor man Fehler macht.

      Pluto25 schrieb:

      Ein Fehlermitschnitt der geänderten Version sagt vielleicht was.
      Wie gewünscht.
      Dateien
    • Wärs nicht langweilig ohne Warnings :D
      Time und Date haben je 8 Byte würden sie nun mit 10 gefüttert cracht das ihre Nachbarn. Das könnte nicht passieren wenn NPT_Strtime/date auch nur 8 Byte lang wären.
      Insgesammt könnte es helfen die Stringgrößen zu reduzieren. Die Temperatur in den Räumen wird kaum eine Million erreichen. Mit 6 Byte kann schon ein Brand oder schwerer Frost dargestellt werden. 5 Byte sollten auch reichen. Auch kann das Esp nur 4stellige Sätze senden. Da reichen dann auch 4 oder 3 Byte.
      Das ist zwar nicht der Fehler könnte aber reichen das er nicht mehr auftritt/auffällt.

      Zeile 968 Hat mich gerade abgeschossen. Der Timeout ist abgeschaltet und wenn dann kein "SEND O
      K" kommt haut schreddert der Uartstring alles nach ihm bis in die Stacks rein. a_28_2c02f089

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Es sieht so aus als würde Timer1 die Konvertierung stören. Ein
      "On Compare1a Timer_irg SAVEALL" sollte das lösen.

      Zum Schluß noch eine. Nun ist mir kalt ;)
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Hallo zusammen,

      erstmal allen vielen Dank, besonders Pluto25.

      "On Compare1a Timer_irg SAVEALL" ist die Lösung! Über 24 Std. kein Fehler.

      Jetzt die Frage: Wie bist du darauf gekommen?

      Ich habe mir das mit "Saveall" in der Hilfe angeschaut, aber da steht nur, dass es bei "Floating-point mathematics" zu Problemen kommt.
      Im Programm sind doch keine, oder ?

      Horst