pwm-buzzer-tone-8.ino

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · Archivo : pwm-buzzer-tone-8.ino · Lenguaje : C · Uso : Générer des mélodies simples sur un buzzer passif via PWM.

Utiliza el módulo PWM de Sapphire para controlar un zumbador pasivo y producir notas musicales.

Conecte un zumbador pasivo entre el pin GPIO configurado en modo PWM y tierra. Configure la frecuencia base del PWM. El ejemplo genera una tríada Do-Mi-Sol. Ajuste los retardos para el tempo. Requiere la configuración de multiplexión GPIO en el archivo de restricciones de 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
    }
}

← Volver a la ficha