Eugenie
New member
Из за того что на esp8266 нет аппаратного PWM , известно что analogWrite , это софтверная реализация на таймерах.
логично что noInterrupts должен останавливать работу софтверного PWM . но на практике этого не происходит.
соединил GPIO4 c ADC входом ESP8266
uint16_t adc_addr[128];
long lasttick = 128;
static void IRAM_ATTR OSCSyncGPIO() {
if (lasttick--) return;
noInterrupts();// остановка работы всех прерываний , по идее все 128 значений должны содержать одно значение т.к генерация останавливается
lasttick = 128;
system_adc_read_fast(adc_addr, 128, 1); // но тут мы считываем полноценный меандр с указанной частотой
interrupts();
}
setup(){
osc = new OSC();
pinMode(3, OUTPUT);
analogWriteFreq(16750); // Устанавливаем частоту
analogWriteRange(1024); // Устанавливаем максимальное значение диапазона
analogWrite(3, 512); // 50% заполнение
attachInterrupt(digitalPinToInterrupt(3), OSCSyncGPIO, FALLING);
}
loop(){
выводим на экранчик показания АЦП
}
Подскажите почему noInterrupts никак не влияет на софтверный PWM?
ПС. есть еще одна проблема при считывании фаза сигнала "скачет"
WIFI не использую , выключен и не инициализирован даже
логично что noInterrupts должен останавливать работу софтверного PWM . но на практике этого не происходит.
соединил GPIO4 c ADC входом ESP8266
uint16_t adc_addr[128];
long lasttick = 128;
static void IRAM_ATTR OSCSyncGPIO() {
if (lasttick--) return;
noInterrupts();// остановка работы всех прерываний , по идее все 128 значений должны содержать одно значение т.к генерация останавливается
lasttick = 128;
system_adc_read_fast(adc_addr, 128, 1); // но тут мы считываем полноценный меандр с указанной частотой
interrupts();
}
setup(){
osc = new OSC();
pinMode(3, OUTPUT);
analogWriteFreq(16750); // Устанавливаем частоту
analogWriteRange(1024); // Устанавливаем максимальное значение диапазона
analogWrite(3, 512); // 50% заполнение
attachInterrupt(digitalPinToInterrupt(3), OSCSyncGPIO, FALLING);
}
loop(){
выводим на экранчик показания АЦП
}
Подскажите почему noInterrupts никак не влияет на софтверный PWM?
ПС. есть еще одна проблема при считывании фаза сигнала "скачет"
WIFI не использую , выключен и не инициализирован даже