Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:miruna.iliescu [2026/05/15 14:53]
miruna.iliescu [Jurnal]
pm:prj2026:bianca.popa1106:miruna.iliescu [2026/05/15 20:49] (current)
miruna.iliescu [Diagrama de semnal]
Line 42: Line 42:
  
 Implementarea folosește o mașină de stări non-blocantă,​ fără nicio funcție de tip Implementarea folosește o mașină de stări non-blocantă,​ fără nicio funcție de tip
-`_delay_ms()în bucla principală. Timpii sunt gestionați printr-un contor de milisecunde+_delay_ms() în bucla principală. Timpii sunt gestionați printr-un contor de milisecunde
 propriu, bazat pe Timer1 în mod CTC. propriu, bazat pe Timer1 în mod CTC.
  
Line 88: Line 88:
   * Breadboard   * Breadboard
   * Fire de legătură   * Fire de legătură
 +
 +{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​schema_hardware.png?​800 |Schema hardware }}
  
 Placa Arduino-compatible reprezintă unitatea centrală de control a sistemului. Aceasta Placa Arduino-compatible reprezintă unitatea centrală de control a sistemului. Aceasta
Line 108: Line 110:
 Butonul este conectat pe pinul D2 (INT0), cu pull-up intern activat. Întreruperea externă Butonul este conectat pe pinul D2 (INT0), cu pull-up intern activat. Întreruperea externă
 se declanșează pe front descrescător (1→0), adică la apăsarea butonului. se declanșează pe front descrescător (1→0), adică la apăsarea butonului.
 +
 +==== Diagrama de semnal ====
 +
 +{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​protectie_emi.png?​1000 |Protectie EMI }}
 +
 +{{ :​pm:​prj2026:​bianca.popa1106:​miruna.iliescu:​ciclu_irigare_auto.png?​1000 | Ciclu irigare AUTO }}
  
 ===== Software Design ===== ===== Software Design =====
Line 114: Line 122:
  
 Întregul software este structurat ca o **mașină de stări non-blocantă**. Bucla principală Întregul software este structurat ca o **mașină de stări non-blocantă**. Bucla principală
-`while(1)rulează continuu fără nicio instrucțiune ​`_delay_ms()`, permițând verificarea+while(1) rulează continuu fără nicio instrucțiune _delay_ms(),​ permițând verificarea
 simultană a butonului, a timpilor de stare și a senzorului la fiecare iterație. simultană a butonului, a timpilor de stare și a senzorului la fiecare iterație.
  
-Timpul este gestionat printr-un contor propriu de milisecunde (`uptime_ms()`), implementat+Timpul este gestionat printr-un contor propriu de milisecunde (uptime_ms()),​ implementat
 folosind **Timer1 în mod CTC** cu prescaler 64 și OCR1A = 249, generând o întrerupere la folosind **Timer1 în mod CTC** cu prescaler 64 și OCR1A = 249, generând o întrerupere la
 fiecare 1 ms (pentru F_CPU = 16 MHz). fiecare 1 ms (pentru F_CPU = 16 MHz).
Line 123: Line 131:
 ==== Moduri de funcționare ==== ==== Moduri de funcționare ====
  
-Sistemul definește două moduri (`system_mode_t`):+Sistemul definește două moduri (system_mode_t):​
  
   * **MODE_AUTO**:​ irigare automată bazată pe citirile senzorului   * **MODE_AUTO**:​ irigare automată bazată pe citirile senzorului
   * **MODE_MANUAL**:​ control manual al pompei prin buton   * **MODE_MANUAL**:​ control manual al pompei prin buton
  
-În MODE_AUTO, mașina de stări (`irrigation_state_t`) parcurge:+În MODE_AUTO, mașina de stări (irrigation_state_t) parcurge:
  
   * **STATE_IDLE**:​ citire senzor la intervale regulate; dacă umiditatea < prag → STATE_WATERING   * **STATE_IDLE**:​ citire senzor la intervale regulate; dacă umiditatea < prag → STATE_WATERING
Line 142: Line 150:
  
 Butonul este conectat pe INT0 (D2) cu pull-up intern. ISR-ul verifică starea pinului Butonul este conectat pe INT0 (D2) cu pull-up intern. ISR-ul verifică starea pinului
-în momentul declanșării (`if (!(PIND & (1 << PD2)))`) pentru a filtra false triggere+în momentul declanșării (if (!(PIND & (1 << PD2)))) pentru a filtra false triggere
 cauzate de interferențe electromagnetice (EMI) generate de comutarea releului. cauzate de interferențe electromagnetice (EMI) generate de comutarea releului.
  
Line 149: Line 157:
  
 La pornirea și oprirea pompei, butonul este mascat pentru 1000 ms La pornirea și oprirea pompei, butonul este mascat pentru 1000 ms
-(`ignore_button_until_ms`), acoperind perioada de inrush current a motorului care+(ignore_button_until_ms),​ acoperind perioada de inrush current a motorului care
 generează EMI. Această mască, combinată cu verificarea pinului în ISR și debouncing-ul generează EMI. Această mască, combinată cu verificarea pinului în ISR și debouncing-ul
 de 250 ms, elimină practic toate false detectările. de 250 ms, elimină practic toate false detectările.
Line 158: Line 166:
   * **Lab 1 – USART**: log serial pentru debugging; afișarea valorilor ADC, umidității și stării sistemului   * **Lab 1 – USART**: log serial pentru debugging; afișarea valorilor ADC, umidității și stării sistemului
   * **Lab 2 – Întreruperi externe**: butonul pe INT0, front descrescător,​ cu ISR pentru setarea unui flag atomic   * **Lab 2 – Întreruperi externe**: butonul pe INT0, front descrescător,​ cu ISR pentru setarea unui flag atomic
-  * **Lab 3 – Timer1 CTC**: contor de milisecunde non-blocant;​ OCR1A = 249, prescaler 64, ISR incrementează ​`system_millis`+  * **Lab 3 – Timer1 CTC**: contor de milisecunde non-blocant;​ OCR1A = 249, prescaler 64, ISR incrementează system_millis
   * **Lab 4 – ADC**: citirea senzorului FC-28 pe canalul A0; medie pe 10 eșantioane cu eliminarea min/max   * **Lab 4 – ADC**: citirea senzorului FC-28 pe canalul A0; medie pe 10 eșantioane cu eliminarea min/max
   * **TWI/​I2C**:​ comunicare cu LCD 1602 prin modulul PCF8574; driver propriu implementat în registre AVR   * **TWI/​I2C**:​ comunicare cu LCD 1602 prin modulul PCF8574; driver propriu implementat în registre AVR
pm/prj2026/bianca.popa1106/miruna.iliescu.1778846032.txt.gz · Last modified: 2026/05/15 14:53 by miruna.iliescu
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