Go Down

Topic: [RESOLU] lire état d'une sortie digitale (Read 4782 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 : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy