This shows you the differences between two versions of the page.
pm:lab:lab6-2023-2024 [2025/03/23 14:40] 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 71: | Line 71: | ||
TWCR este folosit pentru a activa interfața I2C, inițiază accesul la master prin aplicarea condiției START, generează confirmarea receptorului, generează condiția de oprire și control al acesteia în timpul scrierii în registrul de date TWDR. De asemenea, indică coliziuni la scriere. | TWCR este folosit pentru a activa interfața I2C, inițiază accesul la master prin aplicarea condiției START, generează confirmarea receptorului, generează condiția de oprire și control al acesteia în timpul scrierii în registrul de date TWDR. De asemenea, indică coliziuni la scriere. | ||
* TWINT : TWI Interrupt Flag | * TWINT : TWI Interrupt Flag | ||
- | * 1 - Clear, setat din software, in rest este setat de hardware. | + | * 1 - In general este setat de hardware, cand s-a incheiat etapa curenta de comunicare I2C si se asteapta o interactiune din partea software-ului. Daca intreruperile sunt activate (bit I in SREG si bit TWIE aici), se va executa ISR-ul aferent. Incheierea acestei rutine nu dezactiveaza automat flagul, deci pentru a fi //cleared// trebuie setat din software (prin scierea 1 logic). |
* TWEA: TWI Enable Acknowledge Bit | * TWEA: TWI Enable Acknowledge Bit | ||
* 1 - ACK este trimis | * 1 - ACK este trimis | ||
Line 78: | Line 78: | ||
* 1 - Permite comunicarea | * 1 - Permite comunicarea | ||
* 0 - Încheierea transmisiunii indiferent de stare | * 0 - Încheierea transmisiunii indiferent de stare | ||
+ | * TWIE: TWI Interrupt Enable | ||
+ | * 1 - Intreruperea I2C este activata (atat timp cat bitul TWINT este high) | ||
+ | * 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}} | ||
- | * TWSR descrie statusul si prescalerul interfeței. | + | |
+ | TWSR descrie statusul si prescalerul interfeței. | ||
==== TWI Data Register ==== | ==== TWI Data Register ==== | ||
{{pm:lab:twdr.png?600}} | {{pm:lab:twdr.png?600}} | ||
- | * TWDR conține în modul de transmisie următorul octet de transmis iar în modul de recepție ultimul octet primit. | + | |
+ | TWDR conține în modul de transmisie următorul octet de transmis iar în modul de recepție ultimul octet primit. | ||
===== 4. Utilizarea modulului I2C pe AVR ===== | ===== 4. Utilizarea modulului I2C pe AVR ===== | ||
Line 128: | 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 134: | 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 142: | 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 149: | 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 169: | 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 179: | 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 229: | 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 241: | 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]] |