[ Accueil ] [ CONTACT ] [ PLAN du Site ] [ RCNV ] [ Publications ] [ Chantiers Bateaux ] [ Technique Modélisme ] [ Electronique ] [ Radios Vintage ] [ Multi-Switch ] [ Vrac ] [ Astuces ] [ Liens ] [ Base ] [ Compteur ]
 

        ... rgl

 

Télémétrie

appliquée aux Modèles RC

(c) Rg.LEGAT

 

 

SOMMAIRE:

01 -  Introduction - Présentation - Généralités

02 -  Transmission de la tension d'une batterie par HC-12 (433Mhz)B

03 -  Transmission d'une température par HC-12 (433Mhz) et DS18B20

04 - Contrôle des données transmises par CRC  (Cyclic Redundancy Check)

05 - x

 

      Introduction - Présentation - Généralités

La Télémétrie consiste à transmettre des données propres au modèle radio-commandé vers le pilote.

Il peut s'agir de l'état de charge d'une ou plusieurs batteries, de la position GPS, de l'altitude, de la température d'un moteur ou d'un accu, d'une alerte niveau d'eau, ..., ..., ...

Le dispositif sera constitué d'un émetteur placé dans le modèle et d'un récepteur, muni d'un afficheur, placé au niveau de l'émetteur pilotant le modèle.

Nous avons vu , sur ce site, quelques circuits conçus pour traiter, émettre et recevoir des données numériques (ADS1115, nRF24L01+, HC-12, ...).

Cette page reprendra donc quelques programmes utilIsant l'un ou l'autre de ces composants spécifiques.

Faisons une rapide analyse des capteurs utiles et des composants annexes nécessaires pour se lancer dans la conception de quelques modules utiles:

   

Estimation des besoins . Ports des MicroContrôleurs

 

      La table suivante montre les différences fonctionnelles primaires entre les µC PICAXE usuels :

 

    

 

Standard : (800-1800 ligne de mémoire, pour chacun des emplacements distincts (jusqu'à 2)

 

08M2  5 E/S configurables           0-3ADC                32MHZ

14M2  11 E/S configurables         0-7 ADC               32 MHZ

18M2  16 E/S configurables         0-10 ADC             32 MHZ

20M2  16 E/S configurables         0-11 ADC             32 MHZ

 

Avancé : (2000-3200 lignes de mémoires, pour chaque emplacement séparé (jusqu'à 4)

 

20X2  18 E/S configurables          0-8 ADC               64 MHZ

28X2  22 E/S configurables          0-16 ADC             64 MHZ

40X2  33 E/S configurables          0-27 ADC             64 MHZ

 

Tous les composants fonctionnent par défaut à 4 MHz (8 MHz pour les références X2).

Pour une utilisation à une plus grande vitesse, voir la commande 'Setfreq'.

 

     Transmission de la tension d'une batterie par HC-12 (433Mhz) 

' ***** Module HC-12 - 433 MHz + ADS115 *****
' *******************************************

' Nom du fichier: TX_HC12_ADS1115.bas

 

 

 

' Fonction: Utilisation des modules HC-12 a 433 MHz plus

'           module ADS1115 pour transmettre une TENSION par RF

'  Parametres HC-12: voir routine de Configuration

'

' PinOut HC-12           TX

'           ---------------------------

' VCC = 1   | Vcc            Antenne O|--->>>>>

' GND = 2   | Gnd                     |

' RXD = 3   > RXD     Module HC-12    |

' TXD = 4   < TXD                     |

' SET = 5   | SET                     |

'           ---------------------------

' Placer un condensateur electrolytique de 10uF 16V entre VCC et GND
' Utiliser une alimentation délivrant au moins 1A

'

' PinOut ADS1115

 

'                ---------------------------

' 5VCC           | Vcc                     |

' Gnd /-Battery  | Gnd                     |

' SCL            | SCL i2c                 |

' SDA            | SDA i2c                 |

' GND = 0h48     | ADDR    Module ADS1115  |

' Not Used       | ALRT                    |

' +Battery       > A0                      |

' Not used       > A1                      |

' Not used       > A2                      |

' Not used       > A3                      |

'                ---------------------------

'

' PinOut Picaxe 08M2

 

'                   ----------

' 5VCC              | 1    8 |  GND

' C.5 - S.RX        > 2    7 >  C.0 - S.TX (Used by Terminal)

' C.4 To RX.HC12 <--| 3    6 |  C.1 - hi2c.SCL

' C.3 Not Used   -->| 4    5 |  C.2 - hi2c.SDA

'                   ----------

 

'    Programidentification

Sertxd ("------------------------------------------------",cr,lf)

Sertxd ("           TX - HC12 + ADS1115.bas",cr,lf)

Sertxd ("------------------------------------------------",cr,lf)

 

'[ Directives ]

#PICAXE 08M2

#sim  shield

#TERMINAL 4800

 

'[ Directions - Connexions ]

Output C.4             'To pin3 RXD.HC-12

 

'------------------------------------------------------------------

' - - - DIGITAL OUTPUT PINS - - -

Symbol RxD = C.4      'Pin de connexion sur HC-12 RxD

' -----[ Constantes ]

Symbol BAUD  = T4800_8  'Vitesse en Baud pour l'envoi avec uC de 4 MHz

'--------------------------------------------------------------------------

' -----[ Variables ]

Symbol Vin         = w0

'Symbol Config     =  W1

  Symbol MSBconfig = b2 'W1

  Symbol LSBconfig = b3 'W1

'Symbol ADC        =  W2

  Symbol MSBVal    = b4 'W2

  Symbol LSBVal    = b5 'W2

Symbol Coef        = b6

'------------------------------------------------------------------

'i2C Config

'--------------

Hi2csetup i2cmaster, %10010000, i2cfast_8, i2cbyte 'address with grounded ADDR_pin (0h48)

'

' Calculation Coef ADS1115 - Pas necessaire car le traitement se fera au Recepteur

'-------------------------------------------------------------------------------------

' Coef = 8   ' 4,096v_FS   PGA=001

' Coef = 16  ' 2,048v_FS   PGA=010 (Default)

' Coef = 32  ' 1,024v_FS   PGA=011

' Coef = 64  ' 0,512v_FS   PGA=100

' Coef = 128 ' 0,256v_FS   PGA=101/110/111

 

 Sertxd ("          START CONFIGURATIONS",cr,lf)

 Sertxd ("------------------------------------------------",cr,lf)

Pause 500

 

'Configuration of the HC-12

'---------------------------------------------

   'Gosub Config ' Pas possible avec le 08M2 car il faut disposer d'une sortie supplementaire pour gerer la broche SET du HC-12

 

 

 

 

'Configuration of the CONFIG Register ADS1115

'------------------------------------------------

 Hi2cout (%00000001,%11000010,%10000011) 'Write Pointer Reg, MSB, LSB (Configure AIN0)

'Hi2cout (%00000001,%10000100,%10000011) 'Write Pointer Reg, MSB, LSB (Configure AIN0)

' PGA    = bits[11:9] =001 --> (4,096V Full Scale) Coef W1=8

' MUX    = bits[14:12]=100 --> (AINP = AIN0 and AINN = GND)

' MODE = bit[8]=0  --> (Continuous)

 

   Gosub Read_CFG       'Read Reg.CONFIG ADS1115 (Facultative)

 

' -----[ Initialisation ]

Serout RxD,BAUD,("UUUUUUUUUU")      'Synchro HC-12

Pause 50

 

 

'Programme Principal

'*******************

DO                                    'Debut de boucle infinie

 

Hi2cout (%00000000) ''Set Pointer to Reg.Conversion

 Pause 500

Hi2cin (MSBVal,LSBVal)  'Read MSB,LSB

 

*** La conversion se fera à la reception ***

 

Sertxd ("---> MSB = ",#b4,"   LSB = ",#b5,cr,lf) '   ,"   MilliVolts = ",#W0,cr,lf)

Serout RxD,BAUD,("@",MSBval,LSBval) 'Emission RF

 

LOOP                                          'Boucle infinie

'============================================================

'    Sub ROUTINES

'============================================================

 

Config:  ' Write config HC-12

 

 

' Default parameters=

'        Alimentation: 5V

'        Puissance:         20dBm (100mW)

'        Mode:             FU3 (16mA)

'        Canal:            C001

'        Baud:9600, Parite:Aucune, Data Bits:8, Stop Bits:1 

 

' Ne sera possible qu'avec un µC disposant d'une pin output supplementaire pour gerer la broche SET du HC-12 !

' Donc, à titre didactique

 

  Low Pin_Set

   Serout RxD,BAUD,("AT+xxx",13)      'Parametre de Config au choix sur RxD

  High Pin_Set 

return

'------------------------------------------------------------------

Read_CFG:' Read config ADS1115

 

 Hi2cin (MSBconfig,LSBconfig) ' Read Register CONFIG 

 Pause 500

 Sertxd ("     MSBcfg = ",#b2,"             LSBcfg = ",#b3,cr,lf,cr,lf)

 

 SerTxd("MSBcfg = %", #bit23,"-", #bit22, #bit21, #bit20,"-", #bit19, #bit18, #bit17,"-", #bit16,"   " )

 

 SerTxd("LSBcfg = %", #bit31, #bit30, #bit29,"-", #bit28,"-", #bit27,"-", #bit26,"-", #bit25, #bit24, cr,lf )

 Sertxd ("            MUX PGA MODE            DR",cr,lf)

 Sertxd ("------------------------------------------------",cr,lf)

 

 Pause 2000

Return

 

END                    'Fin du programme

'--- FIN ---------------------------------------------------------





' ***** Module HC-12 - 433 MHz + Serial OLED *****
' *************************************************

'    Nom du fichier: RX_HC12_OLED.bas

 

'    Fonction: Utilisation des modules HC-12 /433 MHz

'           Affichage du VOLTAGE lu par un module ADS1115 en envoye par RF.

'  Parametres HC-12: voir routine de Configuration

'

' PinOut HC-12            RX

'           ---------------------------

' VCC = 1   | Vcc            Antenne O| <<<<<---

' GND = 2   | Gnd                     |

' RXD = 3   > RXD     Module HC-12    |

' TXD = 4   < TXD                     |

' SET = 5   | SET                     |

'           ---------------------------

' Placer un condensateur electrolytique de 10uF 16V entre VCC et GND
' Utiliser une alimentation délivrant au moins 1A

'

' PinOut Picaxe 08M2

 

'                     ----------

' 5VCC                | 1    8 |  GND

' C.5 - S.RX          > 2    7 >  C.0 - S.TX (Used by Terminal)

' C.4 To OLED      <--| 3    6 |  C.1 - hi2c.SCL

' C.3 From TX.HC12 -->| 4    5 |  C.2 - hi2c.SDA

'                     ---------- 

'

'    Afficheur OLED 2 X 16 plus interface Picaxe serial AXE133

 

'[   Program identification ]

Sertxd ("------------------------------------------------",cr,lf)

Sertxd ("       RX - HC12 VOLTAGE OLED.bas",cr,lf)

Sertxd ("------------------------------------------------",cr,lf)

 

'[ Directives ]

#PICAXE 08M2

#sim  shield  'directive allows the on screen layout to match the pinout of the shield.

#TERMINAL 4800

 

'[ Directions - Connexions ]

Output C.4       'Connecte a la pinIN du module serie de l'Oled

Input  C.3       'Connecte a la pin4.TXD du HC-12

 

'------------------------------------------------------------------

' - - - DIGITAL INPUT PINS  - - -

Symbol TxD = C.3      'Pin de connexion sur HC-12 TxD

Symbol RxD = C.xxx    'Pin de connexion sur HC-12 RxD pour config (mais pas possible avec 08M2 sortant sur la console!

' - - - DIGITAL OUTPUT PINS - - -

Symbol OLED  = C.4      'Pin de connexion de l'Oled

' -----[ Constantes ]

Symbol BAUD  = T4800_8  'Vitesse en Baud pour la reception sur un uC a 4 MHZ

'-------------------------------------------------------------------------------

 

'[ Variables ]

 

Symbol Vin         = w0
'Symbol     CONFIG = W1
  Symbol MSBconfig = b2 'W1

  Symbol LSBconfig = b3 'W1
'Symbol
     VAL    = W2

  Symbol MSBVal    = b4 'W2

  Symbol LSBVal    = b5 'W2

Symbol Coef        = b6 'W3

Symbol Volt        = w4

Symbol CentiVolt   = w5 

 

'Calculation Coef

'---------------------

  Coef = 8   ' 4,096v_FS   PGA=001

' Coef = 16  ' 2,048v_FS   PGA=010 (Default)

' Coef = 32  ' 1,024v_FS   PGA=011

' Coef = 64  ' 0,512v_FS   PGA=100

' Coef = 128 ' 0,256v_FS   PGA=101/110/111

 

' [ Initialisation ]

 

'Configuration of the HC-12

'---------------------------------------------

   'Gosub Config ' Pas possible avec le 08M2 car il faut disposer de sorties supplementaires pour gerer les broches SET et RxD du HC-12

 

  

Serout OLED, N2400,(254,1)          'Commande d'effacement de l'Oled

Pause 30                            'Pause apres la cde

'------------------------------------------------------------------

 

 

'***************************

'*** Programme Principal ***

'***************************

DO

 Serin TxD, BAUD, ("@"),MSBVal,LSBVal 'Qualifier + Reception des datas

 

 Gosub Convert

 

 sertxd ("Volt = ",#Volt,".",#CentiVolt,cr,lf)

 Gosub Affi_Oled

 Pause 50

LOOP                                 'Boucle infinie

END                             'Fin du programme

'------------------------------------------------------------------

'*********************

'*** Sous Routines ***

'*********************

 

Config:  ' Write config HC-12

 

' Default parameters=

'        Alimentation: 5V

'        Puissance:         20dBm (100mW)

'        Mode:             FU3 (16mA)

'        Canal:            C001

'        Baud:9600, Parite:Aucune, Data Bits:8, Stop Bits:1 

'

 

' Ne sera possible qu'avec un µC disposant de pins output supplementaires pour gerer les broches SET et RxD du HC-12 !

' Donc, à titre didactique

 

  Low Pin_Set

   Serout RxD,BAUD,("AT+xxx",13)      'Parametre de Config au choix sur RxD

  High Pin_Set 

return

'------------------------------------------------------------------

 

Convert:

 Vin = MSBVal * 256       'Shift MSB <<8

 Vin = Vin + LSBVal       'MSBVal + LSBVal

 Vin = Vin/Coef           'Result in milliVolt !

 Vin = Vin / 10           'on supprime les milliemes de volt

 Volt = Vin /100          'on recupere les volts

 CentiVolt = Vin // 100   'Modulo pour les centiemes de volt

  

 ' Volt = Vin>>2

 ' SerTxd("-",#Volt,".",#CentiVolt,cr,lf)  

Return

'-----------------------------------------------------------------

 

Affi_Oled:

;Serout OLED, N2400,(254,1)          'Commande d'effacement de l'Oled

;Pause 30                            'Pause apres la cde

 Serout OLED, N2400,(254,192)       'Lin.2/Col.1

' Serout OLED, N2400,("Volt = ",#b11,".",#b12) '

 Serout OLED, N2400,("Volt = ",#Volt,".",#CentiVolt) '

return

'------------------------------------------------------------------

 

     Transmission d'une température par HC-12 (433Mhz) 

   x

 

 

     Routines CRC

Côté émission

On va ici créer un CRC constitué de 2 bytes.
Ils seront placés et transmis dans la chaîne des Bytes de Datas.

 

Principe:

Avant d'envoyer les données série, chaque octet est placé, tour à tour, dans la variable Data_Byte et un appel à CrcAdd est effectué.

Lorsque tous les octets ont ainsi été traités on obteint le CRC.
Les données sont alors envoyées et le CRC, composé de  deux octets, est également joint et transmis à la fin, ou, n'importe où dans le message.


Lorsque le message est reçu, la même procédure est appliquée : chaque octet (sauf ceux du CRC reçu), dans le même ordre, sont placés dans la variable Data_Byte et un appel à CrcAdd est effectué.

Le CRC calculé est comparé au CRC reçu: s'ils sont identiques, on peut considérer que les données série reçues sont correctes.


S'ils diffèrent, le message reçu est corrompu.

 

Programme  TEST TX

 

'-------------------------------------------------------

'   TEST CRC TX 00 (A tester sur simulateur Picaxe)

'-------------------------------------------------------

 

' [ Directives ]

#PICAXE 28X2

#simspeed 50   'vitesse d'execution du simulateur

 

' [ Connexions - Directions ]

Output C.1       'connecte a la pin3 (RXD) du HC-12

Input  C.2       'connecte a la pin2 (DQ) du BS18B20 (1Wire)

 

' [ Variables ]

Symbol Data_Byte = b0 'Byte de traitement [b0]; [b1] non utilise

Symbol CRC       = w1 '[b2,b3]

  symbol Lsb_Crc = b2

  symbol Msb_Crc = b3

Symbol K         = w2 '[b4,b5] 'Word de travail

Symbol POLYNOME  = W3 '[b6,b7] $A001 = 40961 = 1010 0000 0000 0001

       'other possible value : $8408 = 33800 = 1000 0100 0000 1001

 

Symbol DEGRES       = w4 '[b8,b9]

  symbol Lsb_Degres = b8

  symbol Msb_Degres = b9

Symbol i   = b20  'Variable de travail b6

 

Symbol BAUD = T9600_8  'Vitesse en Baud pour l'envoi avec uC de 8 MHz

Symbol BS18B20 = C.2   'Pin de connexion de la sonde de temperature

Symbol TXpin = C.1     'Pin de connexion sur HC-12 RxD

 

' [ Initialisation ]

 

Serout TXpin,BAUD,("UUUUUUUUUU") 'Synchro TX HC-12

Pause 50

 

 

'===== Programme PRINCIPAL =============================================

 

DO

 Readtemp BS18B20, DEGRES 'stockee dans 2 bytes [b8,b9]

 Let DEGRES = 31345 ' Forcage pour la simulation

 Sertxd ("  DEGRES= ",#DEGRES)

 

 'Mettre ici d'eventuelles autres mesures d'autres capteurs a stocker dans d'autres Bytes

 

  Let CRC      = $FFFF

  Let POLYNOME = $A001

  Gosub Crea_Crc

Sertxd ("   CRC = ",#CRC,cr,lf) 

Serout TXpin,BAUD,("@",Msb_Degres, Lsb_Degres, Msb_Crc, Lsb_Crc)

LOOP

END

 

'******************************

' ***   SUB ROUTINES        ***

'******************************

 

Crea_Crc:

 

'----------------------------

'  Methode (Byte par Byte)

'----------------------------

' Data_Byte=[first_byte]

' Gosub CrcAdd

' Data_Byte=[second_byte]

' Gosub CrcAdd
' ...

' Serout serout_pin, serout_speed, (first_byte,second_byte,MSB_CRC, LSB_CRC)

 

 Let Data_Byte = Msb_Degres 'b8

  Gosub CrcAdd

 Let Data_Byte = Lsb_Degres 'b9

  Gosub CrcAdd

return

'--------------------------------------------------------------------


CrcAdd:

 

 sertxd(cr,lf)

  

  For i = 0 to 7                 'Operation bit a bit
     sertxd ("  DataByte= ",#Data_Byte, cr,lf)

     Sertxd ("  i= ",#i)

      K = Data_Byte ^ CRC & 1         '^ = XOR,  & = AND

      Sertxd ("  K= ",#K)

   if K = 0 then CrcAdd1

    k = POLYNOME

 

   CrcAdd1:

    CRC = CRC / 2 ^ K

    Data_Byte = Data_Byte / 2
     sertxd ("  DataByte= ",#Data_Byte)

     sertxd ("  CRC= ",#CRC,cr,lf)

 

  Next i

return
 

'====  END OF PRG  ======================================================

  

  Résultat Console:   CRC final = 62690

 

    

 

 

 

Côté réception

 

1. On récupère les bytes datas et les deux bytes du CRC, émis par le TX.
2. On place le CRC reçu dans une variable Word. (CRC_Recu)
3. On calcule le nouveau CRC, avec les datas reçues (sans le CRC reçu), de la même manière et dans le même ordre que dans la routine d'émission. (CRC_Control)
4. On compare alors le CRC_Recu avec le CRC recalculé (CRC_Control).

     S'ils sont identiques, OK, on traite normalement les datas reçues, sinon, on affiche un message d'erreur et on relance une nouvelle lecture de la prochaine salve de Datas + CRC.

 

     Titre suivant ...

   xxx

 

 
[ Electronique ]
Copyright © Roger LEGAT - 2008 - Tous Droits réservés - (Thds V2)