Start Timer0

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    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!

    • Die sollte nach 100ms aufgehört haben zu prellen ^^
      Ich hab immer noch keinen Grund für das Timerversagen ;(
      Mit $Hwstack = 40 (<35) hört die Warnung auf, aber das hat keinen Einfluss auf den Timer oder Altertakt

      PS Wirft sie die Klappe selber auf? Hier bekomme ich immer Klappenstörung: Zuerst wenn sie nicht zu (=1) ist und später weil sie zu ist (If klappe=0:else: ... Störung) ?(

      PPS Ich würde auf die Verwendung von Bits verzichten. Die benötigen erheblich mehr Arbeit (Das Byte muss geladen werden und dann noch das Bit isoliert werden bevor es bearbeitet wird). Würde das Single Messen1 überlaufen sind gleich beide Bits (Freigabe und Automatikstart) geschrottet und nicht nur ein Byte.
    • Hallo Pluto
      Ja die Klappe ist geschlossen und nach ca 253 Takten durch den Materialvorschub geöffnet, außer es wird neues Material neu eingelegt, deswegen beim 1. Start 799 Takte, falls in der eingestellten Zeit diese nicht öffnet liegt ein Fehler vor und geht in Stoerung = 1.
      Beim Messen1 dürfte das ja eigentlich nicht passieren, da ja hier der Adc max 1024 und das ganze mit 5,26 multipliziert wird, ändern kann ich es auf jedenfall noch. Im Codeexplorer konnte ich keine Fehler erkennen, wo siehst du die Warnung.
      MfG
    • Der Simulator stellt fest das der Stack überläuft sobald die Isr_timer0 aufgerufen wird. In Deinem Fall läuft er nur in einen anderen der gar nicht benötigt wird. Der Simulator zeigte auch gestern bis Abends keine Fehler bei Messen von 10 bis 6000.

      Eine Single Berechnung braucht viele Register, auch welche die bei einer Isr nicht gesichert werden, damit steigt die Chance das was schief laufen könnte. Gewöhnlich geht das gut, wie auch einen Timer zu starten. ;)

      Schon mal einen anderen Chip versucht? Vielleicht hat dieser irgendwelche interne 'Schmerzen'

      PS Der Blockkondensator (100nF) ist vorhanden? a_38_b45e201d
    • Hallo Pluto
      Du hast Recht der Hwstack ist zu klein, jede isr bzw Interrupt braucht 32byte und jede sub 2byte. Damit wäre der Fehler vielleicht erklärbar. Im Prinzip müßte der Fehler weiter auftreten, da ich aber jetzt paar Tage nicht auf Arbeit bin, kann ich erst mal nicht weiter berichten.
      Die Single Berechnung findet vor dem Start timer0 statt und wird nur als Word Variable übergeben, also auch da alles gut. Ein neuer Chip macht sich schlecht, weil der neue, Hucke pack oben auf der alten Leiterplatte sitzt. Ist ein Arduino Nano sollte alles drauf sein, aber auf der original Platine ist auch noch alles drauf, zum abblocken.
      Danke erst mal Mfg
    • Hallo
      Da ich immer noch Problem mit der Timer Überwachung gab, habe ich mir ein kleines programmchen geschrieben, nach vielen Test und abarbeiten diverser Ratschläge singe, bit, Hwstack, swstack erhöht, hat alles nicht geholfen. der Knallt bei der selben variable messen, immer wieder beim selben x.ten Durchlauf mit dem selben Takt und Altertakt stehen, wobei Altertakt wesentlich höher war. Geholfen hat nur, wenn ich den Takt in eine takt1 Byte variable packe und bei 255 dort Altertakt mit den neuen Takt übernehme oder bit 0 vom takt auswerte if Takt.0 =1 then Altertakt = Takt oder in der isr_timer eine takt1 noch zusätzlich laufen lasse und diesen bei z.b takt1 =15 Altertakt=takt und rücksetzen von takt1 =0 mache. warum das andere nicht funktioniert hat, ist mir schleierhaft. Sogar einmal im Simulator, ist er in Störung gegangen. Ich hänge mal das Programm mit dran, vielleicht hat ja einer Lust den Fehler zu finden.
      MfG
      Files
      • anoname.bas

        (4.78 kB, downloaded 3 times, last: )

      The post was edited 5 times, last by walter99 ().

    • Probiere mal den Timer Overflow während der Abfrage abzuschalten:
      Disable Ovf0
      If Takt > Altertakt Then 'dieses hat nicht funktioniert
      Altertakt = Takt
      Enable Ovf0
      Waitms Taktpause
      Else
      Enable Ovf0
      Stoerung = 1 : Exit While
      End If
      Wenn es dann funktioniert liegt das Problem daran, dass der Interrupt die Word Variable Takt inkrementiert, während ein Teil der Abfrage Takt > Altertakt gelaufen ist.
      Die kann nicht in einem atomaren Befehl erfolgen, sodass ein Interrupt irgendwo dazwischen kommen kann.
    • Hallo Franz
      Es funktioniert, nun ist der Groschen auch gefallen, gesichert wird bei der isr_timer, ja der Takt und ich erhöhe ihn aber auch dort, beim Rücksprung kommt es dann zum Crash. Ich bin immer davon aus gegangen, das es beim "Altertakt" lag, weil dieser immer um mehrere 100.sten Stellen erhöht war. Danke an Alle.
      MfG