Built with Zola.| JP's Website
Background| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
Amstrad always wanted to have a 'killer product' out for Christmas. Before home computers it might have been a CB Radio, or something like that, but between 1984 and 1995, their big Christmas product was usually some kind of home computer. These were normally announced in July-September, in time to ramp up sales for the Christmas rush.| JP's Website
JP's Website| JP's Website
Retro Computer Festival 2024| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website
You can now buy Neotron Pico boards direct from Elecrow. See https://www.elecrow.com/neotron-pico-rev-1-1-assembled.html. I have very limited stocks, and they are priced at $99 each, for a PCB with all components fitted except the RP2040 and the CR2023 coin-cell. It's Open Source hardware and there's loads of detail on the Github page.| JP's Website
Intro| JP's Website
Intro| JP's Website
Over the past couple of weeks I've been working on SD Card support for the Neotron Pico. The broad schedule ran like this:| JP's Website
I've spent some time thinking about how to improve the PIO program that runs our Super VGA out. Currently it requires one 16-bit value per pixel, delivered from one of two ping-pong buffers each 1280 bytes long. Loading these buffers with RGB pixels based on characters read from the text buffer takes quite a lot of CPU time. If we limit ourselves to just two colours for the entire screen, we can build a small look-up table and get all 640 pixels drawn into the buffer per scan-line using about...| JP's Website
The delivery from JLCPCB arrived yesterday (2022-11-23). I did an unboxing video where I soldered up one example, did a smoke test, programmed the two processors and showed we get VGA video output.| JP's Website
I hit BUY at JLCPCB, and ordered:| JP's Website
I worked on the Neotron BIOS interface this week. I merged a bunch of long-standing changes around sharing a VGA-compatible text framebuffer, and added back in Block Device support. I also updated the Neotron Desktop BIOS and the Neotron OS, so you can now get Key Events from the pix-engine GUI window forwarded into the OS via the BIOS HID API.| JP's Website
You can now apply to be a Beta Tester and get a free Neotron Pico Kit:| JP's Website
As a bit of an experiment, I thought I'd try loading CircuitPython for the Raspberry Pi Pico onto my Neotron Pico board. Whilst the point of the board is to develop and run the Neotron OS, I found that Circuit Python was pretty useful for developing PCB tests and checking out various bits of functionality. The main advantage was that I could interact with well-tested libraries and not have to wonder if my code was wrong or the PCB was wrong!| JP's Website
In the last post I referred to some testing of the Audio CODEC using CircuitPython. Here's a video showing the code, with the Neotron audio in the background.| JP's Website
The latest rev 1.0.0 boards arrived today. I worked through a test procedure carefully:| JP's Website
Back in May 2022, the Rust Foundation awarded funds to the Rust community through their Community Grants Programme. My bid for was funds to cover the next around of Neotron Pico PCBs, and I was lucky enough to receive $3000.| JP's Website
I finally got my head around how the PIO state machines work and how the DMA subsystem works. So now there's real-time 80x25 text mode, written in Rust! It uses just two scanline buffers (640x2 bytes each) and a text buffer of 80x25 bytes.| JP's Website
My Pico is now installed in my new Checkmate A1500 Plus case! Minor alignment issues with the rightmost (nearest the PSU) stand offs, but the rest are OK.| JP's Website
I put the broken board to one side and built up a second. It has a bodge putting a 10k between the base of the PNP and its pad. With this I can start up the Pico with the power switch, using the STM32 for debouncing, and then power it off with a long press!| JP's Website
It tried to turn on the main DC PSU and I got a short circuit. After a bit more testing, I realised there's a dead short through the two transistors that pull the DC PSU enable line up to VDC when the STM32 output goes to 3.3V(VSB).| JP's Website
I designed this board without any other ATX board to compare to, or without an ATX case to measure up. I instead used the ATX 2.03 specification, which can be found online.| JP's Website
I got the first five v0.5.0 boards back. They look great! I tried soldering on the LQFP-32 STM32 (which I had in stock but JLCPCB did not), and it didn't go well.| JP's Website
The v0.5.0 PCB has been ordered from JLCPCB, with assembly for most SMD devices except:| JP's Website
Well it's been a busy year. I was made Deputy Mayor of St Ives back in May 2019 and that has rather filled up the calendar. I also present Monotron at ACCU 2019 in Bristol, and again at RustFest 2019 in Portland, Oregon. You can checkout the videos below:| JP's Website
So, the idea with the Monotron was to ask a simple question - how much can we do with a small, cheap, random microcontroller and the Rust Programming Language. The answer, after some significant development effort, was quite a lot:| JP's Website
Yeah I know I talk about a lot of embedded stuff on here, but I do still think about my Model Railway. I was at the Model Railway show in Peterborough today, where I picked up a lovely boxed Dapol "Yorkshire Voyager" set. It prompted me to think about what I'll run when my railway gets rebuilt and I figured I should write it down for posterity.| JP's Website
So now @rustbeltrust is over, I thought it was worth writing down a few details about what Monotron can do. It's had a few upgrades since @RustFest Paris! I tried to keep them under wraps to avoid spoilers but I can share them now. This is an un-roll and re-edit of my Twitter thread, and the features listed here are in no particular order:| JP's Website
It's a couple of months on from my talk at RustFest on Monotron, so I thought it was worth a quick catch up on where we're going next.| JP's Website
So, today I did a talk about Monotron at RustFest Paris. You can find the code on my Github and/or on crates.io:| JP's Website
I've had a few projects over the past few years using the TI Stellaris Launchpad. It's nothing particularly special - just a Cortex-M4 based LM4F120 MCU at up to 80 MHz with 256 KiB of Flash and 32 KiB of SRAM, an RGB LED and an on-board USB programmer - but it's pretty cheap and I've gotten to know it quite well.| JP's Website
I recently picked up an embedded project that I hadn't touched for a few months, so I could add some new features. I was disappointed to note that it no longer compiled - nothing in the code had changed, but it only compiles with Nightly Rust and that had recently had a bunch of changes that completely broke my build. This is then a tale about what I'd like to see from Rust in 2018.| JP's Website
Over the past weeks, I've been working through Advent of Code. If you haven't seen it, it's basically a daily programming challenge - one a day for the 25 days running up to Christmas. Each challenge has two parts, and you get points for being in the first 100 people to submit a correct answer (usually a number, or a short string). There's nothing for coming 101st! The challenges open at 00:00 EST (so, 05:00 GMT) so if you want to have a crack at the leaderboard, it's a very early start. The ...| JP's Website
Curious as to how each category did in PiWars (Professional, Intermediate and Beginner), I've annotated the official results with the category of the team and their overall leaderboard position in that category. For example, "2 wheels or not 2 wheels" is "Pro 1", as the winning Professional. You'll note that "Beginners" top four out of the seven categories!| JP's Website
Well, I've missed Christmas, obviously. Maybe it'll be done for Christmas 2016...| JP's Website
I've now got a Python webserver up an running (on my Linux server, for now), which offers a list of modes for the user to select from. When a mode is selected, it uses jQuery to push this back to the webserver, which then tells the other thread to change which animation it should play.| JP's Website
I picked up a couple of Raspberry Pi Zeroes (plus one with the Mag Pi magazine, which I'm not going to open) when they went on sale. It's Christmas, so what better than a Christmas Pi project?| JP's Website
A recent holiday gave me time to catch up on things. One of them was the electronics to control the automatic signalling for my model railway.| JP's Website
I decided to switch from taking the bus to work, to cycling. As it's about 14 miles each way, I thought the best starting point as an electric bike. Then, if it's a howling gale or horizontal rain, I'll still be able to make the journey without collapsing.| JP's Website
Intro| JP's Website
I'm thinking about entering Pi Wars in December. It's a Raspberry Pi based robot competition.| JP's Website
And now for something completely different.| JP's Website
Some success!| JP's Website
I mentioned before that I might patch the font render to handle proportional as well as monospace. The eagle eyed will notice from the last post that I did. I also changed the font to something a little less CGA and a little more 21st century.| JP's Website
Leaving the dashboard for a moment and going back to the in-car entertainment, I've noticed that DAB modules are quite expensive. Much more expensive than desktop DAB radios in fact.| JP's Website
So I can tie input waveform sampling to LCD updates, plus the menu system will reset the various trip values on demand. What remains is storing the trip values on shutdown, handling day/night mode, tidying up the MMI and making the PCB.| JP's Website
I've elected to stay with 8-bit mode as I need the pins as GPIO. Text rendering works well provided you are careful to over print a region rather than blanking it first (which causes a flicker).| JP's Website
I can now blit coloured rectangles to a small 4" LCD. Bloody /RD (pin E1) was stuck as an output, even though I'm clearly telling it to be an input. This broke the LCD self-init. Why will have to wait for another day - for now, I've unplugged it.| JP's Website
So, I've been trying to get this Displaytech LCD module to function, as part of the Mazda's TFT dashboard. Without the aid of a scope or logic analyser, it was extremely difficult to debug the 8-bit parallel (8080 style) interface. So, I've managed to lay my hands on a Salea Logic16 - the most amazing logic analyser I've ever used. The software is just gorgeous, even under Linux. Unhooking my board and connecting the analyser instead, very quickly I was able to determine that the Displaytech ...| JP's Website
I had a thought and figured I should write it down somewhere. The Jaguar supports OBD-II, as demonstrated by my Scan Gauge II. It's a big ugly having the gauge sat on the centre console by the gear lever, even if it does tidy away neatly into the arm rest when not in use. I'm sure with a an optoisolator like the one going in to the Mazda dashboard, I could knock up an OBD-II reader out of a the Stellaris Launchpad I'm going to use to decode the radio UI. This means I could put real-time stats...| JP's Website
I'm about to try and drive a 4.3" Display-Tech LCD from my Cortex-M4 powered Stellaris Launchpad board.| JP's Website
There's so much going on at JP Towers that I feel the need to write some of it down, lest any of it leaks about of my brain.| JP's Website
A couple of months ago, I went to a Raspberry Jam in Cambridge at the Centre for Mathematical Science. It was a great day out and I met some really interesting people, but the vending machine was a) a long way away and b) terrible anyway, and we had a lot of people in a small meeting room. "Next time", I bravely announced, "you should come over to my office. We'll lay on coffee and everything..."| JP's Website
My Github for the Stellaris Launchpad has had a cleanup. I've dropped support for using the ARM-Linux compiler as building without a C-library rapidly gets boring. The baremetal ARM compiler is a straightforward enough install (you unpack the tarball).| JP's Website
My Stellaris Launchpad finally arrived the other day. I ordered it back when they were under £4 each several months back. They're now about £10, which still isn't bad.| JP's Website
There was a slight mistake in the last pinout, which I've now corrected. Looking at other Alpine M-BUS pinouts (search for S601 on this page), it appears to be exactly as per the standard, except they've swapped the central ground pin with the M-BUS data pin. I suppose this is to thwart those trying to add a generic Alpine changer.| JP's Website
I recently purchased a 1995 Jaguar Sovereign (you might know it as a Jaguar XJ, but the Sovereign spec doesn't actually wear an XJ badge anywhere). It has a CD changer in the boot and a radio/cassette in the dash. The radio is rumoured to only accept a specific model of CD changer while using the Alpine M-BUS protocol. What I want to do is build an M-BUS to UART adaptor out of an Arduino, or a TI Stellaris Launchpad (mine's on back order) and use that to control a Raspberry Pi running an MP3 ...| JP's Website
Just as a quick note to myself: the UDN2981 requires pull down resistors as the inputs are not allowed to float when Vcc is powered. A SIP resistor pack should sort that without taking up too much space.| JP's Website
It turns out you can get relays from Farnell for about 55p each. You need two SPST relays per point, plus something that can switch the 30mA coil current @ 12V DC. Having played about with PCB schematics and vero-board layouts, I'm starting to think relays would be a more robust option than the L293 drivers. It also frees me up to purchase standard Peco motors rather than the 2A 'E' high-efficiency motors, and reduces concerns with regard to supplying the motors from a capacitor discharge uni...| JP's Website
I was recommended to try VeeCAD by a colleague who's a member of CMES.| JP's Website
I think this is a little more prototypical. I've moved to 3 aspect for the double track mainline and moved the up feathers onto the platform starters.| JP's Website
The CR signals website (www.crsignals.com) is proving potentially ruinously expensive. They have a much larger range than Berko, including a selection of route indicators. These come in in a range of positions (numbered 1 through 6, corresponding to 11 o'clock, 9 o'clock, 7 o'clock, 1 o'clock, 3 o'clock and 5 o'clock respectively) to indicate which upcoming junction the train is about to take - see Wikipedia or Railsigns.co.uk.| JP's Website
I went to the March and District MRC show today. Talked to some great people - made me really enthusiastic about getting stuck in to it all again. www.layouts4u.net had a stand there. I had a look at some N-gauge suitable signals from CR signals. These are the first signals I've seen up close as I've only seen the Berko ones on-line. They have small enamelled copper flying leads with pre-fitted resistors for 12V operation on the two anodes, with a common cathode return. This simplifies the ve...| JP's Website
Just put some more code on github. I'm still not entirely sure what I'm doing with git, or why I have to 'add' code whenever I change it, even if it's already been added.| JP's Website
I've spent the past couple of days re-laying track. I'd laid the two outer loops with Gaugemaster foam underlay, but it doesn't seem particularly compatible with Peco point motors. When I laid the track, that wasn't a problem, but now I want to automate everything, it is. So, the track's coming up in sections and I'm drilling ~6mm holes under one end of the tie bar on each point. I have one motor on a mounting plate that I'm offering up to check the holes are large enough and aligned correctl...| JP's Website
Well, this one has less insane wiring, but uses a larger board. I could probably build it on three boards and each piece is fairly standalone. To make things easier, I've ditched the common Vcc or Gnd connections for each LED and decided to daisy-chain those connections on the back of the display panel.| JP's Website
This is a bit better.| JP's Website
Well, it's pretty good on board size, but perhaps I should expand it a few rows to try and tidy up some of the wiring.| JP's Website
Here's my final schematic. I've only put one signal and point motor in - duplicate to taste. Multiple MCP23S17s can be wired in parallel, provided each has a unique binary value on the A0/1/2 pins.| JP's Website
I spent some time today deciding whether I could use a 7 or 8 channel Darlington Pair IC (like the ULN2003A) to drive the point motors. They can only handle 500mA per channel, but it's possible to parallel up multiple ICs to increase the maximum current. The problem is the Vce(sat) is 1.2V and sinking 500mA means each IC will have to dump 600mW of power somewhere. It's nice that the chips are under 20p each, but I'd need a lot of chips to drive all 19 point motors (19 solenoids x 2 coils x 3 ...| JP's Website
I found this: http://uk.rs-online.com/web/p/darlington-transistor/0162795/| JP's Website
You can get my modified MCP23S17 library from Github: https://github.com/thejpster/Mcp23s17| JP's Website
The Arduino Uno has arrived,. along with some other bits and pieces.| JP's Website
JP's Website| JP's Website
JP's Website| JP's Website