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

Arduino Discussion :

Détection de top synchro sur FI sur 162kh (fréquence étalon).


Sujet :

Arduino

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2019
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2019
    Messages : 64
    Par défaut Détection de top synchro sur FI sur 162kh (fréquence étalon).
    Bonjour a tous,
    Il y a quelques mois de cela , vous m'avez aidé à mettre au point un fréquencemètre avec la soustraction des FI et autres
    petites choses qui vont bien, pour lire précisément les fréquences en AM et en FM sur certains de mes récepteurs radios
    dont je fais la collection et je m'en suis bien sortie (compréhension des timers 1 et 2).

    Il ya peu de temps je me suis fabriqué un récepteur sur 162 khz (FRANCE INTER: heure étalon) pour étalonner
    mes deux fréquencemètres,et ils en avaient besoin...

    Puis il m'est venu l'idée de récupérer la modulation de phases (photo jointe), pour le fun et mettre au point ma petite horloge a moi...

    Mais malheureusement! les quelques connaissances que j'ai acquéri ne me suffisent pas pour résoudre le premier pb sur lequel je bute.

    Aprés avoir passé des heures devant mon écran
    à tester milli(); delay, les interruptions...et avoir parcouru le net, je demande de l'aide!

    Je vous explique;

    Pendant la 59 em secondes du code horaire (voir photo), il ya un silence synchro qui dure plus de 1 seconde et le premier front montant
    qui suit ce silence est le top du début de la première seconde.

    Je n'arrive pas à écrire un petit bout de code qui me permettrait en fait pour débuter mon programme:

    1) de détecter un niveau bas égal à environ 800ms ( à partir des fronts montants, pris en charge par l' interrupt sur la pin2. Cela n'arrive
    qu'une fois dans la minute).

    2) puis quand on a compté 800ms, on active une tempo de 520 ms qui sera suivi d'un niveau haut sur la pin 13 de 50ms. Dans l'idéal, il y aura le top de la 1° seconde encadré par un niveau haut de 50ms, ce qui me permettra avec un ET logique d'éliminer les parasites éventuels.

    3) si les tops sont plus rapprochés que 800ms, la pin 13 reste à 0


    C'est juste le début , mais j'ai vraiment du mal...j'ai fait pas mal d'essais mais aucun ne fonctionnait correctement...

    je vous ai mis un de mes essais...

    1) l'interruption reinitialise "tempoDepart"
    2) je saute dans un sous programme "programme()" qui attend un niveau bas de plus de 800ms, et met à 1 la pin 13 puis va dans loop.
    Il qui passe dans "else" si le temps entre deux interrupts fait moims que 800ms et met
    la pin 13 à 0 et va dans loop.

    Le pgr que je vous montre fonctionne sur trois pattes. Il continue à tourner même sans interruption, d'ou des niveaux hauts régulièrement .

    j' ai testé le programme dans une routine appelée par l' interruption, mais apparemment millis() ne fonctionne pas dans ce genre de routine.

    La photo montre les modulation de phase et la logique associée.

    Merci de me donner un coup de main.

    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
    25
    26
    27
    28
    29
    int led = 13;
    unsigned long tempoDepart = 0;
    int interval=800;
     
     
    void setup() {
    pinMode(led, OUTPUT);
    digitalWrite(led,LOW); 
    attachInterrupt(0, mafonction, RISING); 
    tempoDepart = millis();
     Serial.begin(115200);  
    }                                                                  
     
    void loop (){programme();}
     
     
                          void mafonction()  
                         {tempoDepart= millis();}
     
     
        void programme(){ if ( ( millis()- tempoDepart ) >= interval ) 
                        {                                                          //si plus de 800 ms sans interrupt, led allumée 50 ms
                       digitalWrite(led,HIGH);
                        delay(50);                                                 // calibrage niveau haut
                          digitalWrite (led,LOW);                   
                            tempoDepart=millis();}
     
     
                          else { digitalWrite(led,LOW); }}
    Images attachées Images attachées  

Discussions similaires

  1. TOP 10 sur WeBI
    Par aemag dans le forum Webi
    Réponses: 9
    Dernier message: 21/05/2008, 20h41
  2. Detecter si l'on a toujours la synchro sur son modem
    Par yoghisan dans le forum API, COM et SDKs
    Réponses: 25
    Dernier message: 21/10/2005, 18h09
  3. Top 10 sur plusieurs items
    Par hussard dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/10/2005, 09h33
  4. Réponses: 3
    Dernier message: 23/08/2005, 09h43
  5. Détection d'un front sur la broche RI d'un port série
    Par G3G3 dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 19/08/2005, 17h14

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