Maker Pro
Maker Pro

What should I do if I want to output through HDMI?

D

Daniel Pitts

If I wanted to work on a small (meaning cheap) hobby project which
outputs something on HDMI, what kind of things would I need?

Is there some existing IC that does most of what I would need, including
memory? Would I need memory + HDMI driver? What else would I need?

Is this an easy, medium or extremely difficult problem to solve for
someone who's only played around with LEDs and some simple ICs, but has
experience with theory?

Thanks,
Daniel.
 
L

Les Cargill

Daniel said:
If I wanted to work on a small (meaning cheap) hobby project which
outputs something on HDMI, what kind of things would I need?

Is there some existing IC that does most of what I would need, including
memory? Would I need memory + HDMI driver? What else would I need?

Is this an easy, medium or extremely difficult problem to solve for
someone who's only played around with LEDs and some simple ICs, but has
experience with theory?

Thanks,
Daniel.

VGA was/is horrifying; HDMI has to be stupendously complex.
 
D

Daniel Pitts

VGA was/is horrifying; HDMI has to be stupendously complex.

Perhaps. I'm not saying I want to design the interface. I was hoping
there would be some ICs that when combined the right way would "just
work" for me. Something akin to an old fashioned "video card", but
without all the bells and whistles of modern hardware-acceleration, etc...

Something easy to interface with just for displaying a buffer.
 
R

Rich Webb

If I wanted to work on a small (meaning cheap) hobby project which
outputs something on HDMI, what kind of things would I need?

Is there some existing IC that does most of what I would need, including
memory? Would I need memory + HDMI driver? What else would I need?

Is this an easy, medium or extremely difficult problem to solve for
someone who's only played around with LEDs and some simple ICs, but has
experience with theory?

A laptop with an HDMI or DisplayPort output. Older, previous-gen laptops
with this capability are probably gathering dust and cobwebs and could
be had for cheap.

If you want to roll your own, do some back of the envelope calculations
for the number of pixels, color depth, and frame rate to get some idea
of how much data you'll need to move, how large (and how many) frame
buffers you may need, and what kind of processing power to generate or
move all this data.

Xilinx has an appnote regarding implementing HDMI on a Digilent
Spartan-6 dev board, if you want to give it a go:
<http://www.xilinx.com/support/documentation/application_notes/xapp495_S6TMDS_Video_Interface.pdf>
<http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,836&Prod=ATLYS>

At least read through the appnote to get an idea of what may be
involved.
 
J

Jasen Betts

If I wanted to work on a small (meaning cheap) hobby project which
outputs something on HDMI, what kind of things would I need?

raspberry pi. (and patience - there's still a scarcity)
element14 quoted me 72 days lead time.
Is there some existing IC that does most of what I would need, including
memory? Would I need memory + HDMI driver? What else would I need?

Is this an easy, medium or extremely difficult problem to solve for
someone who's only played around with LEDs and some simple ICs, but has
experience with theory?

I haven't looked closely at HDMI but it seems a lot more complex than
analogue systems like composite video and VGA.
 
J

Jasen Betts

Perhaps. I'm not saying I want to design the interface. I was hoping
there would be some ICs that when combined the right way would "just
work" for me. Something akin to an old fashioned "video card", but
without all the bells and whistles of modern hardware-acceleration, etc...

Something easy to interface with just for displaying a buffer.

The simplest display card you're likely to find is a ISA bus VGA card,
16-bit address bus (MEM/IO and 15 address lines ), 8 bit data bus, TTL
voltages. but it's not HDMI and AFAIK they're not making them any more.

(there's more address line but only 16 are needed to drive the VGA,
the memory is addressed in 32K banks, under the control of the CRTC
which is in the I/O address space )

the powersuppy could be inconvenient though, some VGA cards want +5V
+12V and -12V
 
B

Bob Masta

The simplest display card you're likely to find is a ISA bus VGA card,
16-bit address bus (MEM/IO and 15 address lines ), 8 bit data bus, TTL
voltages. but it's not HDMI and AFAIK they're not making them any more.

(there's more address line but only 16 are needed to drive the VGA,
the memory is addressed in 32K banks, under the control of the CRTC
which is in the I/O address space )

the powersuppy could be inconvenient though, some VGA cards want +5V
+12V and -12V

I don't know a thing about HDMI, but as Les says VGA was
indeed horrifying to program. I don't think things will
have gotten any easier in that area, since the trend has
always seemed to be toward higher complexity, from which we
are supposed to be sheltered by the driver and OS. That
strategy works pretty well for modern systems like Windows,
as long as what you want to do is something that Windows has
API support for.

If the OP's project is going to be used from an OS, then it
will need a driver... a horrifying coding project. If it is
really just to display a buffer, why not stick with a
standard card and driver?

My feeling is that I'd need a *really* good reason to go
back to the VGA days of talking to the hardware directly.
This was semi-reasonable for VGA because although it was
horrendously difficult at least it was a standard that you
knew most systems supported. Now, it makes much more sense
to work through standard OS calls and let someone else worry
about the low-level stuff. (Please note that I program
exclusively in assembly language, so I'm no stranger to
low-level stuff!)

Best regards,


Bob Masta

DAQARTA v6.02
Data AcQuisition And Real-Time Analysis
www.daqarta.com
Scope, Spectrum, Spectrogram, Sound Level Meter
Frequency Counter, FREE Signal Generator
Pitch Track, Pitch-to-MIDI
Science with your sound card!
 
D

Daniel Pitts

I don't know a thing about HDMI, but as Les says VGA was
indeed horrifying to program. I don't think things will
have gotten any easier in that area, since the trend has
always seemed to be toward higher complexity, from which we
are supposed to be sheltered by the driver and OS. That
strategy works pretty well for modern systems like Windows,
as long as what you want to do is something that Windows has
API support for.
Indeed, I've written my own VGA drivers from DOS in the past. The point
of my posting to this newsgroup though was for an Electronics project,
not a software project. I have enough experience interfacing with
screens through software (both directly manipulating the VGA hardware,
and by using various hi-level libraries on modern systems).
If the OP's project is going to be used from an OS, then it
will need a driver... a horrifying coding project.
Horrifying for a beginner/moderate. As I've mentioned, Drivers are
things I've done.
If it is
really just to display a buffer, why not stick with a
standard card and driver?

My feeling is that I'd need a *really* good reason to go
back to the VGA days of talking to the hardware directly.
This was semi-reasonable for VGA because although it was
horrendously difficult at least it was a standard that you
knew most systems supported. Now, it makes much more sense
to work through standard OS calls and let someone else worry
about the low-level stuff. (Please note that I program
exclusively in assembly language, so I'm no stranger to
low-level stuff!)

Indeed, if the point of this exercise was ends, but for me the means is
what I'm after. Hell, if I had the time, money, and patience, I'd
probably try to build a 386 motherboard from scratch, just to see if I
could. Now, I'm not that foolhardy enough, but building a simple video
board is something I'm crazy enough to attempt.

Realistically, the software is the easy part for me, always has been. I
was considering a small LCD display for some of my projects, but then
thought that perhaps some other integration would be more flexible in
the long run. Hence what I asked about HDMI specifically. Any other
method of "displaying an image" on a screen, not involving a "computer",
would be a good start. I can do it on a computer no problem ;-)

Thanks for your input.
Daniel.
 
D

Daniel Pitts

I think you might want a "Raspberry Pi"
I've actually been interested in that, which is one of the reasons I
thought about HDMI at all. Personally, I want an electronics project,
not a software project. I've done the software parts before, on 80386's,
using low-level protocols to influence the VGA video card to do things
that were being BIOS capability.

What's important for my project is the means, not the ends. I'm wanting
to learn hot to integrate such things. I don't want easy, but
challenging. Not impossible, and not overly difficult, but no pre-built
solutions for me :)

Though from what I've read here and elsewhere, HDMI may be too big of a
bite for me at this early stage. Maybe I'll stick with building an LED
matrix for now.
 
L

Les Cargill

Daniel said:
Perhaps. I'm not saying I want to design the interface. I was hoping
there would be some ICs that when combined the right way would "just
work" for me. Something akin to an old fashioned "video card", but
without all the bells and whistles of modern hardware-acceleration, etc...

Something easy to interface with just for displaying a buffer.


I'd start with a video card that has Linux drivers and work backwards to
what chipset it uses.
 
D

Daniel Pitts

I think any HDMI project will be mainly software.
If it's not a R.Pi then it will be a chip which
converts a block of RAM into an image so you'll
spend half an hour connecting the RAM to the
chip and the rest of the time writing software
to put graphics in the RAM.
Indeed, but that half hour would be enlightening to me, and that is
more-or-less my plan for the project (connect chip to ram, connect
microcontroller/processor to ram, write lots of code)
From what you've said so far I think you
should get into the world of Arduinos.
I've been playing around with Arduinos.
A big LED cube driven by an Arduino is
quite challenging to build, especially
if it's with RGB LEDs.
I've seen such things. I was thinking of a matrix (not a cube) for a
first project there. I have already used an Arduino to drive a single
7-segment display, using my own code to choose segments to light up.

From there, I made the arduino read from the serial line, and output
the results to the segment. It works for many letters, but Hello World
wasn't possible due to "W" not being representable.
 
D

Daniel Pitts

I might read the datasheet for the chip
to see how it works but building one
doesn't seem much fun (to me). There's
not much leeway to let your imagination
run wild.

It's also not really something you can
show to people or put on your desk.
To a point. I've done some interesting graphics stuff before, and if I
could put it into a little device that plugs into the TV, that might be
enough. Arduino might not be powerful enough for the effects I'm think
of, but maybe it will be. Otherwise I'm going to have to build my own
ARM computer to show off ;-)
Anybody remember the "Demo scene" in the late 80's early 90's? Those are
the kinds of things I'm thinking of. Simple "fire" and "plasma" effects.
Did you enjoy it? Time to ramp it up!
Yep, it was exciting. It was really the first thing I did on my own
without any guidance (after "make a single LED blink).
I've got one of these planned as soon
as I get some free time. I already
bought some parts, including an SD
card shield to store the light sequence
files.
Storing light sequences? Why not generate them real-time? That's the fun
part, for me ;-) 8x8x8 is only 512 values. Even if you have some sort
of dimming ability, you probably only need a few bits worth to support
that. Manipulating that number of bits shouldn't take so much processor
time that you would need to precalculate entire sequences. Maybe a
quarter sine table, if you need that kind of curve. Floating-point ops
tend to be the killer, but you can do a lot with just integers, if you
know a few tricks.
I'm going to start with 4x4x4
and aim for 8x8x8 when I figure out
how LEDs interact with the human eye
(they have to be multiplexed).
The LEDs don't interact with the human eye, they only act upon it.
Unless you smash your face into the LED cube, but I wouldn't recommend
that :)

Please take the following with the caveat that I've never built anything
like this, so this is all from theory and math, and experience with
computer animation, not electronics.

If you refresh the entire display somewhere between 24hz and 60hz, you
would get a decent persistence-of-vision. If you wanted to reduce the
effect of reference-frame shifts (people moving or the device moving),
you could bump that up. Also, if you wanted to have N levels of
intensities, one approach would be to refresh N times faster, and have
that LED be on "x" number of "frames" and off "x-N" number of frames.
That's similar to PWM.

So, if you multiplexed in a way that turned on exactly one LED at a
time, you'd have to update 8x8x8 (512) per frame. If you had only
on/off, and wanted a 60hz refresh rate, you'd need to update points at
30.72kilohertz. If you wanted 4 levels of intensity, you'd need 122.88khz.

Of course, if you controlled 8 leds in parallel, you could reduce that
rate by a factor of 8. which would be 15.36khz. That means you have 65
microseconds to choose values for that particular 8 led pairs.

If I'm doing my math right, that gives you 260 instructions on a 4mhz
processor to set the values how you want. If you only have a 4x4x4 cube,
you have an 2083 instructions.

Does all this seem correct?

I've read through an Instructables 8x8x8 cube guide. This was before I
had any practical experience (not that I have a lot now). I recall
thinking their driver circuit was overly complex for not having PWM
support. Maybe they intended that to be software, but they didn't
discuss it at all.

On a related note of obtaining LEDs... You might already know this, but
you can get batches of 1000 LEDs on ebay pretty cheap. red, green, and
yellow seem to be right around $10, where blue and uv are $20-$30. 1000
is enough for a 32x31 display, with a few spares. It is also enough for
a 10x10x10 cube of course, if you don't have any defective parts ;-).
You can *almost* built 2 8x8x8 cubes, you'd be 24 short.
Get hold of a 14 segment display...?
I suppose I could do that. I think I'd rather move on to matrix
displays. If I need to render only characters, I'll probably just buy
an LCD character display or something.
 
Top