PDA

View Full Version : Filtering noise from a wire



Demon
- 19th January 2024, 07:05
I have install pushbuttons on the flip side of these (5V circuit), and the button state is sent via a 3rd wire to another board along with the VDD and VSS wires:

https://i.imgur.com/Fvf2AMT.png


What is the proper technique to filter noise picked up by the wires before the signal is processed by a MCP23017 I/O Expander?


I searched here and google for "decouple wire lines", but it's too vague of a question. And I don't know how I can state it better, or differently.


I've read about ferrite beads, but I'm not sure if capacitors could do the job as well. I remember hacking a keyboard many moons ago, and it had aluminium foil along the back cover.


EDIT: I have to consider that someone might have speakers, cell phones or other "noisy" devices placed right beside the unit.

Demon
- 19th January 2024, 07:18
This lady recommends "This is one of the two ways to control EMI—eliminate the source or eliminate the antenna."

https://resources.altium.com/p/everything-you-need-to-know-about-ferrite-beads


I can't eliminate the source for the simple reason that I have no idea what a user might put within proximity of the device.

As for the antenna, I assume she means protecting the wire. I will have a LOT of unshielded small gauge wires, ranging from 1 to 8 inches (I'm up to nearly 100 switches). I could wind them up in aluminium foil like I see on network cables (I haven't done any research on this subject yet).

Ioannis
- 19th January 2024, 09:35
Maybe it is simpler to put all these stuff in a metal box and earth it?

Ioannis

Demon
- 19th January 2024, 14:05
Weight is an issue. :(

Ioannis
- 19th January 2024, 15:32
Then using shielded cables or wraping with copper foils like these may help on this: https://nl.aliexpress.com/item/1005003118020966.html?src=google&aff_fcid=99a8f0e7d1b14275bd1b48a06e0a5e7c-1703992529149-05693-UneMJZVf&aff_fsk=UneMJZVf&aff_platform=aaf&sk=UneMJZVf&aff_trace_key=99a8f0e7d1b14275bd1b48a06e0a5e7c-1703992529149-05693-UneMJZVf&terminal_id=cfc40eba1c334ba58e08955fa5710553&afSmartRedirect=y&af=mDD&cn=aliexpress&cv=banner&dp=Cj0KCQiA2KitBhCIARIsAPPMEhL6_LvM6SuBjaqH6n0zkDQ 2IAvD4BMzmpYBDBKv8OMJJN0Y1j8DQR8aAhKSEALw_wcB&tp2=mDD&afref=&gad_source=1&gclid=Cj0KCQiA2KitBhCIARIsAPPMEhL6_LvM6SuBjaqH6n0z kDQ2IAvD4BMzmpYBDBKv8OMJJN0Y1j8DQR8aAhKSEALw_wcB&gatewayAdapt=glo2nld4itemAdapt#site#&mall_affr=pr3

But why bother with all this stuff? Did you have any reliability problems?

Ioannis

Demon
- 19th January 2024, 19:52
...But why bother with all this stuff? Did you have any reliability problems?

Ioannis


Nothing so far. I just like to be prepared for the worst case scenario if I can. But I'm not going to drive costs up 500% to protect from 0.0001% insane user conditions either. :)

My old scopes are acting up; switches and buttons causing noise on the screen; image is jumping like an old CRT. I'm not going to spend time figuring out if seemingly bad signals are real, or the result of faulty ancient equipment.

I'm waiting for a small scope that had a good review for testing switch debounce. I don't do any advanced scoping routines; I only need it to check 5V lines for noise and switch bounces.
Right now, I just don't know just how sensitive or hardy 5V circuits can really be.

What ordinary household items that a gamer might have on his desk that you would consider as the biggest causes of noise on circuits?

Electric kettle?
Large speaker?
Cell phone playing a movie?

I'm planning on setting up some tests to see just how much noise my circuit can pick up.

Demon
- 19th January 2024, 20:05
Then using shielded cables or wraping with copper foils like these may help on this...


I already have a lot of manual tasks required to assemble a single unit. I would probably get shielded wire; something like this.

9564


I haven't searched for prices. I just took a pic of the first one I found.

But first I want to test to see exactly what I'm facing.

Demon
- 19th January 2024, 20:47
Case in point: these guys say a 10 meter wire is an antenna, but under 10 cm is nothing to be worried about (under normal circumstances).

https://www.eevblog.com/forum/beginners/protection-from-noise-in-a-long-wire/msg3863054/#msg3863054

My longest wires might not even be longer than 10cm. I'm just starting the I/O Expander circuit (it's going to sit "somewhere" in the middle of a bunch of switches//buttons).

richard
- 20th January 2024, 01:51
what is the shortest switch activation period that you would expect to need to detect and how quickly do you need to respond ?
generally any key press under 50mS i would just ignore . for basically "static" switches 200 0r 300 mS would be more than adequate

why care about noise and debouncing if quick responses are not required

Demon
- 20th January 2024, 05:11
what is the shortest switch activation period that you would expect to need to detect and how quickly do you need to respond ?
generally any key press under 50mS i would just ignore . for basically "static" switches 200 0r 300 mS would be more than adequate

why care about noise and debouncing if quick responses are not required


The only issue I can think of is that I have rotary encoders. Nothing is preventing the user from turning 2 encoders at the same time while on auto-pilot.

There's also the possibility of someone flying with a co-pilot/navigator; that could mean the "possibility" of up to 4 encoders moving at the same time. I want to be ready for that.


My goal is to undercut the market by a wide margin. It's very possible someone with vested interests would try their best to find "bugs" with my product, and drag my name on flight sim groups.

For example: back in college during the late 70ies, Burroughs brought in a main-frame but we thought it sucked. So most a lot of computer students flooded the queues with duplicates of their jobs. The techs from Burroughs were not prepared; the machine failed, badly, and IBM came back. We didn't have vested interests, we were just goofballs, but we did crash the system.

Just look at this thing; couple of switches and 3 LEDs for $140CAD. That's insane. That's worth something like $20 at most. There's very few competition, so they pretty much do as they please.

I'm not the next Delorean, but I still expect resistant. :)

richard
- 20th January 2024, 05:27
I have rotary encoders. Nothing is preventing the user from turning 2 encoders at the same time while on auto-pilot.

rotary encoders are a completely different story to switches, you have virtually no chance of reading multiple re's via i/o extenders with any confidence that steps and direction changes won't be missed

Ioannis
- 20th January 2024, 09:21
Regarding the Rotary encoders Richard covered it 100%.

With shielded wires I am pretty sure you won't have any problems. Forget about R's and C's, just read two times the switch state and your are done with debounce.

As for long or short wires acting like antennas, well, the general statement "long wires act like antenna" is not quite right. It depends on the frequency we are talking about. For example, 10cm may seem very short, but this is an antenna for 750MHz and the 10m is an antenna for 7.5Mhz. So, which one may be a problem for you? It depends on what signal sources you have nearby, right?

Best way to deal with all frequencies is both cable shielding and metal case box wherever there is a possibility of interference.

But I think we are getting crazy on this...

Ioannis

tumbleweed
- 20th January 2024, 23:36
rotary encoders are a completely different story to switches, you have virtually no chance of reading multiple re's via i/o extenders with any confidence that steps and direction changes won't be missed
+1

If you're trying to use an IO expander to do that good luck!

Demon
- 21st January 2024, 00:37
Challenge accepted 😁

Ioannis
- 22nd January 2024, 10:57
Even if you have the fastest MCU to decode rotary encoder, the bottleneck is the I/O expander and will not be fast enough to follow users speedy fingers!

Ioannis

Demon
- 30th January 2024, 04:41
what is the shortest switch activation period that you would expect to need to detect and how quickly do you need to respond ?
generally any key press under 50mS i would just ignore . for basically "static" switches 200 0r 300 mS would be more than adequate
...


I didn't have real world data yet. Here's the switch with the longest activation period mounted on a test PCB:

(similar to this switch, yellow circuit, about 10cm end to end)

9571


5vdc with 10:1 probe
.1 volt / division
.2 ms / division

9570


It takes 5 divisions for a press, so 1 millisecond end to end. The other switches take about 0.3 to 0.6 ms.

It has a blurry bounce of under 2 sub-divisions at the top (∼0.07ms), I saw at least one other press with a bounce twice as long (it was out of focus - I didn't save it).

I wasn't able to get any rising edges for some reason. I'm sure that has to do with the trigger settings, but I just don't know how to do that, yet.


This is what I get probed directly to an identical unconnected switch:

9572


It took a lot less time to activate, under 0.5ms. I assume this is what you guys meant about traces acting as antennas.

Demon
- 30th January 2024, 04:53
At least now I have an idea of what sort of activation times and switch bounce that I'm facing. I really had no clue what sort of activation delays I was facing (never got this far in a project).

Now I need to test from a secondary PCB, out using wires (max 10cm) to a 1" x 1" switch PCB, and back to the secondary PCB.

That will give me actual data using the planned hardware.

Demon
- 30th January 2024, 05:03
Even if you have the fastest MCU to decode rotary encoder, the bottleneck is the I/O expander and will not be fast enough to follow users speedy fingers!

Ioannis


This is a signal from an EC11 rotary encoder.

5vdc with 10:1 probe
.1 volt / division
.2 ms / division

9573


It takes about 2.5 time divisions to activate; so about 0.5ms.

MCP23017 I/O Expanders can run up to 1.7 MHz in I2C mode.
MCP23018 I/O Expanders can run up to 3.4 MHz in I2C mode.
MCP23S17 I/O Expanders can run up to 10 MHz in SPI mode.

I'm not keen on the new addressing mode on the MCP23018 version. I'm hoping the MCP23017 is fast enough at 1.7 MHz in I2C mode. At worse, I'll learn how to use the MCP23017 at 10 MHz in SPI mode.

(nope, haven't done any math to check if it's possible, mainly cause I have no clue how to do that properly :D )

tumbleweed
- 30th January 2024, 12:33
MCP23017 I/O Expanders can run up to 1.7 MHz in I2C mode.
MCP23S17 I/O Expanders can run up to 10 MHz in SPI mode.


That's the wire speed... you'll never get the code to run anywhere near that fast except for a single byte transaction.
You won't get I2C to run that fast without active pullups, and getting the PIC to do 10MHz SPI depends on your system clock.

Demon
- 15th May 2024, 05:00
...You won't get I2C to run that fast without active pullups...

What do you mean by active pull-ups? I couldn't see a meaningful description on google.

I'm not using weak internals, I'm using 4K7 externals.


EDIT: ... aaaaaand .......


This pops up as soon as I posted my question:

For the next guy, this is active pull-ups.

https://picaxeforum.co.uk/threads/i2c-pullup-resistor-values.32111/

Demon
- 15th May 2024, 05:31
The graph at the bottom of page 1 of the LTC4311 shows a total rise-time of about 1uS.

https://www.analog.com/media/en/technical-documentation/data-sheets/4311fa.pdf

Would a LTC4311 be enough to process a rotary encoder with an MCP23017?

Would I be able to use I2CRead and I2CWrite with this device, or would I have to use another technique?


The 16F1946 is rated up to 400kHz according to Table 24-4, but there's this note under the table:



Note 1: The interface does not conform to the 400 kHz specification (which applies to rates greater than 100 kHz) in all details, but may be used with care where higher rates are required by the application.


https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/DataSheets/40001414E.pdf


(I'm using MCP23017 which are rated for 100kHz, 400kHz and 1.7 MHz)

rsocor01
- 15th May 2024, 12:25
The graph at the bottom of page 1 of the LTC4311 shows a total rise-time of about 1uS.

That graph shows a rise time of 1uS by only using a 15.8k pull-up resistor. It also shows that by using the LTC4311 you get an almost perfect waveform. It looks like this LTC4311 chip is exactly what you need for your application. I would pay special attention to where this chip should be placed in the PCB board. Example, closer to the PIC, or closer to the I/O expander, or closer to the resistors, etc. If you find the answer to this question please let us know.

Demon
- 15th May 2024, 17:37
Thanks, that's what I was hoping.

Just checked and JLCPCB doesn't have any in stock. They don't have any other I2C accelerator chips (that I can see). Now I understand the gripes on the interwebs about the cost of this chip.

I can get it by JLCPCB's global purchase program, but I won't be paying that "JLCPCB price". :(


And it doesn't exist in DIP format, so I can't do a quickie test.

Demon
- 15th May 2024, 17:39
...I would pay special attention to where this chip should be placed in the PCB board. Example, closer to the PIC, or closer to the I/O expander, or closer to the resistors, etc. If you find the answer to this question please let us know.

My plan was to keep the resistors and accelerator chip right up against the PIC.

I don't recall seeing location requirements, but I wasn't looking for that info last night either.

richard
- 16th May 2024, 04:20
what problem is the active pullup bus chip going to solve ?
it will make zero difference to pbp's bit-banged commands and the mssp port would have no issues at 400kHz bus speed anyway [providing bus length and load is within reason] using the usual pullup resistors.

Demon
- 17th May 2024, 20:39
what problem is the active pullup bus chip going to solve ? ...

I was hoping:

- it would allow me to use the MCP23017 at 400MHz,
- it would be enough to read rotary encoders with an MCP23017,
- it would work using I2CREAD command.

But that's too many IFs. The chip is not available in DIP package for me to test.

I've since decided to go with a dedicated 16F1937 TQFP-44 at 32MHz with 36 IOC pins to manage my encoders. I have room for 14 encoders on this secondary PIC (primary is a USB PIC), and the jumper at bottom right will permit me to use a 2nd circuit if needed in the future.

I only need 13 for this first project. I could use the 2 pins for encoder #14 to create a 3 bit jumper, giving me addressing for 8 circuits (total of 103 encoders). I'll most likely make the change now that I've thought about it. :D

9665


EDIT: I didn't forgetting mounting holes. The PCB will be mounted vertically along the perimeter of the enclosure with the pins pointed inwards. The high-mounted header pins will be easy to access. and a single line of hot-glue will secure the connectors.

richard
- 18th May 2024, 01:25
I was hoping:


- it would allow me to use the MCP23017 at 400MHz,
- it would be enough to read rotary encoders with an MCP23017,
- it would work using I2CREAD command.


MCP23017@400KHz , using a pic16 @32mhz can do that easily using mssp module
using I2CREAD command. @32 mHz the cmd will do 166KHz at best, even at 64 MHz it will not reach 400kHz

to read multiple rotary encoders with an MCP23017 the bus speed is the least of your problems , the hoops you need to jump through to track multiple edge transitions without error are extremely challenging.


re 16F1937 , why ? surely at least a 16f18875 would make tracking edges far easier. mind you its still difficult to keep track of more than one those 4 count per indent RE's
13 will be interesting. have you tried any code to be sure a result is even viable with the encoders you have selected ?

Demon
- 18th May 2024, 02:23
MCP23017@400KHz , using a pic16 @32mhz can do that easily using mssp module
using I2CREAD command. @32 mHz the cmd will do 166KHz at best, even at 64 MHz it will not reach 400kHz
..

I've never used MSSP. At least now I know where I stand using the command.



...to read multiple rotary encoders with an MCP23017 the bus speed is the least of your problems , the hoops you need to jump through to track multiple edge transitions without error are extremely challenging....

I am polling a controller for Flight Sim. I have multiple encoders on the circuit, but I do not expect more than 1 encoder to be active at the same time. I suppose with auto-pilot you could move 2 encoders at the same time, but there isn't an auto-pilot in this first plane (Cessna-152).



...16F1937 , why ? surely at least a 16f18875 would make tracking edges far easier. mind you its still difficult to keep track of more than one those 4 count per indent RE's
13 will be interesting. ...

Cost, size and availability at JLCPCB mainly. I want to make 100 units for the 1st batch, so every penny quickly adds up.



... have you tried any code to be sure a result is even viable with the encoders you have selected ?

Not yet. My breadboards are crap, and my mini-CNC is not as useful as I hoped.

I was going to get 5x PCBs from JLCPCB for testing. These are ordinary EC11 and EC10 (mouse wheel) encoders moved manually, it's NOT mechanically manipulated.

Demon
- 18th May 2024, 02:28
The controllers will look something like this:

https://i.imgur.com/5crO271.png

https://i.imgur.com/2YRXTYG.png

Ioannis
- 20th May 2024, 20:35
Cost, size and availability at JLCPCB mainly. I want to make 100 units for the 1st batch, so every penny quickly adds up.


Well, why not select from Mouser or Digikey?

Ioannis