Hallo! Haben eine kurze frage an die Profis zur Umsetzung der folgenden Problemstellung. In einem Parkhaus werden 4 Gaswarnsensoren abgefragt.Bei Ansprechen von mindestens 2 Sensoren (logisch 1)wird eine Ampel geschaltet.. Vielen Dank für hilfreiche Ansätze.
Gast
#1919638
Co Corres schrieb: > Vielen Dank für hilfreiche Ansätze. Was willst du speziell? Was hast du bereits?
hatte bereits die idee irgendeine variable durch Schalten der entsprechenden Eingänge um jeweils 1 zu erhöhen und dann diesen wert durch >= bedingungen abzufragen. Dadurch würde dann die Ampel auf rot umschalten wenn eine gewisse anzahl von bits gesetzt ist. Beim Schalten eines bits wird jedoch die additionsschleife dauerhaft ausgeführt und es kommt zu einem "speicherüberlaf" da immer wieder 1 addiert wird solange der Eingang "Sensor" ansteht.
Gast
#1919719
Frag mal deinen Lehrer!
while(1)
{
Anzahl=0;
if Eingang1==1 Anzahl++;
if Eingang2==2 Anzahl++;
if Eingang3==1 Anzahl++;
if Eingang4==1 Anzahl++;
if Anzahl >= 2 Ampel=1;
if Anzahl <2 Ampel=0;
}
Für Sytaxfehler übernehme ich keine Haftung
Gast
#1919748
Co Corres schrieb: > Hallo! Haben eine kurze frage an die Profis zur Umsetzung der folgenden > Problemstellung. > > In einem Parkhaus werden 4 Gaswarnsensoren abgefragt.Bei Ansprechen von > mindestens 2 Sensoren (logisch 1)wird eine Ampel geschaltet.. Vielen > Dank für hilfreiche Ansätze. Angesehen von auf einem Mikrocontroller mit entsprechender Software basierenden Lösungen, mit gängigen Bauteilen bspw. so: 6x 2-Input-NAND-Gatter 1x 6-Input-NAND-Gatter (oder 8-Input-NAND, 2x Input auf PullUp) Auf die Eingänge der sechs 2er-NANDs werden sämtliche alarmrelevanten 2er-Kombinationen der Active-Hi-Sensorleitungen 1 bis 4 gelegt (1/2, 1/3, 1/4, 2/3, 2/4, 3/4), die Ausgänge der 2er-NANDs werden mit den sechs Eingängen des 6(8)er-NANDs verbunden, dessen Ausgang das "2 aus 4"-Alarmkriterium mit "High" signalisiert. SCNR: Wessen sprachliche Fähigkeiten aber offensichtlich nicht einmal ansatzweise genügen, einen simplen Fragesatz korrekt zu formulieren, sollte vielleicht zu unserer aller Sicherheit daran gehindert werden, an Einrichtungen herumzufricklen, von deren fehlerfreier Funktion Menschenleben abhängen können... MfG
Gast
#1919773
Co Corres schrieb: > In einem Parkhaus werden 4 Gaswarnsensoren abgefragt.Bei Ansprechen von > mindestens 2 Sensoren (logisch 1)wird eine Ampel geschaltet.. Vielen > Dank für hilfreiche Ansätze. Ja und? Welche der 2000000000 Möglichen Lösungen hättest Du gerne? Mir würde ine Widerstandsnetzwerk, ein OP, Transistor und Relais am besten gefallen. Ne Schützsteuerung wäre auch nicht uninteressant. Oder vieleicht mit nem µC? Was für einen? Nen 6502, oder vieleicht ein Z80? Programmierst Du in LISP, oder ADA? Ach so, es soll mit Logikgattern gelöst werden. Wenn dir schon jemand deine Hausaufgaben machen soll. dann gib ihm wenigstens die Chanche das zu tun indem Du zumindest sagst WAS du hast und mit WELCHEN MITTELN du das lösen willst. Und wenn Dir jemand deine Hausaufgaben gemacht hat, dag bitte auch Danke.
Es handelt sich lediglich um eine Übungsaufgabe, ich entschuldige die
fehlenden sprachlichen Fähigkeiten und die nicht ganz ausformulierte
Problemstellung;)
Vielen dank für die schnellen Reaktionen.
Hier die Lösung:
#include <avr/io.h> // Ein-Ausgabedatei
#include <util/delay.h>
int Anzahl;
int main() // Hauptfunktion
{
DDRC=0b11111111; //Datenrichtungsregister Ausgang
DDRA=0b00000000; //Datenrichtungsregister Eingang
while(1)
{
Anzahl=0;
if (!(PINA & (1<<PINA7))) {Anzahl++;}
if (!(PINA & (1<<PINA6))) {Anzahl++;}
if (!(PINA & (1<<PINA5))) {Anzahl++;}
if (!(PINA & (1<<PINA4))) {Anzahl++;}
if (Anzahl >= 2)
{
PORTC = 0b11111111; //rot;
}
if (Anzahl <2)
{
PORTC = 0b00000001; //gruen
}
_delay_ms(100); // Zeit um Flackern des Ausgangs zu vermeiden (LED
zu dunkel)
}
}
Gast
#1919832
> PORTC = 0b00000001
ich wüsste nicht, dass es in C geht (Binäre schreibweise)..
Gast
#1919839
pcb schrieb: >> PORTC = 0b00000001 > > ich wüsste nicht, dass es in C geht (Binäre schreibweise).. Tja, dann hast du wohl gerade wieder was gelernt... (Es geht beim avr-gcc, auch wenn das eine Nicht-Standard-Erweiterung ist).
Gast
#1919953
Co Corres schrieb: > In einem Parkhaus werden 4 Gaswarnsensoren abgefragt.Bei Ansprechen von > mindestens 2 Sensoren (logisch 1)wird eine Ampel geschaltet.. Vielen > Dank für hilfreiche Ansätze. > das ganze klingt ein Wenig nach Boolesche algebra, wäre eine schöne Aufgabe um Schülern das Thema näher zu bringen. Ich Schlage Also Vor das du dich denn Thema genau so näherst. Auch wenn die Lösung wahrscheinlich in kleinen µC Brennen wirst. btw. gibt es eigentlich denn GAL16v8 noch ? Deine Sensoren habe ich A,B,C,D gennannt und dann einfach einer Wahrheitstafel Ausgestellt. den Ausgang habe ich T gennannt
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Wenn ich das nun Mittels KV Diagramm Eindampfe komme ich auf die Lösung T = A&C | A&B | C&D | A&D | D&B | B&C ob du das nun mit mittels Mikrocontroller umsetzt, oder jeweils 2 UND- (74xx08 ) und 2 ODER- (74xx32) Gatter nimmst das überlasse ich dir. Eine Möglichkeit wäre es die Oben genannte Wahrheitstaffel als Tabelle zu nutzen, Wenn die Eingang der Sensoren auf denn 4 Niederwertigsten Bits eines Ports liegen müsste das ziemlich einfach zu realisieren sein. zum Beispiel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Andere hat man dir auch schon genannt. in den anderen Beiträgen.
danke!werde es so auch mal versuchen.
Gast
#1919996
Mir fällt gerade auf wenn du satt der 0 und 1 in die Tabelle gleich den wert von PORTC Schreibst sparst du eine If abfrage
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Gast
#1920038
Co Corres schrieb: > while(1) > { > Anzahl=0; > if (!(PINA & (1<<PINA7))) {Anzahl++;} > if (!(PINA & (1<<PINA6))) {Anzahl++;} > if (!(PINA & (1<<PINA5))) {Anzahl++;} > if (!(PINA & (1<<PINA4))) {Anzahl++;} > > if (Anzahl >= 2) > { > PORTC = 0b11111111; //rot; > } > if (Anzahl <2) > { > PORTC = 0b00000001; //gruen > } > _delay_ms(100); // Zeit um Flackern des Ausgangs zu vermeiden (LED > zu dunkel) > } Das sollte aber auch funktionieren. Du setzt Anzahl bei jedem Durchlauf auf 0 und die Variable wird erhöht wenn... Moment da steht !(PINA & (1<<PINA7)) Also wird Anzahl erhöht wenn PINA7 nicht ungleich 0 ist, ich dachte bei logisch 1 am Sensor soll das passieren? Vorschlag zur Verbesserung: statt if (Anzahl >= 2) { PORTC = 0b11111111; //rot; } if (Anzahl <2) { PORTC = 0b00000001; //gruen } schreibst du if (Anzahl >= 2) { PORTC = 0b11111111; //rot; } else { PORTC = 0b00000001; //gruen } Und warum setzt du bei rot alle Portpins? da leuchtet doch grün auch noch.
Gast
#1920590
Rot und grün sind nur zur Visualisierung so gewählt.Es ist keine echte Ampel angeschlossen. Der logische Zustand 1 der Sensoren wird ausgewertet . Die else Schleife ist in der tat besser.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.