Omcoderen van 4 naar 3 bits

Bavelt

Golden Member

Ik wil graag voor een schakeling met dataselectie een 4-bits patroon omzetten naar een 3-bits. (zie waarheidstabel).

De input wordt gevormd door een normale teller, die tot 22 telt (A t/m E) Voor iedere waarde moet dat worden omgezet in een 3-bitscombinatie (K-L-M).
Dat kan natuurlijk met een heleboel (N)AND's, N(OR)'s etc. Maar dat worden er een heleboel. Voor je het weet zit er dan een hoop redundantie in.

Is er wellicht een handig programma of handige techniek om deze omzetting te doen?
Ik werk met TTL; (nog) geen microprocessor.

Fouten zijn het bewijs dat je het probeert..
bprosman

Golden Member

Eprom, PAL/GAL, microcontrollertje

Dat kan natuurlijk met een heleboel (N)AND's, N(OR)'s etc. Maar dat worden er een heleboel. Voor je het weet zit er dan een hoop redundantie in.

Die redundantie kun je er uit halen met Karnaugh diagrammen.

[Bericht gewijzigd door bprosman op zaterdag 22 juni 2019 14:06:25 (77%)

De jongere generatie loopt veel te vaak zijn PIC achterna.
Arco

Special Member

Er zit zo te zien geen logisch verband tussen in- en output?
Dan kan het inderdaad met 'iets' programmeerbaars als (E)Eprom, pal, gal, (p)rom, mcu. (zelfs een kleine bipolaire prom zou kunnen als de 82Sxxx)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Of een heleboel dioden, weerstanden en transistoren. Dan kan je de tabel programmeren met de hete pook.

maartenbakker

Golden Member

Die tabellen schreeuwen op het blote oog gezien inderdaad om Karnaughdiagrammen. Kon nog best wel eens meevallen qua omvang.

www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."

Alles boven de 15 is 001, dus de drie karnaughdiagrammen worden ook overzichtelijk.
Dit zijn de drie 4-bits karnaughdiagrammen, al of niet met fouten.
De eerste twee is net een dambord en daar word ik niet vrolijk van.

code:



 K
===
        BA
      | 00 | 01 | 11 | 10
------+----+----+----+-----      
DC 00 | 0  | 1  | 0  | 1
------+----+----+----+-----      
   01 | 1  | 0  | 1  | 1
------+----+----+----+-----      
   11 | 0  | 1  | 0  | 1
------+----+----+----+-----      
   10 | 1  | 1  | 0  | 0
------+----+----+----+----- 

 L
===     
        BA
      | 00 | 01 | 11 | 10
------+----+----+----+-----      
DC 00 | 0  | 0  | 1  | 0
------+----+----+----+-----      
   01 | 0  | 1  | 1  | 1
------+----+----+----+-----      
   11 | 0  | 0  | 1  | 0
------+----+----+----+-----      
   10 | 1  | 1  | 0  | 0
------+----+----+----+----- 

 M
===
        BA
      | 00 | 01 | 11 | 10
------+----+----+----+-----      
DC 00 | 0  | 0  | 0  | 0
------+----+----+----+-----      
   01 | 0  | 0  | 0  | 0
------+----+----+----+-----      
   11 | 1  | 1  | 1  | 1
------+----+----+----+-----      
   10 | 0  | 0  | 1  | 0
------+----+----+----+----- 

Een prommetje van @Arco is het gemakkelijkst.

Misschien zie ik iets over het hoofd, maar je begint toch met 5 bits, niet 4?
Kun je aangeven wat het verband is tussen de linker en de rechter tabel. Dat kan helpen bij het zoeken naar een zo simpel mogelijke oplossing.

Arco

Special Member

Epromfile is simpel; deze is voor een 27C512:
[A4:A0] in, [D2:D0] uit.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Welke logic je ook gebruikt, hou er rekening mee dat je glitches/spikes in de uitgang krijgt als de ingang veranderd. Soms geeft het niks, soms wel.

Als de teller echt alleen maar oploopt/wrapped en het moet glitch vrij zijn kun je, als je normale logic gebruikt, redundante termen toevoegen maar het is een hele klus om dat uit te puzzelen.

1-st law of Henri: De wet van behoud van ellende. 2-nd law of Henri: Ellende komt nooit alleen.

Als de teller niet verder telt dan 22 zou ik denk ik gaan voor een 4-bits ecoder (b.v. een 4515) en een diode matrixje. Het MSB boven 16 kan direct doorgezet worden naar K, daar echter niet vergeten de encoder te disabelen.

Iets willekeurig programmeerbaars is uiteraard fraaier, maar vereist voor zo een enkel geval eigenlijk dat men de kennis en programmer al in huis heeft.

Op 22 juni 2019 14:01:29 schreef Bavelt:
Is er wellicht een handig programma of handige techniek om deze omzetting te doen?
Ik werk met TTL; (nog) geen microprocessor.

Als het hobby is en je wilt iets nieuws leren: microcontroller
Als het hobby is en je wilt niets nieuws leren: poortjes en karnaugh

Als het werk is en het is er maar een: poortjes, kost jou geen inleertijd
Als het werk is en het zijn er meer dan 10: microcontroller
Als het werk is en het zijn er meer dan 10 miljoen: Dedicated IC

GAL/PAL/((E)E)PROM: Kan allemaal, als je het leuk vind moet je het vooral doen. Als het commercieel in lage aantallen is ook prima, mits je het snel kunt. Het is wel allemaal zeer mature technology, dus leuk voor hobby maar minder geschikt commercieel.

FGPA/CPLD kan ook, al ken ik zo snel geen commercieel aantrekkelijke CPLD met 8 I/O. Bestaat vast.

Poortjes zal prima kunnen, maar wordt een goede handvol IC's. En één fout in je karnaugh-diagrammen (of welke ontwerpmethodiek dan ook) je moet een nieuwe PCB maken.

Microcontroller is ideaal: 8IO en voeding past in een 14pins, die dingen krijg je voor 50ct.

Op 22 juni 2019 22:11:00 schreef blurp:
Microcontroller is ideaal

Of een microcontroller ideaal is hangt natuurlijk nog van andere factoren af. Als hier iets van adressdecoding voor een ram of wat dan ook bij zit, dan kom je met je snelheid in de knoop. TS mag wel even met wat meer info komen.

If you want to succeed, double your failure rate.
Bavelt

Golden Member

Programmeren met een microprocessor staat op mijn 'to-do' lijstje om daar mee aan de slag te gaan.
Dat biedt heel vaak oplossingen voor vraagstukken heb ik al gemerkt en gezien.

Ondertussen heb ik een online karnaugh-solver gevonden. Lijkt een aardig programma, die het meteen oplost!
De details worden hierbij keurig vermeldt.

http://www.32x8.com/var5.html

Fouten zijn het bewijs dat je het probeert..

Maar ook dan heb je iets nodig om die conversie te implementeren. Je geeft niet aan wat de toepassing is. Daarom zijn de aangedragen oplossingen zo divers. Het gaat van microcontroller tot aan ASIC (dat is de breedte range die ik eruit gelezen heb :-) ).
Zelf zou ik kijken naar een goedkope CPLD (Igloo Nano), maar ja, dat eist wel weer een programmer. Als het wb timing kan zou ik een Arduino nemen.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Frederick E. Terman

Honourable Member

Op 23 juni 2019 09:00:50 schreef Bavelt:
Ondertussen heb ik een online karnaugh-solver gevonden.

Ja, die zag ik ook al voorbijkomen.

Er is misschien nog een extra manier om te vereenvoudigen, maar dat heb ik voor jouw vraagstuk niet uitgeprobeerd. Ik bedoel het volgende:

Stel P is een ingewikkelde functie van A t/m E. Je vindt een schakeling met logische poorten die dit goed uitvoert.

Stel Q is dezelfde functie van A t/m E. Dan kun je precies dezelfde schakeling nóg een keer maken, maar dat zou dwaas zijn. Veel handiger is het, gewoon te stellen: Q=P.

Stel R is bijna dezelfde functie van A t/m E. Namelijk gelijk zolang E=0, en altijd 1 als E=1. De Karnaugh-solver zou nu met een ander schema komen, en dat zou ook werken, maar ook hier kun je veel slimmer zijn:
Neem een OF-poort, en sluit daar E en uitgang P op aan. Aan de uitgang van de OF-poort komt dan de gewenste R.

Ik hoop dat je met deze voorbeelden snapt wat ik bedoel.
En het kan nóg 'erger': doordat je in de oplossingen altijd kunt kiezen voor een product van sommen of een som van producten, kun je soms een 'tussenresultaat' creëren dat erg handig is voor het oplossen van een ándere uitgang.

Deze verfijningen hebben dus alleen zin als je meer dan 1 uitgang moet maken; dan kun je soms zo'n slimmigheid toepassen.
Ik heb helaas nog geen online Karnaugh-solvers gezien dit dit ook voor je doen.

Keramisch, kalibratie, parasitair: woordenlijst.org
Arco

Special Member

We weten nog steeds niet wat/of er verband is tussen beide tabellen... ;)
Met de eprom oplossing kun je indien nodig snel aanpassen. Een 16V8 kan ook. (zelfs een oude prom als de 74S288, maar wie heeft daar nog een programmer voor?... ;) )

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 23 juni 2019 12:17:42 schreef Arco:
We weten nog steeds niet wat/of er verband is tussen beide tabellen... ;)

Misschien zitten er wel fouten in de geposte tabel of kan de gewenste functionaliteit van het totaalsysteem op een handigere wijze bereikt worden.

Bavelt

Golden Member

De bedoeling van dit geheel is om weer het werken met logische poorten, tellers, latches, schuifregisters etc op te halen. Inderdaad, uit een welhaast vervlogen tijdperk. Vrouw Holle leefde volgens mij toen nog..
Maar wel weer leuk om te doen.
Ik heb al een Arduino besteld om richting de microprocessors te gaan.
Maar voor nu dus even kijken of het lukt met losse onderdelen, maar dan wel zo slim mogelijk ipv een kilo aan Nand-poorten, etc.

Mijn oefening was het werken met een data selector (74ls251).
Het einddoel van dit alles:

Ik maak een toongenerator die een 6-tal tonen produceert in 21 pulsen.

De volgorde:
start
0: niks (reset)
1: T1
2: T1
3: T2
4: T1
5: T2
6: T3
7: T3
8: T3
9: T3
10: 0 (1 klok pauze; klok - ca 1/8 sec)
11: T4
12: T4
13: T5
14: T4
15: T5
16: T1
17: T1
18: T1
19: T1
20: T1
21: Stop / reset

Iedere Toon heeft zijn eigen frequentie. De 6 tonen maak ik door gebruik te maken van de 74LS14. Daar zitten 6 inverters in met Schmitt Trigger ingangen. Met een RC-schakeling (A-stabiele MVB) generereert iedere inverter zijn eigen toon (T1 t/m T6).
In eerste instantie had ik één MVB die door een DAC met weerstanden werd aangestuurd vanuit de TTL-logica, maar die houdt zijn frequentie niet goed vast; enorm spanningsgevoelig.
Iedere keer als ik de voeding aanzette kreeg ik per toon een andere frequentie, wel in de buurt, maar niet exact.

Met een 74LS14 krijg ik dat veel beter voor elkaar.
De data selector kiest middels een teller (74HCT393) één van de uitgangen van de 74LS14.
De frequentie van de tonen variëert van 440 Hz t/m 698 Hz.

Fouten zijn het bewijs dat je het probeert..

Hier valt weinig te vereenvoudigen. Dat wordt dus kiezen uit aangedragen oplossingen.
Ik merk wel een verschil op tussen 1e en laatste tabel

code:


stap    1e tabel   2e tabel
11         4          T4
12         4          T4
13         5          T5
14         5          T4     ?
15         6          T5     ?

Welke is goed? Misschien zitten er nog wel meer verschillen in.

Bavelt

Golden Member

Heel goed opgemerkt Ohm Pi!

Hierbij de juiste tabel.

Fouten zijn het bewijs dat je het probeert..
Frederick E. Terman

Honourable Member

Keramisch, kalibratie, parasitair: woordenlijst.org
mel

Golden Member

FET, er staat een "A" te veel :P
edit: toch niet 8)7

[Bericht gewijzigd door mel op maandag 24 juni 2019 04:31:13 (22%)

u=ir betekent niet :U bent ingenieur..

Is T1 523Hz volgens '1', '2' en vele andere cijfers of 493Hz volgens cijfer '4' en hoe zit het met de overige frequenties?
Volgens mij kan je beter de data selector (74ls251) er tussen uit gooien en rechtstreeks van de 5-bits code naar 6 verschillende uitgangen gaan, dus iedere toon zijn eigen uitgang

Dat idee had ik ook. Sla die 3-bits code over en ga van de 5-bits direct naar 6 uitgangen.

Arco

Special Member

Dan heb je weer extra poorten nodig om de uitgangen van de 6 oscillatoren te schakelen...
Als je een eprom gebruikt voor de omzetting, dan kan die ook gelijk de selectie van toon 1...6 voor zijn rekening nemen...

[Bericht gewijzigd door Arco op maandag 24 juni 2019 21:53:05 (41%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com