Older entries are here
The ZikShield r1 (that fits on Zikzak rev3) has arrived! As mentioned before, this is just a quick board . a 'debug' board as a babystep forward, to verify some of the newer circuits blend in okay (the audio amp, FTDI usb/serial handler, etc), and that all the physical jack schematics/connectors are designed and measured properly. As you can see in the image, I've only just received the pcbs and barely populated one, but its working a treat so far.
As of today, I've populated the shield with: - USB (for power, and serial I/O) - VGA display - PS/2 keyboard connector - joystick0
These are all working great .. can tap away on the keyboard and see the text echoed to the display.
Note that all of this stuff works on the Zikzak base pcb, but that's just pinheaders. What we're adding now, is the 'breakout board' that offers real jacks, not just pinheaders. (The original goal for ZZr3 was to put it into a case, and jumper from the pinheaders to jacks; this allowed me to iterate on the Zikzak base pcb design, without blocking myself picking, order, waiting for and drafting up all the parts… just get on with the good parts!) .. but turns out using jumpers to parts and mounting the jacks on a 3d printed case proves too fragile, and you still have a pile of little jumper wires around to manage, which just gets annoying.
So Zikshield r1 aims at being a debug/testing level board, but also with the goal of making ZZr3 into a standalone machine; you plug in a power source (such as USB), a video cable if you like, a joystick or keyboard if you like, and you're good to go.
In addition to all the already proven stuff, it also adds some items I'd thought about but never got around to before, such as SD slot (actually micro-SD), and another USB (OTG) port. Also included is the audio amp with volume knob and so on.
But for today, only populated a few parts on the shield; as time permits, I'll fill up the rest and build some test code to validate it. Also working on designing a simple case to 3dprint, and working on a little demo game cartridge so theres something to show.
….. and then the big decision of whether to design a Zikzak base pcb rev4, that does it all in one big board?
More brain-dump detail in the forum post on here but suffice to say .. progress is coming well on the shield approach, where the shield is a second board that could be stood on on top of the zikzak rev3 pcb. Decisions (about power supply) have been made and going to go with the general approach that USB power is the way to go, but still supporting power by barrel jack and pinheaders and various combinations thereof; going to go with USB for power, and optional z80 serial over that USB via FTDI chip, with a second USB jack to be supported (calling it 'data usb') hooked up to the USB controller on the GPU. This should let us do crazy stuff like have the z80 tell the gpu to go into USB mass storage mode or other crazyness, if we ever get the time to hack out the code for it :) Schematic has most of the parts on it, and half wired up, and the PCB is getting the placement about half right… so I think I know where the VGA jack will fit in, and where the joystick and keyboard and USB jacks will go.
The image to the left is very WIP (work in progress); its already changed since the picture an hour or two ago, but just to show you where the pads are that bridge down to the ZZ rev3 main pcb, and the difficulty in layout out the jacks. And theres more jacks on there now…
Its made complicated by the fact that the ZZ r3 pcb was meant to go into a 3d printed case itself, with jacks affixed to the case, and those jacks connected to the pcb via jumper wires. Turns out putting jacks (with their mechanical stress during plug/unplug cycles) is hard on the printed plastic, and all those jumper wires just get fiddly after awhile. At anyrate, ZZ r3 pcb was designed for this, so the pin headers are all around the periphery. When you're planning to now put another board on top (or below) this pcb, it in turn would really like the real physical jacks to be around its periphery.. but cannot, since those positions are going to be the pinheaders that bridge down to the ZZ r3 board. In a more ideal world if the intention is for another second board to be the port expander, you put all the pin headers in central elevator-shaft like organization, all in the middle or in convenient location, and then spread out the connectors on the other board. Live and learn :)
My mode of operation tends to be .. given real life is very busy, and I can't bite off too large a piece lest nothing ever get done, to bite off smaller pieces and place one foot in front of the next, with regular achievable milestones. So current goal is to design the shield pcb that goes onto rev 3; rev3 is a real working Zikzak pcb on my bench, now; to make a shield means drawing up all the CAD libary pieces for the jacks and new components (a lot of fiddly work), and the new circuitry for the USB and audio amp and so forth. Some of this has been proven in other little projects or on breadboards, but its a whole other story putting it into a schematic and hooking it all up, and having the schematic pins map to the correct real world pads, and so forth. So, getting a shield laid out, and have the boards made, affords some experience.. it get you to lay pieces out, and you'll prove they work or not. Best case, it all works; next best is it mostly works, and you can work around some minor flaws, but have saved yourself from screwing up on a rev4 very expensive and time consuming board. Or worst case is a glaring flaw you find in shield rev1 and have to make a rev2 of that.. but better to do that, and minimize overall cost (parts and time lost).
So making a shield for rev3 is still the right way to go, as a step to Zikzak rev4 if we go that way (where ZZr4 would be another all in one board like r3, but with the jacks right on board if we can fit it; alternatively, r4 could be a large single board, much like r3, but with all the headers done centrally in some fashion designed for actual second board expansion, and with a few minor corrections.)
So, we prove the shield design, as a revision or two; it'll be fun, and make some fun experiments for ZZ r3 possible. Once thats proven, can decide if going for a ZZ r4 and if its a single or double board solution. Either way, while r4 is in the pipe, can be working on a 3d printed case design for r3, and enjoying r3 more.
Zikzak rev3 will be much more fun, with jacks and the amp and power and all that on one board. As is now, it rather depends on hooking up external power regulation pcb or using a big power supply, and a FTDI external board to do serial communication to host PC, and fiddly external PS/2 keyboard connector and fiddly VGA connector, and a few other connections; which is fine on the bench, but not really convenient to go show someone else at work or on an upstairs TV etc. To make the shield, and put a simple printed case around it, would make it an actual console, plug and play; jack in the USB power, a joystick, and VGA to TV and good to go! Or a keyboard, and cart, and so on…
So, shield for rev3 is coming along very nicely. Then decide what ZZ rev4 will be…
The Zok board is a simple test board for atmega644 (and similar atmel avr form factor) chips; good for small projects or as a breakout board, it can be minimally populated (just the avr chip and a couple capacitors) to work, or can have optional buttons, LEDs, crystal, etc put on. It has a toggle button, can take power in and out via header pins, and has space for an FTDI FT232RL chip .. which can allow a host PC/brick to supply power and/or serial over USB.
I hadn't actually tested the USB side of that pcb yet (didn't need it!), as the board was mostly being used for hacking around with robot cars and so forth.
(FWIW, if anyone wants a Zok, let me know, I can sell you a pcb and a few passives to go with it.)
But, I'm back on the Zikzak trail and waffling between making a full rev 4 pcb (with all the jacks, an audio amp, and more) on the main PCB (essentially a full pcb rework) or just make a shield that plops onto the existing rev3 pcb. A shield being just another pcb, that you use extra long headers on and just sandwich it onto the other pcb, offering the peripheral jacks and audio amp and so forth on _that_, without changing the host pcb. Much easier routing job, maybe much cheaper to do…
The core exercise for both options though, is to get the CAD objects put together; as I've ranted about before, CAD libraries are nightmarish things and everyone has to eventually just draft their own parts (schematic symbol, and the physical representation for pcb, and the mapping between.) Making both of those sides to each object is a lot of work.. the schematic is easier, as it needn't be precisely laid out, but requires you to have the correct datasheet or reverse engineering going on. The physical representation requires very precise measuring, so you can define where solder pads will be needed, where to drill holes, etc, and it has to be perfect. I find this part creation for libraries to be a huge de-motivator. Still..
.. so now I've gone and put together parts for all the extra peripherals the ZZ r4 or r3-shield needed; a POT wheel for volume control on the amp; joystick jack; VGA jack; barrel power jack; headphone jack; USB jacks; PS/2 keyboard jack; SD slot; etc and so on. I've got about 20 or so of each part in baggies, so can actually make a few boards as well.
Before committing to a shield design, it'd be wise to test out a few things; the amp circuit has already been tested. The FTDI USB for power and serial.. that needs testing and hence why the Zok pcb has been busted out. Fortunately, it works like a champ, so I can just clone the circuit from the Zok schematic over to the ZZ r4 or rr3-shield projects, and away we go.
So, part libraries.. down. FTDI USB test .. down.
Time to finalize the goal for the shield, and get that schematic laid out, and then the pcb layout, then print to paper to verify against a ZZ r3 pcb, and send to the boardhouse for etching … fun stuff!
Assuming I go down the shield route, it'll break out most of the features the ZZ r3 already offers, but more conveniently; keyboard, SD, etc will all be on there, and maybe link over the i2c and SPI headers and so on. The end goal is .. given an r3 pcb, and clip on the shield to top or bottom of it, it'll be able to run with just a USB cable from a computer or wall wort. Add on a VGA monitor, or speakers, or keyboard, or cart, or SD or whatever you want, and it can do useful (?!) work. No more piles of jumpers or external power pcb needed.. just nice and clean, like a raspberry pi or other modern board. Plug and play!
On 3d printing and cases..
It has been too long since I updated this blog space - about 10 months or so; i actuality, the last zikzak hackery was probably 6 or 8 months back, as I started to think about making a case for it, which led me back to the idea of a 3d printer .. and to buy one, or make one from scratch? I ended up tooling around with designing my own CNC machine (cutter) and combine it with a 3d printer (additive) - they're really the same machine design more or less, where you cut with one and draw with the other, but the same x-y-z machine, right? Well turns out with CNC you make waste, and little bits of wood or metal are flying off all over the place so you need a vacuum and a shield, and its noisey as all hell. Awesome to be sure, but just not as useful for me, right now. Also, its a lot more stress on the machine to do CNC (lateral grinding) than to just draw out a bead of plastic. Of course, drawing plastic is a whole world of pain too – thermal control is a nightmare, to heat and cool at just the right spots (cool on top, so molten plastic doesn't spooge out of your assembly; hot inside, so it flows; cool again, so that it doesn't melt all over the place and puddle, when you want it to stick; then heat underneath, so it doesn't cool _too quickly_ … ugggh). In the end, I built a incrementally better and better 3d printer, and then started merging in pieces from kits since I got less interested in designing my own printer to actually wanting it to be productive… so now I've got a beast half frankenstein thing of mine, with some really nice kit parts to make it work. So there, that was last winters project :) Then summer came.. and well, with a 3d printer, and summer, what things can you do … so I designed and flew a tricopter and quadcopter. Designed and fly RC machines is really tricky stuff.. but success! I suck as a pilot, but the blasted things work.
Did I end up with a case for zikzak? Well .. no. Not yet. But I've got a 3d printer, and learnt enough CAD that I could.. and thats a whole other exercise; the zikzak sbc rev3 pcb is a pretty nice board, but all the jacks on it are just header pins .. I figured at the time, just mount jacks on a case, and run the jumper wires to the header pins.. good to go right? Jacks take up a lot of space, and the pcb is already pretty darned tight, and you pay for every mm of size on there. Well, in practice, screwing metal jacks onto a printed plastic case is asking for cracks when those jacks are used (especially cartridge ports with a lot of stress around them.) The jacks should really be on the PCB, where you can screw them down and have a lot of solder, so they're good and sturdy, and no janky jumper wires to get loose.
There were a couple changes to make rev3 .. the audio chip just did not seem happy on the main system bus; all the signals are good, just the chip can't seem to get the data bus values. I suspect the waitstates are just not long enough for the old chip - a 1983 chip working with somethign 20 years its junior. Being sick of making costly revisions I've tied the eZ80 spare GPIO to the data bus on the audio chip, and now all is well.. excepting that GPIO is nolonger spare when the audio chipselect is active. A real shame not having a completely spare GPIO, but on the off chance it gets needed.. add some chipselect handling in your GPIO consumer, or don't drive audio at the same time :) (Or use the joystick GPIOs, or I2C, or SPI, or the cartridge expansion slot or stm32 spare GPIO or… lots of options. Anyway.)
I've also added the option to go to 512K RAM chip (128KB, 256KB and 512KB supported now – same pinout more or less); there are some extra pads added for setting a few choices or even adding a USB bus.
But all told, I think this is a 'good' gate; I've not tested everything (need to write a keyboard protocol driver to really test that, and make sure the full colour DAC still working), but none of that has changed in some revisions.
So. what is next?
Lots of roads to go down in the software side – making an actual cart game or two? getting BASIC interpreter working? formalizing the BIOS and memory map? Adding a SD card reader shield? A larger actual cart .. maybe an EPROM instead of EEPROM (seems they're getting harder to get..)
Some sick ideas are .. now that 512KB of RAM is in place, could perhaps port over uclinux; imagine a Linux cartridge for a Z80 system? Minds blown!
Or NuttX port..
Whose to say?