Lab 7.1: Comunicații cu module periferice – I²C – Protocol HW
Scopul lucrării
Familiarizarea cu protocolul de comunicație I²C și implementarea unei aplicații de comunicație între două microcontrolere (master și slave), în care slave-ul colectează date reale de la senzori ultrasonici, iar masterul interoghează periodic datele prin I²C. Aplicația va utiliza sistemul de operare în timp real FreeRTOS pentru organizarea logicii în taskuri separate.
Obiectivele lucrării
Înțelegerea principiilor protocolului I²C și a structurii hardware de comunicație între microcontrolere.
Configurarea comunicației între două microcontrolere prin magistrala I²C (master ↔ slave).
Integrarea unuia sau mai multor senzori ultrasonici cu MCU-ul slave.
Organizarea aplicației în taskuri FreeRTOS pentru colectare, actualizare buffer și comunicare.
Interogarea de către master și afișarea datelor colectate folosind STDIO (Serial) și/sau LCD.
Definire Problemă
Să se realizeze o aplicație în care două microcontrolere comunică prin protocolul I²C, având următoarele comportamente:
MCU Slave:
Integrează unul sau mai mulți senzori ultrasonici (ex. HC-SR04) conectați pe GPIO.
Rulează în FreeRTOS cel puțin două taskuri:
Task de achiziție periodică a distanței de la senzori.
Task de actualizare buffer partajat pentru răspuns I²C.
Răspunde cererilor I²C de la master cu datele cele mai recente din buffer.
MCU Master:
Trimite periodic comenzi de interogare către slave.
Primește datele înapoi prin I²C și le afișează:
fie pe LCD (opțional),
fie în interfața serială, utilizând funcții STDIO (printf).
Formatul de date transmis trebuie să fie structurat: HEAD, LENGTH, PAYLOAD, CHECKSUM.
Materiale și resurse
Componente hardware:
2 x Microcontrolere (ESP32, STM32 sau Arduino Uno/Nano)
1 sau mai mulți senzori HC-SR04
Rezistențe de pull-up 4.7 kΩ pentru SDA și SCL
LCD (opțional, pentru afișare alternativă)
Breadboard, cabluri jumper
Sursă de alimentare USB
Resurse software:
Visual Studio Code cu extensia PlatformIO
FreeRTOS (inclus în framework-ul Arduino pentru ESP32 / STM32)
Biblioteca Wire pentru I²C
Biblioteci pentru senzori HC-SR04
Simulator hardware (opțional: Proteus)
Recomandări
Structurați aplicația slave astfel încât senzorii să fie integrați modular.
Pentru achiziția HC-SR04 folosiți delay precis (vTaskDelayUntil) pentru stabilitate.
Masterul poate interoga toți senzorii simultan (pachet mare) sau individual (adresare logică).
Utilizați semnale de sincronizare sau mutex dacă bufferul de răspuns este partajat între taskuri.
Reutilizați logica de afișare STDIO și LCD din lucrările anterioare.
Pontaj
Cerințe obligatorii:
Respectarea structurii modulare a proiectului.
Prezentarea schemei bloc, a arhitecturii comunicației, a FSM-ului (dacă este cazul) și a interfețelor HW/SW.
Respectarea formatului raportului conform normelor UTM.
Notare:
50% – Funcționarea completă a comunicației I²C între cele două MCU-uri cu date reale de la senzori
10% – Utilizarea corectă a taskurilor FreeRTOS pentru achiziție și partajare date
10% – Structura clară și sigură a datelor transmise și afișarea corectă la master
10% – Prezentarea diagramei de sistem, a arhitecturii taskurilor și a interfețelor HW/SW
10% – Prezentarea schemelor electrice și a conexiunilor fizice
10% – Implementarea unui comportament adițional improvizat (ex.: adresare multiplă de senzori, calibrare automată, semnal de alertă în caz de apropiere excesivă)
NOTĂ: Pontajul maxim este posibil doar la prezentarea funcționării fizice complete a soluției și a unui comportament adițional improvizat.
10% penalizare pentru fiecare săptămână întârziere față de termenul stabilit.
Întrebări de control
Cum se configurează o magistrală I²C între două microcontrolere?
Ce rol are fiecare componentă a pachetului de date: HEAD, PAYLOAD, CHECKSUM?
Cum se gestionează sincronizarea între taskuri în FreeRTOS (semnale, mutexuri)?
Ce problemă apare dacă masterul interoghează slave-ul în timp ce acesta actualizează datele?
Ce diferență este între I²C hardware și un protocol logic software?
Care sunt avantajele rulării în FreeRTOS față de programarea secvențială pentru această aplicație?