Servo / OneWire et lag

Bonjour à tous.
Je rencontre quelques soucis a faire fonctionner la library Servo et OneWire.
Servo : pour controler un servo moteur fatuba
OneWire : pour lire la température d'un ds18b20

Le problème semble être au niveau des interruptions que le onewire doit "initialiser", ainsi les 20ms pour l'ordre du servo semble tronqué cela a pour conséquence que par moment le servomoteur au lieu de continuer sa course revient un degré avant puis repart au vrai angle (ce qui laisse pense que l'ordre des 20ms n'est pas transmis en entier).

Cela ne se produit que lorsque un périphérique onewire est actif.
Dans la librairie onewire il y a une tonne de delayMicroseconds , interrupts , noInterrupts et cli.
Il y aurait il un petit conflit entre les deux librairies ?

fred133084:
Bonjour à tous.
Je rencontre quelques soucis a faire fonctionner la library Servo et OneWire.
Servo : pour controler un servo moteur fatuba
OneWire : pour lire la température d'un ds18b20

Le problème semble être au niveau des interruptions que le onewire doit "initialiser", ainsi les 20ms pour l'ordre du servo semble tronqué cela a pour conséquence que par moment le servomoteur au lieu de continuer sa course revient un degré avant puis repart au vrai angle (ce qui laisse pense que l'ordre des 20ms n'est pas transmis en entier).

Cela ne se produit que lorsque un périphérique onewire est actif.
Dans la librairie onewire il y a une tonne de delayMicroseconds , interrupts , noInterrupts et cli.
Il y aurait il un petit conflit entre les deux librairies ?

Bonjour
je vais faire une demi réponse de Normand :grin:

c'est pas impossible 8)

Il faut savoir ou se rappeler qu'un DS18B20 pour initier et achever une acquisition à résolution max demande environ 1 seconde (un peu moins mais par confort intellectuel , je table sur la seconde )

il faut voir où serait la criticité du taux d''acquisition de la T° dans ton application.

en thermometrie "domestique" en règle générale il n'y a pas besoin d’acquérir à beaucoup plus que la minute

S'il y a des noInterrupt() et des cli() c'est pas impossible : la librairie servo se sert justement des interruptions sur le Timer1.

Bonjour,

La librairie OneWire fabrique un bus 1Wire software à grand coup de delayMicroseconds() et de noInterrupts().
Du coup il n'est pas possible d'utiliser Servo en même temps, ou sinon le signal des servomoteurs sera altéré par moment.

Un petit MCU style ATtiny85 pour commander les servo en i2c est-ce une bonne alternative ?

-Standby:
Un petit MCU style ATtiny85 pour commander les servo en i2c est-ce une bonne alternative ?

Pourquoi pas, c'est une solution effectivement.

bon ok.
merci des pistes !

je vous tiens au jus du workaround retenu...

Ou utiliser un capteur de température qui n'utilise pas le Onewire xD

B@tto:
Ou utiliser un capteur de température qui n’utilise pas le Onewire xD

Un bon vieux LM35 et hop probléme réglé :grin:

effectivement.
j'avais prévu le coup, j'ai du lm135 en stock, faudra que j'écrive les classes dérivées pour ce composant d'ailleurs.

pour le moment j'ai juste désactivé la pause et la reprise des interruptions dans le library onewire car je ne m'en sert pas j'en ai profité pour patcher la library pour disposer d'un contructeur par defaut et d'une méthode d'initialisation. Cela permet de déclarer en dynamique un objet via un template et d'activer le onewire quand les init sont finis.

à suivre, une fois que toutes mes library seront terminée. Puis on repassera sur la partie électronique :frowning:

fred133084:
j'avais prévu le coup, j'ai du lm135 en stock, faudra que j'écrive les classes dérivées pour ce composant d'ailleurs.

Faire une classe dérivée pour un malheureux LM35 ?
J'ose même pas imaginer le reste du code ...
On est sur un µC avec 32Ko 29Ko (effectifs) de flash et 4Ko de RAM ne l'oublie pas :wink:

fred133084:
j'en ai profité pour patcher la library pour disposer d'un contructeur par defaut et d'une méthode d'initialisation. Cela permet de déclarer en dynamique un objet via un template et d'activer le onewire quand les init sont finis.

Template + allocations dynamiques ... Tu cherches vraiment la merde :wink:
Sur PC pourquoi pas mais sur AVR avec avr-gcc ... bonjour les dégâts collatéraux.

-> Les templates sont supportés depuis la version 4.3, coup de bol (humm :roll_eyes:) la team arduino fourni la version 4.3.3 avec l'ide.
(La version actuelle de avr-gcc est là 4.7.2, mais avant que la team arduino ce décide on sera à la version 5.x :grin:)
-> les opérateurs new/del ne sont pas supportés ! En fait il sont émulés en interne à grand coup de malloc/free ...

Fait trés attention aux allocations dynamiques, si tu crées / détruit des objets tu va (immanquablement) fragmenter ta mémoire RAM et avec 4Ko ça peut finir en reset en quelques malloc/free :wink:
Tu peut demander aux utilisateurs de la librairie "String" pour arduino : crash assuré à un moment ou à un autre.

houlala ! alors t'inquiete pas pour mon code, j'ai fini l'école depuis une bonne vingtaine d'année et c'est un peu ma routine de coder.
Pour info j'ai donc créé un noyau, un shell pour l'arduino. Tout est pilotable en ligne de commande avec une tonne de library que j'ai créé, permettant ainsi avec une tablette graphique de configurer en wysiwyg ton arduino avec tout ce qui tu y plug et rajouter pour chaque plug des triggers. Mais chutttt c'est pas fini.
Donc pour te faire peur, c'est du polymorphisme, pointeur, du virtual et autre chose que tu vas apprendre a l'école bientôt :wink:

Pour info je fais tourner la bête avec moins de 1% du "cpu" et avec un nombre "incalculable" de truc branché ... mais chuuttttt c'est pas fini ! lol

Ok … J’aime les réponses agressives sans raison.

fred133084:
Donc pour te faire peur, c’est du polymorphisme, pointeur, du virtual et autre chose que tu vas apprendre a l’école bientôt :wink:

  1. Je suis étudiant en 2ème année de DUT informatique, le polymorphisme je connais, les virtual je maitrise.
  2. Je ne suis pas un débutant dans le domaine de la programmation comme tu sembles le penser. Si ton but est de m’impressionner avec tout un tas de codes, librairies, ou autre c’est loupé.

Un shell pour arduino ? Super ! J’ai conçu mon propre langage de programmation typé basic/asm, un compilateur 2 passes et une machine virtuelle pour le faire tourner … (le code du DCPU v1 est sur mon github, les spécifications préliminaire du VCPU v2 aussi)
Mais chuuttttt … prendre les gens de haut c’est tellement plus pratique.

Bien maintenant que les horloges ont été remise à l’heure revenons à nos moutons, l’allocation dynamique et les templates.
Pour les templates, tout est dit.
Pour l’allocation dynamique voici le lien vers le bug-track sur le tracker du projet arduino et d’avr-gcc :
http://code.google.com/p/arduino/issues/detail?id=857

fred133084:
Pour info je fais tourner la bête avec moins de 1% du “cpu” et avec un nombre “incalculable” de truc branché … mais chuuttttt c’est pas fini ! lol

De quoi l’arduino ? Si oui je serait curieux de savoir comment tu prétend utiliser 1% d’un CPU ne pouvant pas être mis en pause :wink:
(exception faite de l’API <avr/sleep.h> permettant de passer en mode basse consommation)

C’est bien beau de vouloir prendre les gens de haut en se croyant plus fort que n’importe qui.
Pour ma part je n’ai jamais prétendu tout savoir, de toute façon personne sur cette planète ne peut tout savoir quelque soit le domaine.
Le fait est que le peu que je sait en programmation est suffisant pour te dire que faire des classes dérivées pour un capteur aussi simple qu’un LM35 et utiliser des templates / allocations dynamique avec avr-gcc n’est pas une bonne idée.
Aprés je suppose que tu as fait un diagramme UML pour arriver à cette solution technique et c’est ton choix, je le respect.

Salut,

Si je peux me permettre une suggestion avant que la guerre n’éclate :slight_smile:

Le 1Wire doit pouvoir bloquer les interruptions sinon pas moyen pour lui de respecter
les timmings.

Par contre le Servo moteur n'as besoin de précision que pour la durée de l'impulsion haute.
Entre les impulsions, on peut avoir des écarts de temps tant qu'on lui envoie des pulses assez souvent.

Au lieu d'utiliser la librairie Servo, on pourrait utiliser le timer1 en mode CTC avec
la fonctionnalité qui permet de clearer une pin lorsque le compare se produit. Ainsi la durée
de l'impulsion n'est plus dépendante du blocage ou non des interruptions.

lol

nan mais aucun problemes, pas de guerre en vue, j'ai bien d'autre chose a faire :wink:
Juste que le cote je te pique tout le temps est plus qu'agaçant qu'en voit finalement les projets que certains on réalisé en fin de compte...

Quand on croit tout savoir ou peut etre surpris de découvrir ce que certains ou pu faire qu'on n'aurait jamais pu penser faire ou su faire. Mais chuuuttt ! lol Plus dur sera la chute comme on dit :slight_smile:
Mais elle sera bénéfique à tout le monde car mon système sera gratuit et utilisable tel quel ou comme noyau pour créer sa propre couche graphique ou en y rajoutant ses propres "sensors".

Je vais voir ce que tu dis, meme si pour le moment mon patch convient parfaitement pour ce sensor.

"le challenge" est d'utiliser le minimum de temps "cpu", pour le moment c'est pari gagné, mais cela oblige a re écrire pas mal de librairie pour les rendres non bloquantes bref bref bref ... à suivre :wink: et merci de vos réponses

fred133084:
Juste que le cote je te pique tout le temps est plus qu’agaçant qu’en voit finalement les projets que certains on réalisé en fin de compte…

Le côté “je te pique” ?
Il faudrait être plus clair … parce que là sans vouloir être méchant ta phrase ne veut pas dire grand chose.

fred133084:
Quand on croit tout savoir ou peut etre surpris de découvrir ce que certains ou pu faire qu’on n’aurait jamais pu penser faire ou su faire. Mais chuuuttt ! lol Plus dur sera la chute comme on dit :slight_smile:

Tient, aurais-tu oublié de lire le dernier paragraphe de mon précédent message ?
Je ne prétend pas tout savoir, je ne prend pas non plus les gens pour des sous-merdes et sache que j’admire un grand nombre de développeurs, moddeurs, et autres bidouilleurs en tout genre dont les capacités sont clairement supérieur aux miennes.
Et j’admire de la même manière le travail et la volonté qu’on certain membres (malheureusement pas tous) d’achever leurs projets, quelque soit leurs niveaux techniques.

Si je peut me permettre un conseil : arrête de te croire supérieur aux autres membres (car oui ici c’est clairement toi qui te crois supérieur au autres et non moi. Si je t’ai bousculer avec ton shell arduino c’était pour te faire réfléchir, mais manifestement cela n’as pas eu d’effet) et surtout n’essaye pas de faire la morale.
Je t’assure, conclure par un “Mais chuuuuuttt ! lol” n’est pas du tout convaincant …

fred133084:
Mais elle sera bénéfique à tout le monde car mon système sera gratuit et utilisable tel quel ou comme noyau pour créer sa propre couche graphique ou en y rajoutant ses propres “sensors”.

Je n’en doute pas, une librairie graphique ne sera pas de trop en Arduino, surtout si celle-ci peut être porter sur divers affichage.

Ps: la gratuité est une chose, mais la licence de diffusion/réutilisation en est une autre :wink:
Si j’en crois ta première phrase tu sembles retissant à la réutilisation du code par d’autre personne, j’espère me tromper sur ce point …

on est parti sur de mauvaise bases tous les deux sembles t il !

donc zen attitude.

je ne prend personne pour ce que tu prétends.

apres chacun pense ce qu'il veut et se prend pour ce qu'il veut.

quand aux projets finis ... effectivement la plupart commencent des "trucs" sans les finir, d'autres écrivent des articles sur des articles existants bref, c'est la foire à la saucisse. Ce qui est sur c'est que les gens veulent tous la même chose. C'est très redondant sur ce forum (et les autres), et vous avez de la chance, ce que les gens veulent c'est ce que j'ai besoin à titre personnel pour mes gîtes et autres.

chacun fait ce qu'il peut, moi je fais les choses à fond et les finies.

quand à mon systeme il est déjà opérationnel et gère pas mal de truc mais il est loin de tout ce que j'ai déclaré dans ide.
Et il fait donc déjà beaucoup de mal a une tonne de société car il remplace une tonne d'appareil existant vendu très cher et au final avec tout ce que j'ai prévu il risque de bousculer pas mal de chose dans le commerce.
Mais il y aura toujours de la place pour ce qui vendent du clé en main et le DIY.

Mon systeme est un "noyau", que les gens pourront utiliser tel quel, il sera livré avec une interface graphique accessible via tablette tactile, téléphone, ordinateur.
Il sera possible d'écrire sa propre ui bien entendu (mais quel interet ?) ou l'utiliser en ligne de commande pourquoi pas ..., voir utiliser le "noyau" (c'est un grand mot) comme librairie et donc l'étendre.

bref, wait n see, mais chhuuutttt :slight_smile:

Je suis de la vieille école, celle qui écrivait des jeux vidéos dans les année 89, celle qui a participé a l' E3, celle qui sait q'u'un word est différent d'un int (si si) et encore différent d'un byte... celle qui compte les 0 et les 1 et les économises au maximum, et qui sort des programmes qui sont toujours en exploitation quinze ans après.
L'arduino n'est pas un rasperry, aussi il faut vraiment coder dans cet esprit et trouver les astuces pour rendre performant le bestiau, le tout en se gardant une porte de sortie pour "demain" dans le cas ou le projet arduino venait a disparaitre et qu'on doivent basculer ailleurs.

mais chuuuuttttt.

Oui mais l'arduino c'est pas un truck de malade, c'est pas du bas niveau pur et dur électronique, c'est du grand public tout a était penser pour, donc la communauté aussi suis avec il ne faut pas s'attendre a avoir les inventions du siécle . La team arduino a tout fait pour cacher le coté noir "ingénieur électronique" pour justement toucher un plus grand publique entre 0b00001111 et pinMode le choix et vite fait.

fred133084:
on est parti sur de mauvaise bases tous les deux sembles t il !
donc zen attitude.

De très mauvaise bases effectivement.
Je suis zen, pour ça pas de problème, mais ton attitude m'horripile au plus haut point.

fred133084:
je ne prend personne pour ce que tu prétends.
apres chacun pense ce qu'il veut et se prend pour ce qu'il veut.

Tu ne te rend donc même pas compte de ton attitude hautaine ?
C'est assez alarmant dans ce cas ...

fred133084:
quand aux projets finis ... effectivement la plupart commencent des "trucs" sans les finir, d'autres écrivent des articles sur des articles existants bref, c'est la foire à la saucisse. Ce qui est sur c'est que les gens veulent tous la même chose. C'est très redondant sur ce forum (et les autres), et vous avez de la chance, ce que les gens veulent c'est ce que j'ai besoin à titre personnel pour mes gîtes et autres.

A t'écouter les autres membres du forum ne font que des "trucs" sans importances ...
Même si un projet n'est pas finit cela reste un projet, pas un "truc".

Quand aux "articles sur des articles" si c'est en lien avec mon blog tu le dit toi même "chacun pense ce qu'il veut".

Pour les "gens qui veulent tous la même chose" si c'est ce que tu retient du forum et bien c'est dommage.
La diversité des projets, des demandes et des réponses sur le forum est bien plus grande que ce que tu sembles percevoir.

fred133084:
quand à mon systeme il est déjà opérationnel et gère pas mal de truc mais il est loin de tout ce que j'ai déclaré dans ide.
Et il fait donc déjà beaucoup de mal a une tonne de société car il remplace une tonne d'appareil existant vendu très cher et au final avec tout ce que j'ai prévu il risque de bousculer pas mal de chose dans le commerce.
Mais il y aura toujours de la place pour ce qui vendent du clé en main et le DIY.

Si tu espères "bousiller" quoi que ce soit "du commerce" tu te met le doigts dans l'œil.

Même si ton système est 100x mieux la solution commerciale sera toujours supérieur de par son aspect commercial.
Le DIY c'est justement "yourself", beaucoup veulent du tout prêt, on installe ça marche, finit.
Au mieux tu toucheras un public DIYer mais cela n'en fera pas un "product-killer" pour autant.

Un produit c'est pas juste un produit, c'est des services, des garanties (voir même des certifications légales), un support technique, de la maintenance, ...
Tu peut faire ce que tu veut un projet DIY ne peut pas rivaliser avec ce genre de choses, sauf à devenir lui même un produit commercial.

fred133084:
bref, wait n see, mais chhuuutttt :slight_smile:

Ceci est un exemple type de phrase prouvant ton attitude hautaine.
Tu finiras (peut être) un jour par comprendre qu'achever tes phrases par "mais chuuuttt" ne fait que te rendre détestable aux yeux des personnes qui te lise et n'aidera en aucun cas la communauté.

fred133084:
Je suis de la vieille école, celle qui écrivait des jeux vidéos dans les année 89, celle qui a participé a l' E3, celle qui sait q'u'un word est différent d'un int (si si) et encore différent d'un byte... celle qui compte les 0 et les 1 et les économises au maximum, et qui sort des programmes qui sont toujours en exploitation quinze ans après.

Et voila, encore un déballage d'arguments pour tenter de te rendre supérieur aux autres ...
Tu ferais bien de redescendre sur terre, il serait temps que tu te rende compte que tu n'est pas forcément le seul à savoir programmer et que vouloir à tout pris te rendre supérieur n'apportera rien de bon à la communauté.
Dans ce monde il y aura toujours quelqu'un pour t'être supérieur, ça vaut aussi bien pour moi que pour toi ou pour n'importe quelle personne.

fred133084:
L'arduino n'est pas un rasperry, aussi il faut vraiment coder dans cet esprit et trouver les astuces pour rendre performant le bestiau, le tout en se gardant une porte de sortie pour "demain" dans le cas ou le projet arduino venait a disparaitre et qu'on doivent basculer ailleurs.

Vouloir rendre performant un code générique utilisant une couche d'abstraction matériel tient de l'utopie.

Si ton but est l'optimisation pure et dure tu devrait être en train de coder en AVR-C, avec un compilateur AVR-GCC de toute dernière version et un makefile ciblant très précisément les options de linkage et de compilation qui t'intéresse ...
En aucun cas tu ne devrais utiliser un framework codé par un groupe d'ancien artistes n'ayant jamais codé qu'en java et n'ayant aucune envie d'optimiser quoi que ce soit ...

Si ton but est la maintenabilité du code, tout en gardant une forme d'optimisation correcte tu devrais concevoir ta propre couche d'abstraction matériel.
Pourquoi dépendre du projet arduino si tu as si peur qu'il disparaisse ? Code ta propre couche HAL comme le font tout les projets de Framework logiciel "conséquent" (Qt, Coocox OS, ...).

Je ne vois pas pourquoi tu part sur des arduino et t'attaque au DIY, le principe c'est, comme le nom l'indique de faire sois même, personnellement, j'ai acheté une arduino pour développer moi même.

Mais sinon, ta manière d'écrire est hautaine et énervante, si tu ne le fais pas exprès, sache que ça vient en partie du fait de se différencier des autres en se disant supérieur (je pense à la série de "celle qui" dans ton dernier message)

Je trouve ça très malheureux vu que si tu sais tant de chose, tu pourrais partager !

Écrit sur une base de neutralité écrit sans "chuut" ou autre qui ne sont là que pour essayer de rabaisser les autres personnes