Comments: AST-CAN485 Hookup Guide

Pages

Looking for answers to technical questions?

We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.

  • I installed board and libraries as per the guide on macos and windows. But both give me this following error message when trying to compile.

    WARNING: Category 'Communications' in library AST_CAN is not valid. Setting to 'Uncategorized'
    WARNING: Category 'Communications' in library AST_RS485 is not valid. Setting to 'Uncategorized'
    Sketch uses 1072 bytes (0%) of program storage space. Maximum is 130048 bytes.
    Global variables use 9 bytes (0%) of dynamic memory, leaving 4087 bytes for local variables. Maximum is 4096 bytes.
    avrdude: verification error, first mismatch at byte 0x0000
    0x14 != 0x0c
    avrdude: verification error; content mismatch
    avrdude: verification error; content mismatch
    

    What am I doing wrong?

    • I was getting these same errors with two of these setup one as CAN transmitter, one as CAN receiver. On the receiver in void setup i entered pinMode(13, OUTPUT); to use the onboard LED to indicate it saw a change in a CAN packet byte. I think the problem was this is SCK, serial clock, pin also. Once I uploaded the program i wouldn't be able to load another program to it until i reburned the bootloader to the board with an Arduino. Arduino IDE would just give me content mismatch and say board is not connected.

  • How can I use the AST CAN as receiver and transmitter in one. I have to send messages in a CAN Network, but also have to answer.

    • this is kind of a crude way to do it but I put this program on both can485 boards. the only difference is the message ID between the two. Each one is getting a pushbutton input to pin 2 that can turn on output pin 5 on the other board

      #include <ASTCanLib.h>  
      
      #define MESSAGE_ID        250
      #define MESSAGE_PROTOCOL  1
      #define MESSAGE_LENGTH    8 
      #define MESSAGE_RTR       0 
      
       st_cmd_t Msg;
      
       uint8_t Buffer[8] = {};
      
       void setup() {
        canInit(500000);                  // Initialise CAN port. must be before Serial.begin
        Serial.begin(1000000);             // start serial port
        Msg.pt_data = &Buffer[0];      // reference message data to transmit buffer
        pinMode(5, OUTPUT);
        Msg.ctrl.ide = MESSAGE_PROTOCOL;  // Set CAN protocol (0: CAN 2.0A, 1: CAN 2.0B)
        Msg.id.ext   = MESSAGE_ID;        // Set message ID
        Msg.dlc      = MESSAGE_LENGTH;    // Data length: 8 bytes
        Msg.ctrl.rtr = MESSAGE_RTR;       // Set rtr bit
        }
      
      void loop() {
      tx:
        int buttonState = digitalRead(2);
        if (buttonState == HIGH){
      
          Buffer[0] = 10;
        Msg.ctrl.ide = MESSAGE_PROTOCOL;  // Set CAN protocol (0: CAN 2.0A, 1: CAN 2.0B)
        Msg.id.ext   = MESSAGE_ID;        // Set message ID
        Msg.dlc      = MESSAGE_LENGTH;    // Data length: 8 bytes
        Msg.ctrl.rtr = MESSAGE_RTR;       // Set rtr bit
        Msg.cmd = CMD_TX_DATA;      
        while(can_cmd(&Msg) != CAN_CMD_ACCEPTED);
        while(can_get_status(&Msg) == CAN_STATUS_NOT_COMPLETED);
          goto tx;}
          else{Buffer[0] = 30;
                 Msg.ctrl.ide = MESSAGE_PROTOCOL;  // Set CAN protocol (0: CAN 2.0A, 1: CAN 2.0B)
        Msg.id.ext   = MESSAGE_ID;        // Set message ID
        Msg.dlc      = MESSAGE_LENGTH;    // Data length: 8 bytes
        Msg.ctrl.rtr = MESSAGE_RTR;       // Set rtr bit
              Msg.cmd = CMD_TX_DATA;      
        while(can_cmd(&Msg) != CAN_CMD_ACCEPTED);
        while(can_get_status(&Msg) == CAN_STATUS_NOT_COMPLETED);
          }
      
      Msg.cmd = CMD_RX_DATA;
      while(can_cmd(&Msg) != CAN_CMD_ACCEPTED);
      while(can_get_status(&Msg) == CAN_STATUS_NOT_COMPLETED);
      
      if (Buffer[0] == 10){
          digitalWrite(5, HIGH);}
          else if (Buffer[0] == 30) {
          digitalWrite(5, LOW);}
      }
      

  • the software installation does not work,

    the board manager url does not exist:

    https://raw.githubusercontent.com/Atlantis-Specialist-Technologies/ast-arduino-boards/master/boards-manager-files/package_ast_boards_index.json

  • the links you provided for schematic and datasheet are "dead": --> https://github.com/Atlantis-Specialist-Technologies-Admin/CAN485/blob/master/Documentation/Datasheet%20AT90CANXX.pdf --> https://github.com/Atlantis-Specialist-Technologies-Admin/CAN485/blob/master/Documentation/CAN485%201.0.0.pdf

    the referring github repo seems to be empty: --> https://github.com/Atlantis-Specialist-Technologies-Admin

    • Sorry about that, we had to work with AST to turn it on certain repositories. It is live now. =)

    • remove admin

      it's here https://github.com/Atlantis-Specialist-Technologies/CAN485


If you've found a bug or have other constructive feedback for our tutorial authors, please send us your feedback!