Digitale demux in casacade
Voor een bepaalde schakeling moest ik met zo min mogelijk uitgangen van de microcontroller minimaal 19 solid state relays (SSR) aansturen. Maar ik moest er zeker van zijn dat er nooit meer dan 1 SSR tegelijk actief is.
Een oplossing zou zijn met shift registers in casacade, dan zou ik maar 2 of hooguit 3 uitgangen van de microcontroller nodig hebben. Alleen wat betreft het tweede punt, dat er nooit meer dan 1 SSR tegelijk actief is, is dit niet zo bedrijfzeker. Er hoeft maar 1 rimpel van buitenaf op de datalijn te komen en er kunnen zomaar 2 of meer SSR's actief zijn.
Ik heb daarom gekozen voor een demultiplexer (demux) IC. Een bekende analoge mux/demux is de 4051. Deze heeft 1 ingang dat wordt doorgeven aan 8 te selecteren uitgangen. Dit selecteren gaat dmv 3 adreslijnen.
Ik heb echter gekozen voor een digitale demux. Deze heeft geen ingang, maar via de adreslijnen kan je selecteren welke uitgang laag is, de overige uitgangen zijn dan hoog.
Mijn keuze is gevallen op de SN74LS138 van Texas Instruments. Dit is een '3-line to 8-line decoder / demultiplexer'. Dit wil zeggen dat met 3 adreslijnen 8 uitgangen te selecteren zijn. Maar het mooie is dat hij nog 3 extra lijnen heeft waarmee het IC uit te schakelen is.
Door deze lijnen slim te schakelen kan je met 3 IC's via 5 adreslijnen in totaal 24 uitgangen bedienen! Precies wat ik nodig heb dus.
In de datasheet wordt ook vermeldt dat dit kan, alleen staat er helaas geen voorbeeld schema bij en kon ik met google ook niks vinden.
Vandaar dat ik mijn werk hier graag met jullie deel.
Als we in de datasheet kijken vinden we onderstaande waarheidstabel
INPUTS | OUTPUTS | ||||||||||||||||||||||||||||
ENABLE | SELECT | ||||||||||||||||||||||||||||
G1 | ~G2A + ~G2B | C | B | A | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |||||||||||||||||
L | H | X | X | X | H | H | H | H | H | H | H | H | |||||||||||||||||
H | L | X | X | X | H | H | H | H | H | H | H | H | |||||||||||||||||
H | H | X | X | X | H | H | H | H | H | H | H | H | |||||||||||||||||
L | L | L | L | L | L | H | H | H | H | H | H | H | |||||||||||||||||
L | L | L | L | H | H | L | H | H | H | H | H | H | |||||||||||||||||
L | L | L | H | L | H | H | L | H | H | H | H | H | |||||||||||||||||
L | L | L | H | H | H | H | H | L | H | H | H | H | |||||||||||||||||
L | L | H | L | L | H | H | H | H | L | H | H | H | |||||||||||||||||
L | L | H | L | H | H | H | H | H | H | L | H | H | |||||||||||||||||
L | L | H | H | L | H | H | H | H | H | H | L | H | |||||||||||||||||
L | L | H | H | H | H | H | H | H | H | H | H | L |
Zoals je kan zien zal het IC niks doen als G2A of G2B of G1 hoog is. Hier gaan we gebruik van maken om te zorgen dat steeds maar 1 IC actief is.
Voor een beter overzicht is het duidelijker om de eerste 3 regels na de titels van de tabel onderaan te zetten. We kunnen dan ook de X'en verder uitwerken.
Op deze manier krijgen we 5 adreslijnen die van 00000 naar 11000 gaan, oftewel van 0 naar 24.
INPUTS | OUTPUTS | ||||||||||||||||||||||||||||
ENABLE | SELECT | IC1 | IC2 | IC3 | |||||||||||||||||||||||||
G1 | ~G2A + ~G2B | C | B | A | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
L | L | L | L | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | L | L | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | L | H | L | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | L | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | H | L | L | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | H | L | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | H | H | L | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | L | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | H | L | L | L | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | H | L | L | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | H | L | H | L | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | |
L | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | |
L | H | H | L | L | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | |
L | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | H | |
L | H | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | H | |
L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | H | |
H | L | L | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | H | |
H | L | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | H | |
H | L | L | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | H | |
H | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | H | |
H | L | H | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | H | |
H | L | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | H | |
H | L | H | H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | H | |
H | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | L | |
H | H | L | L | L | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H | H |
De IC's aansluiten
Bovenstaande tabel is hoe we het willen hebben, maar hoe sluiten we het nu aan op de demux IC's? Ik ga de schakeling aansturen met een PIC16F690. De lijnen A t/m G1 sluit ik aan op PORTC van de PIC, en wel van RC0 t/m RC4.
De aansluiting van IC1 is heel simpel:
A --> RCO
B --> RC1
C --> RC2
G2A --> RC3
G2B --> RC4
G1 --> Vdd
Dit is voor de eerste 8. Oftewel voor PORTC tellend van 0 t/m 7 (0b00111). Maar PORTC blijft tellen tot 23! De volgende stap is dus 8, in binair 0b01000. Op dit punt moet IC1 uitgeschakeld worden en IC2 moet gaan werken.
Als PORTC=8 dan is alleen RC3 hoog, daarom hebben we dit bij IC verbonden met G2A. In de tabel uit de datasheet kunnen we zien dat het IC dan uitgeschakeld is. IC2 moet nu juist gaan werken, daarom sluiten we daar RC3 aan op G1.
De aansluitingen voor IC2 zien er dan zo uit:
A --> RCO
B --> RC1
C --> RC2
G2A --> RC4
G2B --> GND
G1 --> RC3
Zo kunnen we doortellen tot en met 15 (0b01111), hierna moet IC2 stoppen en IC3 beginnen. Bij 16 is alleen RC4 hoog en deze leggen we dan aan G1.
We kunnen nu doortellen tot 23. Als je niet wil dat alle uitgangen ook uit kunnen dan kun je G2A aan massa leggen en ben je klaar. Maar leg je nu G2A aan RC3 en tel je nog 1 stap verder tot 24 (0b11000) dan zal alles uit zijn.
De aansluitingen voor IC2 zien er dan zo uit:
A --> RCO
B --> RC1
C --> RC2
G2A --> RC3/GND
G2B --> GND
G1 --> RC4
Het schema
Nu nog alles bij elkaar in een schema. Inplaats van de SSR's heb ik leds getekend omdat je zo makkelijker de werking kan zien.
En het eindresultaat is dan dit alles:
De groene ledjes zijn de 24 uitgangen van de demux IC's. De gele ledjes rechts onderaan het scherm geeft de stand van PORTC weer, alleen dan left justified (RC0 is het linkse ledje en RC4 de rechtse).
Ik hoop dat jullie hier iets aan gehad hebben. Graag hoor ik jullie mening.