Lab 7.1 Comunicare cu periferii - I²C
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?