Electronics > Projects, Designs, and Technical Stuff
16 bit to 4 digit 7 segment decoder
<< < (10/16) > >>
mariush:
All this hassle over a few 7 segment digits.

Just get digits with common anode, then use a led driver.

For example
1 digit common anode:  https://www.digikey.com/product-detail/en/inolux/INND-TS40RAB/1830-1152-ND/7604988
2 digits (1 anode per digit) :  https://www.digikey.com/product-detail/en/lite-on-inc/LTD-6410G/160-1924-5-ND/3199123

LCSC has them for 10-15 cents per digit, here's some examples:

1. 0.56" https://lcsc.com/product-detail/Led-Segment-Display_Made-in-China-FJ5161BH_C8092.html
2. 0.36" https://lcsc.com/product-detail/Led-Segment-Display_Made-in-China-FJ3161BH_C10690.html
3. 0.80" https://lcsc.com/product-detail/Others_OASIS-TOS-3124DMG-9B4_C325438.html

4. 2 digit (2 anodes + 8 cathodes) https://lcsc.com/product-detail/Led-Segment-Display_ARKLED-Wuxi-ARK-Tech-Elec-SN430281N_C182258.html

Use an 8 channel or 16 channel led driver  and power 1-2 digits at any time directly from your microcontroller (the output pins have enough power for 10-20mA per pin)

LCSC has them for 5 cents each, or 2 cents if you buy 1000: https://lcsc.com/product-detail/LED-Drivers_Shenzhen-Sunmoon-Micro-SM74HC595D_C93838.html

There's also 10 cent led driver chips which can control directly 4 digits (4 anodes, 8 cathodes) : https://lcsc.com/product-detail/LED-Drivers_TM-Shenzhen-Titan-Micro-Elec-TM1650_C44444.html

Here's 4 digit 7segment common anode, 50 cents each or 30 cents each if you buy 100: https://lcsc.com/product-detail/Led-Segment-Display_Made-in-China-4Bit0-56Inch-red-digital-Led-Super-bright_C10713.html

oPossum:

--- Quote from: obiwanjacobi on December 22, 2019, 09:06:48 pm ---Is there some boolean reduction technique being used here?  :-//

--- End quote ---

Yes, that is one of the advantages of using VHDL. I am using the free Lattice ispLEVER software that targets all the older Lattice GALs and CPLDs. It puts to boolean equations in the log file.

An example...

--- Code: ---seg_b_out     = !(  !hex_in_a_3_ &  hex_in_a_2_ & !hex_in_a_1_ &  hex_in_a_0_   0101 5
                 #                  hex_in_a_2_ &  hex_in_a_1_ & !hex_in_a_0_   X110 6 E
                 #   hex_in_a_3_ &                 hex_in_a_1_ &  hex_in_a_0_   1X11 B F
                 #   hex_in_a_3_ &  hex_in_a_2_ &                !hex_in_a_0_)  11X0 C E

--- End code ---

Handles 5, 6, B, C, E and F. Six digits with 4 OR gate inputs.

See reply 26 for all the others.
oPossum:

--- Quote from: edavid on December 22, 2019, 05:22:34 pm ---
--- Quote from: oPossum on December 22, 2019, 06:18:36 am ---
--- Quote from: edavid on December 22, 2019, 03:32:49 am ---PROM: AT29C020 or equivalent (DIP32) + 74HC4060 (DIP16)

--- End quote ---

How would the cathodes be driven?

--- End quote ---

Oops, what was I thinking  |O
You would also need a 74HC138 or similar.
(Or 29F400 + 74HC04 + 74HC74, but I don't like that as much.)

--- End quote ---

If directly driving the cathodes is acceptable, then the GAL solution requires only one MOSFET. It may be possible to put the oscillator in the GAL. I don't know if there is enough hysteresis on the inputs for that to work.

obiwanjacobi:

--- Quote from: oPossum on December 22, 2019, 10:40:34 pm ---See reply 26 for all the others.

--- End quote ---

Totally missed that  :palm: Thanx!

Very clever indeed. I think I'll take a look at that software you're using if only to do the crunching.
Peabody:
Well here's a non-GAL option that should work with the Atmega328P 28-pin DIP package.  You would use two HC573 transparent latch chips to capture the 16-bit address bus.  Their outputs would be ganged inputs to the 328P, with the latches' /OE pins selecting which one is active.  Processor pins needed would be the 8 data lines, one latch enable, and two /OE lines, for a total of 11.  On the 7-segment side you would multiplex by segment instead of by digit, and use a single HC4017 to drive the displays.  For four digits, that would require 5 I/O pins - one for each common cathode, and one clock pin for the HC4017.  So that's a total of 16 I/O pins.

An additional benefit of multiplexing by segment is that since only one segment line is driven at a time, the maximum number of segments driven at any time is 4 instead of 8.  That means that if the displays are even moderately efficient, an HC4017 output can probably source a segment line directly without a transistor, and in fact you only need one resistor on each CC line instead of one resistor on each segment line.

Edit:  It appears the ATTiny261 would also work.  It's a 20-pin processor with 16 I/O pins.  And there's an ATTinyCore avialable for the Arduino IDE that includes support for the 261.  For a 3.3V system, the TI MSP430G2553 would be perfect, programmed with Energia, which is a port of the Arduino IDE for MSP430.

Details of this multiplexing method can be found here (there's also a video link there):

https://github.com/gbhug5a/7-Segment-Displays-Multiplex-by-Segment
Navigation
Message Index
Next page
Previous page
There was an error while thanking
Thanking...

Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod