mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN MESSAGE from PIC18f45f


Autor: azadeh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
i need to transmit a can message from PIC18f45f. cann anoyone please 
tell me what is wrong here. This is my code. I use CAN-MCP2551.

# include <p18f458.h>
# include <p18cxxx.h>
# include <can2510.h>


# define  RXF5  101
# define  RXF4  100
# define  RXF3  011
# define  RXF2  010
# define  RXF1  001 \\ only possible when RXB0DBENbit is set
# define  RXF0  000 \\ only possible when RXB0DBENbit is set


# define CAN_TX_PRIORITY_0 0
# define CAN_TX_STD_FRAME 0
# define CAN_TX_NO_RTR_FRAME 0


typedef struct CANMessage {
  unsigned long Address;
  unsigned char MessageData[8];
  unsigned char NoOfBytes;
  unsigned char Priority;
  unsigned Ext:1;
  unsigned Remote:1;
};

char CANPut(CANMessage)

void Can_Config (void);
void Can_Init (void);
void Can_Txmsg (void);
void Can_Txinit (void);

/* for can_message receive
unsigned char NewMessage[8];
unsigned char NewMessageData[8];
unsigned char NewMessageLen;
unsigned int NewMessageFlags;*/

unsigned char bus_free;
unsigned char r ;

 void main()

{
   Can_Config(); // to configure CANRX and TX as interface
  Can_Init(); // can_initialising and configuring
  CANCON = 0x00; // Normal mode , to send or receive a message ,can 
should be in the normal mode
     CANSTAT = 0x00; // Normal mode

  Can_Txinit();// initialising to transmit message
  TXB0CONbits.TXREQ = 1; // TXREQ is set, the TXABT, TXLARB and TXERR 
bits will be cleared

      if(bus_free == 0)
                {
                          r = 1;   // breakpoint
                          CANPut(0x02,0x01,1,CAN_TX_PRIORITY_0 & 
CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME);
                          while(bus_free == 0)
              continue;
                      }
            r = 0;


}



void Can_Txinit()
  {

    TXB0CON = 0x00;
    PIE3bits.TXB0IE = 0;
    TXB0SIDL = 0; // lower byte transmit buffer with standard identifier
    TXB0SIDH = 0; // higher byte transmit buffer with standard 
identifier
    TXB0DLC = 0; // data length code

  }

void Can_Config()

  {
    TRISBbits.TRISB3 = 1; //to configure CANRX as interface
    TRISBbits.TRISB2 = 0;  //to configure CANTX as interface
  }

void Can_Init()
{

  CANCON  = 0x10; //Request configuration mode
  CANSTAT = 0x10; // Configuration mode
  RXB0CON = 0x64; // Receive all messages (including those with errors, 
Roll over from receive buffer0to1
  RXB1CON = 0x60; // Receive all messages (including those with errors, 
Roll over from receive buffer0to1
  BRGCON1 = 0x01;
  BRGCON2 = 0x00;
  BRGCON3 = 0x00;

}




Antworten können aud Deutsch, Englich oder Französisch erfolgen
besten Dank

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor allem fehlt was. Erstens ein Semikolon hinter der Deklaration von 
CANPut, zweitens der Code davon, drittens die Schilderung des Problems.

Und als Anhang macht sich der Code auch besser, weil die Formatierung 
nicht so vor die Hunde geht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.