32 bit binair getal naar bcd

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • RGort10
  • Registratie: Maart 2017
  • Laatst online: 22-05 16:42
Hey, ik ben op dit moment bezig met een binaire rekenmachine die kan optellen, aftrekken en vermenigvuldigen. Dit lukt allemaal maar ik zou graag de uitkomst op 7-segment displays willen weergeven. Hiervoor heb ik een binair naar bcd omzetter nodig. Ik heb al een aantal schema's gevonden en over hoe je de conversie uitvoert maar hierbij had je de 74185a voor nodig. Alleen wegens slechte verkrijgbaarheid en een redelijk dure prijs per ic vroeg ik me af of er nog een andere manier is. Bijvoorbeeld met logische schakelingen of eventueel met een microprocessor. De rekenmachine wordt gemaakt uit full adders met logische schakelingen dus ik zou graag de conversie ook op zo'n manier doen.
Alvast bedankt voor de hulp.

Beste antwoord (via RGort10 op 06-03-2019 19:44)


  • ReneK
  • Registratie: Juni 2007
  • Laatst online: 21-06 08:04
Als je het helemaal in hardware wilt doen (en ik neem aan dat dat de bedoeling is, anders is er geen eer te behalen aan het maken van een digitale rekenmachine, en kan je net zo goed alles in een microprocessor doen), dan hangt het er maar net van af hoe groot de woordbreedte van de binaire rekenmachine is.
Voor een 16-bits woordbreedte heb je al 16 x 74185a nodig, en daarna groeit het nog veel harder.

Met gewone logische schakelingen ("losse poorten") wordt het al snel erg complex.

Ik had laatst zo'n binair naar BCD conversie nodig voor een FPGA projectje, en heb deze video's
gebruikt als leidraad:

YouTube: Lesson 32 - Binary-to-BCD Converter

YouTube: Lesson 33 - VHDL Example 18: 4-Bit Binary-to-BCD Converter Logic

YouTube: Lesson 34 - VHDL Example 19: 8-Bit Binary-to-BCD Converter-for loops

Je hoeft het natuurlijk niet met FPGA's en VHDL te doen, maar het geeft wel inzicht hoe je de conversie met het "Shift and Add-3" algoritme in hardware kunt maken.

Als de woordbreedte van je rekenmachine niet te groot is, kan je ook overwegen om de conversie met look-up tables in één of meer (E)PROM's te realiseren.

Een andere oplossing zou kunnen zijn je rekenmachine direct decimaal (met BCD's) te laten rekenen ipv. binair. Dan heb je de complexe conversie niet nodig, maar wordt wel je rekenmachine zelf weer complexer.

Edit: Oops. Ik zie nu pas in je topic titel staan dat het om een 32-bits woordbreedte gaat. De complexiteit groeit zo snel met de woordbreedte, dat een 32-bits binary naar BCD converter mij veel te complex lijkt om met losse logica te maken, ook niet met 74185a's. Als je het per se in hardware wilt doen, lijkt een FPGA mij de enige optie. Maar dan kan je de rest van de rekenmachine ook net zo goed in de FPGA maken ;-)

[ Voor 12% gewijzigd door ReneK op 05-03-2019 17:03 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • Rmg
  • Registratie: November 2003
  • Laatst online: 10:49

Rmg

Mja in de datasheet staat de hele functietabel, dat is natuurlijk wel te emuleren in een microcontroller.

Een zoektocht op github levert een paar mooie opties op https://github.com/search?q=bcd+arduino

Je zou dan een atmega328 in dip formaat kunnen pakken bijvoorbeeld

[ Voor 14% gewijzigd door Rmg op 05-03-2019 15:00 ]


Acties:
  • +1 Henk 'm!

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Hoe bedoel je "binaire rekenmachine"? Bedoel je dat als "ik voer twee reeksen van nullen en enen in en een bewerking en ik verwacht de output in nullen en enen" ? In dat geval zou ik niet moeilijk doen over bcd conversie: een 0 schakelt de zes segmentjes aan die de nul vormen en een 1 schakelt de twee segmentjes aan die een één vormen. Kun je nog optimaliseren door altijd een één te laten zien tenzij de ingang nul is, dan worden er vier segmentjes bijgeschakeld
Als je binaire rekenmachine bedoelt als "ik voor twee decimale getallen in, converteer die naar binaire waardes, voer de bewerking uit en het resultaat converteer ik weer naar bcd" dan zou ik het opsplitsen. Eerst van binair naar decimaal, daarna van decimaal naar bcd

QnJhaGlld2FoaWV3YQ==


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • ReneK
  • Registratie: Juni 2007
  • Laatst online: 21-06 08:04
Als je het helemaal in hardware wilt doen (en ik neem aan dat dat de bedoeling is, anders is er geen eer te behalen aan het maken van een digitale rekenmachine, en kan je net zo goed alles in een microprocessor doen), dan hangt het er maar net van af hoe groot de woordbreedte van de binaire rekenmachine is.
Voor een 16-bits woordbreedte heb je al 16 x 74185a nodig, en daarna groeit het nog veel harder.

Met gewone logische schakelingen ("losse poorten") wordt het al snel erg complex.

Ik had laatst zo'n binair naar BCD conversie nodig voor een FPGA projectje, en heb deze video's
gebruikt als leidraad:

YouTube: Lesson 32 - Binary-to-BCD Converter

YouTube: Lesson 33 - VHDL Example 18: 4-Bit Binary-to-BCD Converter Logic

YouTube: Lesson 34 - VHDL Example 19: 8-Bit Binary-to-BCD Converter-for loops

Je hoeft het natuurlijk niet met FPGA's en VHDL te doen, maar het geeft wel inzicht hoe je de conversie met het "Shift and Add-3" algoritme in hardware kunt maken.

Als de woordbreedte van je rekenmachine niet te groot is, kan je ook overwegen om de conversie met look-up tables in één of meer (E)PROM's te realiseren.

Een andere oplossing zou kunnen zijn je rekenmachine direct decimaal (met BCD's) te laten rekenen ipv. binair. Dan heb je de complexe conversie niet nodig, maar wordt wel je rekenmachine zelf weer complexer.

Edit: Oops. Ik zie nu pas in je topic titel staan dat het om een 32-bits woordbreedte gaat. De complexiteit groeit zo snel met de woordbreedte, dat een 32-bits binary naar BCD converter mij veel te complex lijkt om met losse logica te maken, ook niet met 74185a's. Als je het per se in hardware wilt doen, lijkt een FPGA mij de enige optie. Maar dan kan je de rest van de rekenmachine ook net zo goed in de FPGA maken ;-)

[ Voor 12% gewijzigd door ReneK op 05-03-2019 17:03 ]


Acties:
  • 0 Henk 'm!

  • RGort10
  • Registratie: Maart 2017
  • Laatst online: 22-05 16:42
bedankt voor de reacties. Ik zal gaan kijken wat de beste optie is.