Bonjour, toujours dans mon voyage sur les interruptions j'ai repris le programme de Trimarco.
Mon objectif était de voir comment le signal sortait sur l oscilloscope: créer 2 signaux avec des fréquences différentes 8621Hz et 5000Hz, une résolution de 1 bit correspondant à 2 états et un rapport cyclique de 50%. Cette routine devrait renvoyer un signal mais je n'y arrive pas.
Merci pour votre aide
#include "driver/ledc.h"
.
const int dcc_pin = 19; // choix de la broche dcc out : n'importe laquelle peut être utilisée /// en se servant de la matrice du gpio
// setting PWM properties
#define dcc_sig_1_freq 8621 // fréquence de ~116µs
#define dcc_sig_0_freq 5000 // fréquenbce de 200µs
const int dcc_pin_channel = 0; // coix du canal PWM0
const int dcc_sig_resolution = 1; // résolution = 1 bit pour 2 valeurs 0 et 1
const int dcc_sig_duty = 1; // pour le rapport cyclique de 1/2 1 bit => 1/2^1
uint32_t dcc_sig_freq = dcc_sig_0_freq; // On part de la fréquence 5000
void setup() {
ledcSetup(dcc_pin_channel, dcc_sig_freq, dcc_sig_resolution); // canal 0 fréquence 5000 OU 8621 resolution 1 bit
ledcAttachPin(dcc_pin, dcc_pin_channel); /// pin 19 au canal pwm 0
ledcWrite(dcc_pin_channel, dcc_sig_duty); // le canal 0 a un rapport cyclique de 1/2 1/2^1
attachInterrupt(dcc_pin, dcc_sig_isr, RISING); // a chaque fois que le signal est HIGH on envoie une interruption pour le mouvement suivant
}
void dcc_sig_isr() {
if (dcc_sig_freq == dcc_sig_0_freq) dcc_sig_freq = dcc_sig_1_freq ; // inverse la valeur du bit dcc précédent
else dcc_sig_freq = dcc_sig_0_freq ;
ledc_set_freq(LEDC_HIGH_SPEED_MODE, LEDC_TIMER_0, dcc_sig_freq); // prise en compte du changement de fréquence
}
void loop() {}