Feed on
Posts
Comments

Category Archive for 'Projects'

From our previous part, we added the SRAM and tested the battery backup was working correctly. In this part, I was hoping to look into the FRAM but instead when the PCBs arrived, I started testing games, found a few that didn’t work and was able to get some to work by adding some MBC1 support via a few little detection hacks.

I was laying out the PCB, was almost done, then I looked at an actual cart and realised there was a hole in the board, this screw hole would go straight through the ROM. I didn’t want to re-layout the board having already spent hours on it but happened to notice that some clone carts had the hole at the top. After moving the CPLD a little bit, it worked out fine.

The prototype HASL PCBs arrived a little while later, they sort of fit the cart but I’ll need to move the screw hole down just a tad. At the time, I didn’t have any CR2025 SMD tabbed batteries so I just put in a through-hole coin cell holder. You might also notice that the board is quite thick; I didn’t measure the thickness and left it as 1.6mm when it’s really 0.8mm. Another little issue is that R1/R2 resistors are too close to the bottom of the board, so I’ll move them up. I brought out the clock and audio in lines to the CPLD just in case I ever wanted to play around with those.

Little problems aside, the PCB worked well, loaded up a couple games and played them without any issues so I made the little changes to the PCB and had it done with ENIG, gold fingers with a 45 degree bevel and ordered 50 of them.

Current consumption

I wanted to see how much current the cart was taking compared to other carts so I measured the current of the whole GBA – running Pokemon Silver start screen it was reading 139/141mA while regular carts were 83mA. It’s quite a bit actually but most of it is due to the CPLD (even unprogrammed ones draw 30mA!).

(more…)

Read Full Post »

In the last part, we looked at 3 DC-DC step down converters, tested their quiescent current and efficiency but none really stood out in both aspects. Near the end, we came up with a solution to which keeps the DC-DC in shutdown and only enables it when the GBA power switch is flicked on. In this part, we’ll continue to test this solution, look at how to detect low battery, order some boards and check the performance.

Here’s a schematic to show how the solution works, you can see the LDO’s output goes through the diode and is tied to the DC-DC output. The DC-DC enable pin is tied to the other side of the switch and would normally be off. Once the switch is flicked, the LDO output voltage reaches the DC-DC enable pin and switches the DC-DC on.

Previously I was using a 1.8V LDO I had laying around for testing so I ordered an ultra low quiescent current LDO, the NCP698 which has a quiescent current of 6uA maximum. The 1.8V version was 20c more expensive than the 1.5V variant so I went with the 1.5V one instead as it should still work fine. We don’t want to have too high of a voltage, otherwise the LDO would be powering the GBA instead of the DC-DC.

When testing it out, it looked like the output after the diode was 1.33V when the GBA was trying to turn on but the DC-DC wouldn’t turn on, even though the datasheet said the voltage above 1.2V should be enough. I hooked up the LDO voltage to the enable pin directly and it did switch on fine.

Potentially this could have also happened with the 1.8V variant as well so I wanted to find a way to switch the enable pin to VCC instead of the LDO’s output. After a bit of testing, we can use a NPN with a PNP for our solution, resistors are high value ones so that current consumption is kept low but it only draws current (12uA) when the GBA is on. By default, the NPN is off so the PNP is also off and thus the output is 0. Once the power is flicked on, all we need is at least 0.7V on the NPN so it switches on, the PNP base will then be close to 0V and that will switch on, which means VCC will reach the DC-DC enable pin.

(more…)

Read Full Post »

Previously I built a GBA LiPo Voltage Regulator & Charger using a op-amp with an NPN transistor to regulate the voltage plus used an off the shelf LiPo charging chip, this is so we could trigger the GBA’s red light when the LiPo was at 3.7V (changed to 3.6V now). The efficiency wasn’t the best (around 62%) and I was lead down this path because I couldn’t find any DC-DC converters with low quiescent current but it turns out that I didn’t search hard enough.

The plan is to use an adjustable DC-DC converter to step down the voltage to around 2.5-3V which should result in higher than 90% efficiency and then use a MCU or similar to toggle a resistor connected to the resistor divider when the LiPo is running low.

The first 2 candidates for checking the quiescent current is the OnSemi NCP1529 and the Richtek RT8010, both of which switch higher than 1.5MHz, have a 1 amp output and feature a quiescent current of less than 70uA.

The NCP1529 looked like it might be the best option so I started with that one first. The components to add was a 2.2uH inductor with a 10uF cap, a 4.7uF cap for the input and the the R1/R2 resistor (went with 470K/120K) with a feed forward cap (I haven’t needed to use a feed forward cap before).


(most of the pictures don’t look too nice, this is because I’ve switch out the inductors, resistors, caps a couple of times!)

Built it all up, powered it up and unfortunately I saw about a 2mA quiescent current. I changed R2 to 220K to adjust the voltage to 1.18V and the current seemed to drop, so perhaps we need larger resistors. I changed R1 to 850K but I was back to 2mA so looks like it’s more the voltage drop that did it. I adjusted the input voltage but it only dropped to 60uA when the input voltage was above 4.8V so that won’t work, it also dropped to 100-200uA when around 3.3V.

I started playing around with it, ended up touching VREF and that’s when the current dropped, weird. So I took out the feed forward capacitor and placed it on VREF to GND and it seemed to work but when I checked it under the scope, it looked bad and under load it was still pretty bad. I added the feed forward capacitor back in and it was back up to 2mA again.

(more…)

Read Full Post »

From our previous part, we started to configure our CPLD to act as an MBC for which we added support for the 512KB Flash we had on hand, tested it with a 512KB MBC5 ROM which worked. In this part, we’ll switch to the 2MB Flash and add support for SRAM.

Previously when using the 512KB flash we had to add a different method of programming the flash via the audioIn port as the flash commands being sent would conflict with our A14 & A15 lines controlled by the CPLD.

Now that we have the 2MB AM29F016B flash chip, we can remove all mention of the audioIn line from the CPLD and hook up the flash’s WE line to the WR line. After a quick test with a 2MB ROM, it programmed and read back fine and tested on the GBA fine too.

Over to the SRAM now, the chip I’ve gone with is the Alliance 128KB AS6C1008-55TIN which supports a 2.7V to 5.5V supply with a data retention voltage of 1.5V; there isn’t too many SRAM chips that support up to 5V.

It has the usual CE, OE, WE pins but also a CE2 pin which is kind of strange as it doesn’t actually do anything useful, we’ll just tie it to VCC. I decided that I’ll bring the RD / WR pins to the SRAM and just have the CPLD control the SRAM CE line.

(more…)

Read Full Post »

We had a working touch lamp and then all of a sudden it wouldn’t work anymore, it’s happened to a similar lamp, these lamps are probably 10 years+ old, it’s a Mirabella TL007.

After a quick inspection, the circuit board didn’t smell or look too good. We could try to find the fault and repair the board but I thought it might be more interesting to make our own touch lamp with an ATtiny and just re-use the existing lamp base.

I won’t be wiring it up to the mains, instead since I have an alarm clock already running at 5V (with an 3.3V LDO), I can just wire up directly to the 5V source. The LED will just be one of those 1/2W LEDs you can pick up off Ebay for $1-2 so we’ll just need some dropper resistors or if you wanted to, you could make or buy a constant current driver.

For the touch sensing, you can buy a chip to do that (or it could be integrated already to an MCU you choose) or do it by hand, of course I went with the by hand method as I’ll be using an ATtiny13A. Once touch is detected, we’ll just turn on a mosfet to power on the LED.

To start off, we can use the ADC on a pin to look for any voltage fluctuation but we can’t just leave the pin floating, the pull down resistor needs to be high enough that the pin won’t float, can’t be too low or it won’t detect when we touch it, for me that ended up being 4.7M ohms.

(more…)

Read Full Post »

I’ve recently started to replay some Gameboy games on my Gameboy Colour, I picked up a Gameboy Advance and eventually got around to doing the AGS101 mod to it which makes it look really nice. Eventually I got to the point where I would have to keep recharging the AA batteries I was using as they weren’t lasting as long and the weight of the 2x AA 2000mAh rechargeable batteries made the GBA feel a bit heavy.

I saw a post where someone fitted a 2000mAh LiPo battery to their GBA, they had do to some modifications to the GBA battery compartment to fit it all. By using a LiPo battery instead of the AA’s, it would save us about 20 grams, while not a lot, ever gram does count and you can tell the difference plus since the LiPo has a higher voltage, it has a higher energy density, so it should give us longer play time than the AA’s. So I decided I would do the same mod and I might make a little voltage regulator and charging board to go along with it.

We can’t just directly hook up the LiPo battery to the GBA, you have to step it down to around 3V. You could go higher but I chose not to as who knows what that might affect seeing as the the GBA has a DC-DC boost converter on board stepping it up to 3.3V/5V.

A DC-DC buck converter could do the job to reduce it to 3V and so could an LDO but from my experiences, both of these options seemed to have quite a high quiescent current (usually around 1mA), we would waste power even when the GBA was powered off. One way around this would be to keep the device in shutdown but then how would you detect if the GBA was powered on?


GBA Reg & Charge v1.1
(sneak peak)

(more…)

Read Full Post »

Building an ESP8266 PC Power Cycler

I know this sort of project has been done before but nevertheless it’s still an interesting project to try and put your own spin on it. The idea is to have an ESP8266 which can press/hold the power button and might as well have it also read the power LED state, you could also wire up the reset button if you wanted to, it’s a good concept for servers (or PCs) which don’t have a remote management and you need something basic.

(sneak peak of prototype)

One option might be using the 5V standby power which most power supplies provide when the PC is off. Some PCs might have 5V standby available in the BIOS, the keyboard and mouse might stay on, maybe you could find some pins on the mainboard but perhaps some mainboards might not have it? Let’s just avoid it all, I’m thinking I could have the ESP8266 powered off a 3.3V LiFePo4 battery in a small little case which when the PC is on, it will recharge itself via USB, this way we don’t need the PC to be on or have the ESP8266 powered via a mains adapter.

For the circuit, we can sense the power LED, it will have a voltage drop out say 2-3V with the LED but could have 5V if the LED isn’t connected for whatever reason, we’ll just use a NPN to switch 3.3V on or off to our input pin. The power switch we can use an opto-isolator to turn it on or off which can be inline with the power button. We can also integrate the USB LiFePO4 charger into this project to charge the battery.

That’s pretty much all there is to the hardware, now for the software which is where it’s all at. We want to make it as simple as possible to setup without needing any port forwarding on the client’s end, so the design is to have the ESP8266 reach out to a server to fetch a command over HTTPs. We don’t want the ESP8266 to be awake all the time otherwise the battery won’t last long so we’ll utilise the deep sleep function and say wake up once every 5-10 minutes.

(more…)

Read Full Post »

I’ve built a 32KB Gameboy cartridge before to add support for certain flash chips to GBxCart RW but those were wired straight through without the need of an MBC so I thought it might be interesting to jump back into CPLDs by building an 2MB Gameboy cart.

We have a few options when building a Gameboy cart, use 5V Flash chips (which are pretty rare these days) with 5V SRAM chips or go 3.3V Flash/SRAM chips and use level shift transceiver with direction control to interface with the Gameboy’s 5V logic. Because this is my first real cart, I’m going with easier the 5V flash/SRAM chip option for the moment.

(sneak peak of the cart running a game)

The only flash chip I have on hand is the 512KB AT49F040 so I’ll use that at the start and then we’ll transition to the 2MB AM29F016B in a later part once it arrives. For the MBC, I have an Altera EPM3032 CPLD handy so we’ll go with that, it runs off 3.3V so we’ll need an LDO for it and the inputs accept 5V logic.

Initial Planning

 

Let’s get started, firstly we’ll review the MBC5 documentation to determine which addresses the CPLD will need to read for changing ROM banks/RAM banks, etc. The lowest address is 0x0000 – 0x1FFF for RAM enable, the highest bit of that address that’s a 1 is A12 so that’s where we will start. The highest address is 0xBFFF when accessing the RAM, so A15 is where we will end, that makes 4 bits which are needed for listening to incoming MBC requests.

(more…)

Read Full Post »

Building a Simple LiFePO4 USB Charger

Since I’m starting to use more LiFePO4 14500 batteries I thought it would be a good idea to build a simple USB charger for them instead of having to charge 2 at a time on the xxx battery charger. The most simplest way would be to stick it on a CV/CC power supply or another way is to stick it on a CV power supply set to 3.6V with say a 1 ohm resistor and wait for it to reach 3.6V, not the quickest to charge but it works.

My first design was to use a voltage reference such as a TL1431M (or a resistor & zener diode) set to 3.3V with a decent op-amp like the MCP6242 with hysteresis threshold set to 3.2V – 3.6V and an PNP transistor to switch the 5V through say a 10-20 ohm resistor to the battery. This would only charge the battery if it was under 3.2V, stop at 3.6V and won’t start charging again until the battery dropped back to 3.2V which it shouldn’t.

It works one problem arises when you unplug the USB side and leave the battery in, it would start discharging a few mA due to being connected to the op-amps output but it’s not like that would really ever happen. But let’s put in an MCU, say an ATtiny13A to sort it out. I have plans to make a device in the future run off the LiFePO4 battery and recharge itself when the USB cable is connected if it matches the threshold voltages as before.

(more…)

Read Full Post »

From our previous part, we designed a client with the nRF24 which communicates the LiPo battery cell voltages to a server running from an ESP8266 so we could easily jump onto it and check the cell voltages. In this part we’ll add in email alerts with adjustable battery voltage thresholds, add an easy server setup process to join your Wifi and give the system a test.

First things first, the client PCBs arrived (34 x 23mm), built one up and it worked well. I sprayed the board with PCB lacquer and put clear heat shrink over it. When trying to link it up to the server, it wasn’t working, seemed to just stay waiting to receive the packet from the server. I eventually found out that I had to bump the voltage up to at least 3.9V for it to link up properly, I’m guessing the 3 diodes dropping the voltage down is part of the issue when listening as it can take quite a bit of current. Sending a packet when it checks in works fine at lower voltages. When ATtiny and nRF24 are sleeping, it takes about 6uA so I’m happy with that.

I was thinking about redesigning the board to make it even smaller (32 x 16mm) if you just had up to a 4 cell battery, it would be a little bit harder to build.

(more…)

Read Full Post »

Older Posts »