Applications Radiofréquence avec des PICBASIC 

Vous trouverez ci-dessous de très nombreuses notes d'applications mais aussi des exemples de programmes et des descriptions de réalisations conçues sur la base des modules PICBASIC, lesquelles vous permettront d'accélérer et de faciliter le développement de vos propres projets. Certains des programmes sources présentés dans ces notes d'applications sont téléchargeables via ce lien.
 
        
Décodage d'ordres radio d'un "UM3750" - 14/06/2005   -  Mr TONELLO MARC


  
Une très bonne note d'application permettant le décodage de 4 canaux tout-ou-rien en provenance d'un signal radio issu d'un MM53200à partir d'un module PICBASIC ! Le fichier est téléchargeable sur la page de présentation des notes d'applications (le fichier est sauvegardé sous le nom: UM3750).
  
    
         
        

Lecture à distance de 8 entrées logiques via un PC - 14/03/2005   -  Lextronic

 

    
 
Cette note d'application vous permettra de transmettre l'état de 8 entrées tout-ou-rien (E1 à E8) à distance à un compatible PC. Le système se compose d'un modem radio 433.92 MHz "SPM2-433-28" (connecté au PC), associé à une seconde platine intégrant un "PICBASIC-3B" et un autre module hybride modem radio "SPM2-433-28".
     
    

  
Le schéma théorique ci-dessus montre comment relier un module "PICBASIC-3B" à l'entrée TXD du modem radio "SPM2-433-28" (via le port "I/O 16") afin de pouvoir envoyer des données à sistance vers l'ordinateur.
  
Pour communiquer avec le PC, il vous faudra également lui connecter un second module modem "SPM2-433-28" sur son port série (au travers d'un composant MAX232 - voir schéma théorique dans la notice du modem sur le site www.radiometrix.com). Vous disposerez alors d'une liaison qui s'apparentera à un câble série virtuel "sans fil" entre l'ordinateur et la platine du "PICBASIC-3".
  
Les ports "I/O8 à I/O15" du PICBASIC-3B serviront à venir lire l'état de contacts "secs". Les 2 modules "SPM2-433-28" (celui utilisé sur l'ordinateur recevant les ordres et celui utilisé en association avec le "PICBASIC-3B") dialogueront et se "reconnaîtront" automatiquement sans que vous ayez à faire quoi que se soit (ces derniers sont livrés pré-initialisés pour fonctionner en 9600 bds, sur la même adresse de "dialogue" (voir notice du "SPM2-433-28" pour d'avantages d'informations).
  
Le programme très simple ci-dessous devra être chargé dans le PICBASIC à l'aide de la prise de programmation de ce dernier. A la mise sous tension du PICBASIC, ce dernier entammera une temporisation de 3 sec. environ (afin d'atendre la fin de l'initialisation interne du module "SPM2-433-28"). Lorsque le SPM2-433-28" est prêt, la Led connectée à RX SELECT se met à scintiller, indiquant que ce dernier est en attente de réception. A partir de la ligne 10, le PICBASIC va mémoriser l'état des 8 entrées dans la variable I (avant de la sauvegarder dans la variable J). A partir de la ligne 15, le PICBASIC va comparer en permanence l'état des 8 entrées avec l'état de la valeur mémorisée. Si un changement intervient, ce dernier va alors envoyer le nouvel état des 8 entrées au PC.    
  
Afin de pouvoir afficher ses états sur l'écran du PC, il vous faudra préalablement disposer d'un émulateur de terminal série (vous pouvez par exemple utiliser "Hyper Terminal™", livré avec Windows™. Exécutez donc ce dernier en sélectionnant le numéro du port sur lequel vous avez connecté la platine "modem". Configurez également "Hyper Terminal™" avec un débit de communication de 9600 bds, 8 bits, 1 stop , aucune parité et aucun contrôle de flux (ce dernier paramètre est important).
    
Plutôt que de renvoyer un octet correspondant au "reflet" des 8 entrées (ce qui ne sera pas très explicite à l'écran), le programme va envoyer l'état successif des 8 entrées ("0" si la touche relative à l'entrée est sollicitée et "1" si la touche relative à l'entrée n'est pas sollicitée). On se retournera alors avec 8 chiffres à l'écran (correspondant ainsi à la représentation binaire de ces entrées). Un caractère "13" est envoyé en fin de chaîne afin que le curseur revienne en début de ligne afin que le PC ré-écrive les chiffres les uns par dessus les autres. Pour récupérer l'état de chaque bit de l'octet correspondant aux 8 entrées, on mémorise dans la variable k=1.0   l'état de l'octet de poids faible (auxquels on ajoute la valeur &h30 afin d'envoyer la représentation du chiffre "0" (&h30), si l'octet = 0 ou "1" (&h31) si l'octet = "1". Il suffit ensuite d'effectuer une successivement une rotation des bits de l'octet des entrées   i=i>>1  afin de connaître l'état de toutes les entrées. A noter que ce programme n'est prévu que pour gérer des transitions et non pas des états au niveau des entrées. Dès lors, si 2 entrées sont sollicitées quasiment en même temps, il se peut qu'une seule n'apparaisse comme activée au niveau de l'écran du PC - la transmission ayant lieu uniquement sur un changement d'état de la première entrée détectée par le PICBASIC. Au terme de la transmission radio, du fait que les 2 entrées soient alors à un niveau "stable", le PICBASIC ne réactualisera pas l'état de ses entrées au PC. A noter que suivant les conditions de propagation (positionnement des antennes, présence de parasite, ets...), il se peut que le délai de synchronisation entre les 2 modems puisse varier quelque peu lors de l'établissement de la communication entre les 2 dispositifs (après coup, tant que les 2 systèmes sont en phase de dialogue (visusalisé par la Led RX SELECT en fixe), les commandes issue de l'un vers l'autre sont quasi-instantanées). La portée maximale séparant l'ordinateur de la platine du PICBASIC pourra atteindre environ 200 m en terrain dégagé, sans obstacle, ni source parasite. 
  
        DIM I AS BYTE, J AS BYTE, K AS BYTE
        DELAY 3000
10     I=BYTEIN(1)
         J=I    
15     I=BYTEIN(1)
        IF I=J THEN GOTO 15    
20     I=BYTEIN(1)
         FOR J=1 TO 8 
           K=I.0
           K=K+&H30
           SEROUT 16,103,0,1,[K]
           I=I>>1
        NEXT
        SEROUT 16,103,0,1,[13]
        GOTO 10  
   
   
Evolutions possibles... 
Ces exemples de programme vous permettent de vous donner quelques bases et notions sur la façon dont vous pouvez concevoir une interface d'entrées radio via un ordinateur. Les ordres reçues par votre PC pourront également être interprétés au sein de n'importe quelle application capable de gérer une liaison série: Delphi™, langage "C", langage "pascal", Visual Basic™, Windev™, Profilab Expert™... Vous pourrez également intégrer un code de "reconnaissance" (à envoyer en plus de l'état des entrées) afin que vous soyez sûr que c'est bien "votre" PICBASIC qui vous envoie des informations et non pas un autre utilisateur de "SPM2-433-28". On veillera également à ne pas utiliser directement des grands fils de liaison pour raccorder les capteurs tout-ou-rien sur le PICBASIC sans utiliser de système de filtrage et protection adéquat (résistances + condensateurs + diode zener ou opto-coupleurs). Vous pourrez bien évidemment augmenter le nombre d'entrées pouvant être "lues".  
      
         
        

Pilotage à distance de 8 sorties logiques via un PC - 14/03/2005   -  Lextronic

 



    
 
Cette note d'application vous permettra de piloter 8 sorties relais (S1 à S8) à distance à partir d'ordres séries transmis par un PC. Le système se compose d'un modem radio 433.92 MHz "SPM2-433-28" (connecté au PC), associé à une seconde platine intégrant un "PICBASIC-3B" et un autre module hybride modem radio "SPM2-433-28".
    
  

  
Le schéma théorique ci-dessus montre comment relier un module "PICBASIC-3B" à l'entrée RXD du modem radio "SPM2-433-28" (via le port "I/O 17") afin de pouvoir envoyer des données à sistance vers l'ordinateur.
  
Pour communiquer avec le PC, il vous faudra également lui connecter un second module modem "SPM2-433-28" sur son port série (au travers d'un composant MAX232 - voir schéma théorique dans la notice du modem sur le site www.radiometrix.com). Vous disposerez alors d'une liaison qui s'apparentera à un câble série virtuel "sans fil" entre l'ordinateur et la platine du "PICBASIC-3".
 
Le "PICBASIC-3B" récupèrera les données en provenance de l'ordinateur via le modem radio. Les ports "I/O8 à I/O15" du PICBASIC-3B serviront à actionner des relais par le biais d'un montage d'interface à transistors (vous pourrez également avoir recours à un circuit ULN2803 qui pourra avantageusement remplacer les transistors). Les 2 modules "SPM2-433-28" (celui de la platine utilisée sur l'ordinateur envoyant les ordres et celui utilisé en association avec le PICBASIC-3B) dialogueront et se "reconnaîtront" automa-tiquement sans que vous ayez à faire quoi que se soit (ces derniers sont livrés pré-initialisés pour fonctionner en 9600 bds, sur la même adresse de "dialogue" (voir notice du "SPM2-433-28" pour d'avantages d'informations).
  
    
Programme 1
Le programme très simple ci-dessous devra être chargé dans le PICBASIC à l'aide de la prise de programmation de ce dernier. A la mise sous tension du PICBASIC, ce dernier entammera une temporisation de 3 sec. environ (afin d'atendre la fin de l'initialisation interne du module "SPM2-433-28"). Lorsque le SPM2-433-28" est prêt, la Led connectée à RX SELECT se met à scintiller, indiquant que ce dernier est en attente de réception. A partir de la ligne 10, le PICBASIC est en attente permanent d'un octet sur le port série (I/O 17). Si au bout de 5 sec. aucun caractère n'est détecté, le programme retourne en attente en ligne 10. Afin de pouvoir envoyer des ordres au PICBASIC, il vous faudra préalablement disposer d'un émulateur de terminal série (vous pouvez par exemple utiliser "Hyper Terminal™", livré avec Windows™. Exécutez donc ce dernier en sélectionnant le numéro du port sur lequel vous avez connecté la platine "modem". Configurez également "Hyper Terminal™" avec un débit de communication de 9600 bds, 8 bits, 1 stop , aucune parité et aucun contrôle de flux (ce dernier paramètre st important). Le programme est fait de telle sorte que vous puissiez commander ("marche / arrêt) les 8 sorties de la platine autonome équipée du PICBASIC à l'aide des touches "1" à "8" du clavier numérique de PC. Les touches "0" et "9" permettant respectivement de désactiver toutes les sorties ou d'activer toutes les sorties en même temps. Cette possibilité est rendu possible en enlevant la valeur décimale 41 du code retourné par le PC, dès lors en tapant sur la touche 1, la variable I sera égale à la valeur décimale "8" (correspondant au port capable de piloter la sortie 1), en tapant la touche 2, la variable I prendra alors la valeur "9" (correspondant au port capable de piloter la sortie 2), et ainsi de suite... Un test sera effectué pour vérifier que la valeur de l'octet reçu reste dans les ports attribués à la commande des relais (ainsi toutes les autres touches seront tout simplement ignorées). A noter que suivant les conditions de propagation (positionnement des antennes, présence de parasite, ets...), il se peut que le délai de synchronisation entre les 2 modems puisse varier quelque peu lors de l'établissement de la communication entre les 2 dispositifs (après coup, tant que les 2 systèmes sont en phase de dialogue (visusalisé par la Led RX SELECT en fixe), les commandes issue de l'un vers l'autre sont quasi-instantanées). La portée maximale séparant l'ordinateur de la platine du PICBASIC pourra atteindre environ 200 m en terrain dégagé, sans obstacle, ni source parasite. 
           
      DIM I AS BYTE
      BYTEOUT 1,0
      DELAY 3000
10  SERIN 17,103,0,5000,10,[I]
      I=I-41
      IF I>7 AND I         TOGGLE I
      END IF
      IF I=7 THEN BYTEOUT 1,0                      ' Désactive toutes les sorties en même temps
      IF I=16 THEN BYTEOUT 1,255                 ' Active toutes les sorties en même temps
      GOTO 10
                                        
    
          
Programme 2 
Ce nouveau programme instaure un niveau de sécurité dans la transmission en envoyant au préalable une chaîne de caractères servant de "code de sécurité". Si ce code n'est pas reçu au préalable par le PICBASIC, aucune sortie ne sera activée. Ce code est stocké dans une variable de type tableau, puis on vérifie un à un la valeur de chaque élément du tableau par rapport au valeur que l'on aura défini au préalable. Dans l'exemple ci-dessous, il vous faudra taper les caractères "AZERT" (soit les codes décimaux: 65  90  69  82  84), suivis du numéro de la sortie relais à actionner - vous pouvez bien évidemment choisir un code plus long pour augmenter la sécurité. Ainsi   AZERT9   aura pour effet d'activer toutes les sorties en même temps. Au passage, vous remarquerez que la durée d'attente d'un caractère a été ramené à 1 sec. dans l'instruction SERIN (1000 ms). Dès lors il faudra impérativement que chaque octet du code "arrive" à moins d'une seconde d'intervalle sans quoi, la variable de type tableau servant à réceptionner les codes, sera remise à zéro et même si vous tapez les codes dans l'ordre, la sortie ne sera pas actionnée. Dans le même registre, du fait que l'on charge un tableau séquentiellement, si un des éléments n'est pas bon (mauvais code reçu), l'ensemble de la chaîne sera alors "corrompue" et dans certains cas, même si vous envoyez à nouveau correctement le "bon" code, vous risquez de ne plus être synchrone avec le chargement du tableau par le premier élément. Ceci veut dire qu'en cas de mauvais code envoyé, il vous faudra attendre plus d'une seconde (pour que l'instruction SERIN s'initialise à nouveau et soit ainsi apte à charger la variable type tableau à partir du premier élément). Il va de soit que plus la chaîne de code envoyée est longue, plus le système sera sécurisé. 
       
         DIM I(7) AS BYTE
         BYTEOUT 1,0                                             ' Désactive toutes les sorties en même temps
         DELAY 3000
10     SERIN 17,103,0,1000,10,[I(0)~ 6]
         IF I(0)<>65 THEN GOTO 10
         IF I(1)<>90 THEN GOTO 10
         IF I(2)<>69 THEN GOTO 10
         IF I(3)<>82 THEN GOTO 10
         IF I(4)<>84 THEN GOTO 10
         I(5)=I(5)-41
         IF I(5)>7 AND I(5)            TOGGLE I(5)
         END IF
         IF I(5)=7 THEN BYTEOUT 1,0                      ' Désactive toutes les sorties en même temps
         IF I(5)=16 THEN BYTEOUT 1,255                 ' Active toutes les sorties en même temps
         GOTO 10  
    
           
Evolutions possibles... 
Ces exemples de programme vous permettent de vous donner quelques bases et notions sur la façon dont vous pouvez concevoir une télécommande radio via un ordinateur. Les ordres issus de votre PC pourront également être générés au sein de n'importe quelle application capable de gérer une liaison série: Delphi™, langage "C", langage "pascal", Visual Basic™, Windev™, Profilab Expert™... Vous pourrez dès lors définir vous même les codes séries reconnus ou non par la carte PICBASIC. Vous pourrez également utiliser plus que 8 sorties (passez sur un PICBASIC-3H si nécessaire). Vous pourriez également envisager de modifier votre programme afin d'avoir un retour d'informations de la part de la platine PICBASIC afin qu'elle confirme à l'ordinateur qui lui a envoyé une commande qu'elle a bien reçue son orde et activée la bonne sortie.  
      
         
        


Interface radio 4 entrées / 4 sorties pour "PC" - 14/03/2005   -  Lextronic

 

 



    
 
Cette note d'application vous permettra de piloter 4 sorties relais (S1 à S4) et de transmettre l'état de 4 entrées tout-ou-rien (E1 à E4), le tout à distance à partir/vers un compatible PC. Le système se compose d'un modem radio 433.92 MHz "SPM2-433-28" (connecté au PC), associé à une seconde platine intégrant un "PICBASIC-3B" et un autre module hybride modem radio "SPM2-433-28".
    
  

  
Le schéma théorique ci-dessus montre comment relier un module "PICBASIC-3B" aux entrées TXD / RXD du modem radio "SPM2-433-28" (via les ports "I/O16 et I/O 17") afin de pouvoir envoyer des données à sistance vers l'ordinateur.
  
Pour communiquer avec le PC, il vous faudra également lui connecter un second module modem "SPM2-433-28" sur son port série (au travers d'un composant MAX232 - voir schéma théorique dans la notice du modem sur le site www.radiometrix.com). Vous disposerez alors d'une liaison qui s'apparentera à un câble série virtuel "sans fil" entre l'ordinateur et la platine du "PICBASIC-3".
 
Les ports "I/O8 à I/O11" du PICBASIC-3B serviront à venir lire l'état de contacts "secs". 
  
Les ports "I/O12 à I/O15" du PICBASIC-3B serviront à actionner des relais par le biais d'un montage d'interface à transistors (vous pourrez également avoir recours à un circuit ULN2803 qui pourra avantageusement remplacer les transistors). 
 
Le programme très simple ci-dessous devra être chargé dans le PICBASIC à l'aide de la prise de programmation de ce dernier. A la mise sous tension du PICBASIC, ce dernier entammera une temporisation de 3 sec. environ (afin d'atendre la fin de l'initialisation interne du module "SPM2-433-28"). Lorsque le SPM2-433-28" est prêt, la Led connectée à RX SELECT se met à scintiller, indiquant que ce dernier est en attente de réception.
    
Le programme ci-dessous est en attente permanent d'un octet sur le port série (I/O 17) du PICBASIC. Si au bout de 5 sec. aucun caractère n'est détecté, le programme retourne en attente en ligne 10. Afin de pouvoir envoyer/recevoir des ordres à la platine, il vous faudra préalablement disposer d'un émulateur de terminal série (vous pouvez par exemple utiliser "Hyper Terminal™", livré avec Windows™. Exécutez donc ce dernier en sélectionnant le numéro du port sur lequel vous avez connecté la platine "modem". configurez également "Hyper Terminal™" avec un débit de communication de 9600 bds, 8 bits, 1 stop , aucune parité et aucun contrôle de flux (ce dernier paramètre st important). Le programme est fait de telle sorte que vous puissiez commander ("marche / arrêt) les 4 relais de la platine "PICBASIC" à l'aide des touches "1" à "4" du clavier numérique de PC. Les touches "0" et "9" permettant respectivement de désactiver tous les relais ou d'activer tous les relais en même temps. Cette possibilité est rendu possible en enlevant la valeur décimale 37 du code retourné par le PC, dès lors en tapant sur la touche 1, la variable I sera égale à la valeur décimale "12" (correspondant au port capable de piloter le relais 1), en tapant la touche 2, la variable I prendra alors la valeur "13" (correspondant au port capable de piloter le relais 2), et ainsi de suite... Un test sera effectué pour vérifier que la valeur de l'octet reçu reste dans les ports attribués à la commande des relais (ainsi toutes les autres touches seront tout simplement ignorées). Toutefois si vous sollicitez la touche "7" du clavier du PC, dans ce cas le PICBASIC va retourner un à un l'état logique ("0" ou "1") des 4 ports "I/O8" à "I/O11" reliés aux entrées tout-ou-rien de la platine "PICBASIC" afin d'en afficher l'état sur l'écran d'Hyper terminal™ du PC (un caractère "13" est envoyé en fin de chaîne afin que le curseur revienne en début de ligne pour re-écrire par dessus les même chiffres lors de l'interrogation suivante). On notera toutefois que si l'état des entrées changent, vous ne verrez pas évoluer ces derniers en temps réel à l'écran du PC (vous ne connaissez l'état des entrées de la carte "PICBASIC" que sur "interrogation" via la touche "7" du clavier du PC). A noter que suivant les conditions de propagation (positionnement des antennes, présence de parasite, ets...), il se peut que le délai de synchronisation entre les 2 modems puisse varier quelque peu lors de l'établissement de la communication entre les 2 dispositifs (après coup, tant que les 2 systèmes sont en phase de dialogue (visusalisé par la Led RX SELECT en fixe), les commandes issue de l'un vers l'autre sont quasi-instantanées). La portée maximale séparant l'ordinateur de la platine du PICBASIC pourra atteindre environ 200 m en terrain dégagé, sans obstacle, ni source parasite. 
       
      DIM I AS BYTE
      OUT 12,0
      OUT 13,0
      OUT 14,0
      OUT 15,0
      DELAY 3000
10  SERIN 17,103,0,5000,10,[I]
      I=I-37
      IF I>11 AND I        TOGGLE I
      END IF
      IF I=11 THEN BYTEOUT 1,0          ' Désactive tous les relais en même temps
      IF I=20 THEN BYTEOUT 1,255      ' Active tous les relais en même temps
      IF I=18 THEN                              ' Demande de lecture des 4 entrées
         I=IN(8)+&H30                          ' Mise en forme de l'état de l'entrée 
         SEROUT 16,103,0,1,[I]             ' (pour afficher "0" ou "1" à l'écran du PC)
         I=IN(9)+&H30         
         SEROUT 16,103,0,1,[I] 
         I=IN(10)+&H30         
         SEROUT 16,103,0,1,[I]
         I=IN(11)+&H30         
         SEROUT 16,103,0,1,[I]
         SEROUT 16,103,0,1,[13]
      END IF 
      GOTO 10
  
   
      
Evolutions possibles... 
Ce exemple de programme vous permettra de vous donner quelques bases et notions sur la façon dont vous pouvez concevoir une interface d'entrées/sorties radio via un ordinateur. Les ordres reçues par votre PC pourront également être interprétés au sein de n'importe quelle application capable de gérer une liaison série: Delphi™, langage "C", langage "pascal", Visual Basic™, Windev™, Profilab Expert™... Vous pourrez également intégrer un code de "reconnaissance" afin que vous soyez sûr que c'est bien "votre" ordinateur qui vous envoie des commandes à la platine "PICBASIC" et non pas un autre utilisateur de "SPM2-433-28". On veillera également à ne pas utiliser directement des grands fils de liaison pour raccorder les capteurs tout-ou-rien sur le PICBASIC sans utiliser de système de filtrage et protection adéquat (résistances + condensateurs + diode zener ou opto-coupleurs). Vous pourrez bien évidemment augmenter le nombre d'entrées pouvant être "lues".       
         
        


Télécommande radio (émetteur/récepteur 8 canaux) - 14/03/2005   -  Lextronic

 



    
 
Cette note d'application vous permettra de réaliser une télécommande radio 8 canaux. Le système se compose d'une platine émettrice et d'une platine réceptrice. La première platine sera capable d'activer à distance les relais (S1 à S8) de la seconde platine au moyen de boutons-poussoirs de commande (E1 à E8). Un code de sécurité devant être reconnu par la seconde platine sera également utilisé afin d'éviter que les relais ne soient déclenchés par un autre utilisateur exploitant un module "SPM2-433-28" dans la même aire de couverture que vous.
 
 
Platine émettrice
      

  
Celle-ci comprend un PICBASIC-3B associé à un modem radio 433.92 MHz "SPM2-433-28". 8 boutons-poussoirs reliés sur les ports "I/O 8 à I/O 15" serviront à envoyer des ordres à distance.

       DIM I AS BYTE, J AS BYTE, K AS BYTE
       DELAY 3000
10   I=BYTEIN(1)
       IF I=255 THEN GOTO 10 
       SEROUT 16,103,0,1,["AZERT",I]
20    I=BYTEIN(1) 
       IF I<>255 THEN GOTO 20
       GOTO 10  
         
Le programme ci-dessus une fois chargé dans le PICBASIC attendra qu'une des 8 touches soient sollicitées. Sur cet évènement, le "PICBASIC-3B" enverra un code de sécurité (ici les caractères "AZERT" - vous pouvez bien évidemment choisir un code plus long pour augmenter la sécurité) suivis de la valeur du port où sont reliés les boutons-poussoirs au module "SPM2-43-28" qui se chargera de l'envoyer automatiquement par voie radio à la seconde platine. 
   
           
Platine réceptrice 
  

 
Celle-ci comprend un PICBASIC-3B associé à un modem radio 433.92 MHz "SPM2-433-28". Les ports "I/O 8 à I/O 15" seront reliés à des relais (via un circuit d'interfaçage à transistor). 
     
       DIM I(7) AS BYTE, J AS BYTE, K AS BYTE
       BYTEOUT 1,0                                                 ' Décolle toutes les sorties en même temps
       DELAY 3000 
10   SERIN 17,103,0,1000,10,[I(0)~6]
       IF I(0)<>65 THEN GOTO 10
       IF I(1)<>90 THEN GOTO 10
       IF I(2)<>69 THEN GOTO 10
       IF I(3)<>82 THEN GOTO 10
       IF I(4)<>84 THEN GOTO 10
       J = 8                                                               ' Initialise le N° de la sortie
20    K=I(5).0                                                         ' Récupère la valeur du bit 0
       IF K=0 THEN GOTO 30                                       ' Regarde si la touche associé a été sollicitée
       J=J+1                                                              ' Non -> Passe à la sortie suivante
       I(5)=I(5)>>1                                                   ' Sélectionne prochain bit
       IF J<>16 THEN GOTO 20
30   TOGGLE J
       GOTO 10 
                
Le programme ci-dessus une fois chargé dans le PICBASIC attendra en permanence la réception de 6 données séries en provenance du module "SPM2-433-28". Ces données seront stockées dans les variables I(0) à I(5). Le programme vérifiera alors que les premières données reconstitues bien le code de sécurité "AZERT" (en cas contraire, le programme retourne à l'attente de données séries). Si le code de sécurité est reconnu, le PICBASIC récupérera le N° de la touche sollicitée et fera changer l'état de la sortie relais correspondante. A partir de la ligne 20, le programme récupère un à un les bits du dernier octet émis par l'émetteur et stocké dans la variable I(5). Dès qu'un des bits est détecté comme étant à "0" (touche de l'émetteur associée appuyée), le PICBASIC va faire changer l'état de la sortie correspondante (le numéro de la sortie est stocké dans la variable J). Par mesure de sécurité on effectue un test lors de la recherche du bit à "0" de tel sorte que si aucun des bits n'est à "0" on ne s'enferme pas dans une boucle sans fin (dès lors, si la sortie à activée devait être supérieure à 16, la boucle serait stoppée). A noter que suivant les conditions de propagation (positionnement des antennes, présence de parasite, ets...), il se peut que le délai de synchronisation entre les 2 modems puisse varier quelque peu lors de l'établissement de la communication entre les 2 dispositifs (après coup, tant que les 2 systèmes sont en phase de dialogue (visusalisé par la Led RX SELECT en fixe), les commandes issue de l'un vers l'autre sont quasi-instantannées). La portée maximale séparant l'émetteur et le récepteur pourra atteindre environ 200 m en terrain dégagé, sans obstacle, ni source parasite. 
      
   
Evolutions possibles... 
Ces exemples vous permettront de vous donner quelques bases et notions sur la façon dont vous pouvez concevoir une télécommande radio. Bien que disposant en quelque-sorte d'une fonction accusé de réception "implicite" grâce au système de correction d'erreur intégré aux modules "SPM2-433-28" (et transparent pour l'utilisateur), il pourrait être intéressant de concevoir une extension à cette télécommande vous permettant depuis le boîtier émetteur d'avoir un retour d'information visuel sur l'état des relais. Dans tous les cas, on veillera également à ne pas utiliser directement des grands fils de liaison pour raccorder les capteurs tout-ou-rien sur le PICBASIC sans utiliser de système de filtrage et protection adéquat (résistances + condensateurs + diode zener ou opto-coupleurs). Vous pourrez bien évidemment augmenter le nombre d'entrées pouvant être "lues".     
         
        


Télécommande radio 4 canaux avec accusé réception - 14/03/2005   -  Lextronic

 



    
 
Cette note d'application vous permettra de réaliser une télécommande radio 4 canaux dotée d'une fonction accusée de réception. Le système se compose d'une platine émettrice et d'une platine réceptrice. La première platine sera capable d'activer à distance les relais (S1 à S4) de la seconde platine au moyen de boutons-poussoirs (E1 à E4) de commande et surtout de recevoir l'état des relais de la platine afin de les afficher au moyen de Leds (L1 à L4). Un code de sécurité sera utilisé lors des échanges entre les platines afin d'éviter que les relais ne soient déclenchés par un autre utilisateur exploitant un module "SPM2-433-28" dans la même aire de couverture que vous.
  
 
Description du fonctionnement:
A la mise sous tension de l'émetteur, ce dernier interrogera automatiquement le récepteur afin de connaître l'état de ses relais. Cet état sera matérialisé par l'allumage (relais actif) ou l'extinction (relais non actif) de chacune des Leds de visualisation de l'émetteur. Lorsque vous solliciterez une des touches de l'émetteur, ce dernier enverra un ordre au récepteur qui fera changer l'état du relais associé à la touche de l'émetteur. A ce stade, le récepteur enverra à nouveau un accusé de réception afin que les états des leds de l'émetteur soit réactualisés (avec un "bip" sonore de confirmation). Si pour une raison ou pour une autre l'émetteur ne reçoit pas l'accusé réception du récepteur, les 4 Leds se mettront à clignoter pour signaler le problème. A ce stade, 2 possibilités peuvent être envisagées: 
     
-  Soit le récepteur n'a pas correctement reçu sont ordre (suit à un brouillage radio prolongé par
   exemple) - dans ce cas, il est normal qu'il n'est pas retourné d'accusé de réception. 
  
- Soit le récepteur a bien reçu son ordre, mais c'est l'émetteur qui n'a pas reçu correctement
  l'accusé de réception.
  
Dans les 2 cas, l'utilisateur aura une incertitude sur l'état des relais du récepteur. C'est la raison pour laquelle vous disposez d'un 5ème bouton-poussoir sur l'émetteur, lequel vous permettra d'activer une demande d'accusé réception (sans piloter aucun relais).
 
 
Platine émettrice
      

  
Celle-ci comprend un PICBASIC-3B associé à un modem radio 433.92 MHz "SPM2-433-28". 4 boutons-poussoirs reliés sur les ports "I/O 8 à I/O 111" serviront à envoyer des ordres à distance. Un 5ème bouton-poussoir (relié sur I/O 1") vous permettra d'interroger à distance l'état des relais de la platine de réception (sans envoyer d'ordre aux relais). Ces états seront alors affichés sur les Leds connectées aux ports "I/O 12 à I/O 15". Un buzzer sans oscillateur sera connecté au port "I/O 0" afin d'avoir une confirmation auditive lors de l'envoi d'une commande. On utilisera également 2 Leds connectées aux bornes "RX Select" et "TX Select" du module 3SPM2-433-28" afin d'avoir une idée précise de son état (réception ou émission). 
      
    
       DIM I(7) AS BYTE, J AS BYTE, K AS BYTE, L AS BYTE
       GOSUB 50                                      ' Eteind toutes les Leds
       L=0
       K=0
       DELAY 3000
10   SEROUT 16,103,0,1,["AZERT",12]    ' Interrogation du recepteur
15   SERIN 17,103,0,3000,20,[I(0)~6]     ' Attend la réponse pendant 3 sec.
       IF I(0)<>65 THEN GOTO 20
       IF I(1)<>90 THEN GOTO 20
       IF I(2)<>69 THEN GOTO 20
       IF I(3)<>82 THEN GOTO 20
       IF I(4)<>84 THEN GOTO 20 
       OUT 12,I(5).0                                 ' Allume les Leds en fonction des relais du récepteur
       OUT 13,I(5).1
       OUT 14,I(5).2
       OUT 15,I(5).3
       L=0                                                ' On a bien reçu l'accusé réception
       BEEP 0                                            ' Bip sonore
       GOTO 30 
20    L=1                                                ' Accusé de réception pas bon 
       GOSUB 50                                      ' Eteind toutes les leds
  

'**********************************************
'* ATTENTE SOLLICITATION TOUCHE DE L'EMETTEUR *
'**********************************************
   
30   J=8                                                 ' Test l'appui sur les BP
       I(0)=IN(8)
       IF I(0)=0 THEN GOTO 40
       J=J+1
       I(0)=IN(9)
       IF I(0)=0 THEN GOTO 40 
       J=J+1
       I(0)=IN(10)
       IF I(0)=0 THEN GOTO 40 
       J=J+1
       I(0)=IN(11)
       IF I(0)=0 THEN GOTO 40
       J=J+1
       I(0)=IN(1)
       IF I(0)=0 THEN GOTO 40                   ' Test BP interrogation
       K = K+1
       IF K<>200 THEN GOTO 30                 ' Test durée clinotemement
       K=0
       IF L=0 THEN GOTO 30                       ' Test si clignotement
       TOGGLE 12                                       ' Change d'état les Leds
       TOGGLE 13
       TOGGLE 14
       TOGGLE 15
       GOTO 30    
  

'**********************************************
'* ATTENTE RELACHEMENT TOUCHE DE L'EMETTEUR *
'**********************************************
    
40    I(0)=IN(8)                                         ' Test relachement des touches
       IF I(0)=0 THEN GOTO 40
       I(0)=IN(9)
       IF I(0)=0 THEN GOTO 40
       I(0)=IN(10)
       IF I(0)=0 THEN GOTO 40 
       I(0)=IN(11)
       IF I(0)=0 THEN GOTO 40
       I(0)=IN(1)
       IF I(0)=0 THEN GOTO 40
       SEROUT 16,103,0,1,["AZERT",J]         ' Envoi la commande radio
       GOTO 15                                         ' Va attendre l'accuse reception
  

'**********************************************
'* TOUTES LES LEDS ETEINTENT *
'**********************************************
   
50    OUT 12,0                                         ' Eteind toutes les Leds
       OUT 13,0
       OUT 14,0
       OUT 15,0
       RETURN
 
       
     
Le programme ci-dessus une fois chargé dans le PICBASIC commence par éteindre les leds représentant l'état des relais du récepteur. Après une temporisation d'initialisation, le PICBASIC va envoyer une demande d'interrogation à la platine de réception (ligne 10). Cette demande se compose d'une suite de données composées d'un code de sécurité et du nombre "12". La chaîne de caractères "AZERT", est utilisée pour éviter que le système ne se soit déclenchée par un autre utilisateur exploitant un module "SPM2-433-28" sur le même site que vous - vous pouvez bien évidemment choisir un code plus long pour augmenter la sécurité). Le programme va ensuite (ligne 15) attendre pendant 3 secondes un accusé de réception de la part de la platine de réception (qui doit à ce moment lui retourner l'état de ses relais). Cet accusé de réception sera stocké dans les variables I(0) à I(5). Ce dernier doit être composé du code de reconnaissance "AZERT" (on test donc les valeurs décimales correspondantes à chaque lettre: soit 65  90  69  82  84). Si les codes reçus ne sont pas conformes, ou si les codes ne sont pas reçus du tout dans les 3 secondes, le programme mémorisera que l'accusé réception n'est pas "revenu" (L=1). A ce stade, le programme va tester en permanence et une à une l'état des touches de l'émetteur dans une boucle d'attente (à partir de la ligne 30). Durant cette boucle, on effectue une temporisation au moyen de la variable "K". Au terme de celle-ci (si K=200), on testera si le défaut de l'accusé de réception est présent (si L=1) et dans ce cas, on inversera cycliquement l'état des 4 leds de visualisation afin de montrer à l'utilisateur que l'on ne connaît pas l'état des relais de sortie. En modifiant la valeur de comparaison (K=200), vous modifierez la vitesse de clignotement des Leds. Si en revanche, l'accusé de réception est correctement revenu de la part de la platine de réception, le programme va allumer ou éteindre les leds en fonction de l'état des relais et ensuite attendre qu'une touche soit sollicitée. Dans cette hypothèse, le PICBASIC va alors attendre à partir de la ligne 40 que toutes les touches soient relâchées avec d'émettre de nouveaux le code de sécurité "AZERT", suivi du n° de la touche sollicitée (mémorisée dans la variable "J"). A ce stade, le programme retourne en ligne 15 pour attendre pendant 3 secondes l'accusé de réception et ainsi de suite... 
 
   
           
Platine réceptrice 
  

 
Celle-ci comprend un PICBASIC-3B associé à un modem radio 433.92 MHz "SPM2-433-28". Les ports "I/O 8 à I/O 11" seront reliés à des relais (via un circuit d'interfaçage à transistor). 
            
      DIM I(7) AS BYTE, J AS BYTE, K AS BYTE, L AS BYTE
      OUT 8,0                                           ' Decolle tous les relais
      OUT 9,0
      OUT 10,0
      OUT 11,0
      DELAY 1500
10  SERIN 17,103,0,2000,10,[I(0)~6]      ' Attend ordre de l'émetteur.
      IF I(0)<>65 THEN GOTO 10
      IF I(1)<>90 THEN GOTO 10
      IF I(2)<>69 THEN GOTO 10
      IF I(3)<>82 THEN GOTO 10
      IF I(4)<>84 THEN GOTO 10
      IF I(5)=12 THEN GOTO 20                 ' Est-ce une demande d'interrogation ?
      TOGGLE I(5)                                    ' Non donc on active le relais adequate
      DELAY 200
  

'**********************************************
'* RECUPERATION DE L'ETAT DES RELAIS *
'* ET ENVOIE DE LEUR ETAT A L'EMETTEUR *
'**********************************************
   
20   J=0
      J.0 = OUTSTAT(8)                             ' Recupere etat 1 er relais
      J.1 = OUTSTAT(9)                             ' Recupere etat 2 eme relais
      J.2 = OUTSTAT(10)                           ' Recupere etat 3 eme relais
      J.3 = OUTSTAT(11)                           ' Recupere etat 4 eme relais
      SEROUT 16,103,0,1,["AZERT",J]          ' Envoi la commande radio
      GOTO 10
 
         
       
Le programme ci-dessus une fois chargé dans le PICBASIC attendra en permanence la réception de 6 données séries en provenance du module "SPM2-433-28". Ces données seront stockées dans les variables I(0) à I(5). Le programme vérifiera alors que les premières données reconstitues bien le code de sécurité "AZERT" (en cas contraire, le programme retourne à l'attente de données séries). Si le code de sécurité est reconnu, le PICBASIC récupérera le N° de la touche sollicitée et fera changer l'état de la sortie relais correspondante. A partir de la ligne 20, le programme récupère l'état des sorties et les stock dans la variable "J" afin de renvoyer son accusé de réception. Cette information est composée du code de sécurité "AZERT" + l'état des relais. A noter que suivant les conditions de propagation (positionnement des antennes, présence de parasite, ets...), il se peut que le délai de synchronisation entre les 2 modems puisse varier quelque peu lors de l'établissement de la communication entre les 2 dispositifs (après coup, tant que les 2 systèmes sont en phase de dialogue (visualisé par la Led RX SELECT en fixe), les commandes issue de l'un vers l'autre sont quasi-instantanées). La portée maximale séparant l'émetteur et le récepteur pourra atteindre environ 200 m en terrain dégagé, sans obstacle, ni source parasite. 
               
       
Evolutions possibles... 
Ces exemples vous permettront de vous donner quelques bases et notions sur la façon dont vous pouvez concevoir une télécommande radio avec accusé de réception. A noter toutefois que le système en question dispose en fait d'une double fonction d'accusé de réception puisque les modules "SPM2-433-28" disposent en fait déjà de part leur mode "correction d'erreur" d'une gestion poussée d'accusée de réception. Dans tous les cas, on veillera également à ne pas utiliser directement des grands fils de liaison pour raccorder les capteurs tout-ou-rien sur le PICBASIC sans utiliser de système de filtrage et protection adéquat (résistances + condensateurs + diode zener ou opto-coupleurs). Vous pourrez bien évidemment augmenter le nombre de commandes.    
         
        


Communication "multi-points" avec les modules "SPM2-433-28" - 14/03/2005   -  Lextronic

 



    
 
Cette note d'application est conçue pour vous montrer comment utiliser les PICBASIC et les modules "SPM2-433-28" afin de réaliser un système de communication "multi-points". Il se compose d'une platine "maître" et de 2 platines esclaves". Toutes les platines sont équipées d'un module PICBASIC et d'un modem "SPM2-433-28". Les 2 platines esclaves sont équipées en plus d'un afficheur à commande série Comfile Technology™. L'application consistera a faire émettre un message par la platine maître qui s'affichera tantôt sur la première platine esclave, tantôt sur la seconde platine et ainsi de suite. Pour réaliser cette fonction, vous disposez de 2 solutions:
  
1) La première consiste à "dévalider" la fonction d'accusé réception et de correction d'erreur inhérente aux modules SPM2-433-28. Tout message émis par le module maître sera alors automatiquement réceptionné en même temps par les 2 modules esclaves. En envoyant un octet particulier en entête de message, vous pourrez ainsi autoriser l'affichage d'un message sur l'une où l'autre des platines esclaves (le PICBASIC de chaque platine pourra se "reconnaître" dans la valeur de cet octet et piloter ou non l'afficheur à commande série).
  
2) La seconde solution consiste à laisser le dispositif d'accusé réception et de correction d'erreur actif et à modifier "à la volée" le mode d'adressage interne des modules "SPM2-433-28" pour choisir d'afficher un message sur la première ou la seconde platine esclave (voir notice d'utilisation des modules "SPM2-433-28").
  
C'est cette seconde solution que nous avons choisi d'utiliser. Pour ce faire, il vous faudra modifier l'adresse d'un des 2 modules esclave "SPM2-433-28" afin de placer son paramètre UNIT à 1 (les 2 autres modules devront avoir le paramètre UNIT à 0 - comme en valeur "usine"). Le "jeu" consistera alors à modifier tours à tours la valeur du paramètre UNIT (tantôt à 0, tantôt à 1) sur la platine maître pour aller afficher un message tantôt sur la première platine esclave, tantôt sur la seconde. Pour y parvenir, le PICBASIC de la platine maître devra avoir un de ses ports relié sur l'entrée SETUP du module "SPM2-433-28". Pour modifier la valeur d'adressage du paramètre UNIT, on appliquera alors un niveau bas sur l'entrée SETUP (pour que le module "SPM2-433-28" entre en phase de configuration). Après une légère temporisation, on repositionnera un niveau logique haut sur l'entrée SETUP (le module reste toutefois toujours en phase de configuration). On enverra alors la commande ADDR X au module "SPM2-433-28", où "X" prendra la valeur 1 ou 0 suivant que l'on veuille modifier la valeur UNIT à 1 ou 0. L'utilisation de la commande ADDR permet en effet de modifier la valeur du paramètre UNIT directement dans la mémoire RAM du module "SPM2-433-28", sans que ce dernier ne sauvegarde cette valeur en mémoire EEPROM - ceci permet d'éviter d'arriver très vite à saturation des cycles d'écritures de la mémoire EEPROM du module "SPM2-433-28" (consultez la documentation des modules "SPM2-433-28" pour plus d'infos). A noter au passage que le module "SPM2-433-28" sortira automatiquement du mode configuration pour passer en mode "fonctionnement normal" dès qu'il aura reçu la commande ADDR (à condition que l'entrée SETUP soit à nouveau au niveau logique "haut".). Une fois le module maître configuré avec le paramètre UNIT à 0, toute données envoyée par ce dernier sera automatiquement interceptée par le module "SPM2-433-28" de la platine esclave "A" (avec le paramètre UNIT à 0), l'autre platine ignorant purement et simplement les informations qui lui parviendront. A l'inverse, lorsque la platine maître est configuré avec UNIT à 1, seule la platine esclave "B" recevra ses informations.
    
          
Platine "Maître" 
  

Celle-ci comprend un PICBASIC-3B associé à un modem radio 433.92 MHz "SPM2-433-28". En plus des signaux de commandes usuels, le port "I/O 15" du PICBASIC est relié à l'entrée SETUP du module "SPM2-433-28" afin de pouvoir reprogrammer ce dernier "à la volée". 
             
       DIM I AS BYTE, K AS BYTE
       OUT 15,1
       DELAY 3000
       I=&H30
10   SEROUT 16,103,0,1,["UNIT0 -> ",I]             ' Envoi les données
       DELAY 150 
       I=I+1
       IF I=&H3A THEN I = &H30
       OUT 15,0                                                ' Passe en mode configuration modem
       DELAY 150
       OUT 15,1
       SEROUT 16,103,0,1,["addr 1",13]