Nach dem Einfüllen zum nächsten Programm Wechseln

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

    • Nach dem Einfüllen zum nächsten Programm Wechseln

      Source Code

      1. ' Test für Einlass Ventil und Druckschalter
      2. $regfile = "m2560def.dat"
      3. $crystal = 16000000
      4. $hwstack = 40
      5. $swstack = 50
      6. $framesize = 100
      7. 'Config Portf = Output
      8. 'Ddrl = &B10101010
      9. 'Ddrb = &B00001010
      10. Config Portg = Output
      11. Config Portl = Output
      12. Config Porta = Input
      13. Config Portc = Input
      14. Led1 Alias Portl.0
      15. Led2 Alias Portl.1
      16. Led3 Alias Portl.2
      17. Led4 Alias Portl.3
      18. Led5 Alias Portl.4
      19. Led6 Alias Portl.5
      20. Led7 Alias Portl.6
      21. Rel Alias Portg.0 'Ausgang für den Externen Timer
      22. Taste1 Alias Pina.3 'Taste Links
      23. Porta.3 = 1
      24. Taste2 Alias Pina.5 'Taste OK
      25. Porta.5 = 1
      26. Taste3 Alias Pina.7 'Taste Runter
      27. Porta.7 = 1
      28. Taste4 Alias Pinc.6 'Taste OK
      29. Portc.6 = 1
      30. Taste5 Alias Pinc.4 'Taste OK
      31. Portc.4 = 1
      32. Config Pina.1 = Input 'Eingang vom Externen Timer als Zulaufsimulator
      33. Schalter Alias Pina.1
      34. Porta.1 = 1
      35. Do
      36. Debounce , Taste3 , 0 , Einfuellen , Sub 'Springe zum Untermenue Einfüllen um das Programm zu Starten
      37. If Schalter = 1 Then 'Wenn Schalter ist Eingeschalten dann soll die Led 3 Ausgeschalten werden
      38. Led3 = 0
      39. Else
      40. Led3 = 1
      41. End If
      42. If Led1 = 1 And Led3 = 1 And Schalter = 1 Then
      43. Gosub Waschen
      44. End If
      45. Loop
      46. End
      47. Einfuellen:
      48. Led1 = 1
      49. Rel = 1 'Impuls für den Externen Timer
      50. Waitms 20
      51. Rel = 0
      52. Return
      53. Waschen:
      54. 'Waschprogramm
      55. Led5 = 1
      56. Wait 2
      57. Led5 = 0
      58. Led1 = 0
      59. Return
      Display All
    • Hallo @Stefan wie
      So wie ich das aus deinem Code sehe, ist da noch deutlich mehr geplant, als nur Wasser in ein Behälter laufen zu lassen und bei Erreichen einer bestimmten Füllhöhe das Ventil schließen.

      Sieht irgendwie aus, als ob du da eine Waschmaschine programmieren willst.

      Ich weiß nicht, ob du schon so weit bist, aber du solltest dir mal das "Statemachine Tutorial" im Lexikon ansehen. Programm musst du dann in Zustände aufteilen. Also jede Aufgabe ist ein Zustand. Und Zustände werden gewechselt durch Ereignisse.

      In Deinem Fall hast zu einen Ruhezustand. Da macht das Ding erst mal nix, bis du start drückst.
      Das ist das Ereignis. Dadurch wechselst zu in den nächsten Zustand "Wasser einfüllen", Der bleibt dann so lange aktiv und das Ventil ist offen, bis der Druckmesser auslöst. Das ist das Ereignis zu Wechseln nach Zustand "Waschen".

      So könnte man das aufteilen.

      Eine Waschmaschine ist nicht so trivial, wie so manch einer das denken mag.
    • Hallo Stimmt.
      In Demfall sollte es für den Geschirrspüler laufen. Der Rest ist alles Fertig. Das Statemaschine habe ich schon Probiert. Bei mir hat das nicht so Geklappt wie ich mir das vorstelle.
      Es fehlt mir nur das passende Programm. Ja Testlauf habe ich schon machen können , nur das schalten zwischen Einfüllen und Waschen geht nicht so Zuverlässig.
      Das Einzige was noch gehen kann ist PC interrupt. Ausser es hat wer eine andere Idee !
    • Hallo
      Das Problem habe ich warscheinlich schon gelöst !
      Das Problem ist wenn ich die Taste Drücke ist das nicht gewartet wird wenn das Wasser eingefüllt ist und Gleich zum nächsten schritt geht !


      Source Code

      1. ' Test für Einlass Ventil und Druckschalter
      2. $regfile = "m2560def.dat"
      3. $crystal = 16000000
      4. $hwstack = 40
      5. $swstack = 50
      6. $framesize = 100
      7. 'Config Portf = Output
      8. 'Ddrl = &B10101010
      9. 'Ddrb = &B00001010
      10. Config Portg = Output
      11. Config Portl = Output
      12. Config Porta = Input
      13. Config Portc = Input
      14. Led1 Alias Portl.0
      15. Led2 Alias Portl.1
      16. Led3 Alias Portl.2
      17. Led4 Alias Portl.3
      18. Led5 Alias Portl.4
      19. Led6 Alias Portl.5
      20. Led7 Alias Portl.6
      21. Rel Alias Portg.0 'Ausgang für den Externen Timer
      22. Taste1 Alias Pina.3 'Taste Links
      23. Porta.3 = 1
      24. Taste2 Alias Pina.5 'Taste OK
      25. Porta.5 = 1
      26. Taste3 Alias Pina.7 'Taste Runter
      27. Porta.7 = 1
      28. Taste4 Alias Pinc.6 'Taste OK
      29. Portc.6 = 1
      30. Taste5 Alias Pinc.4 'Taste OK
      31. Portc.4 = 1
      32. Config Pina.1 = Input 'Eingang vom Externen Timer als Zulaufsimulator
      33. Schalter Alias Pina.1
      34. Porta.1 = 1
      35. Do
      36. Debounce , Taste3 , 0 , Einfuellen , Sub 'Springe zum Untermenue Einfüllen um das Programm zu Starten
      37. Debounce , Schalter , 1 , Einfuellenaus , Sub 'Wenn Schalter ist Eingeschalten dann soll die Led 3 Ausgeschalten werden
      38. Loop
      39. End
      40. Einfuellen:
      41. Led1 = 1
      42. Led4 = 1
      43. Rel = 1 'Impuls für den Externen Timer
      44. Waitms 20
      45. Rel = 0
      46. Return
      47. Einfuellenaus:
      48. Led4 = 0
      49. If Led1 = 1 And Led4 = 0 Then
      50. Gosub Waschen
      51. End If
      52. Return
      53. Waschen:
      54. 'Waschprogramm
      55. Led5 = 1
      56. Wait 2
      57. Led5 = 0
      58. Wait 1
      59. Led5 = 1
      60. Wait 2
      61. Led5 = 0
      62. Wait 1
      63. Led5 = 1
      64. Wait 2
      65. Led5 = 0
      66. Led1 = 0
      67. Return
      Display All
    • Stefan wie wrote:

      Das Problem ist, wenn ich die Taste Drücke ist, das nicht gewartet wird, wenn das Wasser eingefüllt ist, und Gleich zum nächsten schritt geht !
      Mit nächstem Schritt meinst du vermutlich "Einfüllenaus" und "Waschen".

      Das liegt daran, dass du den "Schalter" auf 1-Pegel prüfst (der hat am Pin int. PullUp eingeschaltet und ist damit HIGH). Siehe Zeile 5.

      BASCOM Source Code

      1. Do
      2. Debounce , Taste3 , 0 , Einfuellen , Sub 'Springe zum Untermenue Einfüllen um das Programm zu Starten
      3. Debounce , Schalter , 1 , Einfuellenaus , Sub 'Wenn Schalter ist Eingeschalten dann soll die Led 3 Ausgeschalten werden
      4. Loop

      Außerdem müssen die Kommas da direkt nach Debounce weg!
      Richtig ist so:

      BASCOM Source Code

      1. Do
      2. Debounce Taste3 , ....
      3. Debounce Schalter , ....
      4. Loop
    • Hallo wie kann ich von einen Programm zum nächsten Programmabschnitt Springen. Danke

      Source Code

      1. ' Test für Einlass Ventil und Druckschalter
      2. $regfile = "m2560def.dat"
      3. $crystal = 16000000
      4. $hwstack = 40
      5. $swstack = 50
      6. $framesize = 100
      7. 'Config Portf = Output
      8. 'Ddrl = &B10101010
      9. 'Ddrb = &B00001010
      10. Config Portg = Output
      11. Config Portl = Output
      12. Config Porta = Input
      13. Config Portc = Input
      14. Led1 Alias Portl.0
      15. Led2 Alias Portl.1
      16. Led3 Alias Portl.2
      17. Led4 Alias Portl.3
      18. Led5 Alias Portl.4
      19. Led6 Alias Portl.5
      20. Led7 Alias Portl.6
      21. Rel Alias Portg.0 'Ausgang für den Externen Timer
      22. Taste1 Alias Pina.3 'Taste Links
      23. Porta.3 = 1
      24. Taste2 Alias Pina.5 'Taste OK
      25. Porta.5 = 1
      26. Taste3 Alias Pina.7 'Taste Runter
      27. Porta.7 = 1
      28. Taste4 Alias Pinc.6 'Taste OK
      29. Portc.6 = 1
      30. Taste5 Alias Pinc.4 'Taste OK
      31. Portc.4 = 1
      32. Config Pina.1 = Input 'Eingang vom Externen Timer als Zulaufsimulator
      33. Schalter Alias Pina.1
      34. Porta.1 = 1
      35. 'Dim Menue As Byte
      36. 'Dim S As Byte
      37. Do
      38. Debounce Taste3 , 0 , Einschalten , Sub 'Springe zum Untermenue Einfüllen um das Programm zu Starten
      39. Debounce Schalter , 1 , Einfuellenaus , Sub 'Wenn Schalter ist Eingeschalten dann soll die Led 3 Ausgeschalten werden
      40. Loop
      41. End
      42. Einfuellen:
      43. Led4 = 1
      44. Rel = 1 'Impuls für den Externen Timer
      45. Waitms 20
      46. Rel = 0
      47. Return
      48. Einfuellenaus:
      49. Led4 = 0
      50. Return
      51. Einschalten:
      52. Led1 = 1
      53. If Led1 = 1 Then Gosub Einfuellen
      54. Return
      55. Waschen1:
      56. 'Waschprogramm
      57. Led5 = 1
      58. Wait 2
      59. Led5 = 0
      60. Wait 1
      61. Led5 = 1
      62. Wait 2
      63. Led5 = 0
      64. Wait 1
      65. Led5 = 1
      66. Wait 2
      67. Led5 = 0
      68. Gosub Waschen2
      69. Return
      70. Waschen2:
      71. Gosub Einfuellen
      72. If Led1 = 1 And Led4 = 0 Then
      73. Led6 = 1
      74. Wait 2
      75. Led6 = 0
      76. Wait 1
      77. Led6 = 1
      78. Wait 2
      79. Led6 = 0
      80. Wait 1
      81. Led6 = 1
      82. Wait 2
      83. Led6 = 0
      84. End If
      85. 'Led1 = 0
      86. Return
      Display All

      The post was edited 1 time, last by Stefan wie ().

    • Jetzt wäscht er gar nicht mehr ;(
      Wie wärs mit einer Hilfsvariablen? z.B. Dim Wasch as Byte.
      Beim Einschalten Zeile 98 Wasch=0.
      wenn gefüllt Zeile 88 Incr Wasch
      und in der Main Zeile67
      If wasch=1 then
      gosub Waschen1
      elseIf wasch=2 then
      gosub waschen2
      end if
      Das Einfüllen in waschen2 müßte dann jedoch am ende von waschen1.

      Davor vielleicht noch eine Abfrage "if sauber goto ende else waschen2 :D
    • Pluto25 wrote:

      Jetzt wäscht er gar nicht mehr
      Stimmt, es wird ja auch nirgend wo das Waschen1 oder Waschen2 Unterprogramm aufgerufen.

      @Stefan wie
      Ist es nicht so, dass nach dem Einschalten das Wasserventil geöffnet werden muss?
      Und dann muss das Wasser so lange laufen, bis der Druckschalter ausreichenden Wasserstand meldet?

      Beim betätigen von Taster3 springst du nach "Einschalten".

      BASCOM Source Code

      1. Einschalten:
      2. Led1 = 1
      3. If Led1 = 1 Then Gosub Einfuellen
      4. Return

      Und von dort aus direkt nach "Einfüllen".

      BASCOM Source Code

      1. Einfuellen:
      2. Led4 = 1
      3. Rel = 1 'Impuls für den Externen Timer
      4. Waitms 20
      5. Rel = 0
      6. Return
      Nach rund 20ms bist du wieder in der Hauptschleife. Wasser läuft aber keins, oder?

      Du könntest in der Einfüllen-Routine das Wasserventil öffnen und dann ein Do-Loop verwenden, um auf den gewünschten Wasserpegel zu warten. Erst wenn der erreicht wird, wird die Do-Loop verlassen und du springst zurück (Return). Eigentlich müsstest du aber zum Waschen1 springen.

      Ich befürchte, du wirst zwischendurch dein Geschirr mal von Hand sauber machen müssen. a_563_31ebf57e
    • Ich versuche gerade zu verstehen, was an deinem Controller so alles angeschlossen ist.
      Da kommen doch einige Fragen auf

      Vielleicht kannst du uns etwas erhellen.

      Du hast z.B. 2 komplette Ports als Eingang konfiguriert. An einem sind Taster angeschlossen und ein externer Timer.
      Kannst du bitte erklären, warum da 3 Taster OK vorhanden sind und was es mit dem externen Timer auf sich hat?
      Also was ist der externe Timer, was tut der, welche Aufgabe hat der? Wie funktioniert der?

      Und welche Funktionen sollen mit den Tasten gesteuert werden?
      Welche Funktion hat Taste Links, Taste Runter und die 3 Tasten OK?

      So wirklich schlau werde ich aus deinem Code nicht.
      Das wäre aber zum Verständnis wichtig, damit man richtig helfen kann.

      Mir stellt sich nämlich die Frage, wie komplex der Steuerungs-Ablauf am ende sein wird, und ob das so erreicht werden kann, wenn man die jetzige Programmstruktur weiter verfolgt.
      Vielleicht sollte man doch über eine Statemachine nachdenken, was ja auch nicht kompliziert ist.

      Damit wäre das Programm aber sauber strukturiert, Änderungen können einfach nachträglich hinzugefügt werden und das Programm ist einfacher zu lesen.
    • Hallo

      Das mit den Rauf und Runter Tasten das ist nur zum Test ein Simulationsaufbau. Der Externe Timer soll als Wassereinlaufen Simulaton dienen.
      Der Externe Timer wird kurz als Taster angestoßen. Das ist ein Tiny24 als Timer der den Wasserzulauf Simuliert. Der Ausgang wird am Atmega dann Ausgewertet.
    • Stefan wie wrote:

      Der Externe Timer soll als Wassereinlaufen Simulaton dienen.
      Der Externe Timer wird kurz als Taster angestoßen. Das ist ein Tiny24 als Timer der den Wasserzulauf Simuliert. Der Ausgang wird am Atmega dann Ausgewertet.
      OK, und was kommt dann am Atmega an?
      Ein einzelner Puls, eine Frequenz?
      Wie muss ich mir das vorstellen?

      Und was genau soll Taste Rauf und Runter und Links im Programm bewirken?

      The post was edited 1 time, last by Mitch64 ().

    • So Jetzt zum Ablauf.

      1. der Taster Start wird Gedrückt.

      2. Das Wasserventil wird Aktiviert , wenn der Drucksensor sagt das das Wasser Gefüllt ist.

      3. Kalt Vorwaschen. Umwelzpumpe wird gestartet und lauft 2min , dann wird die Wasserweiche umgeschaltet
      Das geht dann 4 Mal . Das sind dann 8 min.

      4. Wasser wird Abgepumpt.

      5. Hauptwaschgang. Wasser Einfüllen. Heizung an , Reinigungsklappe wird Geöffnet.

      Der Hauptwaschgang von 8 min soll 4 mal in der for nextschleife Wiederholt werden.

      6. Abpumpen

      7. Spülvorgang wird 2 mal 8 min Ausgeführt.

      8. Abpumpen .

      9. Wasser Einlassen. Aufheizen . Abpumpen. Ist Trocknungsvorgang.



      Wie Geschrieben mir fehlt nur die Programmierung.

      Danke.
    • OK, und was kommt dann am Atmega an?
      Ein einzelner Puls, eine Frequenz?
      Wie muss ich mir das vorstellen?

      Und was genau soll Taste Rauf und Runter und Links im Programm bewirken?

      Der Timer bekommt mit einen kurzen Impuls. Wie ein Taster

      kurz 5 Volt an
      waitms 20
      5 Volt aus aus

      einen Impuls.

      Der Externe Tiny giebt es mit einer Led wieder aus .

      Also Led an und nach 10 Sekunden geht die led wieder aus.
    • Stefan wie wrote:

      Wie Geschrieben mir fehlt nur die Programmierung.
      Du machst Witze!
      "Nur" die Programmierung fehlt.
      Ich würde sagen, das ist das Herzstück deiner Steuerung.

      OK, jetzt haben wir mal einen Groben Ablauf.

      Welche Bedien-Tasten und Eingangssignale müssen wann berücksichtigt werden?

      Sorry, wenn ich so bohre. Aber meine Fragen hast du noch immer nicht beantwortet.

      Welche Tasten sollen was bewirken. Taste Runter, Links und warum 2 OK-Tasten?

      Wenn man oben mal deine Arbeitsschritte betrachtet, stellt sich für mich die Frage, ob während der Abarbeitung auf Tasten zu reagieren ist bzw. auf Sensor-Signale.

      Müsste ich das Programm schreiben mit aktueller Information, müsste ich ablehnen, weil nicht umsetzbar.
      Grund wäre, ohne Info kann man kein Programm schreiben.

      Also versuche mal die Fragen zu beantworten.
      Und überlege, in welchem Arbeitsschritt auf welche Tasten/Sensoren reagiert werden muss.

      Auf der Basis kann man dann irgendwo mal anfangen, eine Programmstruktur aufzubauen, die das Leistet, was du am Ende haben willst.
    • Hallo

      Es gibt nur eine Einzige Starttaste die am Anfang Abgerufen wird. Die Anderen werden nicht benutzt. Der Externe Timer geht ja schon. Das Led signal ist auf den Atmega angeschlossen.
      Wenn ich auf den Atmega die Taste Drücke wird die led4 eingeschalten und der tiny 24 bekommt kurz ein Tastensignal. Dort geht die Led an . Und solange die led an ist liegt auch am Atmega ein low signal an.


      Sensor ist eben für den Einlass vom Wasser. Sonst gibt es keinen Sensor.
      Ich habe für die Wasserweichenumschaltung auch einen Tiny . Die Temperaturregelung wir auch mit einen Tiny gesteuert.
    • Post#15 ist ja schon mal ein Anfang. Mach daraus jetzt einen Programmablaufplan und schreib nicht nur was passieren soll, sondern auch die Abhängkeiten und Folgezustände einarbeiten. PAP Designer ist dazu ein gutes Werkzeug.

      Und wenn man schon Aliases und Variablennamen vergibt, dann sollten die Namen schon etwas sinnvolles Aussagen (Taste Start statt taste1, Taste Schnellgang statt Taste, Zulaufventil statt LED1, etc.) und möglichst selbsterklärend sein. Nicht nur für Andere, die helfen sollen sondern auch später für einen selbst, den nach Wochen oder Monaten weiss man nicht mehr was man sich damals gedacht hat. Aber Programmdokumentation wird ja heutzutage völlig überschätzt, ich sage nur Autoindustrie.

      Stefan wie wrote:

      Wie Geschrieben mir fehlt nur die Programmierung.
      Und die wächst auf Bäumen.

      Und auch wenn Mitch64 manchmal mit seiner State machine ^^ nervt ^^ , wo er Recht hat hat er Recht und bei der geplanten Aufgabe ergibt sich das zwangsläufig. Übrigens hieß das früher, als wir alle noch Deutsch a_45_132ca9f5 konnten, Zustands-Folge-Steuerung.
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.