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.