Differences

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

Link to this comparison view

pm:prj2024:avaduva:vlad_vasile.ion [2024/05/26 22:42]
vlad_vasile.ion [Software Design]
pm:prj2024:avaduva:vlad_vasile.ion [2024/05/27 00:00] (current)
vlad_vasile.ion [Bibliografie/Resurse]
Line 36: Line 36:
 ===== Software Design ===== ===== Software Design =====
  
-Pentru programarea plăcii am folosit Arduino IDE, fără biblioteci specifice Arduino. Singurele biblioteci incluse sunt `<​avr/​io.h>​` și `<​util/​delay.h>​`,​ în rest s-au folosit funcții implementate manual (fiind un proiect orientat pe software). La baza design-ului software stau laboratoarele de I2C, SPI și datasheet-ul pentru senzorul DHT22, practic am încercat să integrez cât mai mult cod similar cu cel din laborator (plăcile fiind aproape identice). Particularități de implementare:​+Pentru programarea plăcii am folosit Arduino IDE, fără biblioteci specifice Arduino. Singurele biblioteci incluse sunt `<​avr/​io.h>​` și `<​util/​delay.h>​`,​ în rest s-au folosit funcții implementate manual (fiind un proiect orientat pe software). La baza design-ului software stau laboratoarele de I2C, SPI și datasheet-ul pentru senzorul DHT22, practic am încercat să integrez cât mai mult cod similar cu cel din laborator (plăcile fiind aproape identice). Implementarea ocupa de 2 ori mai putin spatiu decat cea cu biblioteci arduino. Particularități de implementare:​
  
    * **Implementarea comunicației I2C**:    * **Implementarea comunicației I2C**:
        - Am utilizat digitalWrite() pentru a comunica cu registrii SDA si SCL        - Am utilizat digitalWrite() pentru a comunica cu registrii SDA si SCL
-       - Inițializarea magistralei I2C se face setând pinii SDA și SCL ca ieșire ​folosind registrul DDR. +       - Inițializarea magistralei I2C se face setând pinii SDA și SCL ca ieșire 
-       - Trimiterea unui bit pe magistrala I2C implică ​setarea stării pinului ​SDA urmată ​de un impuls ​pe pinul SCL.+       - Trimiterea unui bit pe magistrala I2C implică ​scrierea bitului pe SDA si setarea lui SCL pe high 
 +       - Citirea unui bit de pe magistrala I2C implica setarea lui SDA pe input si citirea lui
  
    * **Implementarea comunicației SPI**:    * **Implementarea comunicației SPI**:
-     ​- ​Am utilizat funcții de nivel jos pentru a comunica ​cu cardul SD. Inițializarea SPI se face prin configurarea registrelor `SPCR` și `SPSR`: +     ​- ​Comunicarea SPI are o implementare foarte similara ​cu cea din laboratorla inceput setez SCKMISOSS pe OUTPUT ​si MISO pe input 
-       ​```cpp +     - Atunci cand are loc comunicatia efectiva pun data in registrul SPDR si il trimit
-       void spiBegin() { +
-         ​pinMode(MOSI_PINOUTPUT); +
-         ​pinMode(MISO_PIN,​ INPUT); +
-         ​pinMode(SCK_PIN, OUTPUT); +
-         pinMode(SS_PIN,​ OUTPUT);+
  
-         SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0); 
-         SPSR &= ~(1 << SPI2X); // Clear the SPI2X bit 
-       } 
-       ``` 
-       - Registrul SPCR este configurat pentru a activa modul SPI, pentru a seta placa în modul master și pentru a seta rata ceasului SPI. 
-       - Registrul SPSR este utilizat pentru a seta sau reseta bitul de dublare a ratei ceasului SPI. 
  
    * **Citirea datelor de la senzorul DHT22**:    * **Citirea datelor de la senzorul DHT22**:
-     - Citirea datelor de la senzorul DHT22 se face folosind ​temporizări precise și manipulări directe ale pinului de date. Funcția `readDHT` inițializează comunicarea trimițând un semnal de start și apoi citește datele folosind cicluri de așteptare și măsurători de timp: +     - Citirea datelor de la senzorul DHT22 se face folosind manipulări directe ale pinului de date(D6). Funcția `readDHT` inițializează comunicarea trimițând un semnal de start și apoi citește datele folosind cicluri de asteptare si delay-uri 
-       ```cpp +     ​Pasii functiei sunt luati din datasheet-ul DHT22
-       bool readDHT(float &​temperature,​ float &​humidity) { +
-         ​uint8_t data[5] = {0}; +
-         ​pinMode(DHTPIN,​ OUTPUT); +
-         ​digitalWrite(DHTPIN,​ LOW); +
-         ​_delay_ms(20);​ +
-         ​digitalWrite(DHTPIN,​ HIGH); +
-         ​_delay_us(40);​ +
-         ​pinMode(DHTPIN,​ INPUT_PULLUP);​ +
- +
-         // Așteptare pentru răspunsul senzorului +
-         if (!waitForSignal(LOW,​ 80) || !waitForSignal(HIGH,​ 80) || !waitForSignal(LOW,​ 80)) { +
-           ​return false; +
-         } +
- +
-         // Citire date +
-         for (uint8_t i = 0; i < 5; i++) { +
-           ​data[i] = readByte();​ +
-         } +
- +
-         // Verificare checksum +
-         if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { +
-           ​humidity = ((data[0] << 8) + data[1]) * 0.1; +
-           ​temperature = (((data[2] & 0x7F) << 8) + data[3]) * 0.1; +
-           if (data[2] & 0x80) { +
-             ​temperature = -temperature;​ +
-           } +
-           ​return true; +
-         } +
-         ​return false; +
-       } +
-       ```+
  
    * **Controlul buzzerului**:​    * **Controlul buzzerului**:​
Line 106: Line 65:
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+{{:​pm:​prj2024:​avaduva:​poza_proiect_ivv.jpeg?500|}}
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Avand in vedere implementarea low-level si functionalitatea robusta, pot afirma ca proiectul isi atinge toate obiectivele propuse. Natura constructiei si codul compact poate reduce costurile semnificativ,​ intrucat placuta nu este folosita la capacitate maxima.
 ===== Download ===== ===== Download =====
  
 <note warning> <note warning>
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +{{:pm:prj2024:avaduva:proiect_ivv.zip|}}
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**.+
 </​note>​ </​note>​
  
-===== Jurnal ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab5-2023-2024 
 +https://​www.sparkfun.com/​datasheets/​Sensors/​Temperature/​DHT22.pdf 
 +https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​40001906A.pdf 
 +https://​www.nxp.com/​docs/​en/​user-guide/​UM10204.pdf 
 +https://​github.com/​johnrickman/​LiquidCrystal_I2C/​blob/​master/​LiquidCrystal_I2C.cpp 
 </​note>​ </​note>​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2024/avaduva/vlad_vasile.ion.1716752540.txt.gz · Last modified: 2024/05/26 22:42 by vlad_vasile.ion
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