Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: forsa1975 - 16 Eylül 2021, 09:25:13

Başlık: MCP2510 SPI ile registere yazma problemi.
Gönderen: forsa1975 - 16 Eylül 2021, 09:25:13
MCP2510  için CNF1 , CNF2 ve CNF3  değerlerini değiştirmem gerekiyor. ex_can_css.c  dosyasını çalış derleyip yükledim. başlangıçta can_init fonksiyonu çalışyor. Lojik analizör ile CNF1 , CNF2 ve CNF3 adreslerine yazıldığını görüyorum. Fakat okunduğunda daha önce yazılmış olan değerleri okumuyor. Burada göremediğim bir nokta olmalı. 


(https://i.ibb.co/9pjMW8C/Ads-z.png) (https://ibb.co/9pjMW8C)

//ex_can_css.c

#include <18F46k22.h>
#device ADC=16  // 10 bitlik ADC

#fuses HSH,PLLEN,PUT,PROTECT,NOLVP,NOBROWNOUT,WDT1024,NOPBADEN,NOMCLR,NOXINST,NOFCMEN //,STVREN //,WDT1024,

#use delay(crystal=16000000hz,clock=64000000)

#byte RCSTA2 = getenv("sfr:RCSTA2")
#byte BAUDCON2 = getenv("sfr:BAUDCON2")
#byte RCREG2 = getenv("sfr:RCREG2")
#use I2C(master, sda=PIN_D1, scl=PIN_D0, FAST=50000)

#use rs232(baud=38400, xmit=PIN_D6, rcv=PIN_D7)

#define CAN_DO_DEBUG TRUE  //FALSE

#define EXT_CAN_CS   PIN_B2
#define EXT_CAN_SI   PIN_C5
#define EXT_CAN_SO   PIN_C4
#define EXT_CAN_SCK  PIN_C3
#define EXT_CAN_RESET   PIN_B3

#define BOARD1_ID  24
#define BOARD2_ID  25
#define LED     PIN_B4  //LED


#include "can-mcp251x.c"

static unsigned char ch;
static int1 temp_flag=0;
unsigned int16 sayac1=0,sayac2=0;

#int_timer3
void Timer3()
{
  sayac1=sayac1+1;
  sayac2=sayac2+1;
  set_timer3(60544);//60544  // 2.5 ms
}


#INT_RDA
void RS232_Handler()
{
    ch = getch();
   
   temp_flag=1;   
}

void mcp_yaz()
  {
    mcp2510_write(0x2A,0x00);
    delay_us(10);
    mcp2510_write(0x29,0xB4);
    delay_us(10);
    mcp2510_write(0x28,0x06);
    delay_us(10);
  }

 void mcp_oku()
       {
       mcp2510_read(0x2A);
       delay_us(10);
       mcp2510_read(0x29);
        delay_us(10);
       mcp2510_read(0x28);
       delay_ms(10);
       sayac1=0;
       }

void main(void)
{
   
   struct rx_stat rxstat;
   int32 rx_id;
   int8 rx_len;               
   int8 buffer[8];
   
   set_tris_a(0b00000000);
   set_tris_b(0b00000000);
   set_tris_c(0b10010000);
   set_tris_d(0b10000000);
   set_tris_e(0b00000000);
   
   output_low(EXT_CAN_RESET);
   delay_ms(1);
   output_high(EXT_CAN_RESET);
   //setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_4 | SPI_SAMPLE_AT_END); // SSPCON=00100001,SSPSTAT=1000000
   setup_timer_3(T3_INTERNAL | T3_DIV_BY_8);
   set_timer3(65136);
   enable_interrupts(int_timer3);
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   output_high(LED);
   puts("Can Sample");
   can_init();
   puts("Init Completed");
   output_low(LED);
   output_low(ROLE1);
   output_low(ROLE2);
   output_low(ROLE3);
   output_low(ROLE4);
   output_high(ARIZA);
   
   output_low(EXT_CAN_RESET);
   delay_ms(1);
   output_high(EXT_CAN_RESET);
   
   delay_ms(100); // okuma yazmayı test etmek için
   mcp_yaz();
   delay_ms(100);
   mcp_oku(); 

   while(TRUE)
     {
     
          if(can_kbhit())
           {
                         // If so, get the message.
                         
                         //printf("%lu %u %u");
               if(can_getd(rx_id, buffer, rx_len, rxstat))
              {
                       //output_toggle(LED); 
                  if(rx_id == BOARD1_ID)  // Is it for this board ?
                    {
                     puts("Data Rcvd Node-2");
                    }
              }
         
         }

     }
}


(https://pic-microcontroller.com/wp-content/uploads/2015/10/Connect-CAN-SPI-with-PIC-Controller-schematich.jpg)

Şemada SPI dışındaki bağlantılarda farkllıklar var. SPI bağlanmtısı aynıdır.

Başlık: Ynt: MCP2510 SPI ile registere yazma problemi.
Gönderen: dumansiz - 16 Eylül 2021, 13:21:50
Olmayan şeyi anlamadım ama, eğer logic analyzer'da görebildiğiniz veriyi "can paketi" olarak alamıyorsanız, 120 ohm direncin hatta takılı olup olmadığını kontrol edin.
Başlık: Ynt: MCP2510 SPI ile registere yazma problemi.
Gönderen: forsa1975 - 17 Eylül 2021, 08:55:35
Alıntı yapılan: dumansiz - 16 Eylül 2021, 13:21:50Olmayan şeyi anlamadım ama, eğer logic analyzer'da görebildiğiniz veriyi "can paketi" olarak alamıyorsanız, 120 ohm direncin hatta takılı olup olmadığını kontrol edin.

Daha oraya gelemedim hocam.  :-[    MCP2510 da konfigrasyonun yapılamamasına takıldım, kaldım.