Autor Tema: Modulo ECAN pic18f: Problema Transmisión  (Leído 1575 veces)

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

Desconectado zivit

  • PIC10
  • *
  • Mensajes: 22
Modulo ECAN pic18f: Problema Transmisión
« en: 24 de Abril de 2014, 14:45:17 »
Hola a todos,

me estoy rompiendo la cabeza con el modulo ECAN del pic18f2480. Os explico, estoy utilizando la librería ECAN.h de microchip, la cual se encarga de interactuar con el modulo. Estoy utilizando un driver MCP2551 conectado a este modulo.

El problema es el siguiente: Inicializo el modulo y empiezo a enviar, mete el primer paquete de datos en un buffer TX, pone TXREQ en 1, hace lo mismo con el segundo paquete, pero cuando va a meter otro paquete mas, no puede ya que los buffers están llenos. En otras palabras TXREQ sigue en 1, no detecta que lo haya enviado.

Estoy trabajando en modo normal, no tengo el bus conectado a otro PIC, y se que si no se recibe el ACK del destino, no se detecta como paquete enviado. Pero tengo una sonda pinchando en el H y L del CAN y no veo ningún movimiento. Es decir, el PIC no envía absolutamente nada.

Ya no se que mas hacer, he revisado la inicialización pero lo veo todo correcto, y el programa principal no tiene mas que el uso de una de las funciones que tiene la librería ECAN.h.

Si alguien ha trabajado antes con esta librería o tenia algún error similar, agradecería algún consejillo.

Muchas gracias

Un saludo.

Adjunto el programa principal y el fichero de definiciones para la inicialización. Datos del timming: clk=20MHz, BR=250Kbps

Código: [Seleccionar]
/*###########################################################################
*This file is generated by Microchip Application Maestro
*DO NOT MODIFY MANUALLY
*###########################################################################*/
#ifndef  _ECAN_DEF
#define _ECAN_DEF
//
//
// ECAN Routine Mode:
// Possible values are ECAN_LIB_MODE_FIXED, ECAN_LIB_MODE_RUN_TIME
//   Use ECAN_LIB_MODE_FIXED if run-time selection of mode is not required.
//   Use ECAN_LIB_MODE_RUN_TIME if run-time selection is required.
#define ECAN_LIB_MODE_VAL ECAN_LIB_MODE_FIXED
//
// ECAN Functional Mode to be used in ECANInitialize().
// Possible values are ECAN_MODE_0, ECAN_MODE_1, ECAN_MODE_2
#define ECAN_FUNC_MODE_VAL ECAN_MODE_0
//
// Mode to leave ECAN after ECANInit.
// Possible values are ECAN_INIT_NORMAL, ECAN_INIT_CONFIGURATION, ECAN_INIT_LOOPBACK, ECAN_INIT_DISABLE
#define ECAN_INIT_MODE ECAN_INIT_NORMAL
//
// SJW value - Value must be between 1-4 inclusive. OK
#define ECAN_SJW_VAL 1
//
// BRP value - Value must be between 1-64 inclusive. OK
#define ECAN_BRP_VAL 1
//
// PHSEG1 value - Value must be between 1-8 inclusive. OK
#define ECAN_PHSEG1_VAL 8
//
// PHSEG2 value - Value must be between 1-8 inclusive. OK
#define ECAN_PHSEG2_VAL 8
//
// PROPSEG value - Value must be between 1-8 inclusive. OK
#define ECAN_PROPSEG_VAL 3
//
// Use freely progrmable PHSEG2 or calculated value. OK --
#define ECAN_PHSEG2_MODE_VAL ECAN_PHSEG2_MODE_PROGRAMMABLE
//
// Bus Sample Mode OK --
#define ECAN_BUS_SAMPLE_MODE_VAL ECAN_BUS_SAMPLE_MODE_ONCE
//
// Wakeup Mode OK --
#define ECAN_WAKEUP_MODE_VAL ECAN_WAKEUP_MODE_ENABLE
//
// Filter Mode OK --
#define ECAN_FILTER_MODE_VAL ECAN_FILTER_MODE_DISABLE
//
// CANTX1 Drive Mode OK
#define ECAN_TXDRIVE_MODE_VAL ECAN_TXDRIVE_MODE_VDD
//
// CANTX2 pin mode
#define ECAN_TX2_MODE_VAL ECAN_TX2_MODE_DISABLE
//
// CANTX2 Source
#define ECAN_TX2_SOURCE_VAL ECAN_TX2_SOURCE_COMP
//
// CAN Capture Mode
#define ECAN_CAPTURE_MODE_VAL ECAN_CAPTURE_MODE_DISABLE
//
// RXB0 Recieve Mode
#define ECAN_RXB0_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// RXB0 Double Buffer Mode
#define ECAN_RXB0_DBL_BUFFER_MODE_VAL ECAN_DBL_BUFFER_MODE_DISABLE
//
// RXB1 Recieve Mode
#define ECAN_RXB1_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B0 Tx/Rx mode Mode
#define ECAN_B0_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B0 Recieve Mode
#define ECAN_B0_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B0 Auto RTR Mode
#define ECAN_B0_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// B1 Tx/Rx mode Mode
#define ECAN_B1_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B1 Recieve Mode
#define ECAN_B1_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B1 Auto RTR Mode
#define ECAN_B1_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// B2 Tx/Rx mode Mode
#define ECAN_B2_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B2 Recieve Mode
#define ECAN_B2_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B2 Auto RTR Mode
#define ECAN_B2_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// B3 Tx/Rx mode Mode
#define ECAN_B3_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B3 Recieve Mode
#define ECAN_B3_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B3 Auto RTR Mode
#define ECAN_B3_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// B4 Tx/Rx mode Mode
#define ECAN_B4_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B4 Recieve Mode
#define ECAN_B4_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B4 Auto RTR Mode
#define ECAN_B4_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// B5 Tx/Rx mode Mode
#define ECAN_B5_TXRX_MODE_VAL ECAN_BUFFER_TX
//
// B5 Recieve Mode
#define ECAN_B5_MODE_VAL ECAN_RECEIVE_ALL_VALID
//
// B5 Auto RTR Mode
#define ECAN_B5_AUTORTR_MODE ECAN_AUTORTR_MODE_DISABLE
//
// RXF0 Filter Enable/Disable
#define ECAN_RXF0_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF0 Filter Type
#define ECAN_RXF0_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF0 Value
#define ECAN_RXF0_VAL 0x0L
//
// RXF0 Buffer Link
#define ECAN_RXF0_BUFFER_VAL RXB0
//
// RXF0 Mask Link
#define ECAN_RXF0_MASK_VAL ECAN_RXM0
//
// RXF1 Filter Enable/Disable
#define ECAN_RXF1_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF1 Filter Type
#define ECAN_RXF1_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF1 Value
#define ECAN_RXF1_VAL 0x0L
//
// RXF1 Buffer Link
#define ECAN_RXF1_BUFFER_VAL RXB0
//
// RXF1 Mask Link
#define ECAN_RXF1_MASK_VAL ECAN_RXM0
//
// RXF2 Filter Enable/Disable
#define ECAN_RXF2_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF2 Filter Type
#define ECAN_RXF2_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF2 Value
#define ECAN_RXF2_VAL 0x0L
//
// RXF2 Buffer Link
#define ECAN_RXF2_BUFFER_VAL RXB1
//
// RXF2 Mask Link
#define ECAN_RXF2_MASK_VAL ECAN_RXM1
//
// RXF3 Filter Enable/Disable
#define ECAN_RXF3_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF3 Filter Type
#define ECAN_RXF3_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF3 Value
#define ECAN_RXF3_VAL 0x0L
//
// RXF3 Buffer Link
#define ECAN_RXF3_BUFFER_VAL RXB1
//
// RXF3 Mask Link
#define ECAN_RXF3_MASK_VAL ECAN_RXM1
//
// RXF4 Filter Enable/Disable
#define ECAN_RXF4_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF4 Filter Type
#define ECAN_RXF4_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF4 Value
#define ECAN_RXF4_VAL 0x0L
//
// RXF4 Buffer Link
#define ECAN_RXF4_BUFFER_VAL RXB1
//
// RXF4 Mask Link
#define ECAN_RXF4_MASK_VAL ECAN_RXM1
//
// RXF5 Filter Enable/Disable
#define ECAN_RXF5_MODE_VAL ECAN_RXFn_ENABLE
//
// RXF5 Filter Type
#define ECAN_RXF5_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF5 Value
#define ECAN_RXF5_VAL 0x0L
//
// RXF5 Buffer Link
#define ECAN_RXF5_BUFFER_VAL RXB1
//
// RXF5 Mask Link
#define ECAN_RXF5_MASK_VAL ECAN_RXM1
//
// RXF6 Filter Enable/Disable
#define ECAN_RXF6_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF6 Filter Type
#define ECAN_RXF6_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF6 Value
#define ECAN_RXF6_VAL 0x0L
//
// RXF6 Buffer Link
#define ECAN_RXF6_BUFFER_VAL RXB0
//
// RXF6 Mask Link
#define ECAN_RXF6_MASK_VAL ECAN_RXM0
//
// RXF7 Filter Enable/Disable
#define ECAN_RXF7_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF7 Filter Type
#define ECAN_RXF7_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF7 Value
#define ECAN_RXF7_VAL 0x0L
//
// RXF7 Buffer Link
#define ECAN_RXF7_BUFFER_VAL RXB0
//
// RXF7 Mask Link
#define ECAN_RXF7_MASK_VAL ECAN_RXM0
//
// RXF8 Filter Enable/Disable
#define ECAN_RXF8_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF8 Filter Type
#define ECAN_RXF8_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF8 Value
#define ECAN_RXF8_VAL 0x0L
//
// RXF8 Buffer Link
#define ECAN_RXF8_BUFFER_VAL RXB0
//
// RXF8 Mask Link
#define ECAN_RXF8_MASK_VAL ECAN_RXM0
//
// RXF9 Filter Enable/Disable
#define ECAN_RXF9_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF9 Filter Type
#define ECAN_RXF9_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF9 Value
#define ECAN_RXF9_VAL 0x0L
//
// RXF9 Buffer Link
#define ECAN_RXF9_BUFFER_VAL RXB0
//
// RXF9 Mask Link
#define ECAN_RXF9_MASK_VAL ECAN_RXM0
//
// RXF10 Filter Enable/Disable
#define ECAN_RXF10_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF10 Filter Type
#define ECAN_RXF10_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF10 Value
#define ECAN_RXF10_VAL 0x0L
//
// RXF10 Buffer Link
#define ECAN_RXF10_BUFFER_VAL RXB0
//
// RXF10 Mask Link
#define ECAN_RXF10_MASK_VAL ECAN_RXM0
//
// RXF11 Filter Enable/Disable
#define ECAN_RXF11_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF11 Filter Type
#define ECAN_RXF11_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF11 Value
#define ECAN_RXF11_VAL 0x0L
//
// RXF11 Buffer Link
#define ECAN_RXF11_BUFFER_VAL RXB0
//
// RXF11 Mask Link
#define ECAN_RXF11_MASK_VAL ECAN_RXM0
//
// RXF12 Filter Enable/Disable
#define ECAN_RXF12_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF12 Filter Type
#define ECAN_RXF12_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF12 Value
#define ECAN_RXF12_VAL 0x0L
//
// RXF12 Buffer Link
#define ECAN_RXF12_BUFFER_VAL RXB0
//
// RXF12 Mask Link
#define ECAN_RXF12_MASK_VAL ECAN_RXM0
//
// RXF13 Filter Enable/Disable
#define ECAN_RXF13_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF13 Filter Type
#define ECAN_RXF13_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF13 Value
#define ECAN_RXF13_VAL 0x0L
//
// RXF13 Buffer Link
#define ECAN_RXF13_BUFFER_VAL RXB0
//
// RXF13 Mask Link
#define ECAN_RXF13_MASK_VAL ECAN_RXM0
//
// RXF14 Filter Enable/Disable
#define ECAN_RXF14_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF14 Filter Type
#define ECAN_RXF14_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF14 Value
#define ECAN_RXF14_VAL 0x0L
//
// RXF14 Buffer Link
#define ECAN_RXF14_BUFFER_VAL RXB0
//
// RXF14 Mask Link
#define ECAN_RXF14_MASK_VAL ECAN_RXM0
//
// RXF15 Filter Enable/Disable
#define ECAN_RXF15_MODE_VAL ECAN_RXFn_DISABLE
//
// RXF15 Filter Type
#define ECAN_RXF15_MSG_TYPE_VAL ECAN_MSG_STD
//
// RXF15 Value
#define ECAN_RXF15_VAL 0x0L
//
// RXF15 Buffer Link
#define ECAN_RXF15_BUFFER_VAL RXB0
//
// RXF15 Mask Link
#define ECAN_RXF15_MASK_VAL ECAN_RXM0
//
// RXM0 Type
#define ECAN_RXM0_MSG_TYPE ECAN_MSG_STD
//
// RXM0 Value
#define ECAN_RXM0_VAL 0x0L
//
// RXM1 Type
#define ECAN_RXM1_MSG_TYPE ECAN_MSG_STD
//
// RXM1 Value
#define ECAN_RXM1_VAL 0x0L
#endif


Código: [Seleccionar]
#include <p18f2480.h>
#include "ECAN.h"
#include "ecan.def"

void main(void){
    unsigned long int id = 1;
    BYTE data[4] = {0b01001,0,0,0};
    BYTE dataLen = 4;
    ECAN_RX_MSG_FLAGS flags = ECAN_TX_STD_FRAME;

long int i;
init();
timersInit();
ECANInitialize();
while( !ECANSendMessage(0x123, 0, 0, ECAN_TX_STD_FRAME) );

while(1){

while( !ECANSendMessage(id,data,dataLen,flags));

                for(i=0;i<100000;i++); //DELAY
        }
}

« Última modificación: 25 de Abril de 2014, 12:40:12 por zivit »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Modulo ECAN pic18f: Problema Transmisión
« Respuesta #1 en: 24 de Abril de 2014, 15:23:51 »
Yo recuerdo que cuando dejabas la linea CAN desconectada se empezaban a enviar los datos sin detenerse y nunca llegaban a ser enviados pero se podia observar en el osciloscopio el mazagote de señales enviandose.

Otra cosa que me pasaba mucho con los mcp2551 es que se quemaban, prueba en vez de por can h y l a poner el osciloscopio en TX

Desconectado zivit

  • PIC10
  • *
  • Mensajes: 22
Re: Modulo ECAN pic18f: Problema Transmisión
« Respuesta #2 en: 25 de Abril de 2014, 07:55:06 »
Muchas gracias por responder.

Si pincho en Tx del mcp tampoco veo ningún movimiento.
Le estoy dando muchas vueltas y no consigo solucionarlo, es como si el modulo no estuviese encendido, o si me hiciese falta poner a 1 algún bit de algún registro para indicarle que me trasmita(en teoría es el mismo TXREQ el que solicita el envió). El PIC y el mcp están bien, ya no se que puede ser.

un saludo
zivit.

Desconectado zivit

  • PIC10
  • *
  • Mensajes: 22
Re: Modulo ECAN pic18f: Problema Transmisión
« Respuesta #3 en: 28 de Abril de 2014, 09:24:59 »
La única conclusión que saco es que la librería no va bien.

Alguien me recomienda alguna otra librería para C18? Estoy mirando la J1939 de AN930, sabeis de alguna otra?

Gracias

Un saludo

Zivit