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

        ... rgl

 

Testeur simple pour

récepteur de radio commande

RX Impulsiomètre / Voltmètre

(c) Rg. LEGAT

 

 

SOMMAIRE:

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

02 - Testeur d'impulsions
                   1 - Programme Picaxe 08M2 vers afficheur Série Axe134 (OLED 4x 20#)
                   2 - Programme Picaxe 08M2 vers afficheur TM1637, (4x LED digit - 7 segments)
                   3 - Programme PIC12F675 vers afficheur TM1637

03 - Réalisation pratique

04 - Choix du mini voltmètre (Module à 2 ou 3 fils)

 

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

En cas de dysfonctionnement d'un servo ou d'un module d'extension placé sur nos récepteurs de radio-commande, on a rarement un oscilloscope sur le terrain pour vérifier les signaux reçus sur les diverses sorties.

Le petit montage décrit ci-dessous consiste en un petit testeur à connecter sur la voie du récepteur incriminé.

Sans grande prétention, il vous donnera la tension de la batterie du RX et la longueur d'impulsion présente sur la voie mesurée.

A défaut de disposer d'un oscilloscope, ce montage peut être utile pour vérifier et corriger la valeur du neutre présent au niveau du RX en allant ajuster la position du potentiomètre adhoc sur la platine du TX.

 

     Testeur d'impulsions d'un RX de radiocommande 

Nous allons réaliser un petit testeur qui pourra rendre service sur le terrain en indiquant la valeur des impulsions présentes en sortie du RX ainsi que la tension d'alimentation de celui-ci.

1. Picaxe 08M2 vers afficheur AXE134

La lecture des impulsions se fera grâce à un petit µC PICAXE 08M2.

Pour le voltmètre, on aurait pu utiliser l'ADC du Picaxe 08M2 mais inutile de "réinventer la roue" !

En effet, on trouve ainsi, pour quelques EuroCents, des petits modules tout faits et munis d'un afficheur à 3 digits.

; To display a voltage (in ADC Value: 0 to 255), change the "Pulsin" instruction to "ReadADC" 
 ; and place a 10K potentiometer between Vcc/Gnd on C.4.

Pour la mise au point du programme, on utilisera un afficheur série Axe134 ainsi qu'un générateur d'impulsions conformes au standard des radiocommandes classiques. (Testeur de servos)

 
                                                                               Platine de mise au point

Sur le module de test, nous afficherons la valeur lissée de Pulsin par la moyenne de 10 mesures successives.

Nous afficherons alors le résultat du calcul final pour exprimer la valeur des impulsions en micro-secondes.

Afin de réduire l'erreur de calcul, on cadence le picaxe à 16Mhz interne, donnant une unité de mesure PULSIN de 2,5µsec

On aurait été plus précis en utilisant la vitesse maximale de 32Mhz  qui donnerait alors une unité de mesure de 1,25 uSec.
Mais le calcul devant ensuite être effectué (*125 /100) entraînerait le dépassement de la valeur d'un Word.

En effet pour une impulsion de 2,2msec, la valeur de Pulsin serait de 1760.

Or 1760 x 125 = 220.000 ! On dépasse ici la capacité d'un Word fixée à  65.536 !


A 16Mhz, l'unité de mesure de la commande PULSIN est de 2,5 µsec.
Il faudra donc multiplier la moyenne des valeurs PULSIN par 2,5 pour obtenir un affichage en microsecondes.
Mais comme le Picaxe ne calcule qu'en valeurs entières, on multipliera par 25 pour ensuite diviser par 10.

Donc, pour une impulsion max de 2,2 msec, PULSIN = 880, à multiplier par 2,5 pour obtenir 2.200 (uSec).

Soit 880 * 25 =  22.000 (OK on ne dépasse pas 65.536) à diviser ensuite par 10 pour afficher 2.200 microsecondes.

Ainsi, pour une variation d'une unité de PULSIN, on aura un précision finale de 2 à 3 microsecondes... ce qui est largement suffisant.

   

      

                     Valeurs de PULSIN en fonction de la vitesse d'horloge du µC Picaxe

 

  PROGRAMME TEST  sur afficheur Série OLED AXE134

;****************************************************

;Pulsin AXE134.bas

;Roger LEGAT 07/10/2020

;Display Pulsin value on LCD/OLED Serial Display

;(0.8msec=800uS to 2.2msec=2200uS)

;Picaxe 08M2 + Serial OLED Axe134

;*****************************************************

 

;*** Programming Directives ***********************

;#SimSpeed 500

;#Terminal 4800

          #Picaxe 08M2

;              __ __

;       Vcc  o|  U  |o  Gnd

;       C.5  x|Rx Tx|x  C.0

;_Pulse C.4  >|ADC  |x  C.1

;       C.3  xPWM|>  C.2  _Display (Serial Axe134)

;              -----

;

; Setfreq Setting (all internal)

; 08M2 => k31, k250, k500, m1, m2, m4, m8, m16, m32

;

; PULSIN MAX to be measured = 2200 usec (2,2 msec)

;  m4   Unit = 10 uSec     2,2msec =  220  (*10 for 2200 uS)

;  m8   Unit =  5 uSec     2,2msec =  440  (*5  for 2200 uS) 

;> m16  Unit =  2,5 uSec   2,2msec =  880  (*25/10 for 2200 uS) 880*25=22000 (<Word 65536 OK)

;  m32  Unit =  1,25 uSec  2,2msec = 1760  (*125/100 for 2200 uS) BUT 1760*125 = 220000 OverWord!

 

;Pins I/O ******************************************************** 
 Symbol _Pulse   = C.4 : Input  C.4

 Symbol _Display = C.2 : Output C.2

 

;Words ***********************************************************

 Symbol Value = w0    ; b0-b1  Value to display on 4 digit  (average of 10 measurements

 Symbol Measure = w1 ; b2-b3  Successive Measurements for the average

 Symbol i = b8       ;working vaiable

 Symbol OffSet = b9

        Offset = 18  ; Eventual compensation of the precision error of the Picaxe

 

;Bytes ***********************************************************

 Symbol DIGIT1 = b4

 Symbol DIGIT2 = b5

 Symbol DIGIT3 = b6

 Symbol DIGIT4 = b7

 

;**** Initialize AXE134 with OLED 4x20# ***********************

 Pause 1500

 Symbol BAUD = N2400_4 'For AXE134 Display

 SETFREQ m4            'For AXE134 Display 

 

 Serout _Display,Baud,(254,1) : Pause 30        'Clear Display

  Serout _Display,Baud,(254,192)'L2 C1

  Serout _Display,Baud,("  Mesure Pulse RX")

  Serout _Display,Baud,(254,212)'L4 C1

  Serout _Display,Baud,("Pulsin AXE134.bas")

  Pause 1500

 Serout _Display,Baud,(254,1) : Pause 30         'Clear Display

 

 Serout _Display,Baud,(254,128)'L1 C1

 Serout _Display,Baud,("RX PULSIN MEASURE")

 

 Serout _Display,Baud,(254,192)'L2 C1

 Serout _Display,Baud,("********************")

 

 Serout _Display,Baud,(254,148)'L3 C1

 Serout _Display,Baud,("Average Value= ")

 

 Serout _Display,Baud,(254,212)'L4 C1

 Serout _Display,Baud,("PULSE= ") 

 

 Serout _Display,Baud,(254,224)'L4 C13

 Serout _Display,Baud,("MicroSec")

 

'#Terminal 19200' (19200-16Mhz , 4800-4Mhz)

;==  MAIN LOOP  ===================================================

 

Setfreq m16 ; Range Pulsin: 0,8msec=320 to 2,2msec=880 ;Pulsin 2,5uS unit for PULSIN best resolution

 

DO

 Value = 0

 For i = 1 to 10 ' 10 successive measurements

  Pulsin _Pulse,1,Measure

  'sertxd ("Pulsin value:  ", #Temp,lf,cr)

  Value = Value+Measure

 Next

 

 Value = Value /10  'Average PULSIN value

 

  'sertxd ("Average value: ", #Value,"-----------",lf,cr)

   Gosub SetDigit

   Gosub SendAverage

  

 Value = Value *25 /10 +OffSet ; Average Value in uSec

  

   'sertxd ("Pulse= ", #Value, cr,lf)

   'sertxd ("*************************",cr,lf)

  Gosub SetDigit

  Gosub SendPulse 

   

LOOP

End ; =============================================================

 

;=========================================================

;***  Sub-Routines ***************************************

;=========================================================

 

SetDigit:

 

  DIGIT1 = Value / 1000

  DIGIT2 = Value / 100 // 10

  DIGIT3 = Value / 10 // 10

  DIGIT4 = Value // 10

 return

;=========================================================

SendAverage: ' Display the Average Pulsin value

 

SETFREQ m4

;  Send this Value to Serial LCD/OLED display AXE134

If DIGIT1 >0 then  ; Blank Digit1 if = zero (Value = 320 to 880)

 Serout _Display,Baud,(254,155)'L3,C8

 Serout _Display,Baud,(#DIGIT1)

Else

 Serout _Display,Baud,(254,163)'L3,C16

 Serout _Display,Baud,(" ") 

Endif

 

 Serout _Display,Baud,(254,164)'L3,C17

 Serout _Display,Baud,(#DIGIT2)

 Serout _Display,Baud,(254,165)'L3,C18

 Serout _Display,Baud,(#DIGIT3)

 Serout _Display,Baud,(254,166)'L3,C19

 Serout _Display,Baud,(#DIGIT4)

 SETFREQ m16 

return

;=========================================================

SendPulse:

 

Setfreq m4 

;  Send Pulse Value in uSec to Serial LCD/OLED display AXE134

If DIGIT1 >0 then  ; Blank Digit1 if = zero (Value = 800uSec to 2200uSec)

 Serout _Display,Baud,(254,219)'L4,C8

 Serout _Display,Baud,(#DIGIT1)

Else

 Serout _Display,Baud,(254,219)'L4,C8

 Serout _Display,Baud,(" ") 

Endif

 

 Serout _Display,Baud,(254,220)'L4 C9

 Serout _Display,Baud,(#DIGIT2)

 Serout _Display,Baud,(254,221)'L4 C10

 Serout _Display,Baud,(#DIGIT3)

 Serout _Display,Baud,(254,222)'L4 C11

 Serout _Display,Baud,(#DIGIT4)

 Setfreq m16 

return

;=========================================================

 

2. Picaxe 08M2 vers afficheur TM1637

 

Pour l'affichage, nous allons maintenant utiliser un afficheur TM1637 étudié ici.

 

 

 

 ;************************************************

;Pulsin to TM1637.bas

;Roger LEGAT

;Rev:25/07/2023

;Display Pulsin value in usec, on 4 LED Digit

;                 0,8msec=800 to 2,2msec=2200

;Picaxe 08M2 + TM1637 4Digits Led Driver

;*************************************************

;

;*** Programming Directives ***********************

;#SimSpeed 500 : #Terminal 19200 ; 19200 @16Mhz, 9400 @4Mhz

 

           #Picaxe 08M2

;              __ __

;       Vcc  o|  U  |o  Gnd

;       C.5  x|Rx Tx|x  C.0

;_Pulse C.4  >|     |>  C.1  _Datas

; _Cfg  C.3  >|     |>  C.2  _Ck

;              -----

;

; Setfreq Setting (08M2 all internal OSC)

; 08M2 => k31, k250, k500, m1, m2, m4, m8, m16, m32

;

; PULSIN MAX to be measured = 2200 usec (2,2 msec)

;  m4   Unit = 10 uSec     2,2msec =  220  (*10 for 2200 uS)

;  m8   Unit =  5 uSec     2,2msec =  440  (*5  for 2200 uS)

;> m16  Unit =  2,5 uSec   2,2msec =  880  (*25/10 for 2200 uS)

;                                        880*25=22000 (<Word 65536 OK)

;  m32  Unit =  1,25 uSec  2,2msec = 1760  (*125/100 for 2200 uS)

;                                   BUT 1760*125 = 220000 OverWord!

 Setfreq m16 'Pulsin 2,5uS unit for PULSIN best resolution

 

;Pins I/O ********************************************************

  Symbol _Clk    = C.2 : Output C.2  ;PullUp R. automatically deactived (because Output)

  Symbol _Datas  = C.1 : Output C.1  ;PullUp R. automatically deactived (because Output) 

 

  Symbol _Pulse  = C.4    : Input C.4  ;PullUp R. not required

  Symbol _Cfg    = pinC.3 : Input C.3

 

  Pullup %01000 ;Pull-Up on C.3 _Cfg

 

;*** Variables **********************

  Symbol Pack=b0      ;Byte to send

  Symbol Value=W1     ;Average Pulsin Value to display

  Symbol Measure=W2   ;Intermediate and successives readings

  Symbol Div=W3       ;For the calculation of the digits

  Symbol i=b8         ;Working variable

  Symbol j=b9         ;Working variable

  ;Symbol OffSet = b10 : OffSet = 0 ;18  ;Adjustment of the internal oscillator drift

 

;Initialize TM1637 *********************************************************  

 

;Symbol TypeAddr=$40      ; Auto-increment Mode (Default)

 Symbol StartAddr=$c0    ;1st Digit Address

 Symbol Brightness=$8c   ; Brighness Level

 

 ;Dirs = %100111 ; Switch all pins to outputs, except C.4-C.3 to input=0   1=Output

 

;Definition of the 10 characters in the EEPROM : 0-9 +Blank

 

;   EEPROM(  0   1   2   3   4   5   6   7   8   9  10 )'Pos10 = Blank

 

'   DATA 0, ($3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00)

 

;The LOOKUP command will finally be used instead of the EEPROM

 

 

 Gosub StartSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

   Pack= Brightness

   GoSub SendPack   ;Set Brightness (Shiftout)

 Gosub StopSeq  '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


 

 

;**** Main Programme Loop ********************************************

DO

  Value = 0

  Measure = 0 'Initialize Value and Measure

 

  Pulsin _Pulse,1,Measure ; First PULSIN measure

 

  If _Cfg=0 then 'Option Config for Calculating the Average PULSIN

     Value = Value + Measure 'There is already an PULSIN executed

    

     For i=1 to 19 'for 19 next successive measurements for display stabilisation

       Pulsin _Pulse,1,Measure 

       Value = Value + Measure

     Next

   Value = Value /20 ;Average of the 20 PULSIN value

  Endif

 

 Value=Measure * 25 /10 ; + offset ;;Conversion of Pulsin Value to uS @m16Mhz

 GoSub SetDigit ; To convert uSec Value to 4 Digits

LOOP

End

 

;=========================================

;***  Sub-Routines ***********************

;=========================================

 

SetDigit:   ;Splitting of the Value in uSec into 4 separate digits

 

;  Decomposition Method:

; ------------------------

 

;   DIGIT1 = Value / 1000

;   DIGIT2 = Value / 100 // 10

;   DIGIT3 = Value / 10 // 10

;   DIGIT4 = Value // 10

 

   Gosub StartSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Pack= StartAddr

   GoSub SendPack ;Sending start address (Shiftout Substitute)

 

   Div=1000 'Initialize Div

 

     For j=1 to 4 ; For Digit 1 to Digit 4

      Pack=Value/Div

 

       If j=1 and Pack=0 then

        Pack= 10 'Eventual Blank character for 1st Digit if Equal to Zero

       Endif

 

   ;****** Conversion of numeral into segments *****************

 

   'Read Pack, b0        ;Pack will contain the numeral description in segments in EEPROM

      Lookup Pack,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$00), Pack ; 0-9,+blank

 

      IF j=1 and Pack<>0 Then 'Decimal Point after 1st Digit if > Zero

        Pack= Pack + 128  'Decimal point ON after 1st Digit

       Endif                                                                          

 

      GoSub SendPack '(Shiftout Substitute)

 

    ;Processing the next digit

      Value=Value//Div   ;Keep the rest of the division

      Div=Div/10         ;Next divider

    Next j

   

    Gosub StopSeq '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

Return

 

;----------------------------------------------------------------------------------

 

SendPack:  ; Ignition of the display segments, Pack bit by bit

 

; The Picaxe 08M2 does not know the Shiftout instruction !

; It is therefore necessary to use a small SHIFTOUT substitute routine.

 

    For i=0 to 7 ;Reading from b0, bit a bit, from bit0 to bit7 LOW weight First

      Low _Clk    

       OutpinC.1 = bit0 'Datas=bit0 - The Datas pin takes the value of bit0

        Pack = Pack/2  ;>>> Shift Right >>> bit1 becomes bit0

      High _Clk

    Next i

 

    Gosub ACKSeq

 

Return

 

;----------------------------------------------------------------------------------

 

StartSeq: ;"I2C"Start

 

  High _Clk

  High _Datas

  Low _Datas

Return

 

;----------------------------------------------------------------------------------

 

ACKSeq:   ;Move to Next Digit Address after ACK

 

  Low _Clk

  High _Clk

  Low _Clk

Return

 

;----------------------------------------------------------------------------------

 

StopSeq:  ;"I2C"Stop

 

  Low _Clk

  Low _Datas

  High _Clk

  High _Datas

Return

 

;==== END of BAS Picaxe Programme ======================================================

 

 

3. PIC 12F675 vers afficheur TM1637

 

Nous allons maintenant finaliser notre projet avec un PIC12F675 en apportant les modifications nécessaires au programme précédent pour le compilateur PicBasic Pro Compiler.
Ce logiciel permettra de créer le fichier .HEX nécessaire à la programmation du PIC12F675.


A noter que nous pourrions également utilser un PIC12F629 qui est en tout point identique , sauf qu'il ne comporte pas de convertisseur ADC.

Mais comme on ne l'utilise pas, il pourrait donc faire parfaitement l'affaire.

 

Sans quartz extérieur ce PIC ne pourra cependant pas être cadencé à plus de 4MHz, ce qui nous donnera une résolution de 10µsec... qui reste encore parfairtement acceptable pour ce type d'application !

 

    

 

 

 

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

'* Name        : PULSIN to TM1637.pbp                                  *

'* Author      : Rg.LEGAT                                                *

'*  Date       : 10/08/2023                                              *

'*  Version    : 1.0                                                     *

'* Compiler    : PICBASIC PRO Compiler 2.6                               *

'* Target PIC  : 8-pin 12F675 or 12F629                                 *

'* Hardware    : AXE091 Experimenter Board                               *

'* Oscillator  : 4MHz internal                                           *

'* Keywords    : PULSIN, TM1637                                          *

'* Description : Program to display PULSIN Value on TM1637 Display       *

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

                                                          

'*** PIC Pinouts/Specifications

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

'          PIC 12F675

'              __ __

'        Vcc +|  U  |- Gnd

'        GP5 x|     |< GP0

'  Pulse GP4 >|     |> GP1 SDA

'   Cfg  GP3 >|     |> GP2 SCK

'              -----

@ Device Pic12F675, intrc_osc, wdt_off, pwrt_on, mclr_off, protect_off                                                               

 

ANSEL = 0; Set Ports as Digital i/o, not analog input

ADCON0 =0; Shut OFF the A/D Converter

CMCON = 7; Shut OFF the Comparator

Option_reg = 0 'Pullup ON

'If R.PullUp are enabled, inputs concerned must be specified in WPU register.

'WPU =  .%...    1=R.selected

'VRCON = 0; Shut OFF the Voltage Reference

 

DEFINE OSC 4    ' Pulsin/Pulsout Resolution =10µsec  => 1ms=100 DEFAULT Value

 

'******* VARIABLES / CONSTANTS  *****************************************

 

 SDA      VAR GPIO.1  'Serial Data pin    OUTPUT

 SCK      VAR GPIO.2  'Serial Clock pin   OUTPUT

 Confg    var GPIO.3  'Instant/Average    INPUT

 Pulse    Var GPIO.4  'Pulsin pin         INPUT

 

 TRISIO= %011000        '0=Output

 GPIO = 0           'Make all pins 0

 

 Measure  VAR Word  'Pulsin Measure

 Value    VAR Word  'Value to display

   I      VAR Byte  'Working variable (20 successive measurements)

 

  CHR1    VAR Byte  '4 digits to send and display

  CHR2    VAR Byte

  CHR3    VAR Byte

  CHR4    VAR Byte

 

'These are the 3 commands used by the TM1637 controller:

 'CMD1 CON $40   'CMD1=$40 (Facultative Default Command: Auto Increment Mode)

  CMD2 CON $C0   'CMD2=$C0 Start first digit position(Left most)

  CMD3 CON $8A   'CMD3=$8A End command: turns display ON and sets brightness

                 '(CMD3=$8F for max brightness - see TM1637 spec sheet)

                 

'******* INCLUDE and ASSEMBLER  ***********************************************

                

; * Write the OSCCAL Value at Last Address $3FF with the IC-Prog Editor

 Asm

   BSF     STATUS,RP0    ; Set File Register Bank to 1

   CALL    0x3FF         ; Retrieve Factory Calibration Value *

   MOVWF   OSCCAL        ; Update Register with factory CAL Value

   BCF     STATUS,RP0    ; Set File Register Bank to 0                 

 Endasm


'*******  4 Display Auto Test  ************************************************

'Activate all segments and decimal points "8.8.8.8"

  CHR1 = $FF : CHR2 = $FF : CHR3 = $FF : CHR4 = $FF    

   Gosub SEND                              

   Pause 2000

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

 

INIT:

 ; EEPROM(0   1   2   3   4   5   6   7   8   9   10 ) Pos10 = Blank

 DATA @0,$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F,$00 ; Write to Eeprom

 

MAINLOOP: '======  MAIN LOOP =================================================

 

Value = 0 'Reset Value

 

IF confg = 0 then  'AVERAGE

  For i=1 to 20 '20 successive measurements for display stabilisation

    Pulsin Pulse,1,Measure

    Value = Value + Measure

  Next

   Value = Value /20    ;Average PULSIN value

   Value = Value * 10   ;Conversion to uS @4Mhz

ELSE

  Pulsin Pulse,1,Measure  ;INSTANT

   Value = Measure * 10

Endif 

 

'   Decomposition Method:

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

   CHR1 = Value / 1000

    IF CHR1 = 0 then CHR1 = 10 'Blank Char.

   Read CHR1,CHR1

    IF CHR1>0 then CHR1 = chr1+$80 'Decimal Point

 

   CHR2 = Value / 100 // 10

    IF CHR2 = 0 and chr1=10 then CHR2 =10

   Read CHR2,CHR2

  

   CHR3 = Value / 10 // 10

    IF CHR3 = 0 and chr3=10 then chr3 = 10

   Read CHR3,CHR3

   

   CHR4 = Value // 10

   Read CHR4,CHR4

 

 Gosub Send

 

Goto Mainloop

End

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

'*****   SUBROUTINES ***************************************

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

 

Send: 'Standard Serie Transmission LSB First

      'This subrountine outputs all 4 characters to the LED

      'SHIFTOUT Mode 0 works - LSB first, clock normally low

 

   'This shifts out the 8-bit write command character $40

    ' GosubB StartSeq                              

    '   SHIFTOUT SDA, SCK, 0, [CMD1] '$40 Default (So, facultative)   

    '  Gosub AckSeq

    ' Gosub StopSeq

   

 

  'Now, this shifts out the 8-bit command character $C0 that places

  'the FIRST CHARACTER CHR1 in the leftmost digit location

 

    Gosub StartSeq

    SHIFTOUT SDA, SCK, 0, [CMD2] '$C0

     Gosub AckSeq

 

 

  '        And then writes all 4 digits.

  'SHIFTOUT CHR1-CHR4 to fill the display left to right

  'TM1637 auto-increment mode because DEFAULT => CMD1= $40

                                                  

      SHIFTOUT SDA, SCK, 0, [CHR1]               

       Gosub AckSeq                               

                                                   

      SHIFTOUT SDA, SCK, 0, [CHR2]                   

       Gosub AckSeq

   

      SHIFTOUT SDA, SCK, 0, [CHR3]

       Gosub AckSeq

   

      SHIFTOUT SDA, SCK, 0, [CHR4]

       Gosub AckSeq

       Gosub StopSeq

       

  'The output sequence ends with CMD3 which turns on the display

  'and set the brightness duty cyle

 

    Gosub StartSeq

     SHIFTOUT SDA, SCK, 0, [CMD3] '$8A 25%          

     Gosub AckSeq                                   

    Gosub StopSeq

Return

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

 StartSeq:                                         

   High SCK                                        

   High SDA   'The Start sequence takes SDA low and then SCK low 5 uSec later

   PauseUs 5                                      

   Low SDA

   PauseUs 5

 Return

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

 AckSeq:

    Low SCK              'The ACK waits for the TM1637 to assert low on SDA

    PauseUs 5            'and then replies with a 5 uSec ACK pulse on SCK

     IF SDA = 0 THEN

       High SCK

       PauseUs 5

       Low SCK

     ENDIF    

 Return

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

 StopSeq:  

    Low SCK   'The stop sequence takes SCK high and then SDA high 5 uSec later

    Low SDA

    PauseUs 5

    High SCK

    PauseUs 5

    HIGH SDA

    PauseUs 5

    Low SDA

 Return

 

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

'=== END OF PBP ==============================================================

 

;These simplified routines are also valid !

StartSeq:

  High sck

  High sda

  Low sda
Return

 

AckSeq:

  Low SCK

  High SCK

  Low SCK

Return

 

StopSeq:

  Low SCK

  Low SDA

  High SCK

  High SDA

Return

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

 

 

 

      Réalisation pratique

Afin de rendre ce petit montage totalement autonome, il sera alimenté par la tension d'alimentation du RX qui sera prélevée sur la sortie analysée.

Cependant, il faut veiller à ce que cette tension ne dépasse pas les 5V max que peut supporter le Picaxe!

De même, la tension à appliquer en entrée du µC Picaxe ne pourra dépasser cette tension d'alimentation.

Il ne sera donc pas inutile de limiter la tension du signal d'entrée par une diode Zener.

Sachant qu'un RX peut parfois être alimenté jusqu'à 6V il faudra donc absolument veiller à stabiliser la tension du montage à 5 Volts max et limiter la tension en entrée du µC.

            

 Résultat de mes mesures:

Tension des impulsions délivrées par le Récepteur, en fonction de sa tension d'alimentation (VRX).

Pour la limitation de tension en entrée du µC, nous allons utiliser une diode Zener et pour l'alimentation du µC, nous allons choisir un "Low Drop Voltage Regulator".

Nous avions déjà utilisé un tel régulateur pour le ralentisseur de servo et l'élargisseur de course de servo à la page montages pour Radios Vintage.

Contrairement aux régulateurs de la série 78XX qui exigent que la tension d'entrée soit au moins 2,5V supérieure à la tension de sortie, un "Low Drop" se contentera de moins d'un demi volt !

Je vais juste ici vous présenter deux de ces régulateurs:

1. LM2940CT-5.0

Disponible en boîtier TO220, il est compatible avec les régulateurs de la série 78xx.
Il existe en plusieurs versions suivant la tension de sortie nécessaire: 2.5V, 3V, 3.3V, 3.6V et 5V

 Caractéristiques:

    Vin Max = 26V
    I Out       = 1A *
 
    Vdrop   = 500mV

 

 

   
* Par l'adjonction d'un transistor de puissance le courant max peut être augmenté.
   Il existe divers schémas dont celui du DataSheet officiel.

Deux capas sont nécessaires pour le bon fonctionnement: 0,47µF en entrée et au moins 22µF en sortie.

 

2. LP2950-5.0

Disponible en petit boîtier TO-92, il existe en plusieurs versions suivant la tension de sortie nécessaire: 2.5V, 3V, 3.3V, 3.6V et 5V
Le courant de sortie est cependant ici limité à 150 mA !

 Caractéristiques:

   Vin Max = 30V
    I Out      = 150mA

    Vdrop   = 380 mV

 

 

 

 

 

 Il est recommandé de placer une capa de 1µF à l'entrée et une autre d'au moins 2,2µF en sortie.

Attention à la configuration des broches qui sont inversées par rapport à la logique des 78xx !

L'entrée V.in se fait à la broche 3 !

 

 

Schéma et platine

Vu le besoin d'alimenter plusieurs segments LED, et bien que le driver TM1637 multiplexe probablement les 4 afficheurs, je vais opter pour un LM2940CT-5.0 (1Amp.en boîtier TO220) 

        
Cette platine peut ainsi se souder sous le module TM1637. 

Si on utilise un Picaxe 08M2 à la place d'un PIC 12Fxxx, il faut ajouter la résistance Pull-Down sur le port C.5-RX ou activer la commande "DISCONNECT"!     

        

 

MODIFICATIONS

 Après avoir réalisé le circuit de ci-dessus, j'ai trouvé nécessaire de lui apporter quelques modifications !

En effet, les régulateurs soit disant "LOW-DROP", (issus du marché chinois), ne m'ont pas donné satisfaction dans la mesure où ils provoquaient une chute de tension bien trop importante !

Cette chute de tension rendant inopérant les afficheurs et/ou le MCU ...

Le rôle du régulateur était de limiter la tension VDD du Pic, ou du Picaxe, dans le cas précis où le récepteur serait alimenté par sa tension maximale autorisée de 6 volts.

En effet les Data-Sheet de nos agréables petits MCU nous précisent que leur tension VDD Max est de 5,5 Volts.

 Il existe alors deux moyens simples de réguler VDD du MCU (Pic ou Picaxe): Une diode Zener de 4v7 associée à sa résistance série, ou, une simple diode 1X4xxx en série sur la ligne VDD.

La solution retenue a alors été de placer une diode en série vers VDD.

Cette "simple" diode, par laquelle passe également le courant consommé par l'afficheur va provoquer une chute de tension de l'ordre de 0,7 volt.

 
                                               Le port C.3 permettra la lecture d'une mesure instantanée ou une moyenne, plus stable, de 19 mesures.

                                   

                        Réalisation finale, double circuit, dans un boîtier incliné pour une lecture agréable


Nous voyons alors dans le tableau des mesures effectuées que même pour une alimentation du récepteur en 6 volts, VDD reste inférieur à 5,5 Volts.

Nous constatons aussi que la tension des impulsions appliquées à l'entrée du Microcontrôleur ne dépassent jamais son VDD.

Bien que les entrées des MCU soient protégées par des diodes de clamping, il vaut toujours  mieux limiter le seuil des tensions d'entrée.

C'est la raison de la régulation par diode Zener qui est placée sur le signal à mesurer.

                            

Enfin, l'entrée C.3 est ici utilisée pour configurer un l'affichage de la moyenne des impulsions mesurées pour une stabilisation de la lecture, si nécessaire.

Des pads sont également prévus sur les ports non utilisés (C.0 et C.5), permettant d'ajouter ultérieurement des fonctions additionnelles.

Il est donc aussi utile de prévoir quelques pads VCC et GND supplémentaires pour un éventuel besoin ultérieur...

Ne nous privons jamais de ce Luxe !

 

     Choix du mini voltmètre 

On trouve facilement des petits modules voltmètres pour des prix dérisoires.
Ils présentent généralement trois afficheurs 7 segments Led proposés en diverses couleurs. (rouge, vert, bleu, jaune, blanc).
Enfin, ils comportent souvent une petite résistance ajustable permettant de calibrer parfaitement le voltmètre.

Notons aussi qu'il en existe pour diverses plages de tensions à mesurer.

Ces modules se déclinent cependant en deux versions différentes: modules à 2 fils ou à 3  fils.

 Module voltmètre à deux fils

      

Ce module ne nécessite pas d'alimentation indépendante de la tension mesurée.
En effet, il prélève sa tension d'alimentation directement sur la tension à mesurer.

Cela implique néanmoins un inconvénient !
Les leds des afficheurs ont besoin d'au moins 2,5 volts pour s'allumer...
Notons aussi que les leds s'alimentant sur la source mesurée, tireront du courant sur celle-ci.

Il ne sera donc jamais possible de mesurer et d'afficher des tensions inférieures à 2,5 volts !

Néanmoins, dans le cas présent, une telle basse tension ne suffirait pas non plus à alimenter le récepteur et ses servos.
Un module à deux fils pourrait donc parfaitement convenir pour notre usage dans ce testeur de récepteur, partant du principe
qu'un défaut d'allumage des afficheurs signifierait une tension d'alimentation du récepteur insuffisante.

La tension à mesurer (2,5 à 30v.) se prend ici simplement entre le fil rouge (+) et le fil noir (Gnd).

 

Module voltmètre à trois fils

      

Le module à trois fils présente: une masse commune (noir), une alimentation du module (rouge) et enfin le fil (jaune ou blanc) pour la tension à mesurer.

L'alimentation du module devra être assurée par une tension indépendante de 3 à 12 volts.

Nous pourrons ainsi effectuer des mesures pour des tensions inférieures à 1 volt sans consommer le moindre courant sur la source mesurée.

La plage de mesure est alors généralement de 0 à 30 volts.

 

 

 


 

 Version imprimable de la page       Page:  Testeur_rx.htm 

  http://extremetracking.com/open?login=rglalpmn

 

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