Autor Tema: CCS ver.4.1xx & ejemplos modBUS  (Leído 3915 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
CCS ver.4.1xx & ejemplos modBUS
« en: 31 de Marzo de 2011, 13:43:36 »
Hola amigos; voy directamente al grano: mi intención es comunicar mi PC (maestro) a través del hiperterminal "Modbus Poll", y un microcontrolador PIC(esclavo), estoy probando con el 16F887 y con el 18F4550.

En el compilador dispongo además del driver "modbus.c" de varios programas ejemplo, en este caso el que establece la comunicación con el PIC como esclavo.
He visitado la web de modbus y el blog de "pacala" y me ayudado a entender el protocolo.

Estoy intentando escribir un bit (función 0x05: "write single coil") y encender un led asociado a un puerto del microcontrolador. Utilizo la codificación de datos segun el estándar RTU.

Una duda que tengo: ¿dónde indica en la rutina del esclavo que id tiene? ¿01hex<->3Fhex?.

Dónde recibo los datos está claro:

#define MODBUS_ADDRESS 0XF7

Si alguién probó este ejemplo agradezco me de algo de luz; cualquier aportación será bien recibida.

Desconectado daltonico82

  • PIC12
  • **
  • Mensajes: 89
Re: CCS ver.4.1xx & ejemplos modBUS
« Respuesta #1 en: 01 de Abril de 2011, 12:59:22 »
Analizando el ejemplo de CCS dice:

Hardware UART:                                                  ////
//// If you use a hardware UART, make sure MODBUS_SERIAL_INT_SOURCE  ////
//// is set to MODBUS_INT_RDA, MODBUS_INT_RDA2, MODBUS_INT_RDA3, or  ////
//// MODBUS_INT_RDA4 depending on which UART you are using.  Also,   ////
//// when using a hardware UART you do not need to specify the TX    ////
//// and RX pins.  The driver figures them out for you.              ////
////                                                                 ////
//// Communicating with PC software:                                 ////
//// To communicate with a PC, connect the board to your computer    ////
//// using the serial cable provided with your board.  Then          ////
//// uncomment the #define USE_WITH_PC 1 line.  In this              ////
//// configuration the PC is the master and the PIC is the slave. 

Luego el programa está extructurado del siguiente modo:
Código: [Seleccionar]
#define USE_WITH_PC 1
#define (__PCH__)

#if defined(__PCD__)
#include <24FJ128GA006.h>
#fuses PR,HS,NOWDT
#use delay(clock=20M)
#elif defined(__PCH__)
#include <18f4550.h>
#fuses HS, NOWDT
#use delay(clock=20M)
#else
#include <16F887.h>
#fuses HS,NOWDT
#use delay(clock=20M)
#endif

#define MODBUS_TYPE MODBUS_TYPE_SLAVE
#define MODBUS_SERIAL_TYPE MODBUS_RTU     //use MODBUS_ASCII for ASCII mode

#define MODBUS_SERIAL_RX_BUFFER_SIZE 64
#define MODBUS_SERIAL_BAUD 9600

#ifndef USE_WITH_PC
#define MODBUS_SERIAL_INT_SOURCE MODBUS_INT_EXT
#if defined(__PCD__)
#define MODBUS_SERIAL_TX_PIN PIN_D8   // Data transmit pin
#define MODBUS_SERIAL_RX_PIN PIN_F6   // Data receive pin
//The following should be defined for RS485 communication
//#define MODBUS_SERIAL_ENABLE_PIN   0   // Controls DE pin for RS485
//#define MODBUS_SERIAL_RX_ENABLE    0   // Controls RE pin for RS485
#else
#define MODBUS_SERIAL_TX_PIN PIN_B1   // Data transmit pin
#define MODBUS_SERIAL_RX_PIN PIN_B0   // Data receive pin
//The following should be defined for RS485 communication
//#define MODBUS_SERIAL_ENABLE_PIN   0   // Controls DE pin for RS485
//#define MODBUS_SERIAL_RX_ENABLE    0   // Controls RE pin for RS485
#endif
#else
#define MODBUS_SERIAL_INT_SOURCE MODBUS_INT_RDA
#endif

#include <modbus.c>

#define MODBUS_ADDRESS 0xF7

Si mi intención es utilizar la UART pero  tal y como está el progrma me lleva al uso de interrupcion externa. ¿Que me aconsejais? ¿INT_RDA ó INT_EXT?


 

anything