Ledc + signal oscilloscope

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() {}

Bonjour,
je regarde ça avec l'analyseur logique, demain

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.