ATTiny zählt falsch bei interrupts

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

    • 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 Source Code

      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
      Display All
    • Hi,

      mir fällt grade auf das nach dem Loop ein End fehlt.
      Vielleicht läuft das Program einfach "durch".

      Nimm zum Zählen lieber eine Long Variable Ext. Link
      Die Zählt ganze Zahlen von -2147483648 bis 2147483647

      Eine Single kann Fließkomma Zahlen wie 1,523335, die zählst du ja nicht.
      Ansosnten wie Oben schon geschrieben.
      Grüße
      Counter
    • 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
    • New


      MartinKN wrote:

      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..