2 Replies Latest reply on Aug 4, 2015 10:58 AM by kwang

    Maximum input transition time



      I use BCM20737S in my design and I have a problem with wake up from external interrupt driving by a push button. Normal operation is :

      1. When button pressed for 3s (active low) that turn the BCM to deep sleep mode. Wake up interrupt is configured on falling edge of the same input.

      2. Release the button, that normally have no effect (creating a rising edge)

      3. Pushing the button wake up BCM and go into normal operation.


      The problem is sometime at step to, BCM wake up when I release the button. I think it's a hardware problem because I use simple RC debounce circuit for the switch, without Schmitt trigger. Like this:


      So there is a slow rising and falling signal at the input (dependent RC) and maybe that not meet maximum transition time on input. But I don't know this value and where I can found it.


      Can someone help me to find this value, or an approximation ?


      Best regards

        • 1. Re: Maximum input transition time

          Double check the configuration of your GPIO interrupt. It can be configured to register an interrupt on either rising, falling, or BOTH edges. Check that it's not set to both.


          Using analog circuity to achieve such a long time constant is dancing on the edge of reliability. These analog circuits are liable to experience parasitic leakage currents that can cause unpredictable behavior. The following article offers a possible work around in the analog world. Two Capacitors Are Better Than One - Jason Sachs


          BUT, there is an even better work around that can be achieved in your firmware. Have your chip wake up on a rising edge (without any RC circuitry) and in your interrupt handler, start the app timer to then begin counting to three seconds. After this three seconds it can then register/initialize the other aspects of your code. If the three seconds is not met, reset the count and go back to deep sleep.


          The code for a timer similar to what I discussed is provided at the very bottom of hello_sensor. This timer counts to 5 and begins executing code (not from deep sleep though).