Differences

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

Link to this comparison view

pm:prj2024:vstoica:alexandru.ciornei [2024/05/27 01:34]
alexandru.ciornei [Software Design]
pm:prj2024:vstoica:alexandru.ciornei [2024/05/27 12:24] (current)
alexandru.ciornei [Jurnal]
Line 33: Line 33:
 ===== Software Design ===== ===== Software Design =====
  
-=== USART ===+==== USART ====
  
 <note tip> <note tip>
Line 76: Line 76:
 } }
 </​code>​ </​code>​
-===== Rezultate Obţinute ===== 
  
-<note tip> +==== ADC ====
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+Pentru a putea detecta lumina din mediul înconjurător cu ajutorul unui fotorezistor am folosit modulul de convertor analogic digital, care să interpreteze practic lumina ca o valoare pe 10 biți (0-1023).
  
-===== Download =====+<​code>​ 
 +void adc_init() 
 +
 +    // channel 7 
 +    ADMUX |_BV(MUX0) | _BV(MUX1) | _BV(MUX2);​ 
 +    // AVcc with external capacitor at AREF PIN 
 +    ADMUX |_BV(REFS0);
  
-<note warning> +    ADCSRA = 0; 
-O arhivă ​(sau mai multe dacă este cazulcu 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ă ;-).+    // set 128 prescaler 
 +    ADCSRA |= _BV(ADPS0); 
 +    ADCSRA |= _BV(ADPS1)
 +    ADCSRA |= _BV(ADPS2);​ 
 +    // enable ADC 
 +    ADCSRA |= _BV(ADEN);​ 
 +}
  
-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**. +uint16_t adc_get_light_value() 
-</note>+
 + // start conversion 
 + ADCSRA |= (1 << ADSC);
  
-===== Jurnal =====+ // wait until conversion is complete 
 + while ((ADCSRA & (1 << ADSC)));
  
-<note tip+ return ADC; 
-Puteți avea și o secțiune de jurnal ​în care să poată urmări asistentul ​de proiect progresul proiectului+
-</note>+</code
 + 
 +==== Timere/PWM ==== 
 + 
 +Am folosit toate cele 3 Timere ale ATMega328P, fiecare dintre ele având un scop esențial în funcționarea mașinii. 
 + 
 +=== Timer 0 PWM=== 
 + 
 +Primul timer este configurat în modul Phase Correct PWM și mă folosesc de cei 2 pini PWM ai să(OC0A și OC0B) pentru a controla motorul mașinii în ambele direcții, în funcție de input-ul utilizatorului. 
 + 
 +<​code>​ 
 +void Timer0_init_phase_correct_pwm() 
 +
 +    // set PD6(OC0A) 
 +    // and PD5(OC1A) 
 +    // as output 
 +    DDRD |= _BV(PD6); 
 +    DDRD |= _BV(PD5); 
 + 
 +    // set Phase Correct PWM mode 
 +    TCCR0A |= _BV(WGM00);​ 
 + 
 +    // set OC0A/OC1A when up-counting 
 +    // TCCR0A |= _BV(COM0A0);​ 
 +    TCCR0A |= _BV(COM0A1);​ 
 +    // TCCR0A |= _BV(COM0B0);​ 
 +    TCCR0A |= _BV(COM0B1);​ 
 + 
 +    // set 1024 prescaler 
 +    TCCR0B |= _BV(CS00);​ 
 +    TCCR0B |= _BV(CS02);​ 
 + 
 +    OCR0A = 0; 
 +    OCR0B = 0; 
 +
 +</​code>​ 
 + 
 +=== Timer 1 Input Capture === 
 + 
 +Pentru a putea detecta timpul scurs de la emiterea semnalului ultrasonic de către senzorul de distanță, ​care este de regulă foarte scurt (poate fi de ordinul microsecundelor),​ am setat contorul timer-ului 1 pe 0 la momentul emiterii semnalului de trigger și am folosit funcția de input capture a timer-ului 1, pentru a putea declanșa o întrerupere la detectarea unui front negativ pe pinul ICP1. 
 + 
 +<​code>​ 
 +void Timer1_init_input_capture() 
 +
 +    cli(); 
 + 
 +    // OC1A/OC0B disconnected,​ normal mode 
 +    TCCR1A = 0; 
 + 
 +    // set input capture noise canceler 
 +    TCCR1B |= _BV(ICNC1);​ 
 +    // set falling edge trigger 
 +    TCCR1B &= ~_BV(ICES1);​ 
 + 
 +    // set 8 prescaler 
 +    TCCR1B |= _BV(CS11);​ 
 + 
 +    // set input capture interrupt 
 +    TIMSK1 |= _BV(ICIE1);​ 
 +     
 +    sei(); 
 +
 + 
 +ISR(TIMER1_CAPT_vect) 
 +
 +    ultrasonic_sensor_micros = ICR1 / 2; 
 +    distance_updated = true; 
 +
 +</​code>​ 
 + 
 +=== Timer 2 1Khz === 
 + 
 +Timer-ului 2 rulează în modul CTC pentru a putea oferi o frecvență de 1ms și deservește o bună parte din activitățile mașinii: pulsară regulată a luminilor de semnalizare,​ ping-urile emise de buzzer în momentul detectării unor obstacole, declanșarea senzorilor pentru a obține valori actualizate de la aceștia de 4 ori pe secundă. 
 + 
 +<code> 
 +void Timer2_init_1Khz() 
 +
 +    cli(); 
 + 
 +    ​// set CTC mode 
 +    TCCR2A |= _BV(WGM21);​ 
 + 
 +    // set 64 prescaler 
 +    TCCR2B |= _BV(CS22);​ 
 +     
 +    // set compare register for 1000Hz 
 +    OCR2A |= 250; 
 + 
 +    // set interrupt 
 +    TIMSK2 |= _BV(OCIE2A);​ 
 + 
 +    sei(); 
 +
 +</code> 
 +===== Rezultate Obţinute ===== 
 + 
 +{{:​pm:​prj2024:​vstoica:​porsche_lego_leduri.jpg?​nolink&​200|}} 
 +{{ :​pm:​prj2024:​vstoica:​placa_centrala_arduino_bluetooth.jpg?​nolink&​300|}} 
 +{{:​pm:​prj2024:​vstoica:​ansamblu_motor.jpg?​nolink&​300 |}} 
 +{{ :​pm:​prj2024:​vstoica:​senzor_ultrasonic_parcare.jpg?​nolink&​300 |}} 
 + 
 +{{ :​pm:​prj2024:​vstoica:​porsche_lego_full_fara_trapa.jpg?​nolink&​600 |}} 
 +===== Concluzii ===== 
 + 
 +Proiectul a fost mult mai dificil decât mă așteptam, atât pe partea de dezvoltare a codului mașinii și a aplicației,​ dar mai ales pe partea de hardware și de mecanică, pentru că nu aveam multă experiență cu astfel de lucruri, însă am învățat multe pe parcurs și am reușit să aduc proiectul într-o stare de funcționare bună. 
 +===== Download ===== 
 + 
 +  * Arhivă cod mașinuță:​{{:​pm:​prj2024:​vstoica:​rc-lego-car-main.zip|}} 
 +  * Arhiva cod aplicație iOS:​{{:​pm:​prj2024:​vstoica:​rc-lego-car-ios-main.zip|}}
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +**Resurse ​Hardware** 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**. +  ​Datasheet ATMega328P {{:​pm:​prj2024:​vstoica:​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf|}} 
-</​note>​+  ​Datasheet TXS108E {{:​pm:​prj2024:​vstoica:​txs0108e.pdf|}} 
 +  ​Datasheet JDY-18 {{:​pm:​prj2024:​vstoica:​jdy-18.pdf|}} 
 +  * Datasheet L293D {{:​pm:​prj2024:​vstoica:​l293d.pdf|}}
  
 +**Resurse Software**
 +  * [[https://​developer.apple.com/​documentation/​swiftui/​|SwiftUI]]
 +  * [[https://​developer.apple.com/​documentation/​corebluetooth|CoreBluetooth]]
 <​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/vstoica/alexandru.ciornei.1716762868.txt.gz · Last modified: 2024/05/27 01:34 by alexandru.ciornei
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