-
-
Anfänger braucht Hilfe ??
Hab ein Problem!!!
Ich möchte gerne eine Programmablaufsteuerung für ein Entwickler-Bad mit
einem ATmega8 und Bascom aufbauen und komme irgendwie nicht richtig vorwärts.
Bin auch in Basic noch nicht so perfeckt.
Hab's mir irgendwie einfacher vorgestellt.
Die Steuerung sollte folgendes machen:
Es soll ein Ausgang sofort nach einem Tastendruck (Start) eingeschaltet werden;
(das ist ja noch kein Problem)
dann soll nach genau 4:50 Minuten ein zweiter Motor eingeschaltet werden,
und nach 13:10 Minuten müssen beide Motoren abgeschaltet werden
(das bekomme ich auch noch hin)
Wenn während der Laufzeit noch mal start gedrückt wird, soll sich an dem Einschaltzeitpunkt
des zweiten Motors nichts ändern,
(allso immer noch nach den ersten angefanngenen 4:50 Minuten Motor zwei einschalten)
aber der Ausschaltzeitpunkt der beiden Motoren soll jetzt
um genau die Zeit die zwischen dem ersten Start und dem zweiten,dritten,vierten,...usw.
(jenachdem wie oft Start gedrückt wird) verlängert werden.
Hat jemand eine Idee wie man da am besten vorgeht??
Gruß
Georg
-
Super-Moderator
Robotik Visionär
Na ja, du hast zwei Zustände: Werkel steht / Werkel läuft und drei (sekunden) Zähler
Knopf druck:
Wenn Werkel steht -->
ZahlEins = 0
ZahlZwei = 290 ( 4:50)
Zahldrei = 790 (13:10)
Starte Mot 1
Zustand neu= Werkel läuft
In Zustand "werkel läuft" zählst du jede sekunde
Zähleins+1
Zahlzwei-1
Zahldrei-1
Ist zahlzwei = 0 , drehst du Mot2 auf
Ist zahldrei = 0 , drehst du alle ab, Zustand = "Werkel steht"
Drück nun wer beim laufen den Knopf, dann
Knopf druck:
Wenn Werkel läuft, dann
Zahldrei + Zähleins
Zähleins = 0
Dadurch verlängert sich nur das abdrehen um die Zeit
logo ? mfg robert
-
k*2-1 ergibt einen Generator für ungerade Zahlen,
setzt du für k eine Schleife for k 1 to 1000 oder ähnliches, kannst du diese Zahlen miteinander vergleichen, ist das Ergebnis wahr -> ungerade Zahl.
Problem bei dieser Lösung ist enorme Rechenleistung und nur ein kl. Bereich wird abgedeckt.
Vielleicht hilft es dir ja.
-
brauche immer noch Hilfe!!!
Hallo Robert,
mit diener Hilfe bin ich schon mal viel viel weiter gekommen.
Hab mal folgendes Programm erstellt.
Es läuft auch, nur beim wiederholten drücken der Start Taste ändern sich die Zeiten
und die Laufzeit ist ca. 0,5sec. zu kurz.
Hier mal mein 1.Versuch (Bitte nicht lachen!!!)
$regfile = "m8def.dat"
'Quarzfrequenz, entsprechend ihren Angaben
'der passende Quarz muss in die Fassung gesteckt werden
$crystal = 3686400
Declare Sub Starttaste
Dim Zahleins As Integer
Dim Zahlzwei As Integer
Dim Zahldrei As Integer
'Hier wird der Timer und der Teiler festgelegt
Config Timer1 = Timer , Prescale = 64
Config Debounce = 50
Ddrd = &B11010000 'Pin PD6 Ausgang, Rest Eingang
Portd.5 = 1 'PullUp an PD 5
'Hier ist die Programmhauptschleife
Do
Debounce Pind.5 , 0 , Starttaste , Sub
If Timer1 = 57600 Then
Timer1 = 0
Zahleins = Zahleins + 1
Zahlzwei = Zahlzwei - 1
Zahldrei = Zahldrei - 1
Toggle Portd.7 'nur damit ich sehen kann ob Timer arbeitet
If Zahlzwei = 0 Then Portd.4 = 1
If Zahldrei = 0 Then Portd.4 = 0
If Zahldrei = 0 Then Portd.6 = 0
End If
Loop
Sub Starttaste
If Portd.6 = 0 Then
Zahleins = 0
Zahlzwei = 5 'hab hier kleinere Werte eingegeben
Zahldrei = 10 'um beim Test nicht so lange warten zu müssen
Portd.6 = 1 'sollte jetzt 10sec. gesamt laufzeit sein
Timer1 = 0
Start Timer1
Else
Zahldrei = Zahldrei + Zahleins
Zahleins = 0
End If
End Sub
Vielleicht kannst du mir ja noch einen Tipp geben ???
Ich habs auch schon mal mit dem Timer Interrupt versucht aber da hab ich das Programm gar nicht zum laufen gebracht.
Gruß
Georg
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen