PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger braucht Hilfe ??



microschorsch
17.12.2004, 15:19
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

PicNick
17.12.2004, 16:01
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

Arne
17.12.2004, 18:16
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.

microschorsch
19.12.2004, 17:27
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