Go Down

Topic: [RESOLU] lire état d'une sortie digitale (Read 3948 times) previous topic - next topic

john_lenfr

#30
Jan 29, 2013, 05:42 pm Last Edit: Jan 29, 2013, 05:44 pm by john_lenfr Reason: 1
héhé, merci al1fch, problème réglé donc.

Je vais dormir moins c** ce soir...  :smiley-mr-green: :smiley-mr-green:

Artouste


la valeur 32, par rapport à 60 donne une impression de simplicité parce que le code testé par Artouste ne manipule qu'une seule sortie. En cas de manipulation de plusieurs sorties sur le même port on se retrouve , comme pour une lecture de PIN, avec la necessité d'isoler la valeur d'un bit particulier dans un octet. ça se fait par 'masquage' (opération de ET logique) sans modifier quoi que ce soit sur les broches..

0b00111100  '60' sur les broches
0b00100000  ET '32' (c'est le masque désignant le bit que l'on veut interroger)
0b00100000  = 32

De toutes façon Arduino accepte finalement le digitalRead sur une sortie, ça sera donc plus simple et plus direct !
C'est Arduino qui s'occupera de lire le registre PIN et faire le bon masque !  (-> source dans /hardware/arduino/cores/arduino/wiring_digital.c)


Quelquefois ce n'est pas desagreable de reflechir même si c'est pour finalement découvrir voir que la roue avait déjà été inventée  :smiley-mr-green:

john_lenfr

Oui, j'ai appris pas mal de choses avec ce post.
Je passe donc en [RESOLU] !
:smiley-mr-green:

B@tto

#33
Jan 30, 2013, 11:26 am Last Edit: Jan 30, 2013, 11:30 am by B@tto Reason: 1


la valeur 32, par rapport à 60 donne une impression de simplicité parce que le code testé par Artouste ne manipule qu'une seule sortie. En cas de manipulation de plusieurs sorties sur le même port on se retrouve , comme pour une lecture de PIN, avec la necessité d'isoler la valeur d'un bit particulier dans un octet. ça se fait par 'masquage' (opération de ET logique) sans modifier quoi que ce soit sur les broches..

0b00111100  '60' sur les broches
0b00100000  ET '32' (c'est le masque désignant le bit que l'on veut interroger)
0b00100000  = 32

De toutes façon Arduino accepte finalement le digitalRead sur une sortie, ça sera donc plus simple et plus direct !
C'est Arduino qui s'occupera de lire le registre PIN et faire le bon masque !  (-> source dans /hardware/arduino/cores/arduino/wiring_digital.c)


Quelquefois ce n'est pas desagreable de reflechir même si c'est pour finalement découvrir voir que la roue avait déjà été inventée  :smiley-mr-green:


Oué mais des fois aussi c'est pas mal parce que utiliser le langage Arduino est bien plus lent que de jouer directement avec les registres. Et c'est particulierement vrai pour les digitalRead() et digitalWrite(). Perso je passe jamais par les registres parce que je n'ai jamais été confronté à des problème de timing, mais un jour peut-être ... XD

http://jeelabs.org/2010/01/06/pin-io-performance/
http://www.instructables.com/id/Arduino-is-Slow-and-how-to-fix-it/step3/Exspearimintation/
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

skywodd


Oué mais des fois aussi c'est pas mal parce que utiliser le langage Arduino est bien plus lent que de jouer directement avec les registres. Et c'est particulierement vrai pour les digitalRead() et digitalWrite(). Perso je passe jamais par les registres parce que je n'ai jamais été confronté à des problème de timing, mais un jour peut-être ... XD

Même sans toucher aux registres il est possible d'accélérer les choses de manière significative avec la librairie "digitalWriteFast" ;)
http://code.google.com/p/digitalwritefast/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up