pwm-buzzer-tone-8.ino

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · Fichier : pwm-buzzer-tone-8.ino · Langage : C · Usage : Générer des mélodies simples sur un buzzer passif via PWM.

Utilise le module PWM du Sapphire pour piloter un buzzer passif et produire des notes de musique.

Connectez un buzzer passif entre le pin GPIO défini en mode PWM et la masse. Configurez la fréquence de base du PWM. L'exemple génère une triade Do-Mi-Sol. Ajustez les délais pour le tempo. Nécessite la configuration du multiplexage GPIO dans le fichier de contrainte Efinity.

pwm-buzzer-tone-8.ino

#include "xhal_pwm.h"
#include "xhal_gpio.h"
#include "xhal_timer.h"

#define BUZZER_PIN GPIO_PIN_10 // Pin PWM capable
#define PWM_INSTANCE XHAL_PWM0
#define PWM_CHANNEL 0

// Fréquences musicales (approx)
#define NOTE_C4 262
#define NOTE_E4 330
#define NOTE_G4 392

void play_note(int freq, int duration_ms) {
    if (freq > 0) {
        xhal_pwm_set_duty(PWM_INSTANCE, PWM_CHANNEL, 50); // 50% duty
        xhal_pwm_set_freq(HZ, freq); // Hypothetical API or calculate period
        xhal_pwm_enable(PWM_INSTANCE, PWM_CHANNEL);
    } else {
        xhal_pwm_disable(PWM_INSTANCE, PWM_CHANNEL);
    }
    xhal_timer_delay_ms(duration_ms);
    xhal_pwm_disable(PWM_INSTANCE, PWM_CHANNEL);
}

int main(void) {
    xhal_gpio_init();
    xhal_gpio_config(BUZZER_PIN, GPIO_ALTERNATE); // Set to PWM function
    xhal_pwm_init(PWM_INSTANCE, 1000000); // Base clock
    
    while(1) {
        play_note(NOTE_C4, 200);
        play_note(NOTE_E4, 200);
        play_note(NOTE_G4, 200);
        play_note(0, 200); // Silence
    }
}

← Retour à la fiche