This was an attempt to make a RumblePak for my DS Lite. Sure you can buy them for a few $$$, but where is the fun in that?
I wanted the Rumble Pak to fit into the existing blanking plate of the DS Lite that slots into the GBA cartridge slot. This would make it blend in with the NDS and not stick out or have an odd colour. I could have used the PCB that is contained within the blanking plate, but didn't want to ruin it in case I had to send it back. I opted to dismantle an old Pokemon Pinball GBA cartridge and use the edge connector.
I would have used the offset motor from the Pokemon Cartridge, but it was simply too large...
The motor I used is tiny and was salvaged from an old Nokia 5100 phone. The offset weight had to be trimmed down because it was too big.
A Rumble is requested on the write /WR pin (GBA Pin 3). The pulse is approx 350ns long and needs to be stretched to about 20ms since the motor will not budge if you pulse it with 350ns.
I could have used a 74HC123 Dual Retriggerable Monostable (One-Shot), but I didn't have any. I did have a Microchip PIC12F675 though.
The PIC12F675 contains an internal oscillator and has an interrupt pin that will detect the 350ns pulse (minimum is 25ns), polling the Rumble Request input is not an option as the PIC will most certainly miss it since it's instruction cycle time is 1us.
The PIC is placed into sleep mode to preserve power, however this is probably not necessary because the offset motor consumes about 200mA everytime it spins.
This information is provided as information only, these are my experiences and yours may vary...please don't blame me if you toast your NDS...
Step 1: Inside the DS Lite Slot 2 Blanking Plate
I could have used the small PCB inside the GBA Slot 2 blanking plate, but opted to use an old Pokemon Pinball board instead.
Step 2: Getting the Pokemon Pinball Board to Fit
I cut the board with a junior hacksaw and then drilled the 2 holes for the plastic PCB supports tracing the outline of the original PCB.
Step 3: The PIC I Chose
I used a PIC12F629, which is basically the same as the PIC12F675 except it doesn't have the analog to digital converter. As the ADC was not used I chose to use the PIC12F629 and save the PIC12F675 for future projects.
Step 4: The Offset Motor
This is the vibrate motor salvaged from a Nokia 5100 phone. The offset weight had to be trimmed down because it was too big to fit in the blanking plate.
Step 5: Circuit Diagram
As mentioned before, a simple pulse stretcher like a 74HC123 could have been used, but I didn't have one so I used a PIC instead...
I was going to drive the motor from the PIC, but at 200mA, it is way more than the PIC san Sink (or Source). The transistor used can handle 600mA.
R3 (51Ohm) was added to slow the motor down. I would have used PWM from the PIC, but I had already soldered it to the board before noticing that the motor spun too fast.
R1 (10KOhm) tells the NDS that an Option Pak is installed. I assume that D1 pulled low indicated a RumblePak and that other Option Paks require other data lines to be pulled low.
C1 provides some decoupling.
There should be a diode across the motor, but it seemed to work fine without it and there just wasn't the space.
Step 6: Source Code for PIC
Included is the simple source. I doubt that anybody will make somethig so simple, but who knows....