Каталог товарів
Клієнту
Тема сайту:
+38 (066) 305-77-25
Наша адреса
Харків, тимчасово - доставка тільки Новою Поштою, УкрПоштою, МістЕкспрес, ROZETKA Delivery
Телефони
Графік роботи
  • Пн-Пт: з 9 до 18
  • Сб: з 10 до 17
  • Нд: з 11 до 16
E-mail
Ми в соцмережах
Перейти до контактів
0 0
Каталог
Головна
Закладки
0
Порівняти
0
Контакти

Портативний міні-дебаггер I2C/SPI на Arduino Nano

Чи була корисною ця стаття?
Портативний міні-дебаггер I2C/SPI на Arduino Nano

Створюємо міні-дебаггер I2C/SPI на Arduino Nano

Коли твій I2C-датчик мовчить як партизан на допиті, а SPI-пристрій надсилає якісь дивні сигнали - час братися за серйозні інструменти!

Вступ

Привіт, електронні детективи! 🕵️‍♂️ Сьогодні ми створимо щось особливе - компактний дебаггер для шин I2C та SPI на базі Arduino Nano з крихітним OLED-дисплеєм. Так-так, саме на тому 0.42-дюймовому дисплеї, який настільки малий, що його можна сплутати з пікселем з Minecraft! Але не хвилюйтеся, ми змусимо цей малюк працювати на повну.

Fun fact: Знаєте, чому I2C називають "I squared C"? Тому що інженери, які його створювали, були надто ліниві щоб постійно говорити "Inter-Integrated Circuit". А ми, розробники, цінуємо лаконічність!

Arduino Nano з OLED

Практичне застосування дебаггера

1. Тестування I2C пристроїв
  • Пошук адрес пристроїв: Швидке визначення I2C адрес всіх підключених сенсорів, дисплеїв чи інших модулів
  • Виявлення конфліктів адрес: Якщо два пристрої використовують однакову адресу, наш дебаггер це покаже
  • Перевірка справності: Миттєве визначення проблем з пристроєм чи підключенням
2. Діагностика SPI комунікації
  • Аналіз даних: Перехоплення і аналіз обміну даними між мікроконтролером та SPI пристроями
3. Налагодження нових пристроїв
  • Тестування прототипів: Швидка перевірка роботи нових модулів
  • Налаштування адрес: Перевірка правильності налаштування програмованих адрес
4. Освітні цілі
  • Вивчення протоколів: Наочна демонстрація роботи I2C та SPI протоколів
  • Практичні експерименти: Можливість експериментувати з різними налаштуваннями

Що нам знадобиться

  • Arduino Nano з OLED 0.42" (наш міні-детектив)
  • Набір проводів (кольорових, щоб було веселіше)
  • Резистори підтяжки для I2C (4.7kΩ x 2)
  • Терпіння (багато!)
  • Чашка кави (без неї ніяк)

Схема підключення

схема підключення
SDA -> A4
SCL -> A5
MOSI -> D11
MISO -> D12
SCK -> D13
SS -> D10

Лайфхак: Якщо переплутаєте SDA і SCL - нічого страшного. Arduino просто буде дивитися на вас з легким розчаруванням через OLED-дисплей. 😅

Розробка інтерфейсу

Так, у нас всього 72x40 пікселів. Це як намагатися написати "Війну і мир" на поштовій марці! Але ми впораємося:

скріншоту інтерфейсу

Організація екрану:

  • Верхній рядок: статус шини і протокол
  • Середня частина: дані/адреси

Fun fact: Якщо вам здається, що 72x40 пікселів - це мало, згадайте, що перша гра Pong працювала всього з кількома пікселями. І нічого, люди навіть в чергу стояли, щоб пограти!

Програмний код

Ось серце нашого дебаггера:



#include <U8g2lib.h>
#include <Wire.h>
#include <SPI.h>

#define OLED_ADDRESS 0x3C
#define CS_PIN 10    // SS
#define MOSI_PIN 11  // MOSI
#define MISO_PIN 12  // MISO
#define SCK_PIN 13   // SCK

// Ініціалізація дисплея
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0);
bool showSPI = false;

void setup() {
    Wire.begin();
    Wire.setClock(100000); // 100kHz для стабільності
    
    // Налаштовуємо SPI піни
    pinMode(CS_PIN, OUTPUT);
    pinMode(MISO_PIN, INPUT_PULLUP);
    pinMode(MOSI_PIN, OUTPUT);
    pinMode(SCK_PIN, OUTPUT);
    
    digitalWrite(CS_PIN, HIGH);
    SPI.begin();
    
    u8g2.begin();
    u8g2.setContrast(255);
}

void scanI2C() {
    byte count = 0;
    byte devices[10];
    
    // Сканування шини
    for(byte address = 1; address < 127; address++) {
        if(address == OLED_ADDRESS) continue; // Пропускаємо адресу дисплея
        
        Wire.beginTransmission(address);
        byte error = Wire.endTransmission();
        
        if(error == 0 && count < 10) {
            devices[count] = address;
            count++;
        }
        delay(1);
    }
    
    // Оновлення дисплея
    u8g2.firstPage();
    do {
        u8g2.setFont(u8g2_font_7x13_tr);
        u8g2.drawStr(2, 9, "I2C:");
        
        u8g2.setFont(u8g2_font_9x15_tr);
        
        char buffer[12];
        for(byte i = 0; i < count && i < 2; i++) {
            sprintf(buffer, "0x%02X", devices[i]);
            u8g2.drawStr(5, 24 + (i * 15), buffer);
        }
        
        if(count == 0) {
            u8g2.drawStr(5, 25, "NONE");
        }
        
    } while(u8g2.nextPage());
}

void scanSPI() {
    // Робимо кілька замірів для надійності
    byte responses[5];
    for(byte i = 0; i < 5; i++) {
        digitalWrite(CS_PIN, LOW);
        delayMicroseconds(100);
        responses[i] = SPI.transfer(0xFF);
        delayMicroseconds(100);
        digitalWrite(CS_PIN, HIGH);
        delay(1);
    }
    
    // Перевіряємо, чи змінюються значення
    bool hasResponse = false;
    for(byte i = 1; i < 5; i++) {
        if(responses[i] != responses[0]) {
            hasResponse = true;
            break;
        }
    }
    
    u8g2.firstPage();
    do {
        u8g2.setFont(u8g2_font_7x13_tr);
        u8g2.drawStr(2, 9, "SPI:");
        
        u8g2.setFont(u8g2_font_9x15_tr);
        
        if(hasResponse) {
            u8g2.drawStr(5, 24, "ACTIVE");
            char buffer[12];
            sprintf(buffer, "0x%02X", responses[0]);
            u8g2.drawStr(5, 39, buffer);
        } else {
            u8g2.drawStr(5, 24, "NONE");
        }
        
    } while(u8g2.nextPage());
}

void loop() {
    showSPI = !showSPI;
    
    if(showSPI) {
        scanSPI();
    } else {
        scanI2C();
    }
    
    delay(3000); // Перемикаємо режим кожні 3 секунди
}


Порада: Не панікуйте, якщо спочатку побачите тільки дивні символи на екрані. Можливо, ви просто випадково написали новий діалект китайської!

працюючого дебаггера

Основні функції

  • ✓ Пошук всіх пристроїв на шині
  • ✓ Відображення знайдених адрес

Важливо: Якщо ваш дебаггер показує, що все працює правильно, а система все одно не працює - не засмучуйтеся. Можливо, це просто п'ятниця, 13-е!

Тестування

тестування з реальними пристроями
Для тестування використовуємо:
  • 1. I2C датчик температури
  • 2. SPI флеш-пам'ять
  • 3. Будь-який пристрій, який відмовляється працювати саме тоді, коли він терміново потрібен

Висновки

Наш міні-дебаггер готовий! Тепер ви можете:

  • ✓ Знаходити неслухняні I2C пристрої
  • ✓ Підглядати за SPI транзакціями
  • ✓ Вражати колег своїм професіоналізмом
  • ✓ Робити вигляд, що розумієте, що відбувається на шині

Останній факт: Знаєте, чому досвідчені розробники люблять налагоджувати I2C/SPI системи? Тому що це єдиний законний спосіб підглядати за чужим спілкуванням! 😉

© 2024 Мій Проект.Автор: Jazzzman. Використання матеріалів дозволено лише з посиланням на джерело.

Рекомендовані товари