ATTiny zählt falsch bei interrupts

    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!

    • ATTiny zählt falsch bei interrupts

      Hallo Zusammen,

      habe eine kurze Frage, ich steh einfach wie der Ochs vorm Berg.
      Ganz einfaches Thema, ich will einfach dass der Tiny bei einem Interrupt eine Variable um 1 hochzählt.
      Das tut er aber komischerweise nicht. Je nach Datentyp zählt er andere "Sprünge" aber nie einfach nur um 1 nach oben. Wenn ich ihn im Hauptprogramm hochzählen lasse funktioniert es korrekt, wo ist denn da mein Denkfehler?

      Besten Dank und Gruß, Martin

      BASCOM-Quellcode

      1. $regfile = "Attiny26.dat"
      2. $crystal = 8000000
      3. $framesize = 26
      4. $hwstack = 5
      5. $swstack = 5
      6. I2cinit : Waitms 5
      7. Config Lcd = 16x2
      8. Config Scl = Portb.2
      9. Config Sda = Portb.0
      10. $lib "YwRobot_Lcd_i2c.lib"
      11. Const Pcf8574_lcd = 78
      12. Dim Lcd_backlight As Byte
      13. Config I2cdelay = 15
      14. Lcd_backlight = 1
      15. Cls
      16. Config Int0 = Falling
      17. Enable Interrupts
      18. Enable Int0
      19. On Int0 Onpulse
      20. Dim Zaehler As Single
      21. Do
      22. Locate 2 , 1
      23. Lcd Zaehler ; " "
      24. Waitms 100
      25. Loop
      26. 'Interrupt bei Impuls
      27. Onpulse:
      28. Zaehler = Zaehler + 1
      29. Return
      Alles anzeigen
    • Hallo Zusammen,

      danke das war der richtige Tipp! Ich hatte mich so auf das Programm versteift und gar nicht mehr meinen Aufbau hinterfragt da der an nem ATMega problemlos funktioniert hat (Frequenz über einen Optokoppler entkoppelt) - hatte aber beim Umbau auf den Tiny die Beschaltung verkehrt gesteckt... a_67_e210de67

      Funktioniert wieder wie es soll, besten Dank euch!

      @Counter: Long ist ein guter Tipp, End muss scheinbar nicht unbedingt - funktioniert auch ohne :)
      @Michael: Hab den Stack eingestellt, danke für den Tipp

      Gruß, Martin

    • MartinKN schrieb:

      End muss scheinbar nicht unbedingt - funktioniert auch ohne :)
      Hallo Martin,,
      sinnvoll ist es aber allemal...

      Text aus Lexikon MCK:
      Zum guten Programmierstil gehört ferner, dass am Ende des Programms der Befehl "End" gesetzt wird, dessen Funktion an dieser Stelle schnell erklärt ist: Eigentlich dürfte unser Programm nie den End- Befehl erreichen, da vorher ja der Befehl Loop einen Sprung zu Do erzwingt. Sollte das Programm dennoch jemals hinter den Loop- Befehl kommen, kann es passieren, dass das Programm in undefinierte Speicherbereiche des Controllers vordringt und hier beispielsweise an angeschlossener Hardware Schäden verursacht. Der End- Befehl ist sozusagen eine Art Notstop, vergleichbar mit einem Prellbock bei der Eisenbahn um die Funktion zu verbildlichen.

      Gruß Rudi
      Immer Glück haben ist fast wie können..