From 0cf5a4fa2d025996d625d1b9717bdbd68235847c Mon Sep 17 00:00:00 2001 From: Hein Date: Sat, 7 Dec 2024 10:43:53 +0200 Subject: [PATCH] Forgot troubleshoot doc --- firmware/mega/troubleshoot.md | 415 ++++++++++++++++++++++++++++++++++ 1 file changed, 415 insertions(+) create mode 100644 firmware/mega/troubleshoot.md diff --git a/firmware/mega/troubleshoot.md b/firmware/mega/troubleshoot.md new file mode 100644 index 0000000..1a03ae2 --- /dev/null +++ b/firmware/mega/troubleshoot.md @@ -0,0 +1,415 @@ +# Troubleshooting Guide (O fok wat nou boek) + +## LED Status Indicators +The device uses two LEDs for status indication: +- LED A (Pin 3): Activity indicator +- LED B (Pin 5): Error indicator + +### LED Error Patterns +- 4 slow blinks: RTC initialization failure +- 4 medium blinks: RTC lost power (time reset required) +- 2 slow blinks: SD card initialization failure +- 10 quick blinks: Multiple consecutive Modbus read errors +- Continuous error blinks: Number of blinks indicates error count in current cycle + +## Hardware Diagnostics + +### RTC (Real-Time Clock) Module + +1. Power Check: + - Measure voltage between VCC and GND pins (should be 5V ±0.2V) + - Check if backup battery is installed and voltage is above 2.5V + - Verify proper connection to SDA (Pin 20) and SCL (Pin 21) + +2. Communication Test: + ```cpp + if (!rtc.begin()) { + Serial.println("RTC Failed"); + } else { + DateTime now = rtc.now(); + Serial.print(now.year(), DEC); + Serial.print('/'); + Serial.print(now.month(), DEC); + Serial.print('/'); + Serial.print(now.day(), DEC); + } + ``` + +3. Common RTC Issues: + - No communication: Check I2C pullup resistors + - Incorrect time: Replace backup battery + - Random resets: Check for loose connections + - Time drift: Environmental temperature too high + +### SD Card Module + +1. Physical Inspection: + - Verify card is properly seated + - Check pin connections: + * CS → Pin 53 + * MOSI → Pin 51 + * MISO → Pin 50 + * SCK → Pin 52 + +2. Diagnostic Test: + ```cpp + void testSD() { + if (!sd.begin(SD_CONFIG)) { + Serial.println("SD initialization failed!"); + return; + } + + // Test file creation + File testFile; + if (!testFile.open("test.txt", FILE_WRITE)) { + Serial.println("File creation failed!"); + return; + } + + // Test writing + if (!testFile.println("Test data")) { + Serial.println("Write failed!"); + } + + testFile.close(); + Serial.println("SD test passed!"); + } + ``` + +3. Common SD Issues: + - Card not detected: Try reformatting to FAT32 + - Write errors: Check card write-protect switch + - Random failures: Power supply issues + - Slow performance: Reduce SPI clock speed + +### RS485/Modbus Communication + +1. Physical Layer Test: + - Measure differential voltage between A and B lines: + * Idle state: ~0.9V to -0.9V + * Active state: ~2V to -2V + - Check termination resistors (120Ω) + - Verify ground reference + +2. Communication Test: + ```cpp + void testModbus() { + // Set device to receive mode + digitalWrite(DE_RE_PIN, LOW); + + // Try reading first register + uint8_t result = node.readHoldingRegisters(0, 1); + if (result == node.ku8MBSuccess) { + Serial.println("Modbus communication OK"); + } else { + Serial.print("Modbus error: "); + Serial.println(result); + } + } + ``` + +3. Common Modbus Issues: + - No response: Check baud rate settings + - Intermittent communication: Check cable shielding + - Garbled data: A/B lines reversed + - Timeout errors: Increase retry count + +## System-wide Issues + +1. Power Supply Problems: + - Symptoms: + * Random resets + * SD card write failures + * Intermittent communication + - Solutions: + * Use separate power supply for RS485 device + * Add decoupling capacitors + * Check for ground loops + +2. Environmental Issues: + - EMI interference: Shield cables + - Temperature: Keep below 50°C + - Vibration: Secure all connections + - Moisture: Use conformal coating + +3. Software Lockups: + - Implement watchdog timer + - Add error recovery routines + - Monitor free memory + +## Maintenance Checklist + +1. Weekly: + - Check LED status patterns + - Verify log file creation + - Monitor data consistency + +2. Monthly: + - Backup SD card data + - Check all connections + - Clean card contacts + - Verify RTC accuracy + +3. Quarterly: + - Update firmware if needed + - Check power supply voltage + - Test communication reliability + - Clean enclosure and ventilation + +## Emergency Recovery + +1. If system stops logging: + - Check LED error patterns + - Review serial debug output + - Power cycle the device + - Check SD card in computer + +2. Data recovery: + - Copy all files before removing card + - Use file recovery software if needed + - Check file timestamps for gaps + +3. System reset: + - Hold reset button for 5 seconds + - Reformat SD card if necessary + - Reconfigure RTC if needed + + +## More Power-Related Issues + +#### Symptoms & Diagnostics: +- Random resets + * Measure input voltage during operation (should be 9V ±0.5V) + * Check voltage stability during Modbus communication + * Monitor voltage drops during SD card writes + +- SD card write failures + * Monitor 5V rail during write operations (should remain above 4.8V) + * Check for voltage sags when LED indicators activate + * Test with different power supplies to isolate issue + +- Intermittent communication + * Measure RS485 supply voltage under load + * Check for ground potential differences + * Monitor voltage stability during transmission + +#### Solutions: +1. Power Supply Improvements: + - Use a regulated 9V power supply rated for at least 1A + - Add local decoupling capacitors: + * 100μF electrolytic near voltage input + * 10μF tantalum at Arduino VIN + * 0.1μF ceramic at each IC power pin + - Consider using a dedicated 5V regulator for sensitive components + +2. Ground Loop Prevention: + - Keep ground returns short and direct + - Create a single ground point near the Arduino + - Use star grounding topology + - Add 100Ω resistor in RS485 ground line + - Consider optical isolation for RS485 + +3. Noise Reduction: + - Separate digital and analog grounds + - Use shielded cables for RS485 + - Add ferrite beads on power lines + - Keep high-current paths away from sensitive signals + +### 2. Voltage Stability Issues + +#### Common Problems: +1. Brownouts + - Symptoms: + * RTC resets + * Corrupted SD card writes + * Modbus communication errors + - Solutions: + * Add bulk capacitance (1000μF or larger) + * Use higher current power supply + * Monitor power quality with oscilloscope + +2. Voltage Ripple + - Symptoms: + * Erratic behavior + * Communication errors + * Incorrect sensor readings + - Solutions: + * Add LC filter on power input + * Use linear regulator instead of switching + * Increase decoupling capacitance + +3. EMI/RFI Issues + - Symptoms: + * Interference during transmission + * Data corruption + * System lockups + - Solutions: + * Shield power supply cables + * Add common-mode chokes + * Use metal enclosure as shield + * Add TVS diodes for protection + +[Previous sections remain the same until Component-Specific Power Solutions] + +### 3. Component-Specific Power Solutions + +#### 3.1 SD Card Module Power Management + +1. Voltage Requirements: + - Operating voltage: 3.3V ±0.3V + - Maximum current draw: ~100mA during writes + - Peak current during initialization: ~200mA + +2. Recommended Power Configuration: + - Primary Solution: + * Use AMS1117-3.3V dedicated regulator + * Input capacitor: 10μF tantalum + * Output capacitor: 22μF tantalum + * Bulk capacitor: 100μF electrolytic + * Bypass capacitor: 0.1μF ceramic + +3. Implementation Details: + ```cpp + // Code to detect power-related SD issues + bool checkSDPower() { + if (!sd.begin(SD_CONFIG)) { + // Try power cycling SD card if available + digitalWrite(SD_POWER_PIN, LOW); + delay(100); + digitalWrite(SD_POWER_PIN, HIGH); + delay(100); + return sd.begin(SD_CONFIG); + } + return true; + } + ``` + +4. PCB Layout Recommendations: + - Keep power traces minimum 20mil width + - Use ground plane under SD module + - Place decoupling caps within 10mm + - Separate digital and analog grounds + +#### 3.2 RS485 Interface Power Solutions + +1. Power Requirements: + - Operating voltage: 5V ±0.25V + - Typical current: 50mA + - Maximum current: 250mA during transmission + +2. Isolation Solutions: + - Recommended Components: + * ISO7721 digital isolator + * B0505S-1W isolated DC-DC converter + * 120Ω termination resistors (0.25W) + * TVS diodes: SMBJ6.5CA + +3. Protection Circuit: + ``` + VCC (5V) ----[10Ω]----+----[0.1μF]----GND + | + [TVS Diode] + | + RS485_A ----[100Ω]---+----[MAX485] + ``` + +4. Noise Mitigation: + - Add common-mode choke (100μH) + - Use split ground plane + - Implement cable shield grounding + - Add bi-directional TVS protection + +#### 3.3 RTC Module Power Management + +1. Primary Power: + - Operating voltage: 5V ±0.5V + - Current consumption: ~1.5mA + - Backup current: ~3μA + +2. Backup Power Solutions: + - Primary Option: CR2032 Battery + * Expected life: 3-5 years + * Monitor voltage threshold: 2.5V + * Add schottky diode for protection + + - Alternative: Super Capacitor + * Recommended: 1F, 5.5V + * Charge resistor: 1kΩ + * Backup duration: ~1 week + +3. Power Monitoring: + ```cpp + bool checkRTCPower() { + float backupVoltage = analogRead(RTC_BATT_PIN) * (5.0 / 1023.0); + if (backupVoltage < 2.5) { + Serial.println("RTC backup voltage low!"); + return false; + } + return true; + } + ``` + +4. Temperature Compensation: + - Add temperature sensor (DS18B20) + - Monitor correlation with time drift + - Implement software correction + +#### 3.4 Arduino MEGA Power Requirements + +1. Voltage Inputs: + - VIN (recommended): 7-12V + - 5V USB: 5V ±0.25V + - Maximum current: 500mA + - Peak current: 800mA + +2. Power Distribution: + - Main regulator bypassing: + * 47μF electrolytic on VIN + * 0.1μF ceramic on 5V + * 10μF tantalum on 3.3V + + +4. Power Debugging: + - Monitor VIN with voltage divider + - Check 5V rail stability + - Measure ground bounce + - Track current consumption + +#### 3.5 Power Integration Guidelines + +1. System Power Budget: + ``` + Component Typical Peak + -------------------------------------- + Arduino MEGA 100mA 200mA + SD Card 50mA 200mA + RS485 50mA 250mA + RTC 2mA 3mA + LEDs 20mA 40mA + -------------------------------------- + Total: 222mA 693mA + ``` + +2. Power Supply Selection: + - Minimum rating: 12V @ 1A + - Recommended: 12V @ 2A + - Consider linear vs switching + - Add 50% safety margin + +3. Decoupling Network: + ``` + Location Capacitor + -------------------------------------- + Input Power 1000μF electrolytic + VIN 47μF electrolytic + 5V Rail 10μF tantalum + 3.3V Rail 22μF tantalum + Each IC 0.1μF ceramic + ``` + +4. Ground Management: + - Implement star grounding + - Separate analog/digital + - Use ground plane + - Monitor ground differential +