Mitch64 schrieb:
Hallo Danke für die Mühe.
Ich Spiele mich damit schon lange herum.
Ich habe schon sehr viel Programmiert. Aufgabe braucht mir keiner machen.
Für mich war nur ein Tipp wichtig.
Ich habe wirklich schon sehr viele Aufwändige Sachen Programmiert.
Nur da stehe ich an. Der Rest geht ja.
Ich kann nur viele Möglichkeiten Ausprobieren.
Ich habe den Originalen Ausschaltknopf wenn es Probleme gibt.
@Stefan wie
Da du dich mit dem Programm so schwer tust, habe ich mir gedacht, dein Programm mal zu nehmen und es etwas aufzuräumen und in eine Struktur zu bringen. Dann habe ich den Pins ordentliche Namen gegeben, so dass jeder, der den Programmcode anschaut versteht, was da passiert. Genauso bin ich vorgegangen mit den Unterprogrammen (SUB's / Functionen), die auch einen Aussagefähigen Namen erhalten haben.
Vielleicht kannst du das Programm nachvollziehen und etwas dabei lernen. Natürlich darfst du auch Änderungen machen. Es ist kein Copyright drauf.
Ich nehme an, das Programm entspricht in etwa deiner Vorstellung.Alles anzeigenBASCOM-Quellcode: Beispiel Geschirrspüler-Programm
- ' Erste Geschirrspüler Steuerung
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 40
- $swstack = 40
- $framesize = 40
- Const TRUE = 1
- Const FALSE = 0
- ' --------------------------------------
- ' Eingänge festlegen
- ' --------------------------------------
- PIN_DRUCKSCHALTER Alias Pinb.1 : Portb.1 = 1 ' Druckschalter mit int. PullUp
- PIN_TASTER_START Alias Pinc.5 : Portc.5 = 1 ' Taster Start mit int. PullUp
- ' --------------------------------------
- ' Ausgänge festlegen
- ' --------------------------------------
- PIN_UMWAELZPUMPE Alias Portd.2 ' Umwälzpumpe
- PIN_LAUGENPUMPE Alias Portd.3 ' Laugenpumpe
- PIN_ZULAUFVENTIL Alias Portd.4 ' Wasser Zulaufventil
- PIN_ENTHAERTER Alias PortD.5 ' Enthärtungsanlage
- PIN_KLAPPE_REINIGER Alias Portd.6 ' Reiniger
- PIN_WASSERWEICHE Alias Portc.1 ' Wasserweiche
- PIN_HEIZUNG Alias Portb.0 ' Heizung
- PIN_LED_BETRIEB Alias Portb.3 ' Betriebsanzeige
- PIN_LED1 Alias Portb.4 ' LED 1 ?
- ' --------------------------------------
- ' Ausgänge konfigurieren
- ' --------------------------------------
- Config PIN_UMWAELZPUMPE = Output
- Config PIN_LAUGENPUMPE = Output
- Config PIN_ZULAUFVENTIL = Output
- Config PIN_ENTHAERTER = Output
- Config PIN_KLAPPE_REINIGER = Output
- Config PIN_WASSERWEICHE = Output
- Config PIN_HEIZUNG = Output
- Config PIN_LED_BETRIEB = Output
- Config PIN_LED1 = Output
- ' --------------------------------------
- ' Deklaration der verwendeten Routinen
- ' --------------------------------------
- Declare Function getKeyStart() as Byte ' Tasterabfrage
- Declare Sub Waschprogramm() ' Das Waschprogramm
- Declare Sub Waschzyklus() ' Ein Waschzyklus durchführen
- Declare Sub WasserEinlauf() ' Wasser-Einlauf, bis Druckschalter auslöst
- Declare Sub Abpumpen() ' Laugenpumpe
- Declare Sub ReinigerZugeben() ' Reiniger Hinzufügen
- Waitms 500
- Call Abpumpen() ' Laugenpumpe 20 Sekunden Einschalten
- ' ----------------------------------------------
- ' Hauptschleife
- ' ----------------------------------------------
- Do
- If getKeyStart() = 1 then ' Taster gedrückt?
- Call Waschprogramm() ' Waschprogramm ausführen
- End If
- Loop
- ' ----------------------------------------------
- ' Das komplette Waschprogramm
- ' ----------------------------------------------
- Sub Waschprogramm()
- Local i as Byte
- Set PIN_LED_BETRIEB ' Betriebsanzeige an
- ' Beginn Vorwaschprogramm
- Call WasserEinlauf() ' Zulaufventil
- For i = 1 to 4 ' Vorwäsche 4x Waschzyklus
- Call Waschzyklus()
- Next i
- Call Abpumpen() ' Abpumpen Laugenpumpe Einschalten
- ' Beginn Hauptwaschprogramm
- Call WasserEinlauf() ' Zulauf für den Hauptwaschgang
- Call ReinigerZugeben() ' Reiniger dazugeben
- PIN_HEIZUNG = 1 ' Heizung einschalten
- For I = 0 To 20 ' 5 x 4 Waschzyklen = Hauptwaschgang
- Call Waschzyklus()
- Next I
- PIN_HEIZUNG = 0 ' Heizung abschalten
- Call Abpumpen ' Abpumpen Laugenpumpe Einschalten
- ' Beginn Nachspülen
- For I = 0 To 3 ' 4 Wiederholungen
- Call WasserEinlauf() ' Zulauf für den Hauptwaschgang
- Call Waschzyklus() ' 1 Mal
- Call Waschzyklus() ' 2 Mal
- Call Waschzyklus() ' 3 Mal
- Call Waschzyklus() ' 4 Mal
- Call Abpumpen ' Abpumpen Laugenpumpe 10 Sekunden Einschalten
- Next I
- Reset PIN_LED_BETRIEB ' Betriebsanzeige aus
- End Sub
- ' ----------------------------------------------
- ' Hilfsroutinen / Unterprogramme
- ' ----------------------------------------------
- ' --------------------------------------
- ' Wasserzulauf, bis Druckschalter genug Wasser meldet
- ' --------------------------------------
- Sub WasserEinlauf()
- PIN_ZULAUFVENTIL = 1 ' Zulauf Wasserventil auf
- Do
- If PIN_DRUCKSCHALTER = 1 then exit Do ' Wasserpegel OK
- Loop
- PIN_ZULAUFVENTIL = 0 ' Zulauf Wasserventil aus
- End Sub
- ' --------------------------------------
- ' Zugabe des Reiniger
- ' --------------------------------------
- Sub ReinigerZugeben()
- PIN_KLAPPE_REINIGER = 1 ' Klappe Reiniger auf
- Wait 1
- PIN_KLAPPE_REINIGER = 0 ' Klappe zu
- End Sub
- ' --------------------------------------
- ' Laugenpumpe, Abwasser abpumpen (20s)
- ' --------------------------------------
- Sub Abpumpen()
- PIN_LAUGENPUMPE = 1 ' Laugenpumpe Einschalten
- Wait 20
- PIN_LAUGENPUMPE = 0 ' Laugenpumpe ausschalten
- End Sub
- ' --------------------------------------
- ' Ein Waschzyklus
- ' --------------------------------------
- Sub Waschzyklus()
- PIN_UMWAELZPUMPE = 1 ' Umwälzpumpe an
- Wait 120
- PIN_UMWAELZPUMPE = 0 ' Umwälzpumpe aus
- Wait 4
- PIN_WASSERWEICHE = 0 ' neg. Puls für Wasserweiche ausgeben
- Waitms 20
- PIN_WASSERWEICHE = 1
- Wait 4
- End Sub
- ' --------------------------------------
- ' Taster-Abfrage entprellt
- ' Gibt TRUE zurück, wenn Taster betätigt wird
- ' --------------------------------------
- Function getKeyStart() as Byte
- Debounce PIN_TASTER_START , 0 , _getKeyStart ' Taster ist Low-Aktiv
- getKeyStart = FALSE
- Exit Function
- _getKeyStart:
- getKeyStart = TRUE
- End Function
Ich muss aber dazu sagen, dass man es so nicht machen sollte.
Probleme treten dann auf, wenn z.B. der Drucksensor nicht meldet oder kein Wasser kommt. Auch kann man das Programm so nicht abbrechen oder pausieren, um beispielsweise Geschirr nachzulegen. Wenn also Fehler auftreten, sollte der Benutzer auch die Möglichkeit haben, den Fehler zu beseitigen. Ebenfalls nicht berücksichtigt sind unterschiedliche Waschprogramme und Temperaturen (Temperaturregelung). Dafür sollte man das Programm dann als Zustandsautomat (Statemachine) schreiben.
Wenn also mal was schief läuft beim obigen Programm, dann bleibt nur den Stecker zu ziehen.
Thema Tastenentprellung:
Ich habe in dem Programm ein besondere Form der Tastenentprellung verwendet. Sie ist eine Kombination aus Debounce und eigener Routine. Damit kann man den Tasten-Routinen schöne Namen (KeyUp, KeyDown, KeyOK etc.) geben.
Die Methode ist sehr kompakt und verriegelt auch, d,h, sie löst nur 1x aus, auch wenn man auf der Taste bleibt. Die Entprellzeit ist, wie bekannt, mit Config Debounce einstellbar.
Nach dem Einfüllen zum nächsten Programm Wechseln
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!
-
-
Das mit dem Zitieren scheint ja jetzt zu klappen. Versuch als Nächstes mal, nicht im Zitat zu antworten, dann kann man auch Dich vernünftig zitieren. So geht es leider nur als copy & paste:
Hallo Danke für die Mühe.
Ich Spiele mich damit schon lange herum.
Ich habe schon sehr viel Programmiert. Aufgabe braucht mir keiner machen.
Für mich war nur ein Tipp wichtig.
Ich habe wirklich schon sehr viele Aufwändige Sachen Programmiert.
Nur da stehe ich an. Der Rest geht ja.
Ich kann nur viele Möglichkeiten Ausprobieren.
Ich habe den Originalen Ausschaltknopf wenn es Probleme gibt.
Ehrlich gesagt: das glaub ich nicht.Wenn das die Lösung ist, möchte ich mein Problem wieder haben. -
ceperiga schrieb:
Ehrlich gesagt: das glaub ich nicht.
-
Hallo
Ich habe bei einen Test Festgestellt , das es in der Hauptschleife die Schalter oder Tasterabfrage besser geht.
Quellcode
- $regfile = "m328pdef.dat"
- $crystal = 4000000
- $hwstack=40
- $swstack = 16
- $framesize=32
- Config Portb.0 = Output
- Led1 Alias Portb.0
- Config Portb.1 = Output
- Led2 Alias Portb.1
- Config Pinc.1 = Input
- Taste Alias Pinc.1
- Pinc.1 = 1
- 'Led1 = 1
- 'Led2 = 1
- Declare Sub Schalten()
- Do
- 'If Taste = 1 Then 'Geht besser als mit declare sub. Da wird die Led1
- 'ganz Abgeschaltet
- 'Led1 = 1
- 'Else
- 'Led1 = 0
- 'End If
- Call Schalten()
- Loop
- End
- Sub Schalten()
- Led1 = 1 ' Zulauf Wasserventil 'Bei der selben Abfrage leuchtet bei mir ganz schwach noch die Led1 auf
- Do
- If Taste = 1 Then Exit Do ' Wasserpegel OK
- Loop
- Led1 = 0
- End Sub
-
Betrifft Zeile 19.
Soll das den Pullup einschalten?
Dann muß es heißen "Portc.1 = 1".
Mit pinc.1 setzt du nur den Eingang auf eins. -
ftelektro schrieb:
Betrifft Zeile 19.
Soll das den Pullup einschalten?
Dann muß es heißen "Portc.1 = 1".
Mit pinc.1 setzt du nur den Eingang auf eins.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Stefan wie ()
-
Led =1 muß nach Do Zeile 58 stehen,aber innerhalb der Schleife.Wenn die schleife verlassen wird,
sollte Led=0 stimmen. -
ftelektro schrieb:
aber innerhalb der Schleife
Kann man seine Beiträge nicht löschen?
Es geht dabei ja um aus und nicht an, daher liegt ftelektro so halb richtig.
Innerhalb der Loop auch ein else würde sie ganz aus lassen.
Jedoch schaltet die Sub sie entgegengesetzt der Main.
Sie soll während des Füllens leuchten (Taste=0) und ausgehen wenn sie voll ist (Taste=1)? Oder anzeigen das sie füllt?Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Pluto25 ()
-
@Stefan wie Du erfindest das Rad gerade neu. Die Italiener haben das schon umgesetzt: Spül1.jpg
Spül.jpg
Sieht recht funktionell aus, nur der Trafo war etwas unter(?) dimensioniert. Hat präzise 25 Monate gehalten -
Hallo
So Jetzt geht mein Geschirrspüler.
Wenn wer Interresse hat. kann ich alles da Reinstellen. Mit Foto und STL Datei für 3D Druck! -
Stefan wie schrieb:
Wenn wer Interresse hat.
-
Pluto25 schrieb:
Die Italiener haben das schon umgesetzt:
Sorry ich bin schon etwas älter und kann es nicht erkennen …
"Atmel" kann ich noch erahnen …
Ist das ein mega ?
Wen ja wäre so eine Steuerung ja nicht so uninteressant….
Könnte von einem Gewerbespüler sein oder ?
EDIT:
gastroteileshop.de/eurotec-hau…m-laenge-185mm/a-1051301/
???Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von HansHans ()
-
HansHans schrieb:
ja nicht so uninteressant…
Sie sitzt in einem keinen Gläserspüler. Da das Amtel Symbol ins Auge stach dachte ich es wär nett zu sehen wie Profis das Umsetzen. Welcher Mega genau draufsitzt habe ich nicht in Erinnerung. Da reicht der kleinste mit genügend Pins. -
Pluto25 schrieb:
Nun der Preis und Aufwand s......
Hätte ja sein können das sowas bei einen Restpostenhändler aufgetaucht ist …
Ich fände so eine fertige Platine (die ja schon mal eine Grundzulassung besitzt) zu einen
Restposten Preis sehr interessant. Nicht für GSP‘s
-
Ähnliche Themen