Communication série RS485 avec PIC 18F2550
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Communication série RS485 avec PIC 18F2550



  1. #1
    tinaarfa

    Communication série RS485 avec PIC 18F2550


    ------

    Salem,
    j'ai besoin des exemples des programmes pic (langage ccs) contenant la liaison RS485 et les deux instructions put et get !!!!?
    _______

    -----

  2. #2
    carcan

    Re : Communication série RS485 avec PIC 18F2550

    Hello !

    c'est exactement la même chose que en RS232 ... sauf que dans ta ligne #use RS232, tu ajoutes "enable=pinxx" pour la commande du driver RS485.

    A+++
    Laurent

  3. #3
    tinaarfa

    Re : Communication série RS485 avec PIC 18F2550

    avez vous un exemple de programme ??!

  4. #4
    carcan

    Re : Communication série RS485 avec PIC 18F2550

    NON

    A+
    Laurent

  5. A voir en vidéo sur Futura
  6. #5
    tinaarfa

    Re : Communication série RS485 avec PIC 18F2550

    ok merci

    j'ai écris un programme qui permet de récupérer une tension par la commande 0025H et recevoir une valeur phase voltage Ua entre 0 et 99999 (de type Word) :

    #include "18F2550.h"
    #fuses HS,NOWDT,NOBROWNOUT,NOLVP,PUT
    #use delay(clock=4M)

    #use rs232 (baud=9600,parity=N, xmit=PIN_C6, rcv=PIN_C7,bits=8, stream=PIC)

    #define RS485_ID 0x10
    #define RS485_DEST_ID 0x01
    #define RS485_USE_EXT_INT TRUE /* configuration de la communication série */
    #include <RS485.c>

    #byte PORTB = 0xF81
    #byte PORTC = 0xF82
    #byte TRISA = 0xF92
    #byte TRISB = 0xF93
    #byte TRISC = 0xF94


    int buffer[8]; // Message buffer
    int next_in = 0;
    int next_out = 0;

    #INT_RDA
    void serial_isr()
    {
    int t;

    buffer[next_in] = fgetc(RS485);
    t = next_in;
    next_in = (next_in+1) % sizeof(buffer);
    if(next_in == next_out)
    next_in=t; // Buffer full !!
    }

    int msg[8];
    void Message_Transmis()
    {
    unsigned int highbyte,lowbyte;
    unsigned int crc,thisbyte,i,shift,lastbit; /* 16 bit word values */
    msg[0] = 0x01; /* slave address */
    msg[1] = 0x03; /* read function */
    msg[2] = 0x00; /* address hi byte */
    msg[3] = 0x25; /* address lo byte */
    msg[4] = 0x00; /* number of data points hi byte */
    msg[5] = 0x01; /* number of data points lo byte */
    /* compute the CRC over the first 6 bytes of the message */
    crc=0xffff;
    for (i=0; i<=5; i++)
    { thisbyte = msg[i];
    crc = crc ^ thisbyte;
    for (shift = 1; shift <= 8; shift++)
    { lastbit = crc & 0x0001;
    crc = (crc >> 1) & 0x7fff;
    if (lastbit == 0x0001)
    { crc = crc ^ 0xa001 ;
    }
    }
    }
    highbyte = (crc >> 8) & 0xff;
    lowbyte = crc & 0xff;
    msg[6] = lowbyte;
    msg[7] = highbyte;
    }


    void main ()
    {
    int data_received[8];
    int j;
    rs485_init();
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);

    while(True)
    {
    rs485_wait_for_bus(FALSE);
    if (input(pin_b1))
    {
    rs485_send_message(RS485_DEST_ ID, 8, msg);
    output_high(PIN_b4);
    delay_ms(1000);
    output_low(PIN_b4);

    }

    if(rs485_get_message(data_rece ived, FALSE))
    {
    for(j=0; j<7; ++j)
    data_received[j] = buffer[j];

    if(data_received[2]==0x17C)
    {
    output_high(PIN_b5);
    delay_ms(1000);
    output_low(PIN_b5);
    }
    }
    }
    }



    Qui peux le voir et le corriger !!
    Dernière modification par tinaarfa ; 12/05/2014 à 15h48.

  7. #6
    carcan

    Re : Communication série RS485 avec PIC 18F2550

    Hello !

    ça m'a l'air bien compliqué tout ça ... il doit y avoir bcp plus simple
    Donc, ce que je vois : tu dois communiquer via une laison RS485 en protocole MODBUS.

    Oublie le include RS485.c, ça a l'air fort tiré par les cheveux

    utilise simplement la configuration "classique" : #use rs232 (baud=9600,parity=N, xmit=PIN_C6, rcv=PIN_C7,bits=8, enable=PIN_C0) (avec C0 la pin qui va aux pattes 2 et 3 du MAX 485, à adapter en fonction de ton hardware)

    pour l'envoi de trame : printf("%s",msg);
    pour la réception : utilises l'interruption RDA avec une routine qui détecte ta trame.

    Donne aussi un schéma de ton montage ou bien décris précisément à quoi servent toutes tes I/O

    A+++
    Laurent

  8. #7
    tinaarfa

    Re : Communication série RS485 avec PIC 18F2550

    Salem,

    Le Schéma en ajoutant un LCD
    Images attachées Images attachées  

Discussions similaires

  1. communication PIC 18F2550 et PC par le port USB aidez moi SVP
    Par invite08063aee dans le forum Électronique
    Réponses: 3
    Dernier message: 29/04/2012, 22h13
  2. communication PIC 18F2550 et PC par le port USB aidez moi SVP
    Par invite08063aee dans le forum Électronique
    Réponses: 2
    Dernier message: 24/04/2012, 22h32
  3. Communication RS485 avec un protocole spécifique
    Par invite4e6177a6 dans le forum Électronique
    Réponses: 15
    Dernier message: 25/04/2011, 16h39
  4. communication série avec 68HC11
    Par invitebef35db2 dans le forum Électronique
    Réponses: 5
    Dernier message: 30/01/2007, 21h42
  5. communication avec matlab via un rs485
    Par invite75b106ca dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 27/10/2005, 22h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...