Implementatie van verkeerslichten

Ik zou je hulp graag willen met de implementatie van verkeerslichten van 15 seconden.

Het rode lampje brandt 6 seconden lang, dan het gele (tegelijkertijd met het rode gedurende twee seconden), vervolgens het groene lampje gedurende 2 seconden (daarna flikkert het gedurende drie seconden half aan en half seconde uit), dan is het geel 2 seconden aan.

De cyclus krijgt een invoerregel met een tijdcyclus van 1 seconde: "o" voor een halve seconde en "1" voor 1 seconde.

Gegeven een drie 16X4X1 muxes, een 4-bit-teller en niet meer dan twee logische poorten.

Suggesties? Ik ben daarmee stil geraakt. Hoe gebruik ik deze 4-bits teller (die modulo 4 telt) voor mijn vraag, ik geloof dat ik deze informatie naar de muxes moet sturen.

3
Er is geen reden waarom een ​​huiswerkvraag hier niet gesteld kan worden. Ze zijn perfect acceptabel zolang ze voldoen aan alle standaard beleidsregels die we over vragen stellen.
toegevoegd de auteur Binarytales, de bron
@Jozef Ik denk dat het probleem hier is dat waar je om vraagt ​​heel willekeurig lijkt te zijn, met weinig tot geen moeite getoond. Huiswerkvragen zijn prima, zolang ze voldoen aan alle standaard beleidsregels die we over vragen stellen. Over het algemeen verwachten we dat wanneer iemand een probleem krijgt, ze enige inspanning zullen leveren, wat hier niet lijkt te worden getoond. Geef ons specifieke ontwerpproblemen die u ondervindt, niet een heel project. Misschien is de Math-site gewend aan willekeurige vragen zonder inspanning, maar het is hier niet de standaard.
toegevoegd de auteur Binarytales, de bron
@Jozef Als u bij de eerste brainstormfase van een project bent, is chat de beste plaats ervoor. Deze vraag is als naar een groep van monteurs gaan en zeggen: "Ik moet een auto maken, ik heb 1 motor en een transmissie, ik kan niets anders gebruiken." Ik denk dat de motor kan worden gebruikt om de wielen te bewegen, maar ik weet niet echt zeker waar ik heen moet "
toegevoegd de auteur Binarytales, de bron
@ Pentium100 Ik kan raden dat dit een decoder is "4 tot 16" met 1-bit pad ... zoiets als een 74LS154 IIRC
toegevoegd de auteur Claude Houle, de bron
@ Pentium100: Ja, het is de manier waarop je het hebt beschreven.
toegevoegd de auteur urzeit, de bron
Sorry, ik dacht dat het hier hetzelfde was als "Wiskunde", waar ze erg blij waren om te helpen bij dit soort vragen, maar hier kan ik de vijandigheid van sommige mensen niet vermijden, ik denk dat je dat niet doet normale of welkomstvragen zoals deze. Ik zal hier niet meer posten.
toegevoegd de auteur urzeit, de bron
@Kellenjb: Nee, ze staan ​​er ook op om je stappen te laten zien, en meestal gebruik ik ze als laatste stap en breid mijn vraag uit met wat ik heb geprobeerd, hier, terwijl ik schreef, ik wist niet wat ik moest doen met alles de componenten en dus .. het is meer "real life problems" denk ik en het is Ok Toch bedankt :)
toegevoegd de auteur urzeit, de bron
Geen project, alleen een simpele muxes en logische poorten vragen in een basiscursus 'computerarchitectuur' voor studenten informatica. Eigenlijk denk ik dat ik het uiteindelijk zelf heb behandeld. Ik dank iedereen die probeerde te helpen.
toegevoegd de auteur urzeit, de bron
Opmerkingen van andere gebruikers zijn verwijderd.
toegevoegd de auteur urzeit, de bron
4-bit teller telt modulo 16 (2 ^ 4), niet 4. Ik heb geen mux beschreven als "16x4x1" gezien, maar als het één is met 16 data-ingangen, 4 selector-ingangen en 1 uitgang dan kan het gedaan worden.
toegevoegd de auteur inRazor, de bron
Ik heb het een keer gedaan met 555 monostabiele multivibrators, maar ik betwijfel of je oefening dit toestaat ... heb ik gelijk?
toegevoegd de auteur clabacchio, de bron

3 antwoord

Ik veronderstel dat de uitvoer 3 LED's is - als het iets is dat meer stroom verbruikt (of een hogere spanning nodig heeft, dan moet je de uitgangen bufferen).

De enige 16: 1 mux die ik vond was 74150, die een inverterende uitvoer heeft. Als je mux een niet-inverterende uitvoer heeft, dan zul je de ingangen moeten omkeren :)

Hoe dan ook, zet de teller op om te tellen van 0 tot 12, sluit elke LED aan zijn eigen mux en koppel de input van de mux aan VCC (als je wilt dat de LED in die tijd aan staat), ground (als je wilt uit staan ​​of de 1Hz klok (als je wilt dat hij knippert). Dit voorbeeld circuit werkt in simulatie, het zou ook in het echte leven moeten werken.

De NAND-poort en de omvormer stellen de teller terug op 13 - als de teller asynchroon is, is de reset zeer snel en moet de tijd dat alle LED's uit zijn zeer kort zijn (microseconden). Je zou ook een aantal reset-circuits moeten bouwen, zodat het de teller opnieuw instelt bij het opstarten, maar het zou meer componenten vereisen.

example schematic

5
toegevoegd
Als men signalen voor beide richtingen van het verkeer wil hebben, zou men het circuit kunnen uitbreiden door een klok met matige frequentie (bijvoorbeeld 60Hz), een xor-poort en een inverter toe te voegen. Voer de klok in de xor-poort en de omvormer in. Gebruik twee sets LED's, met kathodes bedraad zoals afgebeeld. Verbind de anodes van één set met de omgekeerde klok (via weerstand), en de anodes van de andere ingesteld op de niet-omgekeerde klok. Een beetje lastig, maar een nuttige techniek om te weten.
toegevoegd de auteur firedfly, de bron

Een deel van je beschrijving is een beetje onleesbaar, maar hier is wat ik denk dat je vraagt: je moet drie lichten bedienen. Elk gaat door een apart patroon met alles wat zich herhaalt in periodes van 15 seconden. U hebt een vierkante golf van 1 Hz die als referentieklok moet worden gebruikt.

U noemt één implementatiemethode met behulp van muxes en logische poorten, maar geef geen reden waarom u denkt dat dit het beste antwoord is of welke beperkingen dan ook waarom ze moeten worden gebruikt, dus ik zal dat gewoon negeren.

Het voor de hand liggende antwoord is een microcontroller. Zelfs de kleinste goedkoopste van allemaal, de PIC 10F200 kan dit doen. Hij heeft 4 I/O-pinnen en kan worden geconfigureerd voor 1 ingang en 3 uitgangen, wat precies is wat u nodig hebt. Het kan ook zijn eigen timing genereren, zodat u de 1 Hz-ingang kunt negeren als u dat wilt en de interal-timing wilt gebruiken.

In beide gevallen is dit een heel eenvoudig programma. Niets verandert sneller dan over grenzen van 500 ms. Aangezien het hele patroon elke 15 seconden wordt herhaald, hebt u slechts 30 mogelijke verschillende statussen. Een zeer eenvoudige en ook krachtige firmware-implementatie is om een ​​tabel met alle 30 staten te hebben. Elke 500 ms klokflank, de firmware gaat naar het volgende tabelitem en kopieert de 3 bit-waarde naar de uitvoerpinnen. Dit is heel eenvoudig, maar zorgt ervoor dat het weergavepatroon eenvoudig kan worden aangepast naarmate de vereisten veranderen, omdat alleen de tabelitems moeten worden gewijzigd. De logica blijft hetzelfde. Een 10F200 heeft 255 bruikbare instructies, wat genoeg is voor de eenvoudige klokranddetectie, tafelopzoeking, uitvoerupdate en vervolgens de tabel zelf.

3
toegevoegd

Synchrone tellers krijgen bijna altijd een resetlijn, dus een 4-bits teller kan tellen tot een maximum van 16 cycli, maar kan tellen in cycli van minder dan dat. (Hint: als u telling #N bereikt en beweer reset, zal de volgende telling # 0 zijn, dus dat telt van 0 tot N = cycluslengte N + 1)

Vermoedelijk is uw klokingang een 1HZ 50% duty cycle klok waarmee u knipperend (0,5 sec op 0,5 sec uit) kunt implementeren zoals beschreven.

De rest zou tamelijk triviaal moeten zijn met combinatorische logica.

0
toegevoegd
zie het antwoord van Pentium100: het beschrijft een redelijk circuit dat doet wat ik voorstelde.
toegevoegd de auteur Travis Christian, de bron
Maar hij heeft strenge eisen aan componenten: hij kan bijvoorbeeld slechts 2 logische poorten gebruiken, waarschijnlijk is dit een beperking van de opdracht.
toegevoegd de auteur clabacchio, de bron