Guten Tag,
ich bin gerade dabei eine Elektrische Schiebetür zu Automatisieren , bin
aber leider noch Anfänger was IQ angeht . Habe es bist jetzt geschafft
das es Auf/Zu fährt aber jetzt ist meine Frage wie kann ich es mit der
Zeit steuern wie z.B. wenn innerhalb von 10 sec. der Endschalter nicht
erreicht wird das Automatisch abschaltet, der ein Klemmschutz ist
mechanisch realisiert nur ich möchte nicht das der Motor dann durchläuft
wenn er denn Endschalter nicht erreicht. Leider ist es nicht möglich mit
einem or und waitms denn da wird ja der komplette Controller gestoppt
und der Endschalter ist Außerfunktion. Und wie ist es möglich das die
Öffnungszeit zu Realisieren ohne den ganzen Controller in dieser Zeit zu
blockieren? Was ich noch gerne wissen möchte ist es gut wenn man als
Verriegelung die 2 Ausgänge im Start Befehle gibt das nicht erneut
gestartet werden kann, oder gibt es da bessere alternativen denn in der
warte Zeit wäre es ja möglich erneut Zu starten! Was eigentlich egal
wäre da die Türe durch den Endschalter abgeschaltet wird wenn sie offen
ist ?(Die Schütze werden Hardwareseitig auch verriegelt.) Als Motor
dient ein 24v dc Motor der umgepolt wird.
Meinen Code füge ich bei soweit funktioniert er!
würde mich auf verschiedene Lösungsvorschläge freuen
LG
Patzi schrieb:> mit> einem or und waitms denn da wird ja der komplette Controller gestopptPatzi schrieb:> das die> Öffnungszeit zu Realisieren ohne den ganzen Controller in dieser Zeit zu> blockieren?
Die Zauberworte heissen TIMER und INTERRUPT.
Damit baut man einen Zustandsautomaten.
Dein Controller kann so, viele Dinge "scheinbar" gleichzeitig tun!
Danke für deine Antwort leider nimmt er nur waitms die anderen
funktionieren nicht in der Syntax auch delay nicht!!
Hättest du auch noch eine andere Idee?
lg
if (Autobefehl = 0) and (EndschalterZU = 1) and (EndschalterOffen = 1)
2
then //Darf nur starten wenn die Tür auch geschlossen ist,
3
//und ein Startbefehel kommt und Endschalteroffen nicht gedrückt ist.
So macht man das aber nicht - Tür soll immer aufgehen können - was
ist wenn etwas oder jemand dazwischen klemmt ?
Patzi schrieb:> Danke für deine Antwort leider nimmt er nur waitms die anderen> funktionieren nicht in der Syntax auch delay nicht!!
Vielleicht so ?
1
Dim SysCnt As Word = 0
2
Dim TuerCnt As Word = 0
3
Dim TimeOut As Boolean = false
4
5
SysInit()
6
7
Avr.Interrupts.enable '* Enable global Interrupts
8
9
TuerAuf(100) '*** 100 * 100ms = 10000ms = 10sec für die Tür um aufzugehen
10
11
Do
12
13
14
if TimeOut Then
15
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
'*** 10sec sind ohne Endanschlag vorbei, tu etwas
17
'...
18
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
19
EndIf
20
21
if Auf = 1 and (EndschalterOffen = 0) then '*** Ich nehme an, daß jetzt die Tür zu ist ?
Uff Bascom ist schon zu lange her bei mir. Vielleicht wollte ich es auch
verdrängen :-)
Timer ist kein Basic Befehl, sondern der Name einer oder mehrerer
Peripherieeinheiten in Deinem Mikrocontroller.
Diesem Ding kannst Du einen festen Takt vorgeben und der zählt einfach,
egal was Dein Programm gerade macht. Und wenn Du hin und wieder den
Zählerstand liest, könntest Du bestimmen, wieviel Zeit vergangen ist.
Da liegt nämlich die Kunst, die Zeit nicht zu vertrödeln, sondern im
Programmablauf fort zu fahren. So kannst Du auf den Endschalter achten
und nach einer festgelegten Zeit aufgeben.
Interrupts braucht es für Deine Aufgabe nicht unbedingt. Da Du
vermutlich noch am Lernen bist, würde ich das Kapitel nach hinten
verschieben.
Was Du Deinem Programm noch beibringen solltest ist eine sogenannte
Entprellung der Eingänge. Auch dabei kann Dir ein Timer eine große Hilfe
sein, um die Frage zu beantworten, ob der Eingang jetzt so richtig in
einem Zustand ist oder nur so rumkaspert.
Nimm einen Timer mit möglichst vielen Bits. Mach Dich aber trotzdem auf
einen sogenannten Timerüberlauf gefasst.
Hallo,
es handelt sich um die Entwicklungsumgebung LunaAVR.
TimerN und auch die Entprellung eines Ports (nach Peter Dannegger) kann
man einfach über eine Hochsprachenimplementierung nutzen.
Otto schrieb:> Bascom?
Das sieht eher pascal-lig aus mit den Proceduren drin. So, wie das hier
auch:
Procedure Mittagessen
uses Messer, Gabel, Löffel;
var Schnitzel, Kartoffel, Möhre: real;
Begin
Repeat
Open Mund for Input as Stream #1;
until Teller leer;
Writeln (`Ich bin so satt, ich mag kein Blatt!`)
End.
Writeln (`MfG Paul`)
Nein Paul B,
Patzi hat sich schon im LunaAVR Forum mit der selben Fragestellung
gemeldet und auch Lösungswege aufgezeigt bekommen, teilweise als PN.
Auch findet man hier einen kompletten Lernvorschlag, noch ohne
Timernutzung.
Als erstes muss ein DEA "erzeugt" werden, der dann über eine "state
machine" implementiert werden kann.