Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 dulescu]] 
-  * [[daniel.rosner@cs.pub.ro|Daniel Rosner]]+  * [[ga.andrei.batasev@gmail.com|Andrei Batasev]]
  
pm/lab/lab5-2023-2024.1744009170.txt.gz · Last modified: 2025/04/07 09:59 by jan.vaduva
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0