Timer Interval verlängern bis 50,5sek.

    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!

    • Timer Interval verlängern bis 50,5sek.

      Hallo,

      ich setze den Timer1 mit unterschiedlichen Variablen wie folgt:


      BASCOM-Quellcode

      1. Config Timer1 = Timer , Prescale = 1024
      2. Select Case Val(command_array(13))
      3. Case 0 : Timerwert = 22567 'Timer auf 5.5s. setzen
      4. Case 1 : Timerwert = 14755 'Timer auf 6.5s. setzen
      5. Case 2 : Timerwert = 6942 'Timer auf 7.5s. setzen
      6. Case 3 : Timerwert = 692 'Timer auf 8.0s. setzen
      7. End Select
      8. Start Timer1 'TimerOut aktivieren
      9. Timer1 = Timerwert
      Alles anzeigen
      nun möchte ich aber bis 50,5 Sekunden hoch gehen.
      Wie kann ich das realisieren?

      Muss ich etwa den
      Config Timer1 = Timer , Prescale = ??? jedesmal verändern?
      und wie müsste das ausschauen?

      danke im Voraus
      Katip
    • Hier mal mein Vorschlag

      BASCOM-Quellcode

      1. $crystal = 16000000
      2. Const Timer1_preload = 34286
      3. Config Timer1 = Timer, Prescale = 256
      4. Enable Timer1
      5. Timer1 = Timer1_Preload
      6. On Timer1 Isr_Timer1
      7. Enable Interrupts
      8. Dim Count As Byte , Count_to As Byte
      9. Do
      10. Select Case Val(command_array(13))
      11. Case 0 : Count_to = 11 'Timer auf 5.5s.
      12. Case 1 : Count_to = 13 'Timer auf 6.5s.
      13. Case 2 : Count_to = 15 'Timer auf 7.5s.
      14. Case 3 : Count_to = 16 'Timer auf 8.0s.
      15. Case 4 : Count_to = 101 'Timer auf 50.5s.
      16. End Select
      17. Loop
      18. Isr_Timer1:
      19. Timer1 = Timer1_Preload
      20. If Count = Count_to Then
      21. Count = 0
      22. '... weitere Anweisungen
      23. Else
      24. Incr Count
      25. End If
      26. Return
      27. 'End
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc schrieb:

      Hier mal mein Vorschlag
      Hi,

      sehr gut und schön aber es ist nicht möglich dein Code in meinem zu implementieren, da die DO .. Schleife bei dir innerhalb der Haupt Schleife und auch im Case befindet.

      BASCOM-Quellcode

      1. $regfile = "m32def.dat" ' specify the used micro
      2. $crystal = 16000000 ' used crystal frequency
      3. $baud = 19200 ' use baud rate
      4. $hwstack = 128 ' default use 32 for the hardware stack
      5. $swstack = 128 ' default use 10 for the SW stack
      6. $framesize = 128 ' default use 40 for the frame space
      7. $lib "datetime.lbx"
      8. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
      9. Spiinit
      10. Enable Interrupts
      11. W5500_nreset Alias Portd.7
      12. Config Pind.7 = Output
      13. Reset W5500_nreset
      14. Waitms 5
      15. Set W5500_nreset
      16. Waitms 500 'Diese Zeitinterval muss mindestens 300ms sein, damit das W5500 initialisieren kann
      17. Config Tcpip = Noint , Mac = 0.8.&Hdc.77.05.11 , Ip = 192.168.178.29 , Submask = 255.255.255.0 , Gateway = 192.168.178.1 , Localport = 2005 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      18. Config Portc = Output
      19. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Power LED Grün LED
      20. Config Portd.2 = Output 'PIN 26 am AVR
      21. Betriebsled Alias Portd.2
      22. Betriebsled = 1
      23. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den DATA I/O Blau LED
      24. Config Portd.3 = Output
      25. Interfaceactivated Alias Portd.3 'Zeigt anhand der LED (Interface Activated) ob eine Kommunikation über das USB statt findet.
      26. Interfaceactivated = 1
      27. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den TimeOut Orange LED
      28. Config Portd.6 = Output
      29. Timeoutled Alias Portd.6
      30. Timeoutled = 1
      31. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den ERROR Rot LED
      32. Config Portd.5 = Output
      33. Error Alias Portd.5
      34. Error = 1
      35. '-------------------------------------- WATCHDOG FÜR DEN INTERNEN SOFTWARE CHRASH --------------------------------------------
      36. Config Watchdog = 2048 'Timeout = 2 Sekunden
      37. '-------------------------------------- AUSGANGS VARIABLEN --------------------------------------------------------------------
      38. Dim Bclient As Byte ' socket number
      39. Dim Idx As Byte
      40. Dim Result1 As Word , Result2 As Word
      41. Dim S As String * 80
      42. Dim Ss As String * 80
      43. Dim Y As String * 80
      44. Dim Flags As Byte
      45. Dim Peer As Long
      46. Dim A As String * 15
      47. Dim Tmp As Byte
      48. Dim Command_array(14) As String * 15
      49. Dim Channel1 As String * 3
      50. Dim Channel2 As String * 3
      51. Dim Channel3 As String * 3
      52. Dim Channel4 As String * 3
      53. Dim Channel5 As String * 3
      54. Dim Channel6 As String * 3
      55. Dim Channel7 As String * 3
      56. Dim Channel8 As String * 3
      57. Dim Ausgang1 As String * 3
      58. Dim Ausgang2 As String * 3
      59. Dim Ausgang3 As String * 3
      60. Dim Ausgang4 As String * 3
      61. Dim Ausgang5 As String * 3
      62. Dim Ausgang6 As String * 3
      63. Dim Ausgang7 As String * 3
      64. Dim Ausgang8 As String * 3
      65. Dim Timeout_ausgeloest As Byte
      66. Dim Timerwert As Word
      67. '-------------------------------------- LED SELBSTTEST 1 SEKUNDE AN UND AUS --------------------------------------------
      68. Wait 1
      69. Interfaceactivated = 0
      70. Timeoutled = 0
      71. Error = 0
      72. Do
      73. Start Watchdog
      74. For Idx = 0 To 3
      75. Result1 = Socketstat(idx , 0) ' get status
      76. Select Case Result1
      77. Case Sock_established
      78. Ss = "FirstConnect|Laufschrift ist verbunden mit |" + Str(deviceadresse) + "|" + Channel1 + "|" + Channel2 + "|" + Channel3 + "|" + Channel4 + "|" + Channel5 + "|" + Channel6 + "|" + Channel7 + "|" + Channel8 + "|" + Str(timeout_ausgeloest)
      79. If Flags.idx = 0 Then
      80. Flags.idx = 1
      81. Result1 = Tcpwritestr(idx , Ss , 255 )
      82. End If
      83. Result1 = Socketstat(idx , Sel_recv) ' get number of bytes waiting
      84. If Result1 > 0 Then
      85. Do
      86. Result1 = Tcpread(idx , S)
      87. Tmp = Split(s , Command_array(1) , "|")
      88. If Command_array(1) = Str(deviceadresse) Then
      89. Interfaceactivated = 1 'Blaue LED einschalten
      90. Select Case Command_array(2) ' Daten Art
      91. Case "1" 'LED MAtrix Anzeige
      92. Channel1 = Command_array(3)
      93. Channel2 = Command_array(4)
      94. Channel3 = Command_array(5)
      95. Channel4 = Command_array(6)
      96. Channel5 = Command_array(7)
      97. Channel6 = Command_array(8)
      98. Channel7 = Command_array(9)
      99. Channel8 = Command_array(10)
      100. Portc = Val(command_array(3))
      101. Case "0" 'TimeOut
      102. If Command_array(14) = "1" Then
      103. Config Timer1 = Timer , Prescale = 1024
      104. Select Case Val(command_array(13))
      105. Case 0 : Timerwert = 22567 'Timer auf 5.5s. setzen
      106. Case 1 : Timerwert = 14755 'Timer auf 6.5s. setzen
      107. Case 2 : Timerwert = 6942 'Timer auf 7.5s. setzen
      108. Case 3 : Timerwert = 692 'Timer auf 8.0s. setzen
      109. End Select
      110. End If
      111. If Command_array(12) = "1" Then 'aktivieren
      112. Start Timer1 'TimerOut aktivieren
      113. Timer1 = Timerwert 'Timer auf eine Bestimte Zeit setzen
      114. Isttimeraktiviert = 1
      115. Elseif Command_array(12) = "0" Then
      116. Stop Timer1 'TimeOut deaktivieren
      117. Isttimeraktiviert = 0 'Variable wieder auf NULL setzen
      118. Timeoutled = 0 'Orange LED ausschalten
      119. End If
      120. If Command_array(11) = "1" And Isttimeraktiviert = 1 Then 'Wenn PING ankommt
      121. Timer1 = Timerwert 'beginnt der Zähler von Vorne an zu zählen
      122. Timeoutled = 0 'Orange LED ausschalten falls evtl. eingeschaltet wird warum auch immer
      123. End If
      124. If Command_array(11) = "1" And Command_array(12) = "0" And Command_array(13) = "0" And Command_array(14) = "0" Then
      125. Timeout_ausgeloest = 0
      126. A = "TimeOut|" + Str(deviceadresse)
      127. Result1 = Tcpwritestr(idx , A , 255 )
      128. End If
      129. Case Else
      130. End Select
      131. Interfaceactivated = 0
      132. End If
      133. Reset Watchdog
      134. Loop Until S = ""
      135. End If
      136. Y = "LEDMatrixMM|" + Str(deviceadresse) + "|" + Ausgang1 + "|" + Ausgang2 + "|" + Ausgang3 + "|" + Ausgang4 + "|" + Ausgang5 + "|" + Ausgang6 + "|" + Ausgang7 + "|" + Ausgang8 + "|" + Channel1 + "|" + Channel2 + "|" + Channel3 + "|" + Channel4 + "|" + Channel5 + "|" + Channel6 + "|" + Channel7 + "|" + Channel8 + "|" + Str(timeout_ausgeloest)
      137. Result1 = Tcpwritestr(idx , Y , 255 )
      138. Case Sock_close_wait
      139. Closesocket Idx
      140. Case Sock_closed
      141. Bclient = Getsocket(idx , Sock_stream , 2005 , 0) ' get socket for server mode, specify port 5000
      142. Socketlisten Idx
      143. Flags.idx = 0
      144. Case Sock_listen
      145. Case Else
      146. End Select
      147. Next
      148. Reset Watchdog
      149. Loop
      150. '################################################### WENN TIMEOUT AUSLÖST ##########################################################################
      151. Timerroutine:
      152. Config Timer1 = Timer , Prescale = 256 'Wenn Timeout auslöst:
      153. Timer1 = 59286 'Timer auf neuen Startwert 210ms einstellen
      154. Toggle Timeoutled
      155. Portc = 0
      156. Timeout_ausgeloest = 1 'Bei dieses Gerät hat der Timeout ausgelöst, da wird einfach die Adresse gesendet
      157. Print "TimeOut hat ausgelöst"
      158. Return
      159. '################################################ ENDE TIMEOUT AUSLÖSUNG ############################################################################
      160. End
      Alles anzeigen
    • Du willst die timeout-Zeit ändern? Dann lass alle 210ms den timer in die isr und zähle da eine vorgegebene Anzahl runter. Ist 0 erreicht, dann timeout. Der Wert für die Anzahl ist ein Vielfaches von deinem kleinsten interrupt-Intervall. Für 8,5s ist der Wert 8500/210, für 50,5s dann 50500/210.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Für 8,5s ist der Wert 8500/210, für 50,5s dann 50500/210.
      Das ergibt aber krumme Zahlen. Da ist meine Variante mit 500ms doch besser - finde ich.

      katipefendi schrieb:

      da die DO .. Schleife bei dir innerhalb der Haupt Schleife und auch im Case befindet.
      Das ist doch die Hauptschleife in meiner Variante oben. Wieso soll es nicht gehen.

      BASCOM-Quellcode

      1. $regfile = "m32def.dat" ' specify the used micro
      2. $crystal = 16000000 ' used crystal frequency
      3. $baud = 19200 ' use baud rate
      4. $hwstack = 128 ' default use 32 for the hardware stack
      5. $swstack = 128 ' default use 10 for the SW stack
      6. $framesize = 128 ' default use 40 for the frame space
      7. $lib "datetime.lbx"
      8. Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
      9. Spiinit
      10. Const Timer1_preload = 34286
      11. Config Timer1 = Timer, Prescale = 256
      12. Timer1 = Timer1_preload
      13. Enable Interrupts
      14. W5500_nreset Alias Portd.7
      15. Config Pind.7 = Output
      16. Reset W5500_nreset
      17. Waitms 5
      18. Set W5500_nreset
      19. Waitms 500 'Diese Zeitinterval muss mindestens 300ms sein, damit das W5500 initialisieren kann
      20. Config Tcpip = Noint , Mac = 0.8.&Hdc.77.05.11 , Ip = 192.168.178.29 , Submask = 255.255.255.0 , Gateway = 192.168.178.1 , Localport = 2005 , Chip = W5500 , Spi = 1 , Cs = Portb.4
      21. Config Portc = Output
      22. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den Power LED Grün LED
      23. Config Portd.2 = Output 'PIN 26 am AVR
      24. Betriebsled Alias Portd.2
      25. Betriebsled = 1
      26. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den DATA I/O Blau LED
      27. Config Portd.3 = Output
      28. Interfaceactivated Alias Portd.3 'Zeigt anhand der LED (Interface Activated) ob eine Kommunikation über das USB statt findet.
      29. Interfaceactivated = 1
      30. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den TimeOut Orange LED
      31. Config Portd.6 = Output
      32. Timeoutled Alias Portd.6
      33. Timeoutled = 1
      34. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den ERROR Rot LED
      35. Config Portd.5 = Output
      36. Error Alias Portd.5
      37. Error = 1
      38. '-------------------------------------- WATCHDOG FÜR DEN INTERNEN SOFTWARE CHRASH --------------------------------------------
      39. Config Watchdog = 2048 'Timeout = 2 Sekunden
      40. '-------------------------------------- AUSGANGS VARIABLEN --------------------------------------------------------------------
      41. Dim Bclient As Byte ' socket number
      42. Dim Idx As Byte
      43. Dim Result1 As Word , Result2 As Word
      44. Dim S As String * 80
      45. Dim Ss As String * 80
      46. Dim Y As String * 80
      47. Dim Flags As Byte
      48. Dim Peer As Long
      49. Dim A As String * 15
      50. Dim Tmp As Byte
      51. Dim Command_array(14) As String * 15
      52. Dim Channel1 As String * 3
      53. Dim Channel2 As String * 3
      54. Dim Channel3 As String * 3
      55. Dim Channel4 As String * 3
      56. Dim Channel5 As String * 3
      57. Dim Channel6 As String * 3
      58. Dim Channel7 As String * 3
      59. Dim Channel8 As String * 3
      60. Dim Ausgang1 As String * 3
      61. Dim Ausgang2 As String * 3
      62. Dim Ausgang3 As String * 3
      63. Dim Ausgang4 As String * 3
      64. Dim Ausgang5 As String * 3
      65. Dim Ausgang6 As String * 3
      66. Dim Ausgang7 As String * 3
      67. Dim Ausgang8 As String * 3
      68. Dim Timeout_ausgeloest As Byte
      69. Dim Timerwert As Word
      70. '-------------------------------------- LED SELBSTTEST 1 SEKUNDE AN UND AUS --------------------------------------------
      71. Wait 1
      72. Interfaceactivated = 0
      73. Timeoutled = 0
      74. Error = 0
      75. Do
      76. Start Watchdog
      77. For Idx = 0 To 3
      78. Result1 = Socketstat(idx , 0) ' get status
      79. Select Case Result1
      80. Case Sock_established
      81. Ss = "FirstConnect|Laufschrift ist verbunden mit |" + Str(deviceadresse) + "|" + Channel1 + "|" + Channel2 + "|" + Channel3 + "|" + Channel4 + "|" + Channel5 + "|" + Channel6 + "|" + Channel7 + "|" + Channel8 + "|" + Str(timeout_ausgeloest)
      82. If Flags.idx = 0 Then
      83. Flags.idx = 1
      84. Result1 = Tcpwritestr(idx , Ss , 255 )
      85. End If
      86. Result1 = Socketstat(idx , Sel_recv) ' get number of bytes waiting
      87. If Result1 > 0 Then
      88. Do
      89. Result1 = Tcpread(idx , S)
      90. Tmp = Split(s , Command_array(1) , "|")
      91. If Command_array(1) = Str(deviceadresse) Then
      92. Interfaceactivated = 1 'Blaue LED einschalten
      93. Select Case Command_array(2) ' Daten Art
      94. Case "1" 'LED MAtrix Anzeige
      95. Channel1 = Command_array(3)
      96. Channel2 = Command_array(4)
      97. Channel3 = Command_array(5)
      98. Channel4 = Command_array(6)
      99. Channel5 = Command_array(7)
      100. Channel6 = Command_array(8)
      101. Channel7 = Command_array(9)
      102. Channel8 = Command_array(10)
      103. Portc = Val(command_array(3))
      104. Case "0" 'TimeOut
      105. If Command_array(14) = "1" Then
      106. 'Config Timer1 = Timer , Prescale = 1024
      107. Select Case Val(command_array(13))
      108. Case 0 : Count_to = 11 'Timer auf 5.5s.
      109. Case 1 : Count_to = 13 'Timer auf 6.5s.
      110. Case 2 : Count_to = 15 'Timer auf 7.5s.
      111. Case 3 : Count_to = 16 'Timer auf 8.0s.
      112. Case 4 : Count_to = 101 'Timer auf 50.5s.
      113. End Select
      114. End If
      115. If Command_array(12) = "1" Then 'aktivieren
      116. Enable Timer1 'TimerOut aktivieren
      117. 'Timer1 = Timerwert 'Timer auf eine Bestimte Zeit setzen
      118. Isttimeraktiviert = 1
      119. Elseif Command_array(12) = "0" Then
      120. Disable Timer1 'TimeOut deaktivieren
      121. Isttimeraktiviert = 0 'Variable wieder auf NULL setzen
      122. Timeoutled = 0 'Orange LED ausschalten
      123. End If
      124. If Command_array(11) = "1" And Isttimeraktiviert = 1 Then 'Wenn PING ankommt
      125. 'Timer1 = Timerwert 'beginnt der Zähler von Vorne an zu zählen
      126. Timeoutled = 0 'Orange LED ausschalten falls evtl. eingeschaltet wird warum auch immer
      127. End If
      128. If Command_array(11) = "1" And Command_array(12) = "0" And Command_array(13) = "0" And Command_array(14) = "0" Then
      129. Timeout_ausgeloest = 0
      130. A = "TimeOut|" + Str(deviceadresse)
      131. Result1 = Tcpwritestr(idx , A , 255 )
      132. End If
      133. Case Else
      134. End Select
      135. Interfaceactivated = 0
      136. End If
      137. Reset Watchdog
      138. Loop Until S = ""
      139. End If
      140. Y = "LEDMatrixMM|" + Str(deviceadresse) + "|" + Ausgang1 + "|" + Ausgang2 + "|" + Ausgang3 + "|" + Ausgang4 + "|" + Ausgang5 + "|" + Ausgang6 + "|" + Ausgang7 + "|" + Ausgang8 + "|" + Channel1 + "|" + Channel2 + "|" + Channel3 + "|" + Channel4 + "|" + Channel5 + "|" + Channel6 + "|" + Channel7 + "|" + Channel8 + "|" + Str(timeout_ausgeloest)
      141. Result1 = Tcpwritestr(idx , Y , 255 )
      142. Case Sock_close_wait
      143. Closesocket Idx
      144. Case Sock_closed
      145. Bclient = Getsocket(idx , Sock_stream , 2005 , 0) ' get socket for server mode, specify port 5000
      146. Socketlisten Idx
      147. Flags.idx = 0
      148. Case Sock_listen
      149. Case Else
      150. End Select
      151. Next
      152. Reset Watchdog
      153. Loop
      154. End
      155. '################################################### WENN TIMEOUT AUSLÖST ##########################################################################
      156. Timerroutine:
      157. 'Config Timer1 = Timer , Prescale = 256 'Wenn Timeout auslöst:
      158. Timer1 = Timer1_preload
      159. If Count = Count_to Then
      160. Count = 0
      161. Portc = 0
      162. Timeout_ausgeloest = 1 'Bei dieses Gerät hat der Timeout ausgelöst, da wird einfach die Adresse gesendet
      163. Print "TimeOut hat ausgelöst"
      164. Else
      165. Incr Count
      166. End If
      167. Toggle Timeoutled
      168. Return
      169. '################################################ ENDE TIMEOUT AUSLÖSUNG ############################################################################
      170. 'End
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • funktioniert nicht zu verlässig.
      Springt willkürlich in die Timeout rountine hinein.

      LED Toogled auch bei nicht Timeout

      djmsc schrieb:

      Das ist doch die Hauptschleife in meiner Variante oben. Wieso soll es nicht gehen.
      tun leider nicht das was es tun soll, springt willkürlich in die Timeoutroutine, auch wenn kein Timeout vorhanden ist.

      In meinem Fall ist es so, das der Timer in dem Case deklariert wird und der Timer1 arbeitet ja bereits ausserhalb des DO loop Schleife.
      Dieses verhalten ist in deinem Beispiel nicht gegeben.
    • Ich geb' noch mal Senf dazu. Die Einstellungen von timer1 lässt du so, wie in der isr angegeben. Zusätzlich führst du eine Variable zt ein.
      Dann schreibst du
      if zt=0 then
      toggle timeoutled
      ...
      halt die Befehle, wenn timeout ausgelöst hat
      else
      decr zt
      endif
      Wenn jetzt zt=0 ist, dann hast du nach dem Start von timer1 in 210ms einen timeout.
      Durch vergrößern von zt kannst du jetzt ein Vielfaches von diesen 210ms einstellen, ohne prescale oder timerload zu ändern.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ok, jetzt habe ich das verstanden auch so weit hinbekommen, nur aber das mit dem LED Toggle funktioniert nicht so ganz genau, denn die LED Toggled auch mit 5s Takt
      diese sollte immer beim Timeout mit 300ms Takt togglen

      Und die Variable Timer1_preload nachinhein zu ändern bringt auch nichts.

      BASCOM-Quellcode

      1. '################################################### WENN TIMEOUT AUSLÖST ##########################################################################
      2. Isr_Timer1:
      3. Timer1 = Timer1_preload
      4. If Count = Count_to Then
      5. Count = 0
      6. Portc = 0 'dummy muss
      7. Toggle Timeoutled
      8. Timeout_ausgeloest = 1
      9. Else
      10. Incr Count
      11. End If
      12. Return
      13. '################################################ ENDE TIMEOUT AUSLÖSUNG ############################################################################
      Alles anzeigen
      Dem zu benötige ich noch die Berechnung, wie ich auf die Werte von 11 für 5,5s bis 101 für 50,5s. komme, damit ich die Zwischenräume auffüllen kann.

      VG
      Katip
    • Deinen geposteten code verstehe ich nicht. Ich dachte, wenn die längere Zeit abgelaufen ist, soll automatisch wieder nach 210ms ein timeout ausgelöst werden. Das macht er jetzt nicht, du musst dazu erst count_to=0 setzen. Ich beziehe mich auf deine Einstellungen vom post#7, 210ms Intervall. Mein erwähntes zt müsstest du für 5,5s auf 5500(ms)/210(ms)=26 (ganze Zahlen) setzen. Dann würde die isr 26x alle 210ms aufgerufen und danach wäre zt=0 und timeout wird ausgelöst. Zt auf 240 ergibt nicht ganz 50,5s (50,4s).
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @djmsc post#7, da schreibt @katipefendi in seiner isr was von 210ms. Ich nehme mal an, der prescaler und timerload führen zu diesem Wert. Und diese werden beim Aufruf der isr neu eingestellt, auch wenn er zuvor mit dem select case eine längere Laufzeit einstellt.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • also, zur Verständnis.

      Wenn ich den TimeOut Funktion per VB.NET Software aktiviere, dann beginnt der AVR nach den Eingestellten Zeit nach Ping zu warten.
      D.h. die Software sendet alle 5s einen Ping und dann kommt es nicht zum Timout, weil die Variable Count = 0 gesetzt wird

      BASCOM-Quellcode

      1. If Command_array(11) = "1" And Isttimeraktiviert = 1 Then 'Wenn PING ankommt
      2. Count = 0 'beginnt der Zähler von Vorne an zu zählen
      3. Timeoutled = 0 'Orange LED ausschalten falls evtl. eingeschaltet wird warum auch immer
      4. End If


      Wenn nach 5s. kein Ping kommt, dann geht es in die Timeout routine:
      also, hier:

      BASCOM-Quellcode

      1. '################################################### WENN TIMEOUT AUSLÖST ##########################################################################
      2. Isr_Timer1:
      3. Timer1 = Timer1_preload
      4. If Count = Count_to Then
      5. Count = 0
      6. Portc = 0 'dummy muss
      7. Toggle Timeoutled
      8. Timeout_ausgeloest = 1
      9. Else
      10. Incr Count
      11. End If
      12. Return
      13. '################################################ ENDE TIMEOUT AUSLÖSUNG ############################################################################
      Alles anzeigen
    • tschoeatsch schrieb:

      das ist dein code, schreib was!
      Aber nur ein kleiner Teil davon :)

      katipefendi schrieb:

      Wenn nach 5s. kein Ping kommt, dann geht es in die Timeout routine:
      Sind deswegen die 5,5s als Minimum?
      Du kannst aber auch die dieser Abfrage den Timer deaktivieren

      BASCOM-Quellcode

      1. If Command_array(11) = "1" And Isttimeraktiviert = 1 Then 'Wenn PING ankommt
      2. Disable timer1
      3. Count = 0 'beginnt der Zähler von Vorne an zu zählen
      4. Timeoutled = 0 'Orange LED ausschalten falls evtl. eingeschaltet wird warum auch immer
      5. Else
      6. Enable Timer1
      7. End If
      Kann aber auch sein, dass ich jetzt was falsch verstanden habe
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • @katipefendi ein timeout wird doch nur ausgelöst, wenn
      Count = Count_to wird. Du müsstest eigentlich zum count=0 auch noch das count_to festlegen.

      Noch eine Frage: dein code aus post#7 läuft soweit, mit der Einschränkung, dass du keine 50,5s hin bekommst? Dass dir nur ein case-Fall für 50,5s fehlt?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------