element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Crosstalk between raspberry Pi GPIO inputs
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 10 replies
  • Subscribers 665 subscribers
  • Views 3532 views
  • Users 0 members are here
  • rasberry_pi_3_b_plus
  • raspberry_pi
Related

Crosstalk between raspberry Pi GPIO inputs

colporteur
colporteur over 6 years ago

Are there any known issues of crosstalk between GPIO inputs?

 

I am using Python module RPi.GPIO to event detect on GPIO pins. One program monitors GPIO 2 pin 3 and the second program monitors GPIO 3 pin 5. I am using GPIO.event_detected to detect events within the programs. In the GPIO 2 monitor program, when  GPIO 2 is pulled low, I get a trigger event for GPIO 2 and GPIO 3. In the GPIO 3 monitor program, when  GPIO 3 is pulled low, I get a trigger event for GPIO 3 and GPIO 2.

 

I have seen this pattern of across three different Pi's. On two of Pi's the crosstalk is across GPIO 2, 3 & 4. After obtaining the same results across a Pi 2 & Pi 3, I opened a new Pi 3B+ never used and got similar results.

 

I am using the python script below substituting the pin 3 & pin 5.

 

# setup GPIO
GPIO.setwarnings(False)

GPIO.setmode(GPIO.BOARD)  # set option to reference physical pins
# Set GPIO function
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # set GPIO input
GPIO.add_event_detect(5, GPIO.BOTH)

try:

   while True:

   if GPIO.event_detected(5):

   print("5 Triggered")

 

except KeyboardInterrupt:  # if ctrl+c pressed exit cleanly
   GPIO.cleanup()

except:  # this catches ALL other exceptions including errors.
   GPIO.cleanup()

finally:  # cleanup GPIO on normal exit
   GPIO.cleanup()

 

My test cases target the suggestion, I have a bad Pi(s). I have extended this same test to three new Pi 3B+ just removed from the package and get the same results. All show crosstalk between GPIO 2,3  with some being GPIO 2, 3 & 4. This suggests I am at fault and not the Pi's.

 

Can anyone share their insight?

 

Sean

  • Sign in to reply
  • Cancel
Parents
  • rew
    rew over 6 years ago

    If you just configure "input" without any pullup, the pin is "floating" and can easily float to any zero-or-one that it likes. For example, a short "zero" when a neighboring pin changes state. This is called "high impedance".

     

    But when you configure a pin with pullup an internal resistor is connected, and that dramatically lowers the impedance. So now you would be at about 50k. (I remember finding the number for raspberry pi, and that it was different from this number that holds for Atmel, but it didn't differ by more than a factor of two. So for raspberry pi the acutal number is between 25 and 100k).

     

    Still a very fast transition on a neighboring line will cause a short spike. And as you've asked the hardware to take a look say 200 milltion times per second, even a very, very short pulse will cause the triggered message.

     

    So... as a solution you can do several things. Not knowing what you intend to connect I can't tell you what would be preferred.

     

    You can lower the impedance even further. Attach an external 1k resistor to +3.3V to the input pin.

     

    You can slow down the output pin that causes the crosstalk. The pi has configurable output speeds. Lower the speed.

     

    You can add a capacitor on the input pin. About 10nF should do, but up to 100nF won't do any harm. Maybe 1nF will already suffice. Use whatever you have on hand if you're experimenting today, if you need to order, consider ordering all three: shipping cost will be more than the component costs. (even if you get free shipping, only then THEY are paying for the shipping).

     

    You can add a capacitor on the output pin. This has a similar effect as configuring the pin to be slower.

     

    I'm pretty good with electronics, but I have no idea what a "bi-direction login level converter module" is.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
  • Gough Lui
    Gough Lui over 6 years ago in reply to rew

    I believe colporteur was trying to drive a Sparkfun Bi-Directional Logic Level Converter from the GPIO. This is a break-out module with a few FETs on it that is designed to allow you to run protocols like I2C through it, allowing you to intermix 3.3V and 5V logic level devices.

     

    image

    image

     

     

    - Gough

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • rew
    rew over 6 years ago in reply to Gough Lui

    That's not a board that I would trust to beginners. In some circumstances, like I2C it will work, but in others it might not do what you want. That said: Those boards have an inherent (variable!) 5k or 10k pullup. The low level is always actually driven by the side that drives the signal. The side that drives the signal will see a 5k (2x10k in parallel) pullup.  On the other hand, when one side drives the signal HIGH, the other side will see a slow pullup by the 10k resistor. (Now 10k, no longer 5k!).

     

    Stuff like leaving open the supply voltages on the board also has funny effects.

     

    That said...

     

    The code is OK.

    The pi is fine.

    the pi+code is seeing an actual (short) signal on that input, that is the result of crosstalk between your physical wires.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • rew
    rew over 6 years ago in reply to Gough Lui

    That's not a board that I would trust to beginners. In some circumstances, like I2C it will work, but in others it might not do what you want. That said: Those boards have an inherent (variable!) 5k or 10k pullup. The low level is always actually driven by the side that drives the signal. The side that drives the signal will see a 5k (2x10k in parallel) pullup.  On the other hand, when one side drives the signal HIGH, the other side will see a slow pullup by the 10k resistor. (Now 10k, no longer 5k!).

     

    Stuff like leaving open the supply voltages on the board also has funny effects.

     

    That said...

     

    The code is OK.

    The pi is fine.

    the pi+code is seeing an actual (short) signal on that input, that is the result of crosstalk between your physical wires.

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
Children
  • Gough Lui
    Gough Lui over 6 years ago in reply to rew

    I definitely agree with your analysis - that's why I asked whether anything was connected to the pins, as I know from experience that what is "driving" the pin can very much affect the behaviour. I wonder what happened with my suggestion to see what the behaviour was if just a simple decent pull-down was connected from the pin to ground instead of relying on internal pull-up.

     

    - Gough

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube