Aantal sensoren op I2C van Arduino Due

Hardware geleverd door Arduino
Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Aantal sensoren op I2C van Arduino Due

Berichtdoor PE2BS » 10 Okt 2018, 21:34

Op mijn Arduino Due wil ik op I2C twee sensoren en één klok plaatsen. Met één sensor en de klok ging het goed hoewel de klok af en toe problemen gaf door niet te communiceren. Nu heb ik de tweede sensor er bij geplaatst en zie dat het CLK signaal wegvalt en de poort hoog wordt. Ik vroeg me toen af hoeveel er op de I2C bus aangesloten mag worden. Ook een extra bidirectionele schakeling helpt niet. Het aansluiten van allen nog maar de draad voor de CLK, dus zonder tweede sensor, levert al op dat de klok en I2C niet start.
Het gebruik van de tweede I2C poort (CLK1 en SDA1) is gezien de berichten op internet geen reële optie.

Iemand enig idee wat hier aan de hand is?

Gr. Ruud

Advertisement

Gebruikers-avatar
Berichten: 1891
Geregistreerd: 06 Aug 2016, 01:03

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor Koepel » 11 Okt 2018, 00:27

In het ontwerp van de Due zit een nogal erg domme fout. Volgens het schema zitten er pullup weerstanden van 1k5 op de SDA en SCL.
Een waarde van 10k zou beter zijn. Als een module wordt aangesloten die zelf ook nog pullup weerstanden heeft, dan werkt het al snel niet meer.
De tweede fout is dat het niet hersteld wordt, ze blijven Due boards maken met die pullup weerstand.
De derde fout is, dat sommige Due boarden niet 1k5 (zoals in het schema) heeft, maar in werkelijkheid 1k pullup weerstanden heeft. Met die 1k pullup weerstanden voldoet de Arduino Due niet meer aan de I2C standaard.

Hou de reset-knop linksboven, en kijk naar het component rechtsboven. Dat heeft 8 pinnetjes. Staat daar "102" op, in plaats van "152" dan heb je dus extra pech.

Dat is de belangrijkste reden dat sommigen (zoals Adafruit) het afraden om nog de Arduino Due te gebruiken.

Gebruik SDA1 en SCL1. Gebruik bij voorkeur modules die geen level shifter hebben, en controleer of alle pullup resistors bij elkaar misschien teveel wordt.
Misschien is het nodig om alle libraries aan te passen om "Wire1" te gaan gebruiken.

Je zou ook dat onderdeel er af kunnen solderen, dan kun je weer SDA en SCL gebruiken.

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor PE2BS » 11 Okt 2018, 12:12

Bedankt Koepel voor je reactie. Bij mij zaten er weerstanden van 1,5 k in. Dank zij je uitleg waren die goed herkenbaar op de print en ik heb ze uit gesoldeerd. Nu herkent hij wel de twee sensoren en de klok. Wel blijft de communicatie instabiel. De ene sensor (BME280) is bedoeld voor buiten maar zodra ik langere draden aansluit valt de I2C stil. Met name de CLK is hier gevoelig voor. Ik ga nog even verder zoeken, misschien dat een lagere baudrate nog iets doet.

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor nicoverduin » 11 Okt 2018, 13:47

Wat is langere draden?
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 4892
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor nicoverduin » 11 Okt 2018, 13:49

En ik zou er wel 2 10kers terug solderen. Straks gebruik je een of ander sensor zonder pullups en dan alleen en doet ie het niet
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor PE2BS » 11 Okt 2018, 22:30

De lengte van de draden is dan ongeveer 10 tot 20 cm. Moet makkelijk kunnen. De sensoren hebben pull-ups van 10k.ohm dus dat zou ook goed moeten zijn en toch valt de I2C gemakkelijk weg. Als ik er alleen maar een draad van 20 cm aan verbind (dus nog zonder sensor!) wil de I2C al niet meer starten, ook niet na resetten of de spanning uit/aan. Snap er niets van en kan dit niet verklaren.

Ik zal nog kijken voor de CLK1 en SDA1. Lukt dit niet dan ga ik kijken of er ook een softI2C bestaat voor de Arduino. Voor de PIC-controllers was dit wel het geval en kon je de poorten kiezen.

Gebruikers-avatar
Berichten: 1891
Geregistreerd: 06 Aug 2016, 01:03

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor Koepel » 12 Okt 2018, 19:11

Weet je zeker dat de drie modules alledrie pullup weerstanden van 10k hebben? Dan komt het bij elkaar op drie keer 10k parallel en dat is 3k3, dat is een prima waarde.
Misschien zit er een module bij met een hele lage waarde.

Gaan kijken naar software I2C is de verkeerde oplossing voor het verkeerde probleem.
Het zou moeten werken. Misschien gebruik je een breadboard met slechte contacten. Misschien zit er ergens een GND draad los.

Ik snap er ook niets van. Het lijkt op een hardware probleem.

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor PE2BS » 14 Okt 2018, 14:30

Het lijkt mij ook een hardware probleem, met name op de originele I2C poort.

Voor de zekerheid heb ik het een en ander nagemeten. De pull-up naar 3v3 is (alle drie parallel) ongeveer 5 kOhm voor zowel voor CLK als voor SDA. Gek genoeg werd de verbinding op korte afstand stabieler door een pull-down(!) weerstand van 10 kOhm op SCL naar massa (was eigenlijk een vergissing). De verbinding naar massa vanuit de Due is goed. Doe ik 10 k.Ohm naar massa bij de SDA dan zie ik op de scoop de spanning van de blokgolf zakken, bij de SCL heeft de 10 k.Ohm dit effect veel minder. De spanning voor de hele schakeling komt van de Due, dus geen tweede voeding voor de sensoren of zo iets.

Ik werk niet met een breadboard maar met een printplaat en de verbindingen soldeer ik. Een en ander is daardoor behoorlijk stabiel opgebouwd.

Sluit ik de langere draden (ongeveer 5 meter) aan voor de tweede sensor dan zie ik de blokgolf veranderen. Ik heb dan alleen nog maar de draden aangesloten, de tweede sensor is dan nog los. De golfvorm wordt aan de voorkant afgevlakt zoals bij het laden van een condensator gebeurt. Een condensator van 470 pF op de SDA heeft hetzelfde effect als het aansluiten van de langere draden. Sluit ik de condensator aan op de SCL dan stopt de I2C verbinding en worden beide lijnen hoog. Het aansluiten van andere type draden van vergelijkbare lengten hebben hetzelfde effect. Meet ik de capaciteit van de langere aansluitdraden dan kom ik op ongeveer 600 pF en dat verklaart wel wat ik zie. Ik vraag me dan wel af hoe dit dan bij andere I2C verbindingen werkt, 5 meter is toch zo lang niet.

Tussen de Due en de drie sensoren heb ik daarna een bidirectionele levelconverter (2x BS170) aangesloten. Er valt geen level te converten dus de pulsen op 3v3 vanuit de Due worden op 3v3 doorgegeven aan de drie sensoren. Ik had verwacht (en gehoopt) dat het bovenbeschreven effecten kleiner of geheel weg zouden zijn maar dat is niet het geval. Ook met de bidirectionele levelconderter start I2C verbinding niet met langere draden en laat het scoopbeeld van de blokgolven afgeronde voorkanten zien. Het aanbrengen van 10 k.Ohm weerstand tussen de Due SCL en de massa (dus voor de ingang van de bidirectionele levelconverter) levert voor de korte aansluitdraden een stabielere verbinding op.

Ik overweeg nog de andere I2C poort te proberen maar op internet las ik dat dat een lastige klus is. In ieder geval werd de poort niet herkend toen ik een sensor aansloot en met SCL1 en SDA1 probeerde te activeren. Tips zijn welkom want waarschijnlijk doe ik iets verkeerd of zie ik iets over het hoofd.

Gebruikers-avatar
Berichten: 1891
Geregistreerd: 06 Aug 2016, 01:03

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor Koepel » 14 Okt 2018, 15:20

Probeer eens te lezen over I2C.

Een pulldown die het beter kan laten werken kan met de level-shifter te maken hebben. Of met een pullup weerstand die een verkeerde waarde heeft.
Kun je een sketch maken die Wire.begin() doet, en daarna niets meer? Laat die draaien en meet de kortsluitstroom met een multimeter van SDA naar GND en dan van SCL naar GND. Er is dan niemand aktief op de I2C bus en dan meet je stroom door de pullup weerstanden. Die hoort natuurlijk voor SCL en SDA gelijk te zijn, en hoort onder de 3 mA te zijn.

De lengte van de draden voor I2C kunnen tot 50 cm. Dat is dus 50 centimeter. Echt waar, 50 centimeter.
Dus als je elk draadje van SDA of SCL bij elkaar optelt, en je zit onder de 50 cm, dan zit je goed.
Tenzij je SDA en SCL naast elkaar in een flat ribbon kabel legt, dan gaat het altijd verkeerd.
Gebruik je losse draden, zonder kabel, dan kun je misschien tot 2 meter.

Je processor draait op 3.3V en je sensor draait op 3.3V. Zet je daar een level shifter tussen, dan wordt het signaal zwakker.
De level shifter maakt het signaal niet sterker, maar aanmerkelijk zwakker.
Gebruik je twee level shifters achter elkaar, dan kun je het vergeten. Dat gaat op alle mogelijke manieren mis.

Heb ik al gezegd, dat de I2C bus tot een lengte van 50 cm kan ? Dat is dus niet 50 cm naar iedere sensor apart, maar alle stukjes draad van SDA of SCL bij elkaar opgeteld.

Psssst, 50 cm.

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: Aantal sensoren op I2C van Arduino Due

Berichtdoor PE2BS » 14 Okt 2018, 15:53

Koepel bedankt voor je reactie. Ik had op Internet gelezen dat je wel tot 100 meter kon en inderdaad ik gebruik een flatcable. Die 50 cm bij elkaar heb ik dus wel zo ongeveer dus die buitensensor op 3 tot 5 meter kan ik wel vergeten. Ga ik een andere oplossing voor zoeken.

De metingen heb ik met en zonder level-shifter gedaan. Ik had gehoopt dat de level-shifter voor een stabieler signaal zou zorgen maar dat bleek niet zo te zijn. Ik haal hem er tussenuit. Ik ga nog wel de stroom meten door SCL en SDA met alleen Wire.begin() in de sketch. Ik laat het resultaat nog weten.

Volgende

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten