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!
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 !
das schalten zwischen Einfüllen und Waschen geht nicht so Zuverlässig.
Woran hängt's? Der Druckschalter arbeitet richtig? Hat eine Luftfalle? Wird nicht von der Pumpe gestört?
Vielleicht wäre ein Ablaufplan nützlich. Was soll wann passieren und was soll passieren wenns nicht passiert (Wasserhahn zu, Ventil klemmt, Türe auf, zu kalt, zu heiß,etc)
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 !
Quellcode
' Test für Einlass Ventil und Druckschalter
$regfile = "m2560def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 50
$framesize = 100
'Config Portf = Output
'Ddrl = &B10101010
'Ddrb = &B00001010
Config Portg = Output
Config Portl = Output
Config Porta = Input
Config Portc = Input
Led1 Alias Portl.0
Led2 Alias Portl.1
Led3 Alias Portl.2
Led4 Alias Portl.3
Led5 Alias Portl.4
Led6 Alias Portl.5
Led7 Alias Portl.6
Rel Alias Portg.0 'Ausgang für den Externen Timer
Taste1 Alias Pina.3 'Taste Links
Porta.3 = 1
Taste2 Alias Pina.5 'Taste OK
Porta.5 = 1
Taste3 Alias Pina.7 'Taste Runter
Porta.7 = 1
Taste4 Alias Pinc.6 'Taste OK
Portc.6 = 1
Taste5 Alias Pinc.4 'Taste OK
Portc.4 = 1
Config Pina.1 = Input 'Eingang vom Externen Timer als Zulaufsimulator
Schalter Alias Pina.1
Porta.1 = 1
Do
Debounce , Taste3 , 0 , Einfuellen , Sub 'Springe zum Untermenue Einfüllen um das Programm zu Starten
Debounce , Schalter , 1 , Einfuellenaus , Sub 'Wenn Schalter ist Eingeschalten dann soll die Led 3 Ausgeschalten werden
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
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-Quellcode
Einschalten:
Led1 =1
If Led1 =1ThenGosub Einfuellen
Return
Und von dort aus direkt nach "Einfüllen".
BASCOM-Quellcode
Einfuellen:
Led4 =1
Rel =1 'Impuls für den Externen Timer
Waitms20
Rel =0
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.
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.
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.
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?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mitch64 ()
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.
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.
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 konnten, Zustands-Folge-Steuerung.
Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.