Quantcast
Channel: Blogs at All About Circuits
Viewing all articles
Browse latest Browse all 742

DIY Pong - Part 1 of 4 - Getting Started

$
0
0
Remember the old TV Pong game? This is one of the early video games where you played a simulated version of ping-pong on a video screen.

Screen shot
[​IMG]

Video Game Demo


We built this on a breadboard for the fun of it when I was in grad school. Why would I want to do this again? Because it is doable, educational and fun.
Doing this on a microcontroller with a video screen is easy. How difficult would it be to replicate with common digital ICs on a breadboard? Well, not that difficult as it turns out. I will show you how.

What do we need? The objects on the screen are simple enough. All we need are two paddles and a ball.
Let's get hacking.

Video Basics
Firstly, we need a video screen. An old video monitor that accepts a composite video signal or a VGA monitor will do.
Next, we need to learn how to generate the video signal. This consists of three signals:
  1. Horizontal sync
  2. Vertical sync
  3. Video content
Let's learn what the horizontal and vertical sync signals look like.

You may want to go to this link and read up about Video Basics. This is a very useful tutorial on video formats (thanks to bertus for sharing this link).

NTSC vs PAL
There are different video formats depending on your country and what screen you have. Which country do you live in? Check this link to find out if you need to design for NTSC or PAL. I will be using NTSC in this demonstration. For a different format all you need to do is to modify the numbers given below to suit your situation.

Old fashioned VGA monitor (640 X 480) expects the following (all numbers are approximations):
Horizontal scan frequency = 31.5kHz
Horizontal sync pulse width = 3.8μs
Vertical scan frequency = 60Hz
Vertical sync pulse = 64μs

NTSC format
Number of lines = 525 lines
Horizontal scan frequency = 15.75kHz
Frame frequency = 30Hz

PAL format
Number of lines = 625 lines
Horizontal scan frequency = 15.625kHz
Frame frequency = 25Hz

You need to pay attention to these numbers because your hardware design needs to confirm with a specific format that your display device can accept. Fortunately, video monitors are very tolerant and the horizontal and vertical scan frequencies do not have to be exact.
Here is a graphic of how the signals might appear:

[​IMG]


The horizontal scan lines displayed on analog TV screens are interlaced. That is, half the total number of lines are displayed on one vertical scan. The second half are displayed on the next vertical scan with the lines being positioned in between the lines of the first scan, i.e. interlaced. Because the entire frame is displayed at 30Hz (NTSC) or 25Hz (PAL), non-interlaced TV would present an annoying flicker. Interlacing the fields at 60Hz or 50Hz helps to reduce flicker.

For our simple DIY Pong project, we will ignore interlacing and display a complete frame at 60Hz. In order to do this we need to generate 525/2 = 262.5 horizontal scan lines every 16.667 ms. As mentioned before, video monitors are very accommodating. We will bend the rules somewhat and design for the following:

Number of horizontal lines = 260
Vertical scan frequency = 60Hz
Horizontal scan frequency = 260 x 60 = 15600Hz

If you are designing for PAL, choose something like:
Number of horizontal lines = 320
Vertical scan frequency = 50Hz
Horizontal scan frequency = 320 x 50 = 16000Hz

TV Composite Signal
Here is a sample of where the video information sits on top of a horizontal line scan.
[​IMG]

Sync Generator
At the heart of any video system is the Sync Generator circuit.

TV Sync Generator.png

We will set the 555-timer circuit to generate a fixed 4μs low pulse at a frequency of about 15600Hz. A trim pot is used to adjust this Horizontal scan frequency. A 12-stage ripple counter is used to count 260 cycles. This number has been selected because it is a simple matter to detect when the 256 + 4 count occurs. Two bits from the 12-stage counter are ANDed and the output used to reset the counter. For setup, we monitor the vertical sync on an oscilloscope which has been set to trigger on AC line frequency. Then we adjust the 555-timer frequency until the vertical sync matches AC line frequency (60Hz for NTSC).

Sync Generator Circuit
sync generator schematic.jpg

Edit: There is an error in the circuit schematic. The inputs to the AND gate U3A should come from pins 6 and 12 of U2. The effect is not noticeable. I will correct the drawing at a later date.

Composite Output Circuit
video-out.png
The HSYNC and VSYNC digital signals are combined in an XOR gate. The second XOR gate inverts the logic of the signal before applying to the base of NPN transistor Q1. This is a simple emitter follower circuit with a 50Ω load resistor.

The Video input signal which will be described next is also added to the base of Q1

Here is a photo of the monitor with what we have so far. The intensity has been adjusted high so that you can see the scan lines. When the intensity is reduced the background will be black.

pong_screen001.jpg



Component List at this stage:

TLC555 - timer
CD4040 - 12-stage counter
CD4538 - Dual mono-stable multivibrator
74HC08 - Quad 2-input AND gate
74HC86 - Quad 2-input XOR gate
2N3904 - NPN transistor

Breadboard Circuit
The blue trimpot adjusts the horizontal scan frequency.
The large shiny pot adjusts the position of our experimental paddle or ball.

pong001.jpg


The Paddle
The two paddles (or bats) are identical. The paddle is dead simple and is described in the next blog to come.

The Ball
(to come in future blog)
Finally, we come to the tricky part, the ping-pong ball itself. In order to simulate the motion of the ball as it bounces about the screen we will make use of two triangular wave generators, one for the horizontal motion and the second for the vertical motion.
The horizontal rebound of the ball will be affected by the players' paddles as well as by the walls of the play area.
The vertical rebound of the ball is affected by the walls only. Hence this is the easier of the two. Let us tackle this one first.

Vertical Movement
(to come in future blog)

Horizontal Movement
(to come in future blog)

Embellishments
The only items left to complete the full TV Pong game is the score-board and the sound effects.
The sound effect is dead easy to implement. As for the score-board. Well, I think that's enough for one DIY project. Don't you think?

Edit: I failed to initially consider four additional embellishments:
  1. How to apply "english"? That is how to make the ball rebound off the paddle at a different angle?
  2. How to make the ball rebound at a different speed?
  3. How to make the ball begin a new serve from the middle of the screen?
  4. How to change the direction of the serve depending on who won the previous point?
Those are way too much for me at this point. Any takers out there in AAC Land?

Happy Hacking!

2017.01.15

Fellow AAC mates - if you happen to come by reading through all of this while I am still typing, this is all work in progress. I really don't have the full project completed at this point. I still don't have a solution for the ball movement as yet. Who knows how this project is going to turn out and when it will be completed. I only have so much time to work on this. I have a life as well. Wish me luck!

Your comments appreciated. Let me know if you're having as much fun as I am.
As of today - there were already 32 views as I type. Who are all you viewers?

Edit: Wow, after three days we have had almost 100 views.That's averaging about 30 viewers per day. Is anyone interested in actually putting this together?

Project started 2017.01.13

Viewing all articles
Browse latest Browse all 742

Trending Articles