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
Step 2: Getting the Pokemon Pinball Board to Fit
Step 3: The PIC I Chose
Step 4: The Offset Motor
Step 5: Circuit Diagram
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.