Ampelsteuerung

Gast #272363
Lesenswert?

Hallo!!!
Ich habe ein Problem mit einer Ampelsteuerung. Ich muss die
Zeitschaltung mit einem Timer überarbeiten. Lasst euch bitte nicht von
der Zeitschleife am Ende irritieren.
Gegeben war eine Ampelsteuerung, die von einem Fußgängerübergang per
Taster unterbrochen werden konnte. Die Zeit zwischen der Umschaltung
der Ampel wird per Zeitschleife(s.Ende) genommen. Meine Aufgabe war,
die Zeitschleife mit einem Timer zu ersetzen.

Hier verfoglt mich das Problem. Ich weiß nicht genau wie ich den Timer
einbauen soll. Sollte ich nach jeder Rot-Gelb-Grün Phase(jedes mal,
wenn die Ampel umspringt) den Timer neu starten?

Kann mir da bitte jmd helfen? Ich komm da gerade echt nicht weiter.
Dankeschön!!!!

mfg
Manuel
Angehängte Dateien:
Gast #272364
Lesenswert?

ohne das ich mir bisher den gegebenen quellcode durchgelesen habe (ich
kann nur die basics von avr-assembler) würde ich eine ampel so lösen:
1. Immer autos Grün
2. Wenn taste gedrückt wird Timer starten
3. Dann immer vergleichen wie groß der Zählwert vom Timer ist und im
richtigen zeitlichen abstand immer die Ampeln umschalten bis die Autos
wieder grün haben und dann den Timer stopen.
Gast #272365
Lesenswert?

Also ich würde bei einem Timer0 Überlauf Interrupt ein zuvor definiert
Bitvariable (z.B. Flag) setzen.
Den Timer würde ich auch eine Basiszeit auf 1s einstellen (sofern das
möglich ist).

Als Unterprogramme würde ich meine Ampelzustände definieren.

Im Hauptprogramm kann ich dann mein flag auswerten:
In Worten:
  Wenn flag = 1 dann,
    incr X
    flag = 0
  ende
Mit incr kann ich beliebig Zeiten im Sekundentakt erzeugen.
Wenn X einen bestimmten wert annimmt rufe ich dann einfach den
entsprechenden Ampelzustand als Unterprogramm auf und springe wieder
ins Hauptprogramm.
Gast #272368
Lesenswert?

@Unbekannter: Und was machst du mit den Starenkästen, die blitzen, wenn
jemand 1 Sekunde nach Rot-Umschaltung über die Kreuzung fährt? Durch
was ersetzt du die?
Man muss schon alle Unbekannte einer Gleichung berücksichtigen ;)
Gast #272369
Lesenswert?

Wie wärs mit echten Starenkästen, also Vogelhäuschen halt?

Aber um wieder ernst zu werden: Kann zwar selbst nicht helfen, da ich
keine Ahnung hab von AVRs und Assambler, aber ich denke es wäre sehr
hilfreich zu wissen was für eine Ampelschaltung das ist. Nur nen
Fussgängerüberweg, ne große Kreuzung, ne dumme einmündung?
Gast #272370
Lesenswert?

Erstmal ein riesen Dankeschön, dass ihr mir antwortet und auchdankean
die tollen Kommentaren, leider sit das aber ein Schulprojekt, um
genauer zu werden eine GFS(wem das was sagt).

Ich habe versucht, im Internet ein Bild von der Steuerung aufzutreiben,
habe aber leider nichts gefunden. Ihr könnt euch die als einfache
Kreuzung zweier Strassen vorsellen, an der an einer Seite einen
Fußgängerüberweg läuft.

Deswegen wird es schwierig werden, den Autos imer grün zu geben. Ich
muss also die Ampeln nach Zeit steuern. Der Fußgängerüberweg wird mit
einem Taster auf grün geschaltet, also per Interrupt.

Die unterschiedlichen Phasen müsste ich dann immer mit dem Timer0
abstoppen, dann die nächste Phase laufen lassen, dann wieder den Timer0
starten und stoppen. Geht das dann so?
Gast #272371
Lesenswert?

So würde ich es machen:
Mit dem Timer bastelt man sich eine Zeitbasis, die die Grundlage für
alle Ampelphasen bildet (z.B. 1s).
Jetzt hat man eine Variable, die man auf die Dauer einer Ampelphase
setzt (z.B. 30 für 30 Sekunden).
Diese Variable wird beim Timer-Interrupt herunter gezählt.
Im Hauptprogramm wird der Fußgänger-Taster und die Variable auf 0
abgefragt.
Die Ampelphasen werden gezählt, und die Zeiten in einem Array
"vorgehalten". Sobald eine Phase (Variable = 0) beendet ist, wird der
Phasenzähler um 1 erhöht, und sofern noch nicht das Ende der Tabelle
ereicht wurde die neue Phasendauer übertragen.
Da die Fußgängerampel nur dann grün werden darf, wenn der Querverkehr
rot hat, muß man die Kombination überprüfen und gegebenenfalls
(Fußgängerbedarfsmeldung) die Phasen entsprechend ändern (Dauer, grün
für Fußgänger).
Bei einer simplen Kreuzung kann man sich aber die Fußgänger-Taste
sparen, sofern beide Strasse gleichberechtigt sind, da dann die
Fußgänger-Ampel parallel zur entsprechenden Autoampel arbeiten kann.
Sind die Strassen nicht gleichberechtigt, bietet sich noch eine
Induktionsschleife für die Strasse mit der geringeren Priorität an.

@Starenkästen:
Wenn keine Ampel vorhanden ist, werden die wohl auch kaum gebraucht.
Ausserdem sind sie in der Aufgabe nicht gefordert, und wenn dann könne
sie auch auf die Geschwindigkeit der Fahrzeuge reagieren...
Gast #272376
Lesenswert?

@rahul: der der fußgängerüberweg bekommt erst dann grün, wenn der taster
gedrückt wurde! Die Logik habe ich mir allerdings auch schon überlegt,
da ich die gleiche Steuerung mit Zeitschleife bereits habe. Diese
müsste ich dann nur noch mit dem Timer ersetzen. Bin mir da aber ein
wenig unsicher

@kai: das freut mich, dass ich nicht der einzige bin ^^
Ampelsteuerungen werden wohl auch immer wieder bearbeitet werden

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren