Pages: [1]   Go Down
Author Topic: durée transition entre un digitalwrite high et low  (Read 1479 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Faraday Member
**
Karma: 34
Posts: 5087
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour
pas de materiel de mesure sous la main aujourd'hui

quelqu'un a t'il une idée de la fréquence du carré  générée sur un uno pour une simple boucle
C'est juste par curiosité  smiley-mr-green
Code:
pseudo loop {
digitalWrite (CLOCK,HIGH);
    //delay(1); OK
    //delayMicroseconds(1); OK aussi ça ne decroche pas
   // test sans aucun delais soft ça ne decroche pas non plus , tant mieux
    digitalWrite(CLOCK,LOW);
}
« Last Edit: April 29, 2012, 07:06:50 am by Artouste » Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5087
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je me répond à moi meme  smiley-mr-green (ça m’évitera d'oublier)

Durée du créneau 3.6 µs ~

« Last Edit: April 29, 2012, 10:03:11 am by Artouste » Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 864
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,

intéressant a savoir merci =)

Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il y a quelques mois j'avais fait une comparaison entre utiliser la fonction arduino "digitalWrite" et écrire directement dans les registres (http://arduino.cc/forum/index.php/topic,77060.msg582084.html#msg582084).
J'avais trouver qu'en écrivant directement dans les registres on gagnait un rapport 10.

Si je regarde ta copie d'écran je trouve une période de 8.2 µs (1) soit une fréquence de 122 kHz, on peut donc espérer 1,22 Mhz en écrivant directement dans les registres.

(1) le temps du "1" (3,6µs) est supérieur à celui du "0" (4,6µs).

Pour information te serait-il possible de mesurer les temps de montée et de descente entre 20% et 80% de l'amplitude du signal, merci.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

digitalWrite() fait un peu de vérifications tel que mettre la pin en sortie si ce n'est pas déjà le cas.
Ceci pour des raisons de compatibilité avec Wiring qui n'impose pas d'utiliser pinMode().

C'est dommage parce qu'une version de digitalWrite() sous la forme d'une macro serait beaucoup plus efficace.

Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5087
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il y a quelques mois j'avais fait une comparaison entre utiliser la fonction arduino "digitalWrite" et écrire directement dans les registres (http://arduino.cc/forum/index.php/topic,77060.msg582084.html#msg582084).
J'avais trouver qu'en écrivant directement dans les registres on gagnait un rapport 10.

Si je regarde ta copie d'écran je trouve une période de 8.2 µs (1) soit une fréquence de 122 kHz, on peut donc espérer 1,22 Mhz en écrivant directement dans les registres.

(1) le temps du "1" (3,6µs) est supérieur à celui du "0" (4,6µs).

Pour information te serait-il possible de mesurer les temps de montée et de descente entre 20% et 80% de l'amplitude du signal, merci.
bonsoir 68tjs
ok pour le rapport 0/1 ,dans la mesure où c'etait pour jouer, c'etait plus l'ordre de grandeur
je vais mesurer ça plus precisemment mercredi avec du bon materiel, là j'ai ressorti un petit scope de la cave juste pour voir, et je n'ai pas de sondes dignes de ce nom, d'ailleurs ça se voit bien avec les amortis en montée et descente.  smiley-mr-green
2 photos avant qu'il retourne au stockage  smiley-cool


Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

digitalWrite() fait un peu de vérifications tel que mettre la pin en sortie si ce n'est pas déjà le cas.
Ceci pour des raisons de compatibilité avec Wiring qui n'impose pas d'utiliser pinMode().

C'est dommage parce qu'une version de digitalWrite() sous la forme d'une macro serait beaucoup plus efficace.
Ça existe depuis longtemps smiley-wink
Google -> digitalWriteFast -> http://code.google.com/p/digitalwritefast/
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, mais une fois encore ce n'est pas dans la lib standard et introuvable depuis les points d'entrées de arduino.cc smiley-wink
Ni même dans le playground (ou pas trouvé)

Mais merci pour le lien, j'ajoute ca tout de suite dans mon répertoire Libraries (comme ça pour compiler Blink je vais passer de 5 minutes à 6 minutes, vu le nombre de lib que j'ajoute chaque semaine....smiley-sad )
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, mais une fois encore ce n'est pas dans la lib standard et introuvable depuis les points d'entrées de arduino.cc smiley-wink
Ni même dans le playground (ou pas trouvé)
Elle est (enfin était) sur le playground, seulement les développeurs arduino on jamais pu blairer cette librairie.
Probléme de taille, cette version est très peu portable, et ne compile que pour quelques micro-contrôleurs classique (atmega2560, atmega328), c'est pour ça quelle ne fait pas parti du core officiel.

Mais merci pour le lien, j'ajoute ca tout de suite dans mon répertoire Libraries (comme ça pour compiler Blink je vais passer de 5 minutes à 6 minutes, vu le nombre de lib que j'ajoute chaque semaine....smiley-sad )
J'ai pas ce probléme vu que j'utilise plus l'ide arduino (makefile powaaa) smiley-razz
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'était encore une occasion de sortir mon OLS tout neuf

Code:

#include "digitalWriteFast.h"

#define PIN_NUM      13

void setup()
{
  pinMode( PIN_NUM, OUTPUT );
}

void loop()
{
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
 digitalWriteFast( PIN_NUM, LOW );
 digitalWriteFast( PIN_NUM, HIGH );
}






Conclusion : 120ns pour un digitalWriteFast mais 760ns pour le loop (sortie de loop(), retour dans main(), while(1) dans main, appel de loop())

En mettant le while(1) dans loop(), on passe à 135ns pour la boucle.


Quote
J'ai pas ce probléme vu que j'utilise plus l'ide arduino (makefile powaaa)
Je vais y venir !
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2261
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Artouste
Les suroscillations ne viennent pas forcément que des sondes : les pistes tarabiscotées, la qualité du plan de masse sur la carte et les horribles connecteurs pour empiler les cartes ont aussi leur part de responsabilité.
A vue de nez les temps de montée et de descente font 0,2 div soit en gros 100ns.
Je posais la question pour évaluer la bande passante des connexions nécessaire pour ne pas avachir les signaux. En appliquant la formule empirique Fmin = 1/(2.2*tm) on obtient 5 Mhz. Jusqu'à des longueurs de 10cm cela devrait passer sans trop de difficultés mais au delà  paire torsadée obligatoire.
C'est vraiment une calamité que dans les implantations des cartes il n'y ait pas plus d'emplacement pour des reprise de masse.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'était encore une occasion de sortir mon OLS tout neuf





Conclusion : 120ns pour un digitalWriteFast mais 760ns pour le loop (sortie de loop(), retour dans main(), while(1) dans main, appel de loop())

En mettant le while(1) dans loop(), on passe à 135ns pour la boucle.
... Bon c'est décidé, j'achète un OLS dés que "mon fournisseur" aura de nouveau du stock ...
Ras le bol de me trimbaler un oscilloscope hors d'usage et d'être obliger d'utiliser ma carte bus pirate en analyseur logique smiley-yell
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5087
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Artouste
Les suroscillations ne viennent pas forcément que des sondes : les pistes tarabiscotées, la qualité du plan de masse sur la carte et les horribles connecteurs pour empiler les cartes ont aussi leur part de responsabilité.
A vue de nez les temps de montée et de descente font 0,2 div soit en gros 100ns.
Je posais la question pour évaluer la bande passante des connexions nécessaire pour ne pas avachir les signaux. En appliquant la formule empirique Fmin = 1/(2.2*tm) on obtient 5 Mhz. Jusqu'à des longueurs de 10cm cela devrait passer sans trop de difficultés mais au delà  paire torsadée obligatoire.
C'est vraiment une calamité que dans les implantations des cartes il n'y ait pas plus d'emplacement pour des reprise de masse.
oui , mais bon ce n'est pas ce que j'ai fais de mieux  comme câblage smiley-mr-green
avec le code de barbudor et une liaison masse un peu plus courte
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc on est plus proche des 10ns comme temps de montée et descente.
C'est plus raisonnable....
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Pages: [1]   Go Up
Jump to: