mcp2515 8mhz, websocket 500ms,
This commit is contained in:
@@ -230,14 +230,14 @@ SPIClass hspi(HSPI);
|
|||||||
// - 하드웨어에 16MHz 크리스탈 장착 시: MCP_16MHZ
|
// - 하드웨어에 16MHz 크리스탈 장착 시: MCP_16MHZ
|
||||||
// - 하드웨어에 8MHz 크리스탈 장착 시: MCP_8MHZ
|
// - 하드웨어에 8MHz 크리스탈 장착 시: MCP_8MHZ
|
||||||
//
|
//
|
||||||
#define MCP_CRYSTAL MCP_16MHZ // ⭐ 16MHz 크리스탈 (1 Mbps 권장)
|
//#define MCP_CRYSTAL MCP_16MHZ // ⭐ 16MHz 크리스탈 (1 Mbps 권장)
|
||||||
// #define MCP_CRYSTAL MCP_8MHZ // 8MHz 크리스탈 (500 Kbps까지)
|
#define MCP_CRYSTAL MCP_8MHZ // 8MHz 크리스탈 (500 Kbps까지)
|
||||||
|
|
||||||
// SPI 속도: 20MHz (MCP2515 최대 속도와 균형)
|
// SPI 속도: 20MHz (MCP2515 최대 속도와 균형)
|
||||||
// 10MHz: 안정적이지만 느림
|
// 10MHz: 안정적이지만 느림
|
||||||
// 20MHz: 권장 (고속 + 안정성)
|
// 20MHz: 권장 (고속 + 안정성)
|
||||||
// 25MHz: 불안정할 수 있음
|
// 25MHz: 불안정할 수 있음
|
||||||
MCP2515 mcp2515(HSPI_CS, 20000000, &hspi);
|
MCP2515 mcp2515(HSPI_CS, 40000000, &hspi);
|
||||||
HardwareSerial SerialComm(1); // UART1
|
HardwareSerial SerialComm(1); // UART1
|
||||||
HardwareSerial Serial2Comm(2); // ⭐ UART2 추가
|
HardwareSerial Serial2Comm(2); // ⭐ UART2 추가
|
||||||
WebServer server(80);
|
WebServer server(80);
|
||||||
@@ -391,15 +391,15 @@ void resetMCP2515() {
|
|||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
// 6. 필터/마스크 설정 (모든 메시지 수신)
|
// 6. 필터/마스크 설정 (모든 메시지 수신)
|
||||||
Serial.println(" 4. 필터 설정 (모든 메시지 수신)...");
|
Serial.println(" 4. 필터 설정 (Standard + Extended ID 모두 수신)...");
|
||||||
mcp2515.setFilterMask(MCP2515::MASK0, false, 0x000);
|
mcp2515.setFilterMask(MCP2515::MASK0, true, 0x00000000); // ⭐ false → true (Extended ID 지원)
|
||||||
mcp2515.setFilterMask(MCP2515::MASK1, false, 0x000);
|
mcp2515.setFilterMask(MCP2515::MASK1, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF0, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF0, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF1, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF1, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF2, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF2, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF3, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF3, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF4, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF4, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF5, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF5, true, 0x00000000); // ⭐ false → true
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
// 7. 모드 설정 (마지막에!)
|
// 7. 모드 설정 (마지막에!)
|
||||||
@@ -2885,7 +2885,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)
|
|||||||
// Web Update Task
|
// Web Update Task
|
||||||
// ========================================
|
// ========================================
|
||||||
void webUpdateTask(void *parameter) {
|
void webUpdateTask(void *parameter) {
|
||||||
const TickType_t xDelay = pdMS_TO_TICKS(100); // ⭐ 200ms → 100ms (더 빠른 업데이트)
|
const TickType_t xDelay = pdMS_TO_TICKS(500); // ⭐ 100ms → 500ms (CPU 부하 감소)
|
||||||
|
|
||||||
// 🆕 초기화 대기 단축 (부팅 직후 안정화)
|
// 🆕 초기화 대기 단축 (부팅 직후 안정화)
|
||||||
vTaskDelay(pdMS_TO_TICKS(500)); // ⭐ 2000ms → 500ms (빠른 연결)
|
vTaskDelay(pdMS_TO_TICKS(500)); // ⭐ 2000ms → 500ms (빠른 연결)
|
||||||
@@ -3238,15 +3238,15 @@ void setup() {
|
|||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
// 5. 필터/마스크 설정 (모든 메시지 수신)
|
// 5. 필터/마스크 설정 (모든 메시지 수신)
|
||||||
Serial.println(" 4. 필터 설정 (모든 메시지 수신)...");
|
Serial.println(" 4. 필터 설정 (Standard + Extended ID 모두 수신)...");
|
||||||
mcp2515.setFilterMask(MCP2515::MASK0, false, 0x000);
|
mcp2515.setFilterMask(MCP2515::MASK0, true, 0x00000000); // ⭐ false → true (Extended ID 지원)
|
||||||
mcp2515.setFilterMask(MCP2515::MASK1, false, 0x000);
|
mcp2515.setFilterMask(MCP2515::MASK1, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF0, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF0, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF1, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF1, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF2, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF2, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF3, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF3, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF4, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF4, true, 0x00000000); // ⭐ false → true
|
||||||
mcp2515.setFilter(MCP2515::RXF5, false, 0x000);
|
mcp2515.setFilter(MCP2515::RXF5, true, 0x00000000); // ⭐ false → true
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
// 6. 수신 버퍼 비우기 (Configuration 모드에서)
|
// 6. 수신 버퍼 비우기 (Configuration 모드에서)
|
||||||
@@ -3695,7 +3695,7 @@ void setup() {
|
|||||||
// - SEQ: 시퀀스 재생
|
// - SEQ: 시퀀스 재생
|
||||||
// - MONITOR: 상태 모니터링
|
// - MONITOR: 상태 모니터링
|
||||||
xTaskCreatePinnedToCore(canRxTask, "CAN_RX", 12288, NULL, 20, &canRxTaskHandle, 1); // ⭐ 8KB → 12KB, Pri 24 (최고)
|
xTaskCreatePinnedToCore(canRxTask, "CAN_RX", 12288, NULL, 20, &canRxTaskHandle, 1); // ⭐ 8KB → 12KB, Pri 24 (최고)
|
||||||
xTaskCreatePinnedToCore(webUpdateTask, "WEB_UPDATE", 12288, NULL, 16, &webTaskHandle, 1); // ⭐ Core 0 → 1, Pri 4 (SD와 분리)
|
xTaskCreatePinnedToCore(webUpdateTask, "WEB_UPDATE", 12288, NULL, 4, &webTaskHandle, 1); // ⭐ Core 0 → 1, Pri 4 (SD와 분리)
|
||||||
xTaskCreatePinnedToCore(txTask, "TX", 4096, NULL, 3, NULL, 1); // Pri 3
|
xTaskCreatePinnedToCore(txTask, "TX", 4096, NULL, 3, NULL, 1); // Pri 3
|
||||||
xTaskCreatePinnedToCore(sequenceTask, "SEQ", 4096, NULL, 2, NULL, 1); // Pri 2
|
xTaskCreatePinnedToCore(sequenceTask, "SEQ", 4096, NULL, 2, NULL, 1); // Pri 2
|
||||||
xTaskCreatePinnedToCore(sdMonitorTask, "SD_MONITOR", 4096, NULL, 1, NULL, 1); // Pri 1
|
xTaskCreatePinnedToCore(sdMonitorTask, "SD_MONITOR", 4096, NULL, 1, NULL, 1); // Pri 1
|
||||||
|
|||||||
Reference in New Issue
Block a user