Interruptproblem

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

    • Es widerspricht dem Datenblatt nicht. Dort heißt es das 0,2 bzw 0,3 Vcc garantiert Low ist. 2,1V liegt darüber - kein Problem. Da selbe andersrum über 0.6Vcc garantiert High da sind 2,3V weniger als 3V - Alles gut obwohl ich da auch mehr Hysterese erwachtet hätte.
      Ein Poti zwischen Vcc und Gnd mit Mitte an Pin D2 und B0 muß ich doch jetzt nicht zeichen. Das Progrämmchen gab auf einem Lcd den Intzähler und den Pinzustand wieder.
    • Das gehört jetzt eigentlich nicht hier her, aber der Vollständigkeit halber habe ich ein Experiment gemacht.
      Nix Poti, sondern RC-Tiefpass. Also meine clevere Idee.

      Hier mein Testprogramm:

      BASCOM Source Code: Testprogramm Hysterese-Bestimmung des INT1

      1. ' Testprogramm
      2. ' Hysterese-Bestimmung des INT1
      3. ' Funktionsweise
      4. ' Der Ausgang PIN_OUT (PortB.0) wird über einen Widerstand mit dem
      5. ' INT1 (PIN_INT1) Eingang verbunden. Am INT1-Eingang wird ein Kondensator
      6. ' gegen Masse angeschlossen. Somit bildet der Widerstand
      7. ' mit dem Kondensator ein Tiefpass.
      8. ' Wird PIN_OUT High/Low gesteuert, wird sich der Pegel an PIN_INT1
      9. ' verzögert einstellen. Das Umschalten von PIN_OUT lassen wir aber von dem INT1
      10. ' erledigen. Somit stellt sich eine Frequenz ein.
      11. ' Mit dem Oszi kann nun das Signal PIN_OUT und das an PIN_INT1 dargestellt werden.
      12. ' Mit der Cursor-Funktion kann so schnell die Hysterese ermittelt werden.
      13. ' Testbedingungen:
      14. ' R = 4k7
      15. ' C = 220nF
      16. $Regfile = "m8adef.dat" ' Atmega8a
      17. $HWStack = 30
      18. $SWStack = 30
      19. $Framesize = 30
      20. $Crystal = 8000000 ' Quarz
      21. PIN_INT1 Alias PinD.3 ' INT1 Pin
      22. PIN_OUT Alias PortB.0
      23. Declare Sub ISR_INT1() ' ISR-Routine Interrupt 1
      24. On INT1 ISR_INT1
      25. Config INT1 = Change
      26. Enable INT1
      27. Config PIN_OUT = Output ' Kondensator entladen
      28. Wait 1 ' etwas abwarten
      29. Set PIN_OUT ' Jetzt wird der Oszillator angeworfen
      30. Enable Interrupts
      31. ' Hauptschleife bleibt Arbeitslos
      32. Do
      33. NOP
      34. Loop
      35. ' Umschaltung des Ausgangs abhängig von INT1-Pegel
      36. Sub ISR_INT1()
      37. If PIN_INT1 = 1 then
      38. Reset PIN_OUT
      39. Else
      40. SET PIN_OUT
      41. End If
      42. End Sub
      Display All
      Und hier das Ergebnis vom Oszi:
      DS1Z_QuickPrint1.png

      Ich habe die Cursoren so eingestellt, dass sie am Maximum und am Minimum der Dreieckspannung, was der Spannung am INT1 entspricht, stehen.
      Links im Textfeld kann man das Delta ablesen (BY-AY: 420mV)
      Das wäre jetzt die Hysterese.
      Man sieht auch schön, wann der PIN_OUT umgeschaltet wird.

      Somit ist die Hysterese doch kleiner als ursprünglich angenommen. Aber es ist definitiv eine da.

      Falls da diesbezüglich noch Kommentare/Fragen/Anregungen aufkommen, bitte vorsichtshalber ein neues Thema auf machen.