Arduino Wire library gebruik gaat verkeerde kant op.

Alles wat niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 21 Mrt 2018, 11:12

Als jullie het niet erg vinden, dan wil ik even mijn hart luchten.

Ik ben begonnen om Adafruit en Sparkfun zo ver te krijgen, dat ze de Wire library goed gaan gebruiken.
Ongeveer 20% deed het namelijk verkeerd en veel was van Adafruit en Sparkfun gekopieerd.
Als ik nu naar recente code op Github kijk, dan doet misschien wel 50% het verkeerd.

De issues op Github bij Adafruit en Sparkfun laten ze gewoon staan.
Dus ik maak veel issues over de Wire library, maar ik hou het niet meer bij. Sommigen gaan zelfs tegen mij in:
- https://github.com/sleemanj/DS3231_Simple/issues/11
- https://github.com/SingleTact/StandaloneArduino/issues/3

De rare constructies met de Wire library worden steeds merkwaardiger. Gebruik van Wire.endTransmission() na Wire.requestFrom(), allerlei rare timeouts met millis() na een Wire.requestFrom() en speciale ingewikkelde functies om de zogenaamde timeouts te verwerken. Het loopt compleet uit de hand.

Proberen de wereld verbeteren (met betrekking tot de Wire library) is me dus niet gelukt.
Ik zie al voor me wat er gaat gebeuren: op een bepaald moment gaat iemand van het Arduino team de officiële Arduino voorbeelden of documentatie wijzigen naar het verkeerde gebruik.

Advertisement

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor nicoverduin » 21 Mrt 2018, 12:24

En? Voelt het nu beter?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor shooter » 21 Mrt 2018, 12:47

Je hebt wel een beetje gelijk, echter als je iets schrijft zoals een request, dan moet je nog een start maken, en ja je hebt gelijk voor een start hoef je geen stop te zetten, maar aan de andere kant is het wel zo netjes, want dan weet je zeker dat er netjes gestopt is. Nee het is niet noodzakelijk, maar wel beter voor de structuur.
Je weet zelf ook wel dat eenmaal gepubliceerde code, bijna niet te veranderen valt. Men probeert natuurlijk de code ook een beetje universeel te houden, zodat ook met een andere library of compiler, er een beetje structuur in zit.
en sterker nog, in de request.from staat al lang een boolean om die stop te creeren, maar er zijn natuurlijk ook compilers die dat niet hebben, vandaar dat het wellicht overvloedig is, maar ook zij hebben wel een punt.

De wereld verbeteren probeert iedereen, en ieder op zijn eigen manier, zelfs poetin en trump, dat betekent nog niet dat we het daar ook mee eens moeten zijn.
paul deelen
shooter@home.nl

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 21 Mrt 2018, 13:14

shooter, zij hebben geen punt, echt niet. Daar ben ik al twee jaar mee bezig om dat duidelijk te maken.

De Wire.requestFrom() deed altijd al een stop (en ook een start). De parameter is alleen toegevoegd om de stop weg te kunnen laten.

Het gaat mij nu juist om de Wire library niet verkeerd te gebruiken, zodat de code op alle platforms werkt.

De Wire.beginTransmission() kan niet gebruikt worden om een start te geven, dat is niet wat die functie doet.
De Wire.endTransmission() kan niet gebruikt worden om een stop te geven, dat is niet wat die functie doet.

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 23 Mrt 2018, 16:38

Adafruit probeert niet eens om de bugs er uit te halen en Sparkfun geeft het op: https://github.com/sparkfun/SparkFun_BNO080_Arduino_Library/issues/3.
Ze hadden een speciale functie gemaakt om een of andere mysterieuze verzonnen timeout te verwerken. Maar ze hebben besloten om die nonsense code er in te laten zitten.

Dus nu gaan waarschijnlijk vele anderen zich als lemmings in dat timeout dal storten :cry:

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 25 Mrt 2018, 16:58

Een wiki op Github gemaakt: https://github.com/Koepel/How-to-use-the-Arduino-Wire-library/wiki.
Maar het voelt als duwen tegen een olifant.

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 06 Apr 2018, 10:31

Met een paar uitgebreide zoek-opdrachten heb ik ingeschat hoe vaak de Wire library verkeerd wordt gebruikt op Github.
Ik kom op 20 000 keer. Stel dat er gemiddeld 3 keer per repository een fout gemaakt wordt, en ik 50% gemist hebt met mijn zoekopdrachten. Dan zouden er 10 000 (tienduizend) issues nodig zijn.
Dat is te veel. Het gaat me niet lukken om een kantelend effect te creëren waardoor het steeds beter zou kunnen gaan :cry: :cry: :cry:
"Open source" heet dat. Zeg maar gerust met open ogen in het moeras wegzakken.

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor nicoverduin » 06 Apr 2018, 10:48

Dan zit er niks anders opdan goed sparen en een van die jongens opkopen:)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor Koepel » 06 Apr 2018, 21:53

Dan wil ik nog hoger richten. Ik zou het liefst de Wire library willen vervangen door iets beters.

De Wire library heeft onhandige namen, zit onhandig in elkaar, is onhandig in het gebruik, enzovoorts.

Een nieuwe I2C library zou niet blocking moeten zijn, geschikt voor snelle processors en geschikt in een multitasking omgeving. Dat je bijvoorbeeld een stuk of wat bytes naar verschillende registers van sensors kunt schrijven, en dat die commando's eerst allemaal in een commando-buffer komen. Met een optionele callback functie. Ook het lezen van een register wordt in die commando-buffer geplaatst en met een optionele callback functie. Met globaal een error afvangen, en/of de error naar een callback functie.
Het schrijven naar een register van een sensor natuurlijk met één functie-call, en ook het lezen met één functie-call.

Vervolgens zou ik een class willen maken die geschikt is voor 95% van de sensors. In die class komt het I2C address, of the sensor repeated start ondersteunt, eventuele delays, 8-bit of 16-bit register address, enzovoorts. Dat gecombineerd met I2C_Anything, zoals de EEPROM.put() en EEPROM.get(), zodat je een uint32_t kunt declareren en dat in één keer kunt opvragen van de sensor.

De beginnende gebruiker ziet dan alleen die sensor class en wordt niet lastig gevallen met I2C dingen. Ik zie I2C als low-level communicatie, daar hoeft een Arduino gebruiker zich niet mee bezig te houden.

Helaas ben ik bij lange niet kundig genoeg om een nieuwe I2C library te schrijven voor de AVR en SAMD processors. Maar een beetje dromen hoe het beter kan kan ik wel :mrgreen:

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

Re: Arduino Wire library gebruik gaat verkeerde kant op.

Berichtdoor nicoverduin » 07 Apr 2018, 09:06

Koepel schreef:
Helaas ben ik bij lange niet kundig genoeg om een nieuwe I2C library te schrijven voor de AVR en SAMD processors. Maar een beetje dromen hoe het beter kan kan ik wel :mrgreen:

Kwestie van gewoon beginnen. Dan ga je vanzelf ook meer begrip vormen waarom dingen anders gebeuren dan je zou verwachten.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Theekransje

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten