Jump to content
IGNORED

Bird's nest...


Recommended Posts

I'm feeding its video overlay pin 8. The massive circuit reads from a FIFO chip and an Arduino is filling the chip with pixel data. It's still noisy as heck, so I'm waiting on some more parts and breadboards so I can try to cut the noise down and finalize a PCB design. I'm pretty sure I've got the timing down save for a potential boundary condition at the end of each scan line. The crosstalk-induced noise from all these wires is making it hard to determine the exact point to stop reading from the FIFO on each scan line, so I need to lower the noise so I can nail it down. The circuit is operating at about 7MHz (specifically, double the Inty's MCLK frequency). There's a little PLL buried under the wires doing the work of doubling the clock.

post-7945-0-16008100-1496974110_thumb.jpg

Edited by JohnPCAE
  • Like 5
Link to comment
Share on other sites

In case anyone is interested, this is my current "target" design...that I'll be testing once my parts come in. It lets the Arduino pump in 8 pixels at a time. The one I currently have wired up is nearly the same but only lets it pump in 4 pixels at a time. I'm testing with an IDT7208 64kx9 FIFO, which is really overkill. It has the same pinout and usage as the 7205 in the schematic. I made a notional board layout that fits within the maximum board size allowed in the free version of Eagle, but it's only tentative until I validate the design.

post-7945-0-25077600-1496989820_thumb.png

post-7945-0-56220100-1496990261_thumb.png

Edited by JohnPCAE
  • Like 1
Link to comment
Share on other sites

He's mixing hi resolution (monochrome) graphics with Intellivision graphics. Its similar to what the keyboard component did. With game applications you could display text information eg. scores in smaller high res fonts. You could have fixed text displayed during scrolling. The only limitation is it has to be white, I suppose it could be other colours but it will mix with Intellivision colours.

  • Like 3
Link to comment
Share on other sites

Getting closer :-D

 

I still need to clean out more noise (if I fill the screen with text it goes crazy), but it's a lot more stable than it was yesterday. The circuit had to undergo lots of changes, and there are surely more to come as I fine-tune the timing. This has the Arduino pumping out 8 pixels at a time, and I have 127 character bitmaps stored in flash. This leaves plenty of space for more character bitmaps.

 

The reason the left half of the screen is blurry is because of the way my Dell monitor is interpreting the composite video coming from the Inty. It expects standard NTSC video, which begins and ends with half-scanlines. The Inty generates noninterlaced video that begins and ends with full scanlines, which is confusing the monitor.

post-7945-0-30806600-1497085161_thumb.jpg

  • Like 6
Link to comment
Share on other sites

I plan to include several fonts. The Arduino Uno has 32k flash, so there's room (the CGA font here is already being read from flash). I'd like to have some be programmable, but I can't make any guarantees. An Arduino has only 2k RAM and I'm using 960 up just for the 40x24 video buffer.

 

One question re: fonts is whether we need all 256 glyphs for internationalization purposes or if I should stop at 128. There are lots of potential ideas for expanding the design, but it comes down to RAM space as well as the speed of the Arduino. Right now it pumps the pixel data out in about 45% of a 1/60 second frame, and it will need some time to service requests from the Inty CPU (which will have to be implemented on a separate board, with probably a FIFO to take as much of the load off the Arduino as possible).

 

The FIFO chip I'm using is 9 bits wide, so for every 8 pixels I'm pumping out there is the potential to push out an extra bit. I'm leaning toward an intensity bit that would allow for two brightness settings, but then there's the issue of storing a 16-bit wide screen buffer instead of an 8-bit one in only 2k of RAM. Also speed is an issue here, so the video buffer has to be organized such that it can rapidly get the information it needs. It might be possible to store attributes in a separate bit-packed array but I won't know if I can access it efficiently without testing it.

 

One thing that worries me is that if Inty requests are queued up in a FIFO, the Arduino will have to be able to drain that FIFO as fast as the Inty can fill it.

 

My board design is well underway, but I still have to load it up with vias between the two ground planes and then go over it with a fine-toothed comb. I've tried to maximize the amount of shielding between traces and I've added provisions for up to three large caps to keep the power stable. I don't think they will all be required, but who knows.

post-7945-0-55216800-1497330050_thumb.png

Edited by JohnPCAE
Link to comment
Share on other sites

Final board layout, and just ordered it from OSH Park! It runs at 2x MCLK (roughly 7MHz), but also provides a 4x clock output and output pixel and enabled taps to allow for future experimentation. It takes 9 data inputs, with the last bit acting as an intensity bit (1 = full brightness, bright, 0 = half-brightness). Now I just have to wait for the boards so I can try them out.

post-7945-0-26220300-1497738715_thumb.png

post-7945-0-43063100-1497738779_thumb.png

Link to comment
Share on other sites

Finally got my boards and all the parts!

 

I had two resistor values backwards in the schematic. R12 should be 3.3k and R13 should be 10k, but otherwise I'm getting the same results as with the breadboard. It's still somewhat noisy, though. I'll have to figure that out.

 

I'll also have to tweak the board design a little: two of the chips are too close together and it took a lot of pin bending on one of them to get it to fit.

 

In the screenshot I'm alternating the intensity bit for each character, which is why the columns are varying in intensity.

post-7945-0-24747000-1498416456_thumb.png

post-7945-0-47345100-1498416490_thumb.png

Edited by JohnPCAE
  • Like 1
Link to comment
Share on other sites

Getting there! Most of the noise is coming from signal reflections at the three clock taps (1x, 2x, and 4x MCLK). I can eliminate it by adding small capacitors in series with small resistors connecting them to ground (basically adding impedance terminators). I still have to identify the source of the remaining noise.

Link to comment
Share on other sites

Well, I give up trying to synthesize MCLK * 4 from the MCLK pin: the signal from the Inty is just too noisy. It turns out that 5V oscillators that give me MCLK * 4 are plentiful (14.318180 MHz). Since the counters reset every scanline, I don't expect any glitches. Once the oscillator arrives, I'll give it a try.

Link to comment
Share on other sites

Huh. This is what I get for having insomnia. On a hunch I added a simple 2N3904 amplifier circuit before the comparator and a 7408 AND after generating the clock (to isolate the generation circuitry) and now the display is rock-stable. So, there is at least one potential solution :-D

Edited by JohnPCAE
  • Like 2
Link to comment
Share on other sites

Now we're cooking! It turns out that using an AND gate to stabilize the clock is a bad idea as it's highly dependent on the particular chip and type of chip (HCT, ACT, etc.). All I needed was better filtering and a tweak to the amount of hysteresis in my Schmitt trigger. At some point in the near future I'll upload my Eagle files and Arduino proof-of-concept code.

post-7945-0-91352400-1499731423_thumb.jpg

Edited by JohnPCAE
Link to comment
Share on other sites

No guarantees here, but I'm shooting for 2048 character glyphs in Arduino flash memory: I think it might be readily possible to implememt a 12-bit wide character array in the Arduino's RAM, with one bit reserved as a brightness/intensity bit (though I wonder if reverse-video might be more useful instead). I haven''t worked out whether or how to have a RAM area for glyphs yet, but I suspect it might have to reside in external memory since an Arduino Uno only has 2k RAM. At any rate, here are the glyphs I have so far. The CGA font is heavily expanded for internationalization, and the following two fonts less so. Now I'm looking at adding some bare-bones stylized glyphs, but there's enough space available that I think it would be a good idea to post what I have so far and solicit some feedback.

fonts.bmp

Link to comment
Share on other sites

Font wise, don't be afraid to have the accents, umlauts, circumflex, rings etc hit into the main character. I am referring to letters such as à, è, ì, ò, ù, á, í, ó, ú (where did é go?). Also letters like ü, ô, ö, û, ÿ, ñ etc really don't need to be one pixel shorter than their non decorated counterparts. The ring/dot on capital Å could melt into the base letter instead of having a very distinct look. The same could be said about capital Ö.

 

Though it might be for technical, visual reasons you make sure that every dot is two pixels wide and that single width dots and lines will just smear and become inlegitimate. However on your Intellivision style font, the ring on Šand tilde on à (among others) are at higher resolution than most of the others.

 

Bruce Abbott extracted a number of C64 fonts for his Aquarius. Though these are two entirely different designs and fill different purposes, you might find some usable fonts there. He didn't put in as many letters for internationalization though.

http://atariage.com/forums/topic/233221-aquarius-320x200-bitmap-graphics-hack/page-6?do=findComment&comment=3438658

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...