 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 13.02.2008, 18:20 Titel: Fahrstuhlsteuerung |
|
|
Also, die Problemstellung:
Code: | Baue einen Schaltplan, bestehend aus AND und OR-Gattern, für einen Fahrstuhl. Das zugehörige Gebäude hat 14 Stockwerke. Die Schaltung muss nach der Wahl des Stockwerks entscheiden, ob der Fahrstuhl höher oder tiefer fahren soll. In dem Gebäude verkehren 2 Fahrstühle, einer für den Bürotrakt, einer für den Wohntrakt. Zum Bürotrakt (Fahrstuhl 1) gehören die Etagen 2, 4, 5, 7 , 8, 13, zum Wohntrakt die Etagen 1, 3, 6, 9, 10, 11, 12, 14. Beide Fahrstühle fahren zudem das Erdgeschoss an. |
Ich wäre das Problem so angegangen, dass ich 8 Eingänge (4 für aktuelle Etage, 4 für Zieletage) verwende, sowie 2 Ausgänge (einer für hoch, einer für runter. Eine weitere Schaltung muss dafür sorgen, dass beide Ausgänge niemals zugleich 1 sein dürfen.)
Kennt ihr eine bessere Variante? Weil, eine Logiktabelle mit 256 Einträgen ist mir zu heftig, und beim Karnaught-Diagramm weiß ich nicht, wie ich es von 4 nach 8 Bit erweitere... |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 13.02.2008, 21:12 Titel: |
|
|
Zum Ermitteln der Fahrtrichtung baust Du eine Vergleicherschaltung. Die besorgt das Selektieren von alleine. Wenn Du das sicherstellen willst, daß immer nur ein Ausgang 1 ist, nimm eine xOR.
Darüberhinaus würde ich mal im Elektronik-Kompendium posten, das sind die Hardware-Freaks. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 13.02.2008, 22:28 Titel: |
|
|
Warum eine Vergleicherschaltung?
Die Prüft doch ob die Werte gleich sind?
Wir hatten (Ist eine Gruppenaufgabe) überlegt, die Differenz mit einem Volladdierer auszurechnen, aber irgendwie haben wir das nicht zusammenbekommen...
und XOR darf ich noch nicht nehmen, muss ich halt "nachbilden"  |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 14.02.2008, 00:40 Titel: |
|
|
Ich hab jetzt einfach mal ne Logiktabelle erstellt: http://pmedia.max06.de/
Die würde 91 AND-Gatter erfordern pro Schaltung, und das ist eindeutig zu aufwendig für ein Hochhaus mit 14 Etagen.... da es dann insgesamt 182 AND-Gatter wären.
Das soll man mal - als Schüler - ordentlich auf Papier bringen... |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 14.02.2008, 09:56 Titel: |
|
|
Ein Vergleicher stellt nicht nur fest, ob zwei Zahlenwerte gleich sind, sondern auch, welches davon größer ist, und hat dafür entsprechende Ausgänge. Solche Schaltungen gibt es (natürlich auch) integriert, aber sie lassen sich auch nachbilden. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.02.2008, 13:17 Titel: Re: Fahrstuhlsteuerung |
|
|
PMedia hat Folgendes geschrieben: | Eine weitere Schaltung muss dafür sorgen, dass beide Ausgänge niemals zugleich 1 sein dürfen. |
Wieso? Die beiden Fahrstühle fahren doch nicht im selben Schacht? Und ist das Erdgeschoss nicht Etage 0? Die erste Etage gehört doch schon zum Wohntrakt.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 14.02.2008, 19:44 Titel: |
|
|
Mit beiden Ausgängen meinte ich, dass ein Ausgang für Hoch, einer für runter verwandt wird. Die dürfen deshalb also nicht 1 sein, weil sonst in beide Richtungen gleichzeitig gefahren werden müsste.
Das Problem wurde heute mit AnzahlStockwerke*2 AND-Gattern gelöst, ganz geblickt hab ichs noch nicht, aber mal sehen :] |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 15.02.2008, 00:24 Titel: |
|
|
Code: | Dim As UByte UpUp, Down, S, I, X, Y
#define i0 val(mid(bin(i,4),4,1))
#define i1 val(mid(bin(i,4),3,1))
#define i2 val(mid(bin(i,4),2,1))
#define i3 val(mid(bin(i,4),1,1))
#define s0 val(mid(bin(s,4),4,1))
#define s1 val(mid(bin(s,4),3,1))
#define s2 val(mid(bin(s,4),2,1))
#define s3 val(mid(bin(s,4),1,1))
#define recalc upup = (i2 AND s3 ) OR (i1 AND (s2 OR s3)) OR (i0 AND (s1 OR s2 OR s3)) : down = (i1 AND s0 ) OR (i2 AND (s1 OR s0)) OR (i3 AND (s2 OR s1 OR s0))
width 80,25
s = 1
i = 1
Print "i0 i1 i2 i3 s0 s1 s2 s3 " + Chr(186) + " up " + Chr(186) + " down " + Chr(186)
Print string(24,205);
Print string(1,206);
Print string(4,205);
Print string(1,206);
Print string(6,205);
Print string(1,206);
Print string(43,205);
For Y = 0 to 3
s = 1
For X = 0 to 3
recalc
print " "+str(i0) + " " + str(i1) + " " + str(i2) + " " + str(i3);
print " "+str(s0) + " " + str(s1) + " " + str(s2) + " " + str(s3);
print " " + chr(186) + " " + str(upup) + " " + chr(186);
print " " + str(down) + " " + chr(186)
s = s SHL 1
Next
i = i SHL 1
Next
sleep
|
Der arbeitet jetzt einwandfrei für 4 Etagen:
Code: |
i0 i1 i2 i3 s0 s1 s2 s3 ║ up ║ down ║
═══════════════════════════╬════╬══════╬═══════════════════════════════════════════
1 0 0 0 1 0 0 0 ║ 0 ║ 0 ║
1 0 0 0 0 1 0 0 ║ 1 ║ 0 ║
1 0 0 0 0 0 1 0 ║ 1 ║ 0 ║
1 0 0 0 0 0 0 1 ║ 1 ║ 0 ║
0 1 0 0 1 0 0 0 ║ 0 ║ 1 ║
0 1 0 0 0 1 0 0 ║ 0 ║ 0 ║
0 1 0 0 0 0 1 0 ║ 1 ║ 0 ║
0 1 0 0 0 0 0 1 ║ 1 ║ 0 ║
0 0 1 0 1 0 0 0 ║ 0 ║ 1 ║
0 0 1 0 0 1 0 0 ║ 0 ║ 1 ║
0 0 1 0 0 0 1 0 ║ 0 ║ 0 ║
0 0 1 0 0 0 0 1 ║ 1 ║ 0 ║
0 0 0 1 1 0 0 0 ║ 0 ║ 1 ║
0 0 0 1 0 1 0 0 ║ 0 ║ 1 ║
0 0 0 1 0 0 1 0 ║ 0 ║ 1 ║
0 0 0 1 0 0 0 1 ║ 0 ║ 0 ║
|
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|