IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Comment faire une pause de 100 nano seconde en C ?


Sujet :

Raspberry Pi

  1. #1
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut Comment faire une pause de 100 nano seconde en C ?
    Bonjour voici un test rapide de pause d'une miliseconde avec le pico2:

    Code c : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "pico/stdlib.h"
     
    const int sleep_time = 1;
     
    int main() {
        const uint LED_PIN = 0; // GPIO25
        gpio_init(LED_PIN);
        gpio_set_dir(LED_PIN, GPIO_OUT);
        while (true) {
            gpio_put(LED_PIN, 1);
            sleep_ms(sleep_time);
            gpio_put(LED_PIN, 0);
            sleep_ms(sleep_time);
        }
    }
    le type de sleep_time �tant un int, comment faire pour avoir les nano ou microseconde ?
    j'ai essay� en mettant "0.1" mais comme ce n'est pas un INT je suis bloqu� en gpio mesurer � l'oscilloscope � 500 hz.
    merci d'avance pour la r�ponse

  2. #2
    Responsable Arduino et Syst�mes Embarqu�s


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 167
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 167
    Billets dans le blog
    47
    Par d�faut
    Salut,

    Tu remplaces ms par us dans les noms des fonctions et tu devrais avoir l'�quivalent en microsecondes.

    Pour avoir de la nanoseconde, il faudrait une horloge � 1000 MHz, ce n'est pas le cas des pi pico (133/150 MHz). 1/133.106=7,52 ns. Je suppose que pour avoir ces dur�es-l�, il faut passer par de l'assembleur (op�ration nop).

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 607
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 607
    Par d�faut
    Bonjour,

    D'accord avec f-leb pour la nano seconde. M�me avec une horloge � 1 GHz, la pr�cision � la ns resterait illusoire car le temps d'appel de la fonction de d�lai prendrait d�j� plusieurs ns, voire plusieurs dizaines de ns.

    Il faudrait int�grer ce temps d'appel pour diminuer d'autant le d�lai pass� en argument. Mais pas simple de savoir de combien : r�it�rer et inverser l'�tat d'une broche puis observer la fr�quence ? mais le temps d'appel sera allong� du temps de boucle et de basculement d'�tat.

    Cela me rappelle ce que disait un responsable des comptes d'�carts d'une grande entreprise : "nos comptes sont pr�cis au centimes et faux au milliard". Pr�cision et exactitude sont loin d'�tre synonymes

    Salutations

  4. #4
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut
    Merci de ces r�ponses.
    comme j'ai des difficult� � faire de l'assembleur je m'�tait essayer au C , mais je doutais qu'il me rest� avec l'assembleur si je veux descendre en dessous du micro-seconde voir du nano seconde (pour une mesure pr�cise d'une charge de bobine de d�coupage ..)
    j'ai essay� une solution alternative en faisant ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include "pico/stdlib.h"
    
    int main() {
        const uint LED_PIN = 0; // GPIO25
        gpio_init(LED_PIN);
        gpio_set_dir(LED_PIN, GPIO_OUT);
        while (true) {
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
            gpio_put(LED_PIN, 1);
    
    
    
            gpio_put(LED_PIN, 0);
            sleep_ms(1);
        }
    }
    voici ce que j'obtient:

  5. #5
    Responsable Arduino et Syst�mes Embarqu�s


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 167
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 167
    Billets dans le blog
    47
    Par d�faut
    Citation Envoy� par keokaz Voir le message
    voici ce que j'obtient:
    Quel rapport avec le programme C que tu as post� ?

  6. #6
    Mod�rateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Syst�mes Embarqu�s
    Inscrit en
    Avril 2002
    Messages
    3 251
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Consultant en Syst�mes Embarqu�s
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 251
    Par d�faut
    Bonjour,

    Citation Envoy� par keokaz Voir le message
    voici ce que j'obtient:
    Il y a un probl�me de mesure/instrument ou alors tu ne mesures pas la broche de sortie de ton pico ?

    - Une sonde en x1 � une bande passante tr�s limit�e, par exemple mes sondes d'oscillo 200MHz en x10 ne font plus que 6MHz en x1.
    - Il faut aussi v�rifier la bande passante de l'oscillo lui m�me pour voir si elle est compatible avec la mesure.
    - Il faut �galement un taux d'�chantillonnage adapt� pour mesurer des signaux aux front raides (signaux carr�s) sinon tu vas mesurer une sinus (voir le spectre d'un signal carr�)
    - Il ne faut pas qu'il y ait une LED sur la GPIO car celle-ci �tant capacitive, elle va faire une superbe filtre passe bas sur ta mesure.

  7. #7
    Membre �prouv�

    Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    1 222
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 1 222
    Par d�faut
    merci des r�ponses, mon oscilloscope a une bande passante de 60Mhz (ce n'est pas de la marque, en plus ayant achet� des sondes de chine pas cher j'ai constat� que par rapport � une autre sonde d'orgine la mesure n'�tait pas tout � fait pareille) ,comme tu l'a fait remarqu� je ne sais pas si 60Mhz avec une sonde X1 est suffisant pour ce que je veux faire et comme tu l'a mentionner x10 c'est encore moins de bande passante..,

    pour le moment je ne me suis pas concentr� sur la qualit� de me mesure mais de pouvoir faire un programme qui puisse �tre suffisant rapide pour mesurer la tension de mont� d'une charge d'une bobine de courant de transformateur � d�coupage.

    A la prise en main de mon pico2 je me suis dit que pour faire ces gendre de chose il me faut pass� par de la programmation en pur assembleur, mais vu que je n'avance pas bien, j'ai test� directement en C.

    https://www.developpez.net/forums/d2...io-assembleur/

    comme dans le C il n'y pas de "fonction" en nano seconde et qu'il n'est pas possible de divis� la milliseconde par "X", j'ai juste essay� de mesurer une impulsion de mise � 1 d'un port GPIO si j'arrive � obtenir 10 nano seconde c'est peut �tre faisable vu la r�ponse du calcul (1/133.106=7,52 ns) 7.2ns seconde.

    Ensuite je me suis dis qu'il faut que j'ai plus qu'a faire des calcul pour obtenir une base de temps pour ensuite calculer en Henry la valeur de la bobine du transformateur que j'utilise.

    Mon but final c'est de pouvoir commander au bon moment la fermeture et l'ouverture de commande de transistor � d�coupage.

  8. #8
    Mod�rateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Syst�mes Embarqu�s
    Inscrit en
    Avril 2002
    Messages
    3 251
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Consultant en Syst�mes Embarqu�s
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 251
    Par d�faut
    Citation Envoy� par keokaz Voir le message
    x10 c'est encore moins de bande passante..,
    x10 c'est beaucoup plus de bande passante. De mani�re g�n�rale on n'utilise une sonde en x1 que dans des cas pr�cis : signaux tr�s tr�s faibles et imp�dance de la source assez faible (qui peut d�livrer du courant donc).

    Citation Envoy� par keokaz Voir le message
    Mon but final c'est de pouvoir commander au bon moment la fermeture et l'ouverture de commande de transistor � d�coupage.
    Les alimentations � d�coupage n'utilisent pas de fr�quence aussi haute, �a ne fonctionnerait pas d'ailleurs (effet de peau qui augmenterait la r�sistance apparente des fils, augmentations des pertes dans le transistor, probl�me de couplage), c'est quelques dizaines de kHz � quelques MHz tout au plus.

    Mettre une alim � d�coupage au point c'est pas facile et il faut faire des bonnes mesures. C'est quoi comme alim � d�coupage ? Flyback j'imagine puisque tu veux d�couper le primaire d'un transfo ?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 9
    Dernier message: 18/12/2009, 00h36
  2. [VBA]Comment faire une pause
    Par Thierry'' dans le forum VBA Access
    R�ponses: 14
    Dernier message: 14/04/2007, 14h42
  3. comment faire une pause
    Par delavega dans le forum ASP
    R�ponses: 1
    Dernier message: 19/02/2007, 23h58
  4. [console]Comment faire une pause?
    Par aminee009 dans le forum MFC
    R�ponses: 5
    Dernier message: 20/10/2005, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo