掌機 - Anbernic RG300 - 支援振動馬達



司徒最近打算讓開源掌機都可以支援振動功能,因為這樣可以讓遊戲更加有樂趣,當然搭配的則是Hack NES遊戲,借此讓NES遊戲支援振動功能,而第一台開刀的機器就是RG300,因為RG300是目前司徒拿到最新的開源掌機,當然,司徒也相當感謝揚立銘提供的PCB焊點圖,讓司徒可以快速完成硬體改機

使用的腳位為LCD_SDA(TP148)


馬達


接著就開始焊接


幸運地,初始化後的LCD_SDA腳位是低電位,因此,一顆NPN電晶體即可解决


讓馬達置中,藉此得到比較平衡的振動


完成配線


反電動勢二極體


44R限流電阻


電路圖


完成後的樣子


接著找下Remap位置


Set Register


Clear Regsiter


最後司徒寫個馬達測試App

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char* argv[])
{
    int fd = open("/dev/mem", O_RDWR);

    if (fd < 0) {
        printf("failed to open /dev/mem\n");
        return -1;
    }

    unsigned char *mem = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x10010000);
    printf("mem ptr: 0x%x\n", mem);
  
    mem[0x414] |= 4;
    usleep(5000000);
    mem[0x418] |= 4;
    munmap(mem, 4096);
    close(fd);
    return 0;
}