Raspberry Pi의 PWM에서 나체 금속으로 소리를 냅니다.

8332 단어 RaspberryPi
이 글은 adventar Raspberry Pi Advent Calendar 2017 의 21일째이다.

먼저


감사합니다.저는 gyabo라고 합니다.
작년에 라즈베리 피곰 금속으로 GPU를 만지작거리며 다각형으로 놀았어요.보도는 아래와 같다.
https://qiita.com/gyabo/items/f3a411a63d608d00b384
올해 또 평면계에서 하니, 왠지 이상하다. 소리를 낼 수 있었으면 좋겠다.
나금속으로 울리는 방법을 쓰다.
그래서 다핵으로 만든 샘플을 만들었지만 다양한 환경에서 움직이지 않아 체력이 증강되었다.미안합니다.

목적: 나금속으로 울림


HDMI가 연결되어 있어서 소리가 날 것 같아서 많이 봤지만 HDMI 관련은 전부 VideoCore 쪽에 넘겼고 오디오가 좋아질 수 있는 출처를 봤지만 잘 몰라서 이어폰으로 구멍을 뚫은 PWM을 솔직하게 꺼내기로 했습니다.논단을 찾아보니 같은 생각을 하는 사람이 있었지만 아무런 자료도 없었다.
그래서 나는 그렇게 복잡한 일을 하지 않을 것이다.

자료


다음은 매우 상세하다.
https://github.com/PeterLemon/RaspberryPI
그리고 개발 환경은 지난번 제 보도를 참고하세요.
https://qiita.com/gyabo/items/f3a411a63d608d00b384

환경


RaspberryPi2.3에서 동작이 확인되지 않았습니다.

사운드 소재 준비


다음 사이트에서 빌렸어요.감사합니다.

한 벌


아래부터 다운로드하십시오.
image.bin을 커널로 하다.img든 config든txt에 따라 변경하십시오.
그럼 시동을 걸면 소리가 울릴 거야!
원래의 곡이 좋아요, 느낌이 좋아요.

main.c 핵심 부분


아래와 같다.

void main() {
    uart_init();

    IO_WRITE(GPIO_SEL4, GPIO_FSEL0_ALT0 | GPIO_FSEL5_ALT0 );
    usleep(10);
    int idiv = 11;
    IO_WRITE(CM_PWMCTL, PM_PASSWORD | CM_KILL);
    usleep(150);
    IO_WRITE(CM_PWMDIV, PM_PASSWORD | (idiv << 12) );
    IO_WRITE(CM_PWMCTL, PM_PASSWORD | CM_ENAB | CM_SRC_PLLDPER);
    usleep(150);

    int range      = 1024;
    int samplerate = 500000000.0 / idiv / range;
    usleep(10);
    IO_WRITE(PWM_RNG1, range);
    IO_WRITE(PWM_RNG2, range);
    usleep(10);
    IO_WRITE(PWM_CTL,  PWM_PWEN1 | PWM_PWEN2 | PWM_USEF1 | PWM_USEF2 | PWM_CLRF1);

    uint32_t count = 0;
    uint32_t phase = 0;
    while(1) {
        uint32_t offset = (phase >> 8) & 0xFFFFFFFE;
        uint8_t data1 = test_wave[offset + 0];
        uint8_t data2 = test_wave[offset + 1];
        phase += 512;
        IO_WRITE(PWM_FIF1, data1);
        while(IO_READ(PWM_STA) & PWM_FULL1) {}
        IO_WRITE(PWM_FIF1, data2);
        while(IO_READ(PWM_STA) & PWM_FULL1) {}
        count++;
        if((count % 0x1000) == 0) {
            uart_debug_puts("data1=\n", data1);
        }
    }
}

시간값이 있어서 싫지만 이어폰 플러그를 PWM 출력으로 설정하고 PLLD에서 주파수 비례 설정, 채널 범위를 고려하여test.bin에서 LEFT, PWM까지의 RIGHT는 각각 PCM 데이터를 FIFO에 끊임없이 채우는 간단한 것이다.
상당히 예쁜 소리가 난다.나는 울리기만 하면 충분하다고 생각한다.
적당한 코어1 등으로 이 녀석을 실행하면 코어0에서 다른 일을 할 수 있을 것 같아~, 하지만 최선을 다했어.

끝날 때


왠지 올해는 라즈베리 파이로 더 이상한 일을 할 것 같아, 이런 곳은 할 수 없을 것 같아.
내년에 복수하고 싶어요.

경품 - 개발 환경에 관하여


방수 자동차 내비게이션의 아날로그 텔레비전(1200엔 정도)과 HDMI>AV 변환(500엔)이 편리하다.
사진에서 보듯이 실제로는 촘촘한 환경을 구축할 수 있다.3000엔 정도면 기자재를 살 수 있으니 꼭 주세요.

※ 바닥에 내려놓는 것은 바닥 난방을 온몸으로 받으면서 일하고 싶어서이다
끝났어!

좋은 웹페이지 즐겨찾기