From e0650bdbf8cc136e1e9ae3a3c1274cc437951703 Mon Sep 17 00:00:00 2001 From: byun Date: Thu, 30 Apr 2026 19:00:06 +0000 Subject: [PATCH] =?UTF-8?q?=EB=94=94=EC=9E=90=EC=9D=B8=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CANFD_Logger.ino | 18 +- graph.h | 614 ++++++++++++++++++++++++------- graph_viewer.h | 921 +++++++++++++++++++++++++++++++++++++---------- index.h | 35 +- settings.h | 14 +- transmit.h | 17 +- 6 files changed, 1266 insertions(+), 353 deletions(-) diff --git a/CANFD_Logger.ino b/CANFD_Logger.ino index cc1ef7f..b751440 100644 --- a/CANFD_Logger.ino +++ b/CANFD_Logger.ino @@ -68,6 +68,17 @@ // 변경 필요시: OSC_40MHz, OSC_4MHz10xPLL 등 #define CANFD_OSC ACAN2517FDSettings::OSC_20MHz +// ── CAN SPI 클럭 설정 ────────────────────────────────── +// MCP2518FD 최대 SPI = 0.85 × Fosc +// OSC_20MHz → 최대 17 MHz +// OSC_40MHz → 최대 34 MHz +// 배선이 길거나 불안정하면 낮추세요 (최소 1 MHz) +// 5 MHz : 안전 (노이즈에 강함) +// 10 MHz : 권장 (안정성/속도 균형) +// 15 MHz : 고속 (짧은 배선에서) +// 17 MHz : 최대 (OSC_20MHz 기준) +#define CAN_SPI_CLOCK 10000000UL // ← 여기서 변경 + // 최대 데이터 길이 (CAN FD = 64, Classic CAN = 8) #define CANFD_MAX_DATA 64 @@ -404,8 +415,8 @@ void saveSettings() { // ───────────────────────────────────────────── bool initCANFD() { const CANFDPreset& p = speedPresets[speedPresetIdx]; - Serial.printf("CAN FD 초기화: %s (Listen:%s)\n", - p.name, listenOnly ? "ON" : "OFF"); + Serial.printf("CAN FD 초기화: %s (Listen:%s, SPI:%luMHz)\n", + p.name, listenOnly ? "ON" : "OFF", CAN_SPI_CLOCK / 1000000UL); ACAN2517FDSettings settings(CANFD_OSC, p.arbBPS, p.factor); @@ -441,6 +452,7 @@ bool initCANFD() { gSPI.end(); delay(50); gSPI.begin(PIN_CAN_SCK, PIN_CAN_MISO, PIN_CAN_MOSI, PIN_CAN_CS); + gSPI.setFrequency(CAN_SPI_CLOCK); digitalWrite(PIN_CAN_CS, HIGH); delay(100); } @@ -1138,9 +1150,11 @@ void setup() { // SPI + CAN FD 초기화 // ★ CS는 라이브러리가 직접 관리 → SPI.begin에 CS 미전달 (HW SS 충돌 방지) gSPI.begin(PIN_CAN_SCK, PIN_CAN_MISO, PIN_CAN_MOSI, -1); + gSPI.setFrequency(CAN_SPI_CLOCK); // ★ SPI 클럭 설정 pinMode(PIN_CAN_CS, OUTPUT); digitalWrite(PIN_CAN_CS, HIGH); delay(50); // SPI 버스 안정화 대기 + Serial.printf("SPI 클럭: %lu MHz\n", CAN_SPI_CLOCK / 1000000UL); if (!initCANFD()) { Serial.println("⚠ CAN FD 초기화 실패 → 설정 페이지에서 속도 변경 후 재초기화 하세요"); diff --git a/graph.h b/graph.h index 15426c5..bd05f07 100644 --- a/graph.h +++ b/graph.h @@ -1,156 +1,498 @@ #ifndef GRAPH_H #define GRAPH_H - const char graph_html[] PROGMEM = R"rawliteral( - - -그래프 - CANFD Logger + + +CAN FD Signal Selector +
+

CAN FD Signal Graph

DBC Signal Selector

+
+
-
-
-

실시간 신호 그래프 (CAN FD)

-
-
-
-
-
-
-
+
+
+

DBC 파일 업로드

+
+ +

클릭 또는 드래그&드롭으로 DBC 업로드

+

파일 없음 — localStorage 복원 가능

+
+ + + )rawliteral"; diff --git a/graph_viewer.h b/graph_viewer.h index 0456a16..b0eb5f6 100644 --- a/graph_viewer.h +++ b/graph_viewer.h @@ -1,222 +1,759 @@ #ifndef GRAPH_VIEWER_H #define GRAPH_VIEWER_H - - const char graph_viewer_html[] PROGMEM = R"rawliteral( - - -그래프 뷰어 - CANFD Logger + + +CAN FD Signal Graph +
+

CAN FD Signal Graph

Viewing 0 signals

+
+
Connecting...
+
-
-
-

BIN 파일 분석 뷰어 (CAN FD)

-
-
- - -
-
- -
-
- -
+
+
+ +
- - - +
+ Points:0 + Time:0s + Msgs:0 + FPS:0 +
+
)rawliteral"; - -#endif +#endif \ No newline at end of file diff --git a/index.h b/index.h index df37224..5294f98 100644 --- a/index.h +++ b/index.h @@ -7,9 +7,13 @@ const char index_html[] PROGMEM = R"rawliteral( - +
@@ -103,7 +108,7 @@ input[type=text]{background:#21262d;border:1px solid #30363d;color:#c9d1d9;paddi
- +

로깅 제어

@@ -120,7 +125,7 @@ input[type=text]{background:#21262d;border:1px solid #30363d;color:#c9d1d9;paddi
- +

CAN FD 메시지 모니터 (최근 30개 ID)

@@ -133,7 +138,7 @@ input[type=text]{background:#21262d;border:1px solid #30363d;color:#c9d1d9;paddi
- +
- + )rawliteral"; - #endif