This shows you the differences between two versions of the page.
pm:lab:lab5-2023-2024 [2025/04/07 09:59] jan.vaduva [6. Exerciții] |
pm:lab:lab5-2023-2024 [2025/04/08 18:06] (current) andrei.batasev [6. Exerciții] |
||
---|---|---|---|
Line 90: | Line 90: | ||
FRESULT pf_readdir (DIR*, FILINFO*); // Citește un director | FRESULT pf_readdir (DIR*, FILINFO*); // Citește un director | ||
</file> | </file> | ||
+ | |||
+ | <note tip> Atunci când folosești pf_write pentru a scrie date, este necesar să apelezi și <file c>pf_write(NULL, 0, &w)</file> ca să finalizezi scrierea (flush). | ||
+ | |||
+ | Dacă nu faci acest pas, citirile ulterioare pot eșua cu o eroare de tip disk error. </note> | ||
===== 6. Exerciții ===== | ===== 6. Exerciții ===== | ||
+ | <hidden> | ||
+ | Inițializare SD-Card | ||
+ | |||
+ | Pentru a putea inițializa cardul SD, trebuie urmați următorii pași: | ||
+ | |||
+ | - Formatați cardul SD folosind sistemul de fișiere **FAT32** | ||
+ | - Creați un fișier numit **log.csv** în rădăcina (root) sistemului de fișiere | ||
+ | ({{ pm:lab:log.txt | exemplu de fișier }} – redenumiți-l în **log.csv**!) | ||
+ | |||
+ | <note tip> | ||
+ | Fișierul trebuie să aibă deja o dimensiune suficient de mare, deoarece din PFF (Petit FAT FileSystem) **nu se poate face append** direct într-un fișier gol sau de dimensiune mică. | ||
+ | </note> | ||
+ | |||
+ | </hidden> | ||
+ | {{ pm:lab:lab5_skel_2025-4.zip | Lab5_Skel }} | ||
- | 1. SPI Control | + | 1. SPI Control (2p total) |
Implementați funcțiile de bază care asigură comunicarea microcontroller-ului prin SPI: SPI_init() și SPI_exchange() din fișierul spi.c. | Implementați funcțiile de bază care asigură comunicarea microcontroller-ului prin SPI: SPI_init() și SPI_exchange() din fișierul spi.c. | ||
Line 102: | Line 121: | ||
* SPDR0 conține octetul transmis și apoi cel recepționat. | * SPDR0 conține octetul transmis și apoi cel recepționat. | ||
- | CHECKPOINT: SPI_exchange() trebuie să trimită și să primească date corect. | + | CHECKPOINT (1p): SPI_exchange() trebuie să trimită și să primească date corect. |
- | 2. SD Card Control | + | 2. SD Card Control (2p total) |
Implementați funcțiile SD_init(), SD_receive() și SD_transmit() din sd.c. Urmați TODO2. | Implementați funcțiile SD_init(), SD_receive() și SD_transmit() din sd.c. Urmați TODO2. | ||
Line 110: | Line 129: | ||
* Pentru citire, transmiteți 0xFF (octet dummy). | * Pentru citire, transmiteți 0xFF (octet dummy). | ||
- | CHECKPOINT: LCD ar trebui să afișeze 'Mounted!' după câteva secunde. | + | CHECKPOINT (1p): LCD ar trebui să afișeze 'Mounted!' după câteva secunde. |
- | 3. Citirea temperaturii | + | 3. Citirea temperaturii (2p) |
Configurați ADC-ul și citiți temperatura de la un senzor analog. Implementați adc_init() și adc_read(). | Configurați ADC-ul și citiți temperatura de la un senzor analog. Implementați adc_init() și adc_read(). | ||
* Referință AVcc, prescaler 8. | * Referință AVcc, prescaler 8. | ||
- | * Convertiți valoarea ADC în tensiune, apoi în °C (ex: LM35). | + | * Convertiți valoarea ADC în tensiune, apoi în °C (ex: LM35D). |
* Afișați temperatura pe LCD. | * Afișați temperatura pe LCD. | ||
* Verificați citirea temperaturii și prin USART. | * Verificați citirea temperaturii și prin USART. | ||
- | 4. Logarea temperaturii pe cardul SD | + | 4. Logarea temperaturii pe cardul SD (2p) |
- | + | <note tip> Tineti cont ca nu puteti crea sau mari size-ul unui fisier folosind PFF, asa ca va trebui sa va incadrati in marimea fisierului deja existent pe sdcard </note> | |
- | Implementați log_temperature() în lab5.c astfel încât să logați valorile citite de la senzor într-un fișier CSV. | + | Implementați init_log_display() și log_temperature() în lab5.c astfel încât să logați valorile citite de la senzor într-un fișier CSV. |
* Folosiți SD_log_data() pentru scrierea valorilor. | * Folosiți SD_log_data() pentru scrierea valorilor. | ||
* Afișați temperatura pe LCD și trimiteți-o prin USART. | * Afișați temperatura pe LCD și trimiteți-o prin USART. | ||
* La apăsarea butonului PD6, salvați o nouă intrare. | * La apăsarea butonului PD6, salvați o nouă intrare. | ||
- | 5. Navigarea prin loguri | + | 5. Navigarea prin loguri (2p total) |
- | Implementați init_log_display() și next_log_entry() pentru a citi fișierul log.csv linie cu linie. | + | Implementați next_log_entry() pentru a citi fișierul log.csv linie cu linie. |
* Afișați fiecare linie pe LCD. | * Afișați fiecare linie pe LCD. | ||
* La apăsarea butonului PB2, treceți la următoarea linie. | * La apăsarea butonului PB2, treceți la următoarea linie. | ||
* Când ajungeți la final, reveniți la început. | * Când ajungeți la final, reveniți la început. | ||
- | CHECKPOINT: Trebuie să puteți naviga prin toate logurile. | + | CHECKPOINT (1p): Trebuie să puteți naviga prin toate logurile. |
- | + | ||
- | <hidden>Rezolvarea laborator:</hidden> | + | |
===== 4. Linkuri utile ===== | ===== 4. Linkuri utile ===== | ||
Line 145: | Line 162: | ||
===== 5. Responsabili laborator ===== | ===== 5. Responsabili laborator ===== | ||
- | * [[virtanrazvan@gmail.com|Răzvan Vîrtan]] | + | * [[vlad.radulescu2901@upb.ro|Vlad Rădulescu]] |
- | * [[daniel.rosner@cs.pub.ro|Daniel Rosner]] | + | * [[ga.andrei.batasev@gmail.com|Andrei Batasev]] |