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

Vue hybride

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écodage code horaire 162kh
    Bonjour,

    En modifiant ma fonction "void affichage _I2c()" j'ai pu afficher mon petit message "attente donnees".
    En fait ,je n'arrivais pas à faire fonctionner la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (compteurSeconde == 0 && nouvelleAnnee == 20 || nouvelleAnnee == 21)
    parce que je m'évertuais à comparer" nouvelleAnnee" à 2020...


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    void affichage_I2c()
    {
     
     
       if( top3 == true ) 
       {                                               //autorisation donnée par la fonction void ecriture_Bit_Importante()
          int nouvelleMin = extraireMinute();
          int nouvelleHeure = extraireHeure(); 
          String nouveauJourSemaineNom = extraireJourSemaineNom();                                            //Serial.println(nouvelleMin); 
          int nouveauJour = extraireJour();
          String nouveauMois = extraireMoisNom(); 
          int nouvelleAnnee = extraireAnnee();
     
          lcd.backlight();
     
          if (compteurSeconde == 0 && nouvelleAnnee == 20 || nouvelleAnnee == 21) //on affiche au début de la 1° seconde à condition que les dizaines et unité de l'année courante soient décodées.
          {                                               
           //lcd.clear();                                 // A modifier si les jours et mois ont des tailles différentes   .                                        
           lcd.setCursor(0,1);
           lcd.print(nouvelleHeure);
           lcd.setCursor(2,1);
           lcd.print("hr");
     
     
           lcd.setCursor(7,1);
           lcd.print(nouvelleMin);           
           lcd.setCursor(9,1);
           lcd.print("min");
     
     
     
           lcd.setCursor(0,0);
           lcd.print(nouveauJourSemaineNom);
     
           lcd.setCursor(4,0);
           lcd.print(nouveauJour);  
     
           lcd.setCursor(7,0);
           lcd.print(nouveauMois); 
     
           lcd.setCursor(12,0);
           lcd.print("20");
           lcd.setCursor(14,0);
           lcd.print(nouvelleAnnee);           
           }
            if( nouvelleAnnee != 20)
            {
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("attente donnees");
            }
        lcd.setCursor(13,1);
        lcd.print( compteurSeconde); 
        lcd.setCursor(15,1);
        lcd.print("s");
     
        top3 = false;                          // on ne rentre qu'une fois par seconde dans cette fonction , sinon gros souci de timing car on vient la lire
                                               // de nbrs fois
      }
     
    }

    Le système fonctionne à merveille même s'il n'est pas écrit d'une manière rigoureuse...
    A ce propos, j'ai supprimé les appels comme le préconisait J May, mais un appel résiste "extraireMoisNom"
    Si je le supprime le programme part en live...


    //extraireMinute();
    //extraireHeure();
    //extraireJourSemaineNom();
    //extraireJour();
    extraireMoisNom();
    //extraireAnnee();

    j'ai aussi remplacé les string comme le préconisait J May.


    Sinon en guide d'optimisation des performance, vous pouvez éviter de créer des string à chaque fois que vous retournez nouveauJourSemaineNom et simplement retourner un pointeur vers la bonne chaîne du tableau. Pour cela vous pouvez déclarer le tableau en constantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const char* jourSemaineNom[] = {"-", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"};   //byte bitDonneesJourSemaineCoeff[] = {1, 2, 4,};
    et la fonction retournerait un const char* aussi
    Ça fonctionne avec const char* jourSemaineNom[],
    Mais idem que plus haut, si j'applique cela sur la fonction "extraireMoisNom" le prg part en live.
    À part cela le prg fait son job.
    Maintenant, je vais faire quelques modifs sur la carte réception, changer l'afficheur, faire un circuit imprimé (si j'en ai le temps) et trouver une jolie boîte 😁
    Bonne journée.

    Pat
    Images attachées Images attachées  

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    dans la version avec interruption il faut que les variables partagées en lecture/écriture entre l'ISR et la loop soient déclarées en volatile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    volatile uint16_t nbrInterrupt;
    Mais avec des traitements nécessaire à la ms, je pense que vous n'avez pas besoin de timer.

    Ensuite vous aurez toujours une dérive, le résonateur des petits Arduino n'est pas précis dans la durée donc pour faire des mesures sur du long terme la solution est de ne pas utiliser l'oscillateur interne du micro mais de prendre un vrai oscillateur ou s'assurer qu'on ne cumule pas une mesure trop longue

    je n'arrive pas à intégrer une fonction tempo de 50ms avec millis(); dans une quelconque routine pour avoir un niveau haut de 50 ms à chaque seconde.
    il faut le faire avec une machine à état comme dans le code que j'avais proposé avec le ou juste un if sur l'état de cette LED (ce qui revient à avoir plusieurs machines à états en parallèle si on veut gérer des événements disjoints)

  3. #3
    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écodage code horaire 162kh
    Bonjour, Jay M

    Je vais modifier "nbrInterrupt"
    Je n'aurais pas de pb de dérive étant donné que je réinitialise le compteur une fois par minute avec la synchro. donc pas de soucis . Le pb est que la seconde ne fait pas une seconde et qu'a la fin de la minute, les micros secondes sont devenues des ms.

    Mon souci avec millis(), est que cela ne fonctionne pas dans la fonction interruption et même dans une routine appelée par la fonction interruption.
    Il faut que j'utilise la loop et là je bug.

    j'ai pensé à ne pas utiliser le timer, car oui! cela ne va pas vite...

    Merci pour les conseils

    Cordialement

    Pat

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    OK vous avez de la chance alors que la corruption mémoire n'ait pas impacté le reste

    pour les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int extraireMinute()
    {
      if (compteurSeconde == 59) {
        int minute = 0;
        for (int mInd = 0; mInd < bitDonneesMinutesNbr; mInd ++) {
          minute += bitDonneesMinutesCoeff[mInd] * infoDonnees[bitDonneesMinutesStart + mInd];
        }
        return minute;
      }
      return -1; // si le compteur de seconde n'était pas à 59 il faut retourner quelque chose. On dit -1 pour 'pas encore prêt'
    }
    //bug avec const char* ou encadré par un "if(compteurSeconde ==59) { }"
    Quel bug voyez vous si vous mettez un le if ? c'est peut-être parce que vous ne retourniez rien non plus. il faudrait retourner quand même un char* qui pointe sur une chaîne vide.

  5. #5
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir Pat

    Une suggestion, pourquoi ne pas "encadrer" d'un if (compteurSeconde == 59) les appels aux fonctions extraire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	if( top3 )
    	{                                               //autorisation donnée par la fonction void ecriture_Bit_Importante()
    		if (compteurSeconde == 59)
    		{
    			int nouvelleMin = extraireMinute();
    			int nouvelleHeure = extraireHeure();
    			String nouveauJourSemaineNom = extraireJourSemaineNom();                                            //Serial.println(nouvelleMin);
    			int nouveauJour = extraireJour();
    			String nouveauMois = extraireMoisNom();
    			int nouvelleAnnee = extraireAnnee();
    		}
     
    ....
    et les supprimer dans les fonctions extraire...

    Pourrais-tu résumer le problème de extraireMoisNom()?

    J'ai regardé cette "roue" des valeurs style DCF77, en fait toutes les valeurs sont codées de façon identiques, donc une seule fonction d'extraction de valeurs est utile.
    Ces valeurs sont codées en BCD (binaire codé décimal), au lieu de faire la progression "habituelle", 1 2 4 8 16 32 64... BCD fait 1 2 3 4 8 10 20 30 40...

    Je te fais un exemple comment traiter la chose.

    Cordialement
    jpbbricole

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    inspirez vous du code posté en #23 pour faire une machine à état...

    Mon souci avec millis(), est que cela ne fonctionne pas dans la fonction interruption et même dans une routine appelée par la fonction interruption.
    la valeur de millis() est correcte à l'entrée de l'interruption mais oui elle n'évolue plus et si vous avez à passer plus d'une milliseconde dans une interruption c'est qu'il y a un souci de conception de toutes façons.

  7. #7
    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écodage code horaire 162kh
    Petite avancée sur mon projet, " mon horloge à moi" mais maintenant je suis bloqué.

    J'ai greffé sur le programme de Jp, une routine qui me permet d'avoir un top de 125ms tout les débuts de seconde et qui sont visualisés... par une led.

    Le programme se synchronise impeccablement avec l'interruption générée par le top syncro. du début de la première seconde ( émetteur Allouis sur 162 khz), et pour plus de précision, j'ai utilisé microseconds(); ce qui m'a permis d'ajuster parfaitement mes secondes (qui font 1 seconde).


    Une deuxième routine me permet de ne lire que "l'intérieur" des secondes intéressantes, c'est à dire de la seconde 20 à la seconde 58.
    Ceci n'était pas obligatoire, c'est pour mon... apprentissage.

    Une troisième me permet de mettre les bits en forme pour une lecture et une mémorisation.

    Eh là, je suis bloqué...

    Comme vous pouvez le voir sur la photo, il y a, encadré par des créneaux de 125ms, des données sur deux bits et sur un bit.
    En réalité seul le bit de droite est une donnée , celui de gauche est le top de la seconde en cours, ce qui veut dire qu' un bit = 1 pas de bit = 0.

    1) Pourriez vous me donner un coup de main pour ne faire apparaître ou ne lire que le bit de droite ( Etant donné que se sont les données reçues qui génèrent les interruptions qui elles même génèrent les bits de données , j'ai du mal à trouver la solution).

    2) Comment associer le numéro de la seconde avec la donnée qu'elle contient. Dans le programme , je lis les secondes de 20 à 58 , mais je ne sais pas trop
    écrire par ex: " les secondes 21....27 contiennent chacune un bit à 1 ou à 0, et je vais les mémoriser dans une mémoire nommée "

    Il me faudra bien sur plusieurs emplacements mémoires , heure, mois, année etc... que je lirai à la 59° seconde .

    N'ayant pas encore les connaissances nécessaires et la maîtrise des subtilités "arduiniennes" pour écrire un joli prg, j'écris le mien en avançant chronologiquement et ainsi, éviter de me perdre...

    Merci de m'éclairer.

    Pat42

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    #define interruptPin 2                                      // Pin de l'interrupt
     
    volatile boolean mesureEnCours = false;                     // Volatile pour les variables traitées en interrupt
    volatile boolean mesureNouvelle = false;
    volatile unsigned long tempoDepart = millis();
    volatile unsigned long topSyncMilliSec = millis();
    volatile unsigned long departMesure = millis();
    volatile unsigned long departbit_Importante = millis();
    const unsigned int topSyncMinimum = 800;
     
    #define led_bit 12
    #define ledSeconde 13
     
    int compteurSeconde = 0;
     
    int infoMinute = 0;
    int infoheure =  0;
    int infoJourDuMois = 0;
    int infoJourDeLaSemaine = 0;
    int infoAnnee = 0;
     
    void setup()
    {
      Serial.begin (115200);
      pinMode(interruptPin, INPUT_PULLUP);
      pinMode(ledSeconde, OUTPUT);
      digitalWrite(ledSeconde, LOW);
      pinMode(led_bit, OUTPUT);
      digitalWrite(led_bit, LOW);
      attachInterrupt(digitalPinToInterrupt(interruptPin), impulsion_Interruption, CHANGE); //interruption pour rechercher le top syncrho du debut de la pemière seconde
    }
     
    void loop()
    {
     
      if (mesureNouvelle == true)
      {
        mesureNouvelle = false;
        topSyncAction();
      }
     
      calibrage_Seconde();
      lecture_Seconde_Importante();
      lecture_Bit_Importante();
    }
     
     
    void impulsion_Interruption()
    {
      if (digitalRead(interruptPin) == LOW && !mesureEnCours)
      {
        tempoDepart = millis();
        mesureEnCours = true;
      }
     
      if (digitalRead(interruptPin) == HIGH && mesureEnCours)
      {
     
        topSyncMilliSec = millis() - tempoDepart;
        mesureEnCours = false;
        mesureNouvelle = true;
      }
    }
     
     
    void topSyncAction()
    {
     
      if (topSyncMilliSec >= topSyncMinimum)
      {
        departMesure = micros();
        digitalWrite (ledSeconde, HIGH);
        compteurSeconde = 0;
     
      }
    }
     
     
    void calibrage_Seconde()
    {
     
        if (micros() - departMesure >= 140000 )
      {
        digitalWrite(ledSeconde, LOW);
     
        if (micros() - departMesure >= 999550)
        {
          digitalWrite(ledSeconde, HIGH);
          departMesure = micros();
          departbit_Importante = millis();
          compteurSeconde++;
        }
     
      }
     
    }
     
    void lecture_Seconde_Importante()
    {
        //Serial.println (compteur);
     
        if ( digitalRead (ledSeconde) == HIGH &&  digitalRead (interruptPin) == HIGH &&(compteurSeconde >= 20 && compteurSeconde <= 58))
       {
        digitalWrite (led_bit , HIGH);
        departbit_Importante = millis();
        //Serial.println (compteurSeconde);
       }
     
     
    }
     
    void lecture_Bit_Importante()
    {
       if( millis()- departbit_Importante >= 25) 
       { 
     
        digitalWrite (led_bit, LOW);
     
       }
     
    }
    Images attachées Images attachées  

  8. #8
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Pat
    Citation Envoyé par Pat42 Voir le message
    ...une routine qui me permet d'avoir un top de 125ms tout les débuts de seconde et qui sont visualisés... par une led....
    Comme vous pouvez le voir sur la photo, il y a, encadré par des créneaux de 125ms, des données sur deux bits et sur un bit.
    ...
    En réalité seul le bit de droite est une donnée , celui de gauche est le top de la seconde en cours, ce qui veut dire qu' un bit = 1 pas de bit = 0.
    Je n'ai pas cherché d'où provient cette période 125 ms, mais si tu la scinde en 2, une de 100 et une de 25 (en bidouillant pour compenser le temps des opérations), à la fin de celle de 100, tu peux tester l'état du bit.

    Citation Envoyé par Pat42 Voir le message
    2) Comment associer le numéro de la seconde avec la donnée qu'elle contient. Dans le programme , je lis les secondes de 20 à 58 , mais je ne sais pas trop
    En créant un tableau (array) de 60 "cases", qui contiennent l'état du bit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int infoMinute[60];                       // Déclaration du tableau Minute avec 60 secondes
    //Pour mémoriser l'état du bit
    infoMinute[numeroSeconde] = etatDuBit;
    Cordialement
    jpbbricole

  9. #9
    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écodage code horaire 162kh
    Bonsoir Jp,

    Je crée mon temps de 125 ms dans la routine "calibrage_Seconde". A chaque début de seconde, il faut lire les données et la donnée à lire se termine à 125ms du début de chaque seconde. J'ai donc calibré mon créneau seconde à cette valeur, pour encadrer le top seconde et le bit des données, ce qui me permet en passant de faire clignoter ma led .

    Concernant ta réponse à ma première question, du coup il serait peut être plus facile de lire dans ce créneau, et le top seconde qui est présent à chaque seconde et le bit des données. Ce qui ferait 2 bits à 1 = 1 et 1 bit ( le top seconde ) à 1 = 0. On éviterait ainsi de bidouiller

    j'ai essayé en vain de lire ces bits, mais cela ne marche pas ou ce qui est le plus probable , je ne sais pas faire...

    je vais me pencher sur le tableau array que je ne connais pas...

    Merci et bonne soirée

    Pat42

  10. #10
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonjour Pat

    Citation Envoyé par Pat42 Voir le message
    je vais me pencher sur le tableau array que je ne connais pas...
    En résumé ça donne 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
    byte bitDonnees[60];                 // Déclaration du tableau
     
    void setup()
    {
    	 for (byte s = 0; s <= 59; s++)   // Initialisation des bits de données
    	 {                                // A faire avant chaque cycle de minute
    		 bitDonnees[s] = 0;          
    	 }
    }
     
    void loop()
    {
     
    }
    Citation Envoyé par Pat42 Voir le message
    ...du coup il serait peut être plus facile de lire dans ce créneau, et le top seconde qui est présent à chaque seconde et le bit des données....
    Si j'ai tout compris, le bit de données déclenche également l'interruption, mais après top debut 1° seconde ?
    Si oui, à cet instant, ledSeconde == HIGH, donc si interruption && ledSeconde == HIGH, bitDonnees[compteurSeconde] = 1
    S'il n'y a pas ce bit de donnée, bitDonnees[compteurSeconde] reste inchangé, donc à 0.
    Ne pas oublier que le tableau bitDonnees[s] doît être remis à 0 avant chaque cycle de minute.
    Je te laisse arranger tout ceci en "Arduino"

    PS: Ne serais-tu pas entrain de décoder un protocole DCF77?

    Cordialement
    jpbbricole

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    Une suggestion, pourquoi ne pas "encadrer" d'un if (compteurSeconde == 59) les appels aux fonctions extraire...et les supprimer dans les fonctions extraire...
    Ce serait une très bonne simplification !!

    (faut juste le savoir et ne pas appeler les fonctions sinon. à documenter)

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