Page d'accueil
Alim de labo
GBF
GBF num.
LCD graphiques
Oscilloscope
Journal Lumineux
Winamp LCD
Détecteur Métaux
Analyseur
Horloge
Minute Fer
PIC16F84 i2c
Prog. PIC
Ampli 70W
Ampli ponté 120W
Ampli MOS 200W
TempLogger
Ampli TV
Divers
LCDbin
Softs divers
Modélisme
VRML / OpenGL
Liens
Impression Typons

 

 

Convertisseur RS232-RS485

Il existe plusieurs types de convertisseur RS232.
Vous trouverez ici le schéma d’un convertisseur RS232-RS485 que j’ai conçu. 


Mon convertisseur RS232-RS485

Ce convertisseur transforme les signaux RS232 d’un PC en signaux différentiels RS485. Il fonctionne en mode half-duplex uniquement. Le sens de communication est piloté par le signal de contrôle RTS du port série. L’alimentation est issue du PC ou d’un bloc secteur 9V continu.
Le MAX232 assure l’adaptation TTL - +/-12V et le MAX487 (ou 75176) la conversion TTL - Différentiel.
Le débit maximum est de 115KBPS pour des distances allant jusqu’au kilomètre.
Le câblage du bus est très important pour obtenir un bon fonctionnement de celui-ci. Il est constitué d’une paire torsadée d’impédance 120 pour diminuer les parasites de mode commun.

 

On doit absolument fermer le bus aux 2 extrémités par des résistances de 120 pour réduire les perturbations. Le bus doit être linéaire et non en étoile. De plus, la longueur des raccords en « T » doit être réduite au maximum.



Le nombre d’esclave maximum est limité à 32 avec des drivers standards type SN75176 et à 128 avec des MAX487.
Vous pouvez donc réaliser un mini réseau domotique, par exemple avec une dizaine de microcontroleurs et de drivers SN75176, supervisé par un PC et cet adaptateur de niveaux. On peut imaginer le câblage d’une centrale d’alarme sur un seul bus ou le pilotage d’éclairages, de volets roulants ...
 

 Schéma (Gif)

 Schéma + typon PDF

 Cliquez ici pour voir comment faire pour imprimer vos typons.

Liste des composants

 

Exemple d’application en Visual Basic 6 :

Au passage je vous recommande 2 logiciels pour cette application : ModBusView (Ocean Controls) si vous faites du ModBus avec ce montage et PortMon pour espionner les ports série de votre PC.

Il faut insérer un objet MSComm sur une feuille et le paramétrer ainsi :

1) cochez “Microsoft Comm Control 6.0” dans la liste des composants



2) insérez un composant MSComm et paramétrer le comme suit



 

Emission de données :

Option Explicit
Dim BufferRX As Variant
Dim flag_RX As Byte

Function Emission()
    MSComm1.RTSEnable = True                ' emission
    MSComm1.Output = ":"
    MSComm1.Output = "A"
    MSComm1.Output = "B"
    MSComm1.Output = Chr$(13)               ' eof
    MSComm1.Output = Chr$(10)               '
    '    Do
    '        Ret = DoEvents()
    '    Loop Until MSComm1.OutBufferCount = 0 'Or CancelSend
    MSComm1.Output = Chr$(0)                 ' ou tempo avant de repasser en
    MSComm1.RTSEnable = False               ' reception
End Function

 

Réception de données :

Private Sub MSComm1_OnComm()
    ' Sélectionne en fonction de la propriété CommEvent.
    Select Case MSComm1.CommEvent
        ' Messages d'événement.
        Case comEvReceive
            Dim Buffer As Variant
            Buffer = MSComm1.Input
            Debug.Print "Rx - " & StrConv(Buffer, vbUnicode)
            Reception (StrConv(Buffer, vbUnicode))
        Case comEvSend
        Case comEvCTS
        Case comEvDSR
        Case comEvCD
        Case comEvRing
        Case comEvEOF
    End Select
End Sub

Exemple de fonction de réception :
Détecte le caractère 0x3A comme Start et 0x0A comme Stop.

Function Reception(buf As String)
    Dim cpt As Byte, i
    cpt = 0
    If flag_RX = 0 Then
        ' cherche le caractère de start
      Do
        i = InStr(buf, Chr$(58))        ' caractère 0x3A (":")
        If i Then
              If i = 1 Then
                buf = Mid$(buf, 2)
                BufferRX = buf
                Debug.Print "trouvé = " & BufferRX
                flag_RX = 1
              Else
                buf = Mid$(buf, 2)      ' décale la string de 1 à gauche
              End If
        End If
      Loop While i
    Else
      BufferRX = BufferRX & buf
      lbl_debug1.Caption = BufferRX
     
      Do
        i = InStr(buf, Chr$(10))        ' caractère 0x0A ("\n")
        If i Then
              If i = 1 Then
                buf = Mid$(buf, 2)
                flag_RX = 2
              Else
                buf = Mid$(buf, 2)      ' décale la string de 1 à gauche
              End If
        End If
      Loop While i
      If flag_RX = 2 Then
        BufferRX = Left$(BufferRX, Len(BufferRX) - 2)
        Receive_decode (BufferRX)
      End If
    End If
End Function
 

Sébastien JEFFROY ©2003-2007         contact :   Sébastien JEFFROY