Autor Tema: Mis experiencias con el BUS CAN  (Leído 895107 veces)

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

Desconectado kdaver

  • PIC10
  • *
  • Mensajes: 5
Re: Mis experiencias con el BUS CAN
« Respuesta #435 en: 15 de Mayo de 2008, 18:49:46 »
mas que suficiente por el momento,

el asunto de domotica es ke en mi proyecto de tesis
estamos investigando domotica!!!!!

ahora voy a revisar las paginas  que me diste

muchas gracias!!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #436 en: 15 de Mayo de 2008, 19:56:55 »
Muy bien.
Esa pagina tiene ademas de mucha informacion, varios enlaces interesantes, no tiene desperdicio... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ekys

  • PIC10
  • *
  • Mensajes: 15
Re: Mis experiencias con el BUS CAN
« Respuesta #437 en: 19 de Mayo de 2008, 15:44:59 »
Hola a todos,

llevo tiempo pateandome este hilo y primero de todo me dirigo a MGLSOFT para elogiar el altruismo demostrado en todo este tiempo, y lo digo en el sentido de que pocas personas se tomarian las molestias que el se ha tomado para ayudar a otras que como yo, se encuentran atascadas en este mundillo.

Bien, el caso es que estoy interesado con el protocolo CAN y mi intencion es realizar un analizador logico de este. En principio todo se va a quedar en una simulacion sin implementacion fisica, y para ello utilizo Proteus para realizar pruebas MUY sencillas
(de momento) con este protocolo.

El diseno consiste en dos pics 18F458 conectados directamente a traves de sus pines CANTX y CANRX, y la pequeña prueba que realizo para comprobar que se efectua la comunicacion se basa en que el 18F458_emisor cada 5 seg envia un simple caracter al 18F458_receptor para que posteriormente el 18F458_receptor saque por pantalla via RS-232 el dato recibido. Lo tengo que hacer asi porque no existe ningun simulador de circuitos (o por lo menos que yo sepa) que implemente transceivers tipo MCP2551 o 82C250, ademas de que esta es la unica manera que se me ocurre para poder simular las tramas CAN que necesito para su posterior analisis.

El problema que me antane es que cuando inicio la simulacion no se ve nada y en el log del Proteus aparecen interminables mensajes del tipo:

[PIC18MEMORY]PC=0x0010. Read of CAN Controller register 0x0F6F(CANCON) returns las value stored.
[PIC18MEMORY]PC=0x0014. Write 0x8A to CAN Controller register at 0x0F6F(CANCON) only stores value.
[PIC18MEMORY]PC=0x0016. Read of CAN Controller register 0x0F6E(CANSTAT) returns las value stored.
[PIC18MEMORY]PC=0x0016. Read of CAN Controller register 0x0F6E(CANSTAT) returns las value stored.
[PIC18MEMORY]PC=0x0016. Read of CAN Controller register 0x0F6E(CANSTAT) returns las value stored.
...
(y asi infinitamente)

Les adjunto el diseno en Proteus y les copypasteo los dos códigos:

Código: [Seleccionar]

*******************
*   *
* 18F458_emisor.c *
*   *
*******************


#include <18F458.h>
#use delay(clock=2000000)
#include "can-18xxx8.c"

void main(void)
{
   int DATA_TX=5;
   can_init();
   enable_interrupts(GLOBAL);
   while(true)
   {
    can_putd(0, &DATA_TX, 1, 1, 1, 0);
delay_ms(5000);
   }

}


*********************
*     *
* 18F458_receptor.c *
*     *
*********************


#include <18F458.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#include "can-18xxx8.c"
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)

void main(void)
{
   int data[8];
   struct rx_stat rxstat;
   int32 id;
   int leng;

   int i;
   for(i=0;i<8;i++) {
      data[i]=0;
   }

   can_init();
   enable_interrupts(GLOBAL);
   while (true)
   {
      if ( can_kbhit() )
      {
if(can_getd(id, &data[0], leng, rxstat))
{
                printf("%s", "Se ha transmitido via CAN el caracter: ");
            printf("\%X\r", data[0]);
          }
       }
   }
}


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #438 en: 19 de Mayo de 2008, 18:08:39 »
Por favor sube aqui los dos archivos compilados para verlos, aparentemente el proteus no simula CAN, pero ademas veo que le pones cristales de 20 mhz y los ejemplos de CCS son para cristales de 16 MHz (hay que respetar las velocidades porque eso da las velocidades del bus CAN.
Puedes verlo durante el transcurso del hilo, la incidencia que tiene la frecuencia del reloj sobre la velocidad del BUS.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ekys

  • PIC10
  • *
  • Mensajes: 15
Re: Mis experiencias con el BUS CAN
« Respuesta #439 en: 19 de Mayo de 2008, 21:03:34 »
veo que le pones cristales de 20 mhz y los ejemplos de CCS son para cristales de 16 MHz (hay que respetar las velocidades porque eso da las velocidades del bus CAN.
Puedes verlo durante el transcurso del hilo, la incidencia que tiene la frecuencia del reloj sobre la velocidad del BUS.

Cierto. Inicialmente los puse a 16Mhz pero lo probe a diferentes velocidades entre ellas 20Mhz para ver que efecto producian.... no producian ninguno.

Desconectado betin

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #440 en: 20 de Mayo de 2008, 19:21:22 »
 :g) Hola, perdon por perderme; pero mi proyecto me tiene loco, ya no se me ocurre q mas hacer, a si que diganme en que simulador encuentro el PIC 18F4685?

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #441 en: 21 de Mayo de 2008, 08:33:16 »
:g) Hola, perdon por perderme; pero mi proyecto me tiene loco, ya no se me ocurre q mas hacer, a si que diganme en que simulador encuentro el PIC 18F4685?

No tengo idea que simulador puede trabajar con CAN.
Yo mas vale apostaria a armar un circuito que a emularlo... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #442 en: 21 de Mayo de 2008, 08:45:48 »
veo que le pones cristales de 20 mhz y los ejemplos de CCS son para cristales de 16 MHz (hay que respetar las velocidades porque eso da las velocidades del bus CAN.
Puedes verlo durante el transcurso del hilo, la incidencia que tiene la frecuencia del reloj sobre la velocidad del BUS.

Cierto. Inicialmente los puse a 16Mhz pero lo probe a diferentes velocidades entre ellas 20Mhz para ver que efecto producian.... no producian ninguno.

Ya lo simule, y obtengo lo mismo que tu, no pasa nada con el modulo CAN, es evidente que Proteus es incapaz de simularlo.
Lo lamento, y repito, yo armaria una placa en vez de intentar simularlo. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado ekys

  • PIC10
  • *
  • Mensajes: 15
Re: Mis experiencias con el BUS CAN
« Respuesta #443 en: 21 de Mayo de 2008, 11:04:26 »
Buff... esto es desalentador. Lo que no entiendo entonces es porque demonios proteus permite utilizar PICs de la serie 18Fxx8 que son los que incorparan CAN.

A nadie se le ocurre ninguna manera de poder simular una comunicacion CAN entre pics?????? Estoy desesperado.


PD: De todas maneras, gracias x las molestias.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #444 en: 21 de Mayo de 2008, 11:25:41 »
Yo en mis pruebas active los marcadores de lineas con colores, y la verdad es que en ningun momento se le ocurrio a Proteus intentar cambiar el estado de una de ellas... :( :(
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado arqui_lester

  • PIC10
  • *
  • Mensajes: 25
Re: Mis experiencias con el BUS CAN
« Respuesta #445 en: 23 de Mayo de 2008, 20:25:11 »
hola a todos estoy desarrollando un controlador de sistema de aire acondicionado e iluminacion con protocolo can estoy utilizando pic1f258 a 10MHz he trabajado con las plantillas que proporciona microchip igual que las que ocupan uds pero yo las uso en ensamblador, lo estoy simulando en mplab 8 (por cierto si lo quieren lo tengo con medicina), el problema que me da por el momento es que en el simulador se queda trabado en el registro

Desconectado arqui_lester

  • PIC10
  • *
  • Mensajes: 25
Re: Mis experiencias con el BUS CAN
« Respuesta #446 en: 23 de Mayo de 2008, 20:28:47 »
 :-/ SE QUEDA TRABADO EN CANSTAT CUANDO QUIERO PONERLE EL MODO NORMAL DEL CAN

Desconectado arqui_lester

  • PIC10
  • *
  • Mensajes: 25
Re: Mis experiencias con el BUS CAN
« Respuesta #447 en: 23 de Mayo de 2008, 21:03:59 »
aqui les pongo el codigo que estoy utilizando

;    El siguiente programa configura al PIC18F258 para operar
;   en comunicacion CAN Bus con ID=0x001 para captura de datos que
;   posteriormente son enviados al nodo 2.

   list p=18f258
   #include <p18F258.inc>
; oscillator selection
   CONFIG   OSC = HS

;   Secccion de Memoria Reservada   
#DEFINE   NODO1_SOURCE
   
   #include "CAN18.inc"
   

   
NODO1 UDATA   
W_temp      res   01
Status_temp   res   01
BSR_temp   res   01
PRO_temp   res   01


   
   org   0x0000
   goto   Init
   
   org   0x0008
   goto   HighPINT
   
   org   0x0018
   goto   LowPINT


NODO1_SOURCE CODE
   org   0x00100   
Init:

;   Configuracion de los Puertos del PIC

   initPORTA    OUT & PIN_0          ;^ PIN_1 ^ OUT            
                     ; Puerto A SALIDA  RA0
   movlw      0x07            
   iorwf      ADCON1,f      
   
   initPORTB   IN & PIN_0 ^ PIN_1 ^ PIN_3 ^ OUT
                     ; Puerto B con entradas RB0, RB1 y RB2
                     ; el resto salidas
                     
   initPORTC   IN            ; Puerto C completo como ENTRADAS

;    Configurando Interrupciones   

   bsf   RCON, IPEN      ; habilita prioridad de interrupcion
   ;bsf   INTCON, GIEH      ; habilita prioridad alta
   movlw   B'11010000'
   movwf   INTCON
   movlw   B'01100000'      ; habilita interrupcion en flanco de bajada
   movwf   INTCON2         ; habilita interrupcion en flanco de bajada
   movlw   B'00001000'      ; habilita prioridad alta para int1
   movwf   INTCON3         ; tambien habilita interrupcion 1 y 2
   
   ;movlw      0xD0            ; Habilitando las interrupciones de
   ;movwf      INTCON            ; GIEH, GIEL e INT0 (High Priority)            
   ;movlw      0xE0            ; Configurando interrupciones en Rising Edge
   ;movwf      INTCON2            ; para INT0 e INT1
   ;movlw      0x08            ; Habilitando interrupciones por INT1
   ;movwf      INTCON3            ; en Low Priority
   SETF   PIE3               ; HABILITA TODAS LAS INTERRUPCIONES DEL CAN
   setf   IPR3            ; Interrupciones CAN todas en High Priority
   CLRF   PIR3
   

;   Configuracion del Modulo CAN         

;   Inicializando el Modulo
   
   CANInitialize   1, 5, 7, 6, 2, CAN_CONFIG_LINE_FILTER_ON & CAN_CONFIG_VALID_STD_MSG

;   Configurando los Filtros y Mascaras, Modo de Operacion en Configuracion

   CANSetOperationMode   CAN_OP_MODE_CONFIG
   
;   Estableciendo la Mascara del Buffer 0

   CANSetReg   CAN_MASK_B0, 0x00000007, CAN_CONFIG_STD_MSG
   
;   Filtro RX0 Buffer 0

   CANSetReg   CAN_FILTER_B0_F1, 0x00000000, CAN_CONFIG_STD_MSG

;   Filtro RX1 Buffer 0

   CANSetReg   CAN_FILTER_B0_F2, 0x00000002, CAN_CONFIG_STD_MSG

;   Estableciendo el Modo de Operacion Normal

   CANSetOperationMode   CAN_OP_MODE_NORMAL

Main:   goto   Main


;************************************************************
;
;      ATENCION DE INTERRUPCIONES
;
;************************************************************

;**********INTERRUPCIONES CON ALTA PRIORIDAD*****************
HighPINT:

   DISABLE_GIE
   SAVE_STATUS_W_BSR

   btfss   INTCON3,INT1IF   ; REVISA SI FUE ESTA LA INTERRUPCION QUE SE GENERO
   bra    OTRO
   goto    pinb2
OTRO:   btfss   INTCON,INT0IF   ; revisa si fue generada int0
   BRA   OTRO2

pinb1:            ;atencion a interrupcin int0

   bcf   INTCON,INT0IF   ;limpia bandera de interrupcion
   RESTORE_STATUS_W_BSR   ;reestablece registros
   ENABLE_GIE      ;habilita interrupcion global
   retfie   

pinb2:            ;atencion a interrupcion int1
   
   bcf   INTCON3,INT1IF   ;limpia bandera de interrupcion
   RESTORE_STATUS_W_BSR   ;reestablece registros
   ENABLE_GIE      ;habilita interrupcion global
   retfie

OTRO2:
   

;   call    CANISR

   banksel   PIR3
   btfss   PIR3,IRXIF
   goto   IsWAKIF
   goto   AbortU
IsWAKIF:
   btfss   PIR3,WAKIF
   goto   IsERRIF
   goto   EndHigh
IsERRIF:
   btfss   PIR3,ERRIF
   goto   IsTXB2IF
   goto   AbortU
IsTXB2IF:
   btfss   PIR3,TXB2IF
   goto   IsTXB1IF
   goto   EndHigh
IsTXB1IF:
   btfss   PIR3,TXB1IF
   goto   IsTXB0IF
   goto   EndHigh
IsTXB0IF:
   btfss   PIR3,TXB0IF
   goto   IsRXB1IF
   goto   EndHigh
IsRXB1IF:
   btfss   PIR3,RXB1IF
   goto   IsRXB0IF
   call   RxRou
   call   PROCESSFun
   goto   EndHigh
IsRXB0IF:
   btfss   PIR3,RXB1IF
   goto   IsRXB0IF
   call   RxRou
   call   PROCESSFun
   goto   EndHigh
AbortU:
   CANAbortAll
EndHigh:
   clrf   PIR3
   RESTORE_STATUS_W_BSR
   ENABLE_GIE

   retfie

;************INTERRUPCIONES CON BAJA PRIORIDAD*****************
   
LowPINT:
   
   DISABLE_GIE
   SAVE_STATUS_W_BSR
      
   btfss      INTCON,INT0IF
   bra      isINT1
   movff      PORTC,PRO_temp
   ;movlw      0x00
   ;cpfseq      PRO_temp
   ;bra      in1
;try1:   call      CANIsTxReady
   bnc      TxNotRdy
   banksel      MessageData
   movlw      0x00
   movwf      MessageData,1
   movlw      0x82
   movwf      MessageData+1,1   
   movlw      0x0F
   movwf      MessageData+2,1
   movlw      0x01
   movwf      MessageData+3,1
   CANSendMessage   0x001, MessageData, 8, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME

   bcf      INTCON,INT0IF
   bra      EndLow
   
in1:   movlw      0x01
   cpfseq      PRO_temp
   bra      EndLow
   call      CANIsTxReady
   bnc      TxNotRdy
   banksel      MessageData
   movlw      0x03
   movwf      MessageData,1
   movlw      0x80
   movwf      MessageData+1,1   
   movlw      0x0F
   movwf      MessageData+2,1
   movlw      0x00
   movwf      MessageData+3,1
   CANSendMessage   0x001, MessageData, 8, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME

   bcf      INTCON,INT0IF
   bra      EndLow

isINT1:
   btfss      INTCON3,INT1IF
   bra      EndLow
try1   call      CANIsTxReady
   bnc      TxNotRdy
   banksel      MessageData
   ;movlw      0x02
   movff      PORTC,WREG
   movwf      MessageData,1
   ;movlw      0x82
   movlw      0x00
   movwf      MessageData+1,1   
   ;movlw      0x0F
   movlw      0x00
   movwf      MessageData+2,1
   ;movlw      0x00
   movlw      0x00
   movwf      MessageData+3,1
   CANSendMessage   0x001, MessageData, 1, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME

   bcf      INTCON3,INT1IF
   bra      EndLow

TxNotRdy:
   goto try1
   
EndLow:   
   
   RESTORE_STATUS_W_BSR
   ENABLE_GIE
   retfie

RxRou
   call      CANIsRxReady
   bnc      RxNotRdy

   banksel      NewMessage

   CANReadMessage   NewMessage, NewMessageData, NewMessageLen, NewMessageFlags
   bra      ExitRx

RxNotRdy:

ExitRx:

   return
   
   end   

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Mis experiencias con el BUS CAN
« Respuesta #448 en: 24 de Mayo de 2008, 08:42:36 »
En la linea que dice:
CANSendMessage   0x001, MessageData, 8, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME

Indicas al Bus CAN que trasmita 8 bytes (tercer argumento), pero antes le das valores a solo 4 argumentos de MessageData...

Una pregunta:
Estas probando en un circuito real o intentando simular??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado arqui_lester

  • PIC10
  • *
  • Mensajes: 25
Re: Mis experiencias con el BUS CAN
« Respuesta #449 en: 24 de Mayo de 2008, 13:40:56 »
tengo el circuito armado en protoboard pero no lo he probado, por el momento solo lo he simulado

le voy a cambiar esa parte al codigo y lo publicare de nuevo ok.