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 :

Contrôle récepteur NRF24L01+ et Attiny85 avec 3 ou 4 pins


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    recherche et développement alarmes
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : recherche et développement alarmes

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut Contrôle récepteur NRF24L01+ et Attiny85 avec 3 ou 4 pins
    Bonjour,
    je travaille sur un projet d’alarme d’évacuation à très basse consommation et d’un prix de revient peu élevé, dans lequel je fais intervenir des transmissions sans fil.
    Pour les transmissions radio, je souhaite utiliser le couple " microcontrôleur Attiny85-20PU et le module transducteur NRF24L01+ ".
    Description matériel:
    l’installation complète comprend plusieurs coffrets disposés chacun au centre d'une zone à protéger.
    Chaque coffret est distant l’un de l’autre de 20 à 30 mètres suivant les obstacles pouvant influencer la qualité des transmissions.
    Chaque coffret de protection de zone renferme :
    - Un déclencheur d’évacuation manuel: intégré ou déporté.
    - Une alarme d’évacuation type IV (NFS32-001).
    - Un module de transmission par radio à 2,4 GHz toujours en veille, ultra basse consommation.

    Fonctionnement:
    S’il faut, pour une raison valable, faire évacuer les personnes d’une zone devenue dangereuse:
    repérer et actionner le déclencheur manuel le plus proche.
    Lorsque celui-ci est actionné, il alimente en tension une broche déterminée de l’attiny85, créant ainsi un changement d’état de celle-ci.
    Au réveil du watchdog de l’attiny85 (programmé toutes les 2 secondes), celui-ci détecte le changement d’état de la broche et lance la suite du programme :
    a) d’une part envoie un signal "plus" pendant 10 secondes sur la boucle de l’alarme d’évacuation provoquant ainsi sa mise en route;
    b) d’autre part, le programme positionne le module en mode émetteur pour qu'il envoie un signal radio pendant 20 secondes aux récepteurs des coffrets environnants, repasse le module et le µC en mode réception puis en mode veille.
    Le récepteur de la zone mitoyenne ayant reçu le signal est réveillé à la fin du cycle du watchdog puis il exécute à son tour les mêmes opérations que celles effectuées par le coffret précédent et ainsi de suite jusqu’à ce que tous les coffrets installés soient en action.
    Besoin d'aide:
    Maintenant que je vous ai décris mon projet, venons-en à ma demande d’aide.
    Elle porte principalement sur le programme de transmissions.
    Je souhaiterai déjà pouvoir libérer une broche du µC pour exécuter les 2 opérations qui me sont nécessaires:
    - détecter le changement d'état de la broche libre de l'attiny;
    - envoyer, à partir de la broche libre et pendant 10 secondes du + 3.7v vers l'alarme.
    Important! :
    Dans ce projet, l'émetteur n'a pas besoin de recevoir la confirmation de la bonne réception du message par le récepteur.
    Le récepteur (Attiny85) n'a pas non plus d'autres accessoires à gérer.

    ============oooooOOOOOOOOOOOOOooooo============

    J'ai réalisé un émetteur avec un module NRF24L01+ et un Attiny 85 chargé avec le code décrit ci-dessous.
    Ensuite j'ai réalisé un récepteur toujours avec un module NRF24L01+ et un Attiny 85 (8 pins) également chargé avec le code également décrit ci-dessous.
    L'ensemble fonctionne parfaitement bien.
    J'ai connecté une led de contrôle en parallèle avec la broche recevant le CE du module1 NRF24L01+.
    Lorsque j'alimente en 3.7v l'ensenbre récepteur, la led de contrôle s'allume en continu.
    Lorsque j'alimente en 3.7v l'ensemble émetteur, la led de contrôle également en parallèle à CE du module2, clignote comme demandé dans le programme (addition des delay).
    Quelques secondes après la mise sous tension, la led du récepteur clignote au rhytme demandé dans le programme du récepteur (la transmission du signal a bien fonctionné).
    Pour mon application, le processus du récepteur est différent, une broche doit être libre pour exécuter les 2 fonctions décrites ci-dessus dans le paragraphe "Besoin d'aide".
    J'ai bien sûr ratissé large sur Google et j'ai trouvé ces 3 sites qui m'ont parus intéressants mais il me semble qu'il ne s'appliquent qu'aux émetteurs, hors dans mon projet, je n'ai pas à toucher à mon émetteur hormis la mise en mode "sleep", mais c'est bien sur le récepteur qu'il me faudrait libérer une pin.
    Les 3 sites:
    http://nerdralph.blogspot.ca/2014/01/nrf24l01-control-with-3-attiny85-pins.html
    http://hackaday.com/2015/06/05/embed...uses-few-pins/
    http://nerdralph.blogspot.ca/2015/05/nrf24l01-control-with-2-mcu-pins-using.html

    Les codes:
    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
    /******** EMETTEUR
    *
    *
    *                        ** Hardware configuration **
                    ATtiny85 Pin map with CE_PIN 3 and CSN_PIN 4
                                     +-\/-+
                       NC      PB5  1|o   |8  Vcc --- nRF24L01  VCC, pin2 --- LED --- 5V
        nRF24L01  CE, pin3 --- PB3  2|    |7  PB2 --- nRF24L01  SCK, pin5
        nRF24L01 CSN, pin4 --- PB4  3|    |6  PB1 --- nRF24L01 MOSI, pin7
        nRF24L01 GND, pin1 --- GND  4|    |5  PB0 --- nRF24L01 MISO, pin6
                                     +----+
    */
      #include "RF24.h"     
      #define CE_PIN 3
      #define CSN_PIN 4
    //**************************** Configuration **********************************
      RF24 radio (CE_PIN , CSN_PIN );  
      const byte rxAddr[6] = "01924";
    //*****************************************************************************
     
    void setup(void) 
    {
      radio.begin();                       
      radio.setChannel(1);                 
      radio.setPALevel(RF24_PA_HIGH);        
      radio.setDataRate(RF24_250KBPS);     
      radio.setRetries(1,15);          
      radio.setCRCLength(RF24_CRC_8);  
      radio.openWritingPipe(rxAddr); 
      radio.stopListening();               
    }
     
    void loop(void)
    {
      delay(300);            
      radio.write("1", 1);  
    }
    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
    /* *********** RECEPTEUR
                          ** Hardware configuration **
                   ATtiny85 Pin map with CE_PIN 3 and CSN_PIN 4
                                     +-\/-+
                       NC      PB5  1|o   |8  Vcc --- nRF24L01  VCC, pin2 --- LED --- 5V
        nRF24L01  CE, pin3 --- PB3  2|    |7  PB2 --- nRF24L01  SCK, pin5
        nRF24L01 CSN, pin4 --- PB4  3|    |6  PB1 --- nRF24L01 MOSI, pin7
        nRF24L01 GND, pin1 --- GND  4|    |5  PB0 --- nRF24L01 MISO, pin6
                                     +----+
    */
      #include "RF24.h" 
      #define CE_PIN 3
      #define CSN_PIN 4
      int LED = 3;      // pin pour led utilisée en commun avec CE-PIN    
      byte alarm;
      bool check=0;  
    /**************************** Configuration *******************************/
       RF24 radio(CE_PIN, CSN_PIN); 
      const byte rxAddr[6] = "01924";
    /**************************************************************************/
     
    void setup(void) 
    {
      radio.begin();                        
      radio.setChannel(1);                 
      radio.setPALevel(RF24_PA_MIN);      
      radio.setDataRate(RF24_250KBPS);    
      radio.setRetries(1,15);               
      radio.setCRCLength(RF24_CRC_8);      
      radio.openReadingPipe(1,rxAddr);  
      radio.startListening();           
      delay(300);
    }
     
    void beep()
        {
          digitalWrite(LED, HIGH);
          delay(1000);
          digitalWrite(LED, LOW);
          delay(500);  
        }
     
    void loop(void)
    {
      if(radio.available() || check) 
      {
        radio.read(&alarm, 1); 
        beep();
        delay(200);
        check = 1;
      } 
      If(!radio.available() || check)
      {
        digitalWrite(LED, LOW);
      } 
    }
    Si quelqu'un peut me donner son avis ou me proposer un début de solution, je prends.
    merci par avance,
    michel

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    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 252
    Par défaut
    Salut Michel,
    Je n'ai pas beaucoup de temps là et j'ai du lire en diagonale mais... !
    Je vois peux être une solution hard pour te sortir de là mais il faudrait que tu vérifies si elle peut être intégré dans ton organigramme des fonctions/tâches du micro, qui semble très aboutie.

    Tant que tu n'utilises pas le module radio, les broches (en sortie) SCK, MOSI et CSN peuvent servir a tout ce que tu veux. Même si elles sont physiquement reliées au module radio celui ci ne réagira pas, si SCK/MOSI/CSN bougent, tant que CE reste à 0V.
    Maintenant reste a voir si dans l'ordre prévu des choses, ça passe ?

    Est ce que tu vois ce que je veux dire ?

    Exemple :
    SCK est en entrée celui-ci détecte le changement d’état de la broche et lance la suite du programme :
    a) d’une part MOSI envoie un signal "plus" pendant 10 secondes sur la boucle de l’alarme d’évacuation provoquant ainsi sa mise en route;
    b) d’autre part après les 10 secondes SCK et MOSI se reconfigure pour le SPI et le programme positionne le module en mode émetteur pour qu'il envoie un signal radio pendant 20 secondes aux récepteurs des coffrets environnants, repasse le module et le µC en mode réception puis en mode veille.

    Si b) ne peut pas attendre 10 secondes alors des solutions de tempo hard existent ce qui ferait :
    SCK est en entrée celui-ci détecte le changement d’état de la broche et lance la suite du programme :
    a) d’une part MOSI envoie une impulsion sur une tempo qui produira un signal "plus" pendant 10 secondes sur la boucle de l’alarme d’évacuation provoquant ainsi sa mise en route;
    b) d’autre part SCK et MOSI se reconfigure pour le SPI et le programme positionne le module en mode émetteur pour qu'il envoie un signal radio pendant 20 secondes aux récepteurs des coffrets environnants, repasse le module et le µC en mode réception puis en mode veille.

    C'est une réflexion a chaud et rapide ! Peut être que quelques choses m'a échappée aussi !

  3. #3
    Membre averti
    Homme Profil pro
    recherche et développement alarmes
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : recherche et développement alarmes

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut Contrôle récepteur NRF24L01+ et Attiny85 avec 3 ou 4 pins
    Bonsoir Vincent,
    moi aussi je te répond vite il est tard,
    j'avais vu cette particularité mais je ne l'ai pas enregistrée parce que je cherchais plutôt la possibilité de libérer une broche de l'attiny85, je vais essayer et peut-être la retrouver par l'historique de Firefox.
    Pour le déroulement des opérations çà me semble être bon je n'ai pas vu d'erreur.
    Par ailleurs, ce que je ne comprend pas, c'est pourquoi la led du récepteur branchée avec "CE" à la pin 3 (broche 2 de l'attiny85) reste toujours allumée.
    Je croyais que "CE" devait être la plus part du temps à "0" et passer à "1" pendant quelques µS pour aider à faire basculer le module radio en mode émission.
    C'est pour çà je je n'ai pas activé le retour d'accusé de réception vers l'émetteur.
    Je verrai tous çà demain, je vais faire dodo.
    Bonne nuit et à demain.
    michel

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    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 252
    Par défaut
    Citation Envoyé par michel5002 Voir le message
    Par ailleurs, ce que je ne comprend pas, c'est pourquoi la led du récepteur branchée avec "CE" à la pin 3 (broche 2 de l'attiny85) reste toujours allumée.
    Je croyais que "CE" devait être la plus part du temps à "0" et passer à "1" pendant quelques µS pour aider à faire basculer le module radio en mode émission.
    C'est pour çà je je n'ai pas activé le retour d'accusé de réception vers l'émetteur.
    Salut Michel,
    C'est tout a fait exact, la doc dit que "CE" devrait être a 0 lorsqu'on ne fait rien et fait un passage rapide par 1 le temps d'emettre. La doc du module radio dit que c'est le mode normal et qu'il permet de faire de l'économie d'énergie (i.e. en activant CE juste le temps qu'il faut)

    Maintenant de là à dire que la bibliothèque RF24 utilise ce mode de fonctionnement ?
    Il se peut que non car la doc du module radio dit aussi qu'il est possible de maintenir tout le temps CE a 1 et que ça marche aussi (dans l'autre poste, j'avais mis un extrait de la doc où on le voyait)

    J'ai trouvé sur github les sources de la bibliothèque RF24 https://github.com/TMRh20/RF24/blob/master/RF24.cpp il faudrait l'éplucher pour voir comment est géré "CE".

  5. #5
    Membre averti
    Homme Profil pro
    recherche et développement alarmes
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : recherche et développement alarmes

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut Contrôle récepteur NRF24L01+ et Attiny85 avec 3 ou 4 pins
    Bonjour à tous,
    j'ai développé un programme pour effectuer les actions dont j'ai besoin pour mettre en œuvre mon projet de transmission radio pour alarme,
    voir mon premier post, paragraphe " Fonctionnement" pour les détails.
    Comme je m'y attendais, il ne fonctionne pas.
    Avant d'incriminer les librairies et notamment la dernière qui définie les caractéristiques des broches,
    j'aimerais que vous regardiez si je me suis trompé dans le raisonnement, ou dans la rédaction des instructions,
    ou fait une erreur idiote quelconque etc...

    Voici le code:

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    /***************** TRANSMETTEUR POUR ALARME D'EVACUATION ********************
      L'ATtiny85 et le module radio sont normalement en mode sommeil.
      Au réveil du WDT, celui-ci détecte s'il y a changement d'état 
      du pin défini pour déclencher l'alarme.  
                            ** Hardware configuration **
                    pour moi, voir "Watchdog Timer et ATtiny85.docx"
                     ATtiny85 Pin map with CE_PIN 3 and CSN_PIN 4
                                      +-\/-+
                        NC ---| PB5  1|o   |8  Vcc --- |nRF24L01  VCC, pin2
        nRF24L01  CE, pin3 ---| PB3  2|    |7  PB2 --- |nRF24L01  SCK, pin5
        nRF24L01 CSN, pin4 ---| PB4  3|    |6  PB1 --- |nRF24L01 MOSI, pin7
        nRF24L01 GND, pin1 ---| GND  4|    |5  PB0 --- |nRF24L01 MISO, pin6
                                      +----+
    */
         #include "RF24.h"        
         #include "nRF24L01.h"
         #include <avr/sleep.h>
         #include <avr/power.h>   
         #include <avr/wdt.h>     
         byte compteur=40;     // émet 40 fois un signal d'alarme d'une durée de 0.5sec. soit un total d'env.:  20secondes.
     
         #ifndef cbi
         #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
         #endif
         #ifndef sbi
         #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
         #endif 
     
         #define CE_PIN 3
         #define CSN_PIN 4        
         int declencheur = 2;  // Déclare le déclencheur sur le pin 2 branché en commun avec SCK.
         int pinalarme = 0;    // pinalarme branché en commun avec MOSI (broche 5), pin 0 de l'attiny85.
         byte alarme;   
         volatile boolean f_wdt = 1;
     
    //*************  Configuration radio  *****************************/
       RF24 radio (CE_PIN, CSN_PIN);    //  RF24 radio(3,4);
       const byte rxAddr[6] = "01924";
    //*****************************************************************/
     
    void setup(void) 
    {
         pinMode(pinalarme,OUTPUT);
         pinMode(declencheur, INPUT_PULLUP);    // active pullup
         digitalWrite(declencheur,  LOW);  
         setup_watchdog(8);                               // en sommeil environ 4 secondes 
    }
     
    void emission()
    {
         delay(250);
         radio.begin();                       
         radio.setChannel(1);                 
         radio.setPALevel(RF24_PA_HIGH);        
         radio.setDataRate(RF24_250KBPS);     
         radio.setRetries(1,15);          
         radio.setCRCLength(RF24_CRC_8);  
         radio.openWritingPipe(rxAddr); 
         radio.stopListening();               
         delay(250);
    }
     
    void reception()
    {
         radio.begin();                        
         radio.setChannel(1);                 
         radio.setPALevel(RF24_PA_MIN);      
         radio.setDataRate(RF24_250KBPS);    
         radio.setRetries(15,15);               
         radio.setCRCLength(RF24_CRC_8);      
         radio.openReadingPipe(1,rxAddr);  
         radio.startListening();           
    }
     
    void alarme10s()    
    {   
         pinMode(pinalarme,OUTPUT);
         digitalWrite(pinalarme,HIGH);      // Envoie une tension interne de +3.7v pendant 10 sec. sur le pin 2
         delay(10000);                             // pour permettre le changement d'état de la boucle de l'alarme pour son déclenchement.
         digitalWrite(pinalarme,LOW);
         pinMode(pinalarme,INPUT);
    }
     
    void loop()
    {
    //******** Lecture des paquets qui arrivent au récepteur ********
      {
     if (f_wdt==1)    // attend la fin de la tempo du watchdog  
       { 
        f_wdt=0;        // reset flag
       }
        reception();    // positionne le prog. en mode réception.
        delay(100);     // Délai  pour permettre de bien se positionner.
       {
        radio.read(&alarme, 6);          
        delay(100);     // On attend pour lire correctement.
       }
      }  
    //******** Lecture de l'état du pin 2 pour définir l'action suivante à mener ********
      {
    //  val = digitalRead(declencheur); //  à utiliser si nécessaire, je ne sais pas.
      if (digitalRead(declencheur == HIGH))
       { 
        digitalWrite(declencheur, 1);
       } 
      if (digitalRead(declencheur == LOW))
       {
        digitalWrite(declencheur, 0); 
       }  
      }
     
    //****************** Traitement des informations *****************/
    //******** Si l'alarme est déclenchée:
     
      if (radio.available() || declencheur==1)                    
         delay(100);
      if (radio.available() || declencheur==1)  //  anti-rebond. 
      {
        {
             alarme10s();    // envoie un signe + pendant 10 sec. sur la pin 2
             delay(100);     // fait une pause avant de passer à l'étape suivante.
          {
     
    //********** Ecriture d'un déclenchement d'alarme vers les émetteur environnants ******
             emission();  // positionne le prog. en mode émission pour envoyer un signal pendant 20 sec.
             delay(100);  // fait une pause avant de passer à l'étape suivante.
          while (compteur>0)
            {
             delay(250);  // fait une pause
             radio.write("alarme", 6);   
             delay(250);  // fait une pause
             compteur=compteur-1;
            }
           compteur=40;
          }
    //********** Le programme se positionne en Mode réception et s'endort. 
             reception();    // le prog. se positionne en mode réception.
             delay(100);     // fait une pause
             system_sleep(); // l'ensemble s'endort
        }                            
      }
     
      //********* Si l'alarme n'a pas été déclenchée: Mode réception et s'endort.
      if ( !radio.available() && declencheur==0)
         delay(100);
      if ( !radio.available() && declencheur==0)  //  anti-rebond.
          {
            reception();    // le prog. se positionne en mode réception.
            delay(100);     // fait une pause
            system_sleep();
          }
    }
     
    /* Système de jeu dans l'état de sommeil
    Système se réveille quand le watchdog est dépassée*/
     
    void system_sleep() 
    {
          cbi(ADCSRA,ADEN);      // switch Analog to Digitalconverter OFF
          power_all_disable ();  // power off ADC, Timer 0 and 1, serial interfacesleep_enable();
          radio.powerDown();     //arrêt de l’alimentation du module nrf24l01+ 
          set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
          sleep_enable(); 
          sleep_mode();          // Système dort ici
          sleep_disable();       // Système continue l'exécution ici quand chien de garde a terminé
          radio.powerUp();       // réalimente le module nrf24l01+
          power_all_enable();    // power everything back on
          sbi(ADCSRA,ADEN);      // commutateur analogique à Digitalconverter ON
    }
     
    /* 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
       6=1 sec,7=2 sec, 8=4 sec, 9= 8sec*/
     
    void setup_watchdog(int ii) 
    {
         byte bb;
         int ww;
         if (ii > 9 ) ii=9;
         bb=ii & 7;
         if (ii > 7) bb|= (1<<5);
         bb|= (1<<WDCE);
         ww=bb;
      #if defined( __AVR_ATtinyX5__ )
        MCUSR &= ~(1<<WDRF);
    // commencer séquence cadencée
         WDTCR |= (1<<WDCE) | (1<<WDE);
    // définir une nouvelle valeur de temporisation du watchdog
         WDTCR = bb;
         WDTCR |= _BV(WDIE);
      #endif
    }
     
    // la détection de l'émetteur est exécutée lorsque la surveillance du watchdog a expiré.
        ISR(WDT_vect) 
    {
        f_wdt=1;  // reset du watchdog
    }
    En vous remerciant par avance pour le temps que vous allez me consacrer,
    j'en profite au passage pour remercier particulièrement Julien et Vincent qui m'ont apporté des infos précieuses
    et m'ont permis d'avancer jusqu'aujourd'hui.
    Je vous dis à bientôt
    michel

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 252
    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 252
    Par défaut
    Salut Michel,
    Je vois des choses bizarres dans ce programme.

    Exempe :
    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
    17
    18
     
      pinMode(declencheur, INPUT_PULLUP);    // active pullup et pin en entrée
      digitalWrite(declencheur,  LOW); // Bizarre d'écrire un LOW sur une entrée ! Sur une sortie ok mais pas une entrée ! 
     
    [...]
     
      if (digitalRead(declencheur) == HIGH) // j'ai modifié tes parenthèses 
       { 
        pinMode(declencheur, OUTPUT);    // il faut rajouter cette ligne pour mettre déclencheur en sortie !
        digitalWrite(declencheur, 1);   // sinon avec juste ça, ça ne marchera pas car declencheur est toujours en entrée 
       } 
      if (digitalRead(declencheur) == LOW) // idem parenthèses corrigées
       {
        pinMode(declencheur, OUTPUT);    // il faut rajouter cette ligne pour mettre déclencheur en sortie !
        digitalWrite(declencheur, 0); 
       }
     
    [...] a la fin du programme principal et au prochain tour de boucle il faudra remettre déclencheur en entrée via pinMode(declencheur, INPUT_PULLUP);    // active pullup et pin en entrée

    Il y a aussi trop d'accolades dans le haut du programme loop, c'est normal ?

    Je ne comprends pas l'intérêt du flag f_wdt ? Lorsqu'il est a mis a 1 par le réveil du WDT tu le mets simplement à 0 et le reste du programme s'execute. En fait le programme s'exécute peut importe l'état du flag f_wdt.
    Je pense que tu voulais que le programme s'exécute uniquement si f_wdt == 1 mais là ce n'est pas ce qui est fait. Ou bien faut retirer des accolades.

Discussions similaires

  1. Contrôle de taille et mimetype avec httplib
    Par csseur22 dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 17/06/2009, 18h19
  2. Réponses: 1
    Dernier message: 24/03/2009, 11h37
  3. Contrôle de la souris à distance avec SendText
    Par Chyokyka dans le forum Débuter
    Réponses: 4
    Dernier message: 21/12/2008, 11h26
  4. Contrôle d'un formulaire php avec JS
    Par L'aigle de Carthage dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/04/2008, 16h54
  5. Contrôle d'un document Word avec VBA Excel
    Par wsl1912 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/01/2008, 10h06

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