Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Considering the thread solved and closed as of . LDO replacement solves RESET on power up of WiFi radio and secondary, less frequent RESET issue solved by moving ISR to SRAM for execution.

Table of Contents
minLevel1
maxLevel7

...

Thomas was able to get sleep current <1mA when removing the power LED and the USB to UART converter chip.

New PCB arrived

Thomas designed a PCB version that accepts the new LDO. I’ve been examining the new board and experimenting with it.

...

NVM rainfall backup looking more appealing every day.

...

Disappointed that I’m seeing RESETs, but found something in my code

Code Block
languagecpp
  //Average samples
  if (msTotal || samples)
  {
    windSpeed = 1.49 * 1000 / (msTotal / samples);
  }

My logic to check for divide by zero is wrong. Should be &&

Code Block
  //Average samples
  if (msTotal && samples)
  {
    windSpeed = 1.49 * 1000 / (msTotal / samples);
  }

Running boot experiment without sensor connected now. msTotal and samples will both be zero and this case will never happen.

After running 1000 boot cycles without incident, I’ve proven to myself that the secondary RESET issue was caused by software.

Now at 1800 boot count with no issues. Hardware is stable.

Image Added

Secondary, intermittent reset issue seems to be solved by properly marking ISR routines to be copied to SRAM.

IRAM_ATTR in function definition informs program to copy and execute code from SRAM.

Code Block
//=======================================================
//  windTick: ISR to capture wind speed relay closure
//=======================================================
void IRAM_ATTR windTick(void)
{
  timeSinceLastTick = millis() - lastTick;
  //software debounce attempt
  //record up to 10 ticks from anemometer
  if (timeSinceLastTick > 10 && count < 10)
  {
    lastTick = millis();
    tickTime[count] = timeSinceLastTick;
    count++;
  }
}