This shows you the differences between two versions of the page.
pm:lab:lab6-2023-2024 [2025/03/23 14:54] mihnea.dinica Formatation |
pm:lab:lab6-2023-2024 [2025/04/09 02:43] (current) mihnea.dinica Add points |
||
---|---|---|---|
Line 64: | Line 64: | ||
{{pm:lab:twbr.png?600}} | {{pm:lab:twbr.png?600}} | ||
- | TWBR selectează divizorul de frecvență (similar cu prescaler-ul) care generează frecvența ceasului SCL în modurile master. | + | TWBR selectează divizorul de frecvență care generează frecvența ceasului SCL în modurile master. |
==== TWI Control Register ==== | ==== TWI Control Register ==== | ||
Line 81: | Line 81: | ||
* 1 - Intreruperea I2C este activata (atat timp cat bitul TWINT este high) | * 1 - Intreruperea I2C este activata (atat timp cat bitul TWINT este high) | ||
* 0 - Intreruperea I2C este dezactivata | * 0 - Intreruperea I2C este dezactivata | ||
+ | * TWSTA: TWI START Condition | ||
+ | * 1 - Setat software atunci cand se doreste sa obtinem statusul de Master pe magistrala I2C. | ||
+ | * TWSTO: TWI STOP Condition | ||
+ | * 1 - Setat software atunci cand vrem sa facem release la statusul de Master. | ||
==== TWI Status Register ==== | ==== TWI Status Register ==== | ||
{{pm:lab:twsr.png?600}} | {{pm:lab:twsr.png?600}} | ||
Line 132: | Line 136: | ||
Comunicarea cu senzorul se va face prin citirea/scrierea registrelor senzorului, folosind I2C. Pentru accesarea unui registru, atât pentru scriere | Comunicarea cu senzorul se va face prin citirea/scrierea registrelor senzorului, folosind I2C. Pentru accesarea unui registru, atât pentru scriere | ||
cât și pentru citire, este necesară transmiterea adresei acestuia înainte de operație. Tabela cu registrele si adresele acestora, se găsește | cât și pentru citire, este necesară transmiterea adresei acestuia înainte de operație. Tabela cu registrele si adresele acestora, se găsește | ||
- | în [[https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf|Datasheet]], în secțiunea ''14''. | + | în [[https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf|Datasheet-ul senzorului]], în secțiunea ''14''. |
{{ :pm:lab:lab6:mpl3115a2-registers.jpeg?400 |}} | {{ :pm:lab:lab6:mpl3115a2-registers.jpeg?400 |}} | ||
Line 138: | Line 142: | ||
===== 6. Exerciții ===== | ===== 6. Exerciții ===== | ||
- | Descărcați {{:pm:lab:lab6:lab6-skel-2023-2024.zip|arhiva cu scheletul de cod}}. Urmăriți indicațiile din ''TODO''-uri. | + | Descărcați {{:pm:lab:lab6:lab6-skel-2025.zip|arhiva cu scheletul de cod}}. Urmăriți indicațiile din ''TODO''-uri. |
- | **Task 0.** Completați corpul funcțiilor ''twi_init'', ''twi_start'' și ''twi_stop'' din fișierul ''twi.c''. | + | **Task 0 [2p].** Completați corpul funcțiilor ''twi_init'', ''twi_start'' și ''twi_stop'' din fișierul ''twi.c''. |
<note> | <note> | ||
Line 146: | Line 150: | ||
</note> | </note> | ||
- | **Task 1.** Completați corpul funcțiilor ''twi_read_ack'', ''twi_read_nack'' și ''twi_write'' din fișierul ''twi.c''. | + | **Task 1 [2p].** Completați corpul funcțiilor ''twi_read_ack'', ''twi_read_nack'' și ''twi_write'' din fișierul ''twi.c''. |
<note> | <note> | ||
Line 153: | Line 157: | ||
</note> | </note> | ||
- | **Task 2.** Completați corpul funcției ''twi_discover'' din fișierul ''twi.c''. Funcția trebuie să trimită un SLA_R (slave read) | + | **Task 2 [2p].** Completați corpul funcției ''twi_discover'' din fișierul ''twi.c''. Funcția trebuie să trimită un SLA_R (slave read) |
către toate adresele posibile pentru I2C slaves (0-127), pentru a determina ce dispozitive sunt conectate pe magistrala de I2C. | către toate adresele posibile pentru I2C slaves (0-127), pentru a determina ce dispozitive sunt conectate pe magistrala de I2C. | ||
Afișați pe serial adresele dispozitivelor conectate și nu uitați să apelați funcția în ''main''. | Afișați pe serial adresele dispozitivelor conectate și nu uitați să apelați funcția în ''main''. | ||
Line 173: | Line 177: | ||
</note> | </note> | ||
- | **Task 3.** În următoarele task-uri, vom folosi senzorul **MPL3115A2**, prezentat anterior. Pentru a putea configura și citi valorile | + | **Task 3 [4p].** În următoarele task-uri, vom folosi senzorul **MPL3115A2**, prezentat anterior. Pentru a putea configura și citi valorile |
registrelor senzorului, vom urmări pașii din diagrama de stări de mai jos, preluată din [[https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf|Datasheet MPL3115A2]]. | registrelor senzorului, vom urmări pașii din diagrama de stări de mai jos, preluată din [[https://www.nxp.com/docs/en/data-sheet/MPL3115A2.pdf|Datasheet MPL3115A2]]. | ||
Line 183: | Line 187: | ||
</note> | </note> | ||
- | **Task 3.1.** Pentru început, vrem să inițializăm senzorul. Completați corpul funcției ''mpl3115a2_init'' din fișierul ''mpl3115a2.c''. Aceasta va trebui apelată în cadrul | + | **Task 3.1 [1p].** Pentru început, vrem să inițializăm senzorul. Completați corpul funcției ''mpl3115a2_init'' din fișierul ''mpl3115a2.c''. Aceasta va trebui apelată în cadrul |
funcției ''main'', înainte de loop. | funcției ''main'', înainte de loop. | ||
- | **Task 3.2.** Completați corpul funcțiilor ''mpl3115a2_read_pressure'' și ''mpl3115a2_read_temperature'' din fișierul ''mpl3115a2.c''. Acestea vor trebui apelate în cadrul | + | **Task 3.2 [3p].** Completați corpul funcțiilor ''mpl3115a2_read_pressure'' și ''mpl3115a2_read_temperature'' din fișierul ''mpl3115a2.c''. Acestea vor trebui apelate în cadrul |
funcției ''main'', în interiorul loop-ului. Afișați valorile citite pe serial. | funcției ''main'', în interiorul loop-ului. Afișați valorile citite pe serial. | ||
Line 233: | Line 237: | ||
<hidden> | <hidden> | ||
<solution> | <solution> | ||
- | Arhiva cu soluțiile o puteți descărca de aici: {{:pm:lab:lab6:lab6-skel-solution.zip}} | + | Arhiva cu soluțiile o puteți descărca de aici: {{:pm:lab:lab6:lab6-solution-2025.zip}} |
</solution> | </solution> | ||
</hidden> | </hidden> | ||
Line 245: | Line 249: | ||
===== 8. Responsabili laborator ===== | ===== 8. Responsabili laborator ===== | ||
- | * [[irina_cristina.nita@stud.acs.upb.ro|Irina-Cristina Niță]] | + | * [[mihnea.dinica@stud.acs.upb.ro|Mihnea-Gabriel Dinica]] |
- | * [[sebastian.severin@stud.acs.upb.ro|Sebastian Severin]] | + | * [[atoader@stud.acs.upb.ro|Alexandru Toader]] |