Finns XOR-grindar med flera ingångar än 2?

Övriga diskussioner relaterade till komponenter. Exempelvis radiorör, A/D, kontaktdon eller sensorer.
Användarvisningsbild
Guraknugen
Inlägg: 29
Blev medlem: 27 oktober 2006, 10:42:40
Ort: AGNESBERG

Finns XOR-grindar med flera ingångar än 2?

Inlägg av Guraknugen »

Hej!

Jag håller på med ett litet bygge som jag tänkte göra i någon sorts modulform. En viss typ av modul, som den färdiga "apparaten" kommer att ha flera av (max 6 är det tänkt än så länge), är försedd med en "välj mig"-knapp, så att säga. Denna ska vara momentan och en lysdiod ska indikera att aktuell modul är vald.

Modulerna, som helt enkelt är kretskort, har jag tänkt skulle, via någon lämplig typ av kontaktdon, sitta på någon form av "moderkort", som då ska svara för att modulerna samverkar med varandra.

Jag vill gardera mig mot att man trycker på flera knappar samtidigt och för det ändamålet behöver jag någon form av logik som styr detta. Jag har redan ritat en variant av detta med vanliga TTL-grindar i 74-serien och det borde fungera, men det blir ju så vansinnigt många om man har 6 knappar. Och för varje knapp extra ökar antalet grindar olinjärt.

Så vad jag är ute efter, är en XOR-grind (eller XNOR, jag har inte tänkt färdigt riktigt än) med minst 6 ingångar. Utgången ska ge 1 ut om en och ENDAST en ingång är 1. Helst TTL, eftersom resten av konstruktionen är TTL.

Någon som vet om 74-serien inkluderar en sådan grind? Elfa verkar inte ha någon i alla fall, eller så har jag slarvat i sökandet.

Skulle vara kanon om det finns. Min tanke är att om fler än en knapp trycks ner samtidigt, så ska ingenting alls hända. För att något ska kunna hända, måste denna "=1"-grind således ge 1 ut.

Ett annat sätt att klara uppgiften på enkelt sätt, skulle kanske vara om det fanns en IC som fungerade som 7442 fast tvärt om... (7442 är en "BCD-to-Decimal decoder"). Alltså en IC med 10 ingångar och 4 utgångar. Om ingångarna på 7442 är exempelvis 0100, så skulle utgångarna vara 1111101111 (eftersom den har inverterade utgångar), d.v.s. utgång 4 (utgångarna här numrerade 9876543210) är låg, resten är höga. Min tanke här, är att man skulle ha 10 ingångar och fyra utgångar istället. Om fler än en ingång är aktiv hamnar man ju i ett "förbjudet" tillstånd. Önskvärt skulle då vara att tillståndet på utgångarna inte ändras. Utgångarna kan man ju sedan bara koppla ihop med ingångarna på en 7442 och man har då förhoppningsvis "städat bort" eventuellt "skräp".

Som sagt, någon som råkar veta något? Eller någon som tycker att jag är helt ute och cyklar och har en mycket bättre idé? Alla svar är välkomna, så klart, utom möjligtvis förolämpningar och liknande... :D
Johan.o
EF Sponsor
Inlägg: 2386
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Nej, det finns inte XOR-grindar med fler än 2 ingångar. Det går liksom inte om man tänker på hur en XOR-grind fungerar, det blir motsägelsefult.
Användarvisningsbild
Icecap
Inlägg: 26153
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

Leta på "priority encoder", det kommer du nog att gilla (74147, 74148, 74348, 4532)

Kanske 74922 eller 74923 kan vara intressant?

Eller rent av en µC som tar hand om den biten?
sebastiannielsen
Inlägg: 3662
Blev medlem: 11 september 2004, 09:30:42
Ort: gbg
Kontakt:

Inlägg av sebastiannielsen »

om man kopplar BCD-utgångarna på en 73-519-43 till en 73-510-67 så får du den funktion du önskar.
Användarvisningsbild
Guraknugen
Inlägg: 29
Blev medlem: 27 oktober 2006, 10:42:40
Ort: AGNESBERG

Inlägg av Guraknugen »

Johan.o skrev:Nej, det finns inte XOR-grindar med fler än 2 ingångar. Det går liksom inte om man tänker på hur en XOR-grind fungerar, det blir motsägelsefult.
Om man tittar på IEC-symbolen för en XOR =[=1]- så tycker inte jag att det blir så motsägelsefullt, men man kan ju se det på olika sätt. "=1" tolkar jag som att exakt en ingång ska vara hög för att få hög utgång. Antal höga ingångar=1 således. ta en vanlig OR-grind, samma sak där. >=1 ingång ska vara hög för hög utgång.

Däremot kan det vara svårt att uttrycka det hela i skrift:
A XOR B = NOT A AND B OR A AND NOT B
Detta funkar ju, men om man tar tre ingångar blir det problem.
A XOR B XOR C är ju inte samma sak som jag är ute efter.

Ett försök att uttrycka det hela är, om än säkert felaktigt:
XOR(A,B,C)=A AND NOT B AND NOT C OR NOT A AND B AND NOT C OR NOT A AND NOT B AND C.

Hmmm... du har nog rätt, en XOR med flera ingångar är nog egentligen ingen XOR-grind. Den kanske kallas något annat då, men funktionen jag är ute efter är ju "=1" på IEC-symbol-språk...

Såg att jag fått flera svar, så jag tar en titt på dem nu.

Tack för snabb respons! :)
Användarvisningsbild
Guraknugen
Inlägg: 29
Blev medlem: 27 oktober 2006, 10:42:40
Ort: AGNESBERG

Inlägg av Guraknugen »

Icecap skrev:Leta på "priority encoder", det kommer du nog att gilla (74147, 74148, 74348, 4532)

Kanske 74922 eller 74923 kan vara intressant?

Eller rent av en µC som tar hand om den biten?
Tack! Hittade de flesta av dem. 147 eller 148 verkar vara det jag är ute efter. Har inte analyserat skillnaden på dem än, men det lär nog ge sig. På Elfas sida verkar det som att båda är identiska, men då skulle det ju vara onödigt att ha olika nummer på dem. Kanske den ena är Open Collector men inte den andra?

Tack för snabbt svar, nu har en tråd att följa! :)
Användarvisningsbild
Guraknugen
Inlägg: 29
Blev medlem: 27 oktober 2006, 10:42:40
Ort: AGNESBERG

Inlägg av Guraknugen »

sebastiannielsen skrev:om man kopplar BCD-utgångarna på en 73-519-43 till en 73-510-67 så får du den funktion du önskar.
Tack! Tog en titt på detta. Delvis samma tips som han som skrev precis innan. Dock verkar det som att 73-519-43 har inverterade utgångar medan 73-510-67 inte har det, så jag får väl slänga in inverterare mellan. Det blir ju tre IC-kapslar då, eller vet du om det finns en 73-510-67 fast med inverterade ingångar? Då sparar jag ju en krets...

Fast jag kom just på att det egentligen inte spelar någon roll. Inget säger ju att jag måste koppla utgång 0 till första modulen o.s.v, så glöm mitt struntprat ovan... inte behöver jag några inverterare här! Det räcker ju att tänka till lite...

Tack!

Tyckte att jag letat rätt bra själv, så jag hade inga större förhoppningar om att få ett svar över huvud taget, så jag blev glatt överraskad! :)
sebastiannielsen
Inlägg: 3662
Blev medlem: 11 september 2004, 09:30:42
Ort: gbg
Kontakt:

Inlägg av sebastiannielsen »

Om du skippar inverten så kommer vissa ingångar inte kunna att användas på priority encodern...

BCD-decodern vill INTE ha dessa inputs:
1010 , Motsvarar 5 på priority encodern
1011, motsvarar 4 på priority encodern
1100, motsvarar 3 på priority encodern
1101, motsvarar 2 på priority encodern
1110, motsvarar 1 på priority encodern
1111, motsvarar (ingen ingång vald) på priority encodern.

6,7,8,9 är ju bara 4 ingångar (du ville ha 6 st)..... Du måste ha med en inverter.

Eller rättare sagt 2 st, om varje inverter-chip innehåller 8 st inverters....

8 inverters + 2 inverters till utgångarna på BCD-decodern, eftersom den är "LÅG" vid etta, och "HÖG" vid nolla, du vill väl ha tvärtom, för att låta signalen trigga en transistor eller något?

Sedan behöver du 4 inverters, mellan priority encodern, och BCD-decodern.

ingångarna på priority encodern löser du genom att koppla motstånden mellan +5v och ingången (pull-up) istället för mellan GND och ingången.... Knappen kopplar du mellan ingången och GND.
Användarvisningsbild
Icecap
Inlägg: 26153
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

Allvarligt talat....
I och med att du håller dig till 74xxx kretsar har du alltså redan 5V.

Tryck in en PIC, du behöver 6 ingångar & 6 utgångar, det ger 12 I/O. Använd en typ med INTOSC, rakt av skulle en PIC16F628A eller PIC16F88 lätt greja detta.

Mjukvaran är inte svår heller och allt ville vara i samma krets utan att svettas.

Behöver du fler I/O är det bara att välja en krets med fler pinnar och justera programmet lite.
Användarvisningsbild
Guraknugen
Inlägg: 29
Blev medlem: 27 oktober 2006, 10:42:40
Ort: AGNESBERG

Inlägg av Guraknugen »

sebastiannielsen skrev:Om du skippar inverten så kommer vissa ingångar inte kunna att användas på priority encodern...

BCD-decodern vill INTE ha dessa inputs:
1010 , Motsvarar 5 på priority encodern
1011, motsvarar 4 på priority encodern
1100, motsvarar 3 på priority encodern
1101, motsvarar 2 på priority encodern
1110, motsvarar 1 på priority encodern
1111, motsvarar (ingen ingång vald) på priority encodern.

6,7,8,9 är ju bara 4 ingångar (du ville ha 6 st)..... Du måste ha med en inverter.

Eller rättare sagt 2 st, om varje inverter-chip innehåller 8 st inverters....

8 inverters + 2 inverters till utgångarna på BCD-decodern, eftersom den är "LÅG" vid etta, och "HÖG" vid nolla, du vill väl ha tvärtom, för att låta signalen trigga en transistor eller något?

Sedan behöver du 4 inverters, mellan priority encodern, och BCD-decodern.

ingångarna på priority encodern löser du genom att koppla motstånden mellan +5v och ingången (pull-up) istället för mellan GND och ingången.... Knappen kopplar du mellan ingången och GND.
Jag tror jag lyckats komma runt detta. Ska försöka förklara i ord, för jag har inte ritat upp det i digital form än så jag har inget att bifoga:

Jag inser att min lösning ger en begränsning på max 6 ingångar, men jag skulle bli förvånad om jag någonsin behöver fler, så jag tänker nog köra på det. Jag tror att 4 hade räckt rätt bra också...

Vad jag troligen ränker göra är att koppla ihop utgångarna (adressenför nedtryckt tangent, så att säga) på 74147 till motsvarande ingångar på 7442. Utgångarna på 147 är ju ingerterad vilket inte ingångarna på 42 är.

Ingångarna på 147 kopplar jag på följande sätt:
Ingång 1 -> 1
Ingång 2 -> 3
Ingång 3 -> 5
Ingång 4 -> 6
Ingång 5 -> 7
Ingång 6 -> 9

Detta ger på utgångarna DCBA FÖRE och EFTER invertering:
0001 -> 1110
0011 -> 1100
0101 -> 1010
0110 -> 1001
0111 -> 1000
1001 -> 0110

Nu koplar jag in dessa till 7442 på följande sätt:
A -> D
B -> C
C -> B
D -> A

Detta ger att tabellen ovan nu ser ut så här, där kolumnerna betyder DCBA FÖRE invertering, DCBA EFTER invertering och ABCD EFTER invertering:
0001 -> 1110 -> 0111
0011 -> 1100 -> 0011
0101 -> 1010 -> 0101
0110 -> 1001 -> 1001
0111 -> 1000 -> 0001
1001 -> 0110 -> 0110

Efter detta något krystade tilltag kopplas utgångarna så att de motsvarar följande "modulnummer" i mitt fall:

Modul 1 <- 7
Modul 2 <- 3
Modul 3 <- 5
Modul 4 <- 9
Modul 5 <- 1
Modul 6 <- 6

Eller om det är enklare att se det i följande tabell:
1 -> 0001 -> 1110 -> 0111 -> 1
2 -> 0011 -> 1100 -> 0011 -> 2
3 -> 0101 -> 1010 -> 0101 -> 3
4 -> 0110 -> 1001 -> 1001 -> 4
5 -> 0111 -> 1000 -> 0001 -> 5
6 -> 1001 -> 0110 -> 0110 -> 6

Det verkar som att 6 tillåtna kombinationer är det mesta som går att få ur denna koppling, vilket kan låta lite, men eftersom det räcker för mina behov så sparar jag ju en krets.

Att jag får ut signaler som är "aktiv låg" är nog inget problem. Jag har ju inte designat efterföljande kretsar än. Det skulle inte förvåna mig om någon IC-kapsel ändå kommer att ha någon lämplig grind över så att jag kan invertera om så skulle behövas. Givetvis kommer jag ju att göra klart allt "på papperet" först innan jag börjar bygga, och skulle det visa sig att det blir mer praktiskt att slänga in extra inverterare på ett eller annat ställe, är det nog inte värre än att jag gör det... Jag kommer nog att ändra både här och var innan jag är klar. Nu har jag i alla fall en idé som utgångspunkt.
Icecap skrev:Allvarligt talat....
I och med att du håller dig till 74xxx kretsar har du alltså redan 5V.

Tryck in en PIC, du behöver 6 ingångar & 6 utgångar, det ger 12 I/O. Använd en typ med INTOSC, rakt av skulle en PIC16F628A eller PIC16F88 lätt greja detta.

Mjukvaran är inte svår heller och allt ville vara i samma krets utan att svettas.

Behöver du fler I/O är det bara att välja en krets med fler pinnar och justera programmet lite.
Eftersom jag inte känner mig helt säker på vad man gör med en PIC, så avvaktar jag nog med denna lösning tills någon fått mig att förstå hur oöverträffat det är, men jag ska ta mig en titt.

Grundidén är att i första hand använda mig av komponenter jag har liggande hemma. Dock måste jag göra ett och annat inköp i vilket fall, så vem vet hur den slutgiltiga lösningen kommer att se ut...

Jag är tacksam för alla förslag och jag kommer även att titta på detta, som sagt.

Har förstått att det är något man måste programmera. Behöver man inte särskild utrustning för det? Någon kanske har en länk till någon sida där det man behöver veta finns dokumenterat? Eller så hittar jag en själv...
Användarvisningsbild
Icecap
Inlägg: 26153
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

För att peta in programmet i PIC har jag en WISP628, dom säljer sodjan här på forumet. Jag är mycket nöjd med den.

För att göra programmet i assembler finns det MPLAB från Microchip, är man inte haj på sånt kan det kanske finnas en vänlig själ här på forumet som kan hjälpa till om det är panik.

Fördelen med en PIC (alltså mikroprocessorer generellt) är att man kan ändra hur den ska reagera osv, enbart vid att byta mjukvaran. Detta betyder att dina funderingar på ett antal olika kretsar plötsligt är nere på 1 krets som "bara" ska veta vad du förväntar dig av den.
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

Johan.o skrev:Nej, det finns inte XOR-grindar med fler än 2 ingångar. Det går liksom inte om man tänker på hur en XOR-grind fungerar, det blir motsägelsefult.
Det beror lite på hur man ser på XOR tror jag... I labben så sent som idag byggde vi en 3-ingångars XOR mha 2st 2-ingångars XOR.

Kod: Markera allt


X
----------
Y            XOR ------------
----------     
Z                                   XOR ------------
-----------------------------
Fick höra ett bra exempel som vad jag har förstått stämmer. Tänk dig att du är i ett rum med 3 dörrar och en lampa i taket. Vid varje dörr sitter en knapp som styr lampan. Varje knapptryck ska innebära att lampan ändrar tillstånd. Detta är vad XOR-grinden gör. Jag tror det gäller hur många knappar/XOR-ingångar man tar.

Det här är ju dock inte vad Guraknugen är ute efter. Den delen verkar ju lösa sig. [/OT]

Guraknugen: Du verkar ju vara intresserad av det här så satsa på en microcontroller i nåt senare projekt om du kan. Det underlättar väldigt mycket och man blir mycket flexiblare än med vanliga digitala grindar som Icecap säger.

Lycka till med bygget.
Skriv svar