Hilfe Stufentimer

    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!

    • ISekundentimer:

      Ich habe den Code bisher wie folgt geändert:

      - Schaltausgang auf "H"-Pegel während des Zeitablaufes
      - die digit Werte um "A,b,F,E" erweitert
      - Menüpunkt 6 hier dann die Anzeige "Ab" - wie abgebrochen
      - Wenn die Zeit abgelaufen ist die Anzeige "FE" - wie fertig
      - Menüpunkt 5 +- hier auf den Anfangswert auf "00" gesetzt
      und die Werte dann jeweils um 1 Sekunde änderbar

      Stundentimer:

      Hier blicke ich nicht durch. Ich kann ja nicht einfach, abgesehen von der Anzeige, nur den Timer_wert auf z.B. 14400 Sekunden für 4 Stunden setzen. Die Timer.inc muss doch auch geändert werden. Ich frage nun trotzdem was da noch geändert werden muss.
    • Fanpost2010 schrieb:

      Hier blicke ich nicht durch. Ich kann ja nicht einfach, abgesehen von der Anzeige, nur den Timer_wert auf z.B. 14400 Sekunden für 4 Stunden setzen. Die Timer.inc muss doch auch geändert werden. Ich frage nun trotzdem was da noch geändert werden muss.
      Du willst 4 Stunden.
      Dann nimm doch eine Variable Stunden. Da steht dann 0 bis 4 drin. Das ist das was du anzeigen musst.
      Und du brauchst eine Variable Sekunden. Dort steht dann 3600 (Sekunden) drin, wenn du bei Stunden eins abziehst.

      Da die angezeigte Variable in der aktuellen Version den Timer-Wert anzeigt. musst du das dann auf Stunden ändern.

      Du brauchst also nicht 14400 Sekunden um 4 Stunden zunter zu zählen, sondern 4x 3600 Sekunden.
      Verstehst du?

      Denke mal an den Übertrag bei einer Uhr.

      Wenn Sekunden=60 then
      Sekunden=0
      Incr Minuten
      If Minuten=60 then
      Incr Stunden
      If Stunden=24 then Stunden=0
      End If
      End If

      Am Timer musst du eigentlich nix ändern, kannst du aber, wenn es dir das Leben vereinfacht. Siehe Übertrag Uhr oben.
      Im MUX_Display musst du ändern, weil da Timer-Wert angezeigt wird, was eigentlich den Sekunden entspricht.
    • Ich hab jetzt nochmal in den Code geschaut.

      Im der Timer-ISR musst du nix ändern!
      Da werden ja nur Flags gesetzt um einen 2Hz und einen 1Hz Takt zu bekommen.
      Mal abgersehen von Variable _TMR_Millis, die dafür da ist, wie in Arduino bekannt mit Funktion Millis() diesen Wert abzufragen.
      Damit ließen sich weitere Timeouts realisieren.

      BASCOM-Quellcode

      1. Sub ISR_Timer2_ms()
      2. Incr _TMR_Millis ' Millisekunden-Zähler (Long)
      3. ' Timing MUX
      4. Incr _MUX_Ticks ' Refresh-Zähler Anzeige
      5. If _MUX_Ticks >= MUX_REFRESH then ' alle x ms die Routine ...
      6. _MUX_Ticks = 0
      7. Call Mux_Display() ' Multiplexer aufrufen.
      8. End If
      9. ' Timer-Interval für LED-Blinken und Sekunden-Ablauf
      10. Incr TMR_Interval_Ticks ' Takt-Zähler Blinken/Sekunden
      11. If TMR_Interval_Ticks = 500 then
      12. Set TMR_Interval_2Hz ' Blink-Flag setzen
      13. ElseIf TMR_Interval_Ticks = 1000 then
      14. TMR_Interval_Ticks = 0
      15. Set TMR_Interval_2Hz ' Blink-Flag setzen
      16. Set TMR_Interval_1Hz ' Sekunden-Flag setzen
      17. End If
      18. End Sub
      Alles anzeigen

      Die Flags heißen
      • TMR_Interval_1Hz und
      • TMR_Interval_2Hz
      Das sind die beiden Flags, die du brauchst, um die Stunden (Minuten, Sekunden) runter zu zählen und das Blinken zu erzeugen.
      Und diese Musik spielt im Modul FSM.inc in der Routine FSM_Steuerung().
      Genauer im Zustand ST_TIME_RUN.

      BASCOM-Quellcode

      1. ' ------------------------------
      2. Case ST_TIME_RUN ' Timer läuft
      3. ' ------------------------------
      4. If FSM_StateChanged() = True then
      5. Call MUX_ClearDots()
      6. Call TMR_ResetInterval()
      7. Set pin_Led
      8. End If
      9. ' Flag wird vom Timer alle 1s gesetzt
      10. If TMR_Interval_1Hz = True then ' Timer dekrementieren
      11. Reset TMR_Interval_1Hz ' Flag löschen
      12. If Timer_Wert > 0 then
      13. Decr Timer_Wert
      14. End If
      15. Call Mux_SetZahl(Timer_Wert) ' Anzeige aktualisieren
      16. End If
      17. If Timer_Wert = 0 then ' Timer abgelaufen?
      18. Call FSM_SetState(ST_TIME_END)
      19. Exit Sub ' verhindert Toggeln der LED nach Ablauf der Timerzeit
      20. End If
      21. ' Hier noch eine Abbruch-Möglichkeit des laufenden Timers
      22. If getTaste_Menu() = True then
      23. Call FSM_SetState(ST_IDLE)
      24. End If
      25. ' Flag wird vom Timer alle 0.5s gesetzt
      26. If TMR_Interval_2Hz = True then ' LED blinken lassen
      27. Reset TMR_Interval_2Hz ' Flag löschen
      28. Toggle pin_LED
      29. End If
      Alles anzeigen

      Ich empfehle Variablen in Main.bas im Abschnitt "Variablen" mit den Namen Stunden, Minuten, Sekunden als Byte anzulegen.
      Und diese musst du dann auf den Startwert des Timers setzen (z.B. 4 Std.) und dann in obigem State runterzählen lassen.

      Wenn Stunden=0 und Minuten=0 und Sekunden=0, dann ist die Zeit abgelaufen und du musst den Zustand ST_TIME_END aktivieren (siehe Zeile 20).

      Jetzt musst du mal deine grauen Zellen anstrengen.

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

    • Wie man aus Post1 und Post12 ersehen kann, beschäftige ich mich sehr sehr selten mit Bascom. Es ist richtig, dass mir viele Grundlagen fehlen und das Projekt wohl zu hoch
      für mich ist. Ich kann das für mich komplizierte Programm nicht entsprechend ändern. Wie ich deinen Zeilen entnehmen kann, ist es wohl sehr einfach das Programm auf Stunden
      umzustellen. Leider nicht für mich. So wie ich das sehe, bekomme ich wohl kurz vor dem Ziel keine Hilfe mehr.
    • Du hast bisher schon sehr viel Hilfe bekommen, nicht nur von mir.
      Etwas musst du schon auch selber tun.

      Und wenn du ein Problem hast, zeige Code, wo es hakt, was du nicht verstehst.

      Deine Aussagen sind immer so allgemein. Man kann da alles rein interpretieren.
      Es scheint fast so als suchst du jemand, der deine Projekte für dich schreibt.

      Aber irgendwelche Kenntnisse hast du ja, schließlich hast du ja auch schon selber Änderungen gemacht.
      Aber wo es bei dir hakt sieht hier niemand, wenn du kein konkretes Problem ansprichst.
    • Fanpost2010 schrieb:

      Dann lasse ich das Projekt fallen.
      Nach nicht mal einer Woche? Das ist weniger als die Probezeit des ersten Testlaufes.
      Entweder selber was schreiben oder sich in Mitchs Projekt rein denken. Unmöglich ist das auch nicht.
      Der Simulator ist da sehr nützlich auch wenn er die 7seg nciht darstellen kann so hat er ein Lcd Feld das das anzeigen übernehmen könnte.
      Letztlich sind nur wenig Änderungen nötig um von Sekunden auf Stunden , Wochen ,Jahre... zu kommen.
    • Ich habe keinen gesucht der mir meine Projekte schreibt. Du hast mir aber ein sehr komplexes Programm geschrieben
      und ich bin nicht in der Lage es entsprechend auf Stunden zu ändern. Da du die entsprechenden Kenntnisse besitzt wird es für
      dich sehr einfach sein den Code entsprechend zu ändern. Vergleich: Man kann von einem Lehrling nicht verlangen die Arbeit
      eines Ingenieurs zu vollenden.
      Danke für die bisherigen Bemühungen . Schade.
    • BASCOM-Quellcode

      1. IF Sekunden=60 then
      2. Sekunden=0
      3. Incr Minuten
      4. If Minuten=60 then
      5. Minuten=0
      6. Incr Stunden
      7. If Stunden=24 then Stunden=0
      8. End If
      9. End If
      Wenn 60 Sekunden erreicht sind, dann werden die Sekunden auf 0 gestellt und eine Minute hochgezählt.
      Wenn 60 Minuten erreicht sind, dann werden die Minuten auf 0 gestellt und die Stunden eins hochgezählt.
      Wenn 24 Stunden erreicht sind, dann wird wieder auf Stunden 0 gestellt.