Bits optellen

Toen ik eenmaal voldoende XOR-modules gebouwd had (zie vorig project), kon dit logische vervolg natuurlijk niet ontbreken. Met de zelfgebouwde XOR-modules kunnen we, met enige aanvullende digitale modules (eventueel uit het originele 'vintage' fischertechnik-programma), namelijk getallen optellen!

Om binaire getallen op te tellen, voer je een vergelijkbaar proces uit als bij het optellen van decimale getallen, maar met de regels 0+0=0, 0+1=1, 1+0=1 en 1+1=10 (nul opschrijven en de 1 onthouden). Je werkt van rechts naar links, voegt de cijfers van elke positie toe en schrijft de som op, waarbij je eventuele overdrachten meeneemt naar de volgende kolom.

Video : toestemming voor cookies nodig
Instellingen
truth table half-adder

Als we de (twee) invoersignalen van een XOR als de binaire ‘bits’ beschouwen, kunnen we met de XOR-functionaliteit binaire getallen optellen. We maken daarvoor een z.g. Half-Adder (‘halve opteller’) waarmee de ‘bits’ A en B, kunnen worden opgeteld. Het tabelletje hiernaast toont het antwoord dat we het uitgangssignaal S zullen noemen. 

Als zowel A als B ieder de waarde 1 (het decimale getal 1) representeren, past het antwoord (het getal 2) niet meer in de huidige binaire bit-positie. Er is dan een tweede binaire bit (die het digitale getal 2 voorstelt) nodig om aan te geven dat het antwoord niet past. Dit is uitgangssignaal C, dat de z.g. carry-bit voorstelt. Deze optelling van twee bits naar som en carry is weergegeven in de (waarheids)tabel hierboven. Hierin is eenvoudig te zien dat het S-antwoord simpelweg met één XOR-poort kan worden gemaakt, terwijl voor de carry-bit een eenvoudige AND-poort volstaat. Dit kunnen we (met de z.g. ANSI-symbolen) tekenen zoals hiernaast. 

Half-Adder
Full-Adder with gates

We kunnen met een Half-Adder echter slechts de twee bits op één binaire positie van het getal optellen. Mooier zou zijn als we aan de invoerkant ook het overflow-/carry-bit zouden kunnen invoeren. Dan wordt het namelijk mogelijk meerdere van deze optellers aan elkaar te verbinden en telkens de uitgaande carry-bit als extra invoer voor de volgende bit-positie. Zo’n, vanzelfsprekend iets uitgebreidere, opteller noemen we een Full-Adder. Schematisch is deze weergegeven in de afbeelding. Wie meer informatie zoekt  over het optellen van binaire getallen kan betrekkelijk eenvoudig veel informatie hierover online vinden.

Slechts twee ingangen nodig

Als we meer bit-posities willen optellen, bijvoorbeeld twee vier-bits getallen, dan hebben we dus meerdere keren een Full-Adder nodig. Bij de opteller voor de laagstwaardige eerste bit-positie wordt de Cin niet gebruikt, dus hiervoor volstaat een Half-Adder. De hierop volgende drie Full-Adders, die de drie meerwaardiger bit-posities vertegenwoordigen, krijgen elk de Cout van elke voorliggende laagwaardiger opteller aangesloten als Cin. Van de laatste en hoogstwaardigste Full-Adder wordt de Cout simpelweg opgevat als het vijfde bit.
 
Met ieder vier-bits invoergetal kunnen binair waarden van 0 (binair 0000) tot en met 15 (binair 1111) worden gerepresenteerd. Voor het maximale antwoord, het decimale getal 30 (binair 11110), zijn dus vijf bitposities nodig: de vier S-bits én de laatste Cout.
 
Gebruiken we voor een vier-bits opteller aldus één Half-Adder en drie Full-Adders, dan zouden hiervoor dus zeven XOR-poorten, zeven AND-poorten en drie OR-poorten nodig zijn. Hierbij volstaan bij elk van deze modules slechts twee ingangen. De conclusie uit het vorige project, dat voor de XOR- en AND-module modellen met slechts twee ingangen het meest flexibelst zijn, blijft dus overeind.

2-input-XOR-Silberling Dual XOR Schematics various 2-input Silberlingen

In de afbeeldingen hierboven is het resultaat van de zelfbouw te zien. Twevens is het uiteindelijke schema waar ik op uitkwam getoond. Het leek me nuttig ook van de AND-module een variant te hebben waarin twee AND-poorten met ieder 2 ingangen in één 'Silberling'-behuizing zijn ondergebracht.
 
Zo gedacht is zo gemaakt. Onder ideale omstandigheden zouden daarom de op de foto staande zelfbouw-modules zeer geschikt zijn om, met een minimaal aantal modules, een vier bits opteller te bouwen. De op de voorgrond liggende dubbele OR-poort met twee ingangen is niet strikt noodzakelijk. Er kunnen immers ook prima twee ingangen van de bestaande 'vintage' fischertechnik OR-module worden gebruikt. Echter, omdat ik toch een printplaat voor de dubbele AND-module ontwikkelde, werd dit een mooie ‘bijvangst’ die altijd nog wel eens zijn ruimtebesparende diensten kan bewijzen. Voor de meeste in samengestelde schakelingen gebruikte modules volstaan immers ook slechts twee ingangen.

Voor het schakelschema van de dubbele OR- en AND-modules wordt verwezen naar de bestaande documentatie (zoals pagina 49-62 van deze Duitstalige publicatie). De schakeling is eenvoudigweg twee maal opgebouwd en gehuistvest in één 'Silberling'-behuizing. Hierboven (afbeelding midden) het schakelschema van de dubbele XOR-poort waar ik na enig experimenteren op uit kwam. De dubbele uitvoering is hierin schematisch duidelijk zichtbaar.

Een vier bits Full-Adder

Toen eenmaal voldoende modules gebouwd waren, kon een uitvoerig experiment natuurlijk niet ontbreken. Ik bouwde daarom de eerder genoemde Full-Adder voor vier bits. De ‘bits’ van de twee getallen worden ingevoerd met acht ompoolschakelaars. De binaire ‘uitvoer’ van het gesommeerde getal geschiedt met vijf grote (10mm) LEDs in standaard fischertechnik lichtstenen.

4-Bit-Full-Adder Full-Adder build 1 Full-Adder Detail

Voor het aansluiten van de voedingsspanning experimenteerde ik met een oud idee. Door de verende contacten uit een fischertechnik draaischakelaar in een 3D-gedrukte bouwsteen te vatten, zijn alle modules op de bouwplaat gemakkelijk van stroom te voorzien en is de distributie van de voedingsspanning naar de LEDs en de schakelaars te optimaliseren. Desalniettemin hebben dergelijke 'Silberlingen'-schakelpanelen natuurlijk evengoed de neiging als een bord spaghetti te ogen.

Het was interessant de fascinerende XOR-functie eerst op te bouwen uit bestaande modules, en later als zelfbouw-module definitief aan het arsenaal toe te kunnen voegen. Wie, net als ik, nog steeds een zwak heeft voor het experimenteren met elektronica-modules kan er interessante en leerzame projecten mee opbouwen!

DC-connectors