This shows you the differences between two versions of the page.
pm:prj2025:atoader:sanda_elena.neculau [2025/05/26 18:13] sanda_elena.neculau [Bibliografie/Resurse] |
pm:prj2025:atoader:sanda_elena.neculau [2025/05/27 21:15] (current) sanda_elena.neculau [Bibliografie/Resurse] |
||
---|---|---|---|
Line 8: | Line 8: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | {{ :pm:prj2025:atoader:schema_finala_lampa.png?700 |}} | ||
+ | {{:pm:prj2025:atoader:schema_finala_sanda.png?700|}} | ||
+ | ===== Hardware Design ===== | ||
+ | ** Placuta este MEGA 2560, eroare de scriere ** | ||
- | |||
- | ===== Hardware Design ===== | ||
{{:pm:prj2025:atoader:schema_sanda_har.png?700|}} | {{:pm:prj2025:atoader:schema_sanda_har.png?700|}} | ||
Line 18: | Line 18: | ||
== Bill of materials == | == Bill of materials == | ||
^ Nume componenta ^ Cantitate ^ Link ^ | ^ Nume componenta ^ Cantitate ^ Link ^ | ||
- | |Arduino mega2650 | 1 | [[https://www.emag.ro/kit-complet-incepatori-arduino-issnw-peste-180-componente-senzori-si-motor-servo-91f71c/pd/DZGWRJYBM/?ref=other_customers_viewed_go_3_1&provider=rec&recid=rec_52_5d77c09376d0207bf583dc66a6a9e521ea1ede314ad2b1d392844500d66c98af_1745512962&scenario_ID=52|KIT ARDUINO]] | | + | |Arduino mega2560 | 1 | [[https://www.emag.ro/kit-complet-incepatori-arduino-issnw-peste-180-componente-senzori-si-motor-servo-91f71c/pd/DZGWRJYBM/?ref=other_customers_viewed_go_3_1&provider=rec&recid=rec_52_5d77c09376d0207bf583dc66a6a9e521ea1ede314ad2b1d392844500d66c98af_1745512962&scenario_ID=52|KIT ARDUINO]] | |
|Senzor touch TTP223B | 1 | [[https://sigmanortec.ro/Senzor-capacitiv-TTP223B-p125686287?SubmitCurrency=1&id_currency=2&gad_source=1&gbraid=0AAAAAC3W72Pc30vXqZc1BLC6SMvHq5tlc&gclid=CjwKCAjwwqfABhBcEiwAZJjC3jjeQ8szrTRNkGQFz0lntxHr1nIPBVQOatHbwJnLHBGXUQwTAIBINRoC4_oQAvD_BwE | |Senzor touch TTP223B | 1 | [[https://sigmanortec.ro/Senzor-capacitiv-TTP223B-p125686287?SubmitCurrency=1&id_currency=2&gad_source=1&gbraid=0AAAAAC3W72Pc30vXqZc1BLC6SMvHq5tlc&gclid=CjwKCAjwwqfABhBcEiwAZJjC3jjeQ8szrTRNkGQFz0lntxHr1nIPBVQOatHbwJnLHBGXUQwTAIBINRoC4_oQAvD_BwE | ||
|senzor]]| | |senzor]]| | ||
Line 46: | Line 46: | ||
== Biblioteci == | == Biblioteci == | ||
- | * LiquidCrystal_I2C.h | + | * LiquidCrystal_I2C.h |
+ | |||
+ | * DFRobotDFPlayerMini.h | ||
+ | * stream.h | ||
- | * DFRobotDFPlayerMini.h | ||
== Componente conectate == | == Componente conectate == | ||
Line 62: | Line 64: | ||
* LiquidCrystal_I2C.h : comunicarea cu lcd-ul | * LiquidCrystal_I2C.h : comunicarea cu lcd-ul | ||
* DFRobotDFPlayerMini.h : comunicarea cu dfplayerul | * DFRobotDFPlayerMini.h : comunicarea cu dfplayerul | ||
+ | * stream.h : m-am folosit de ea pentru serialul de pe dfplayer, intruca dfplayerului trebuie sa fie un obiect de tip stream ca sa putem utiliza read(), available(), peek() | ||
== Structura software == | == Structura software == | ||
+ | |||
+ | * ** Serial 0 manual** | ||
+ | * Initializare serial0 | ||
+ | <code> void manualSerialInit(long baud) { | ||
+ | // Setare registri pentru UART0 (Serial) | ||
+ | // calculare viteza de comunicare, F_CPU(viteza procesorului) | ||
+ | uint16_t ubrr = F_CPU/16/baud-1; | ||
+ | // impartim valoare pe 2 registri primi 8 biti si restul | ||
+ | UBRR0H = (unsigned char)(ubrr>>8); | ||
+ | UBRR0L = (unsigned char)ubrr; | ||
+ | // Activeaza receptorul (RXEN0) si transmisorul (TXEN0) pentru UART0 | ||
+ | UCSR0B = (1<<RXEN0)|(1<<TXEN0); | ||
+ | // seteaza marimea datelor transmise la 8 biti | ||
+ | UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); | ||
+ | } </code> | ||
+ | |||
+ | * Scriere date pe UART0 | ||
+ | <code>void manualSerialWrite(unsigned char data) { | ||
+ | // Asteaptam ca buffer-ul UDRE0 de transmisie sa se goleasca | ||
+ | // verifica daca bitul UDRE0 e activ | ||
+ | while (!(UCSR0A & (1<<UDRE0))); | ||
+ | // Scrie un caracter in registrul de date pentru al transmite | ||
+ | UDR0 = data; | ||
+ | } | ||
+ | </code> | ||
+ | * trimitere caractere | ||
+ | <code> | ||
+ | // trimite caracter cu caracter pana ajunge la final | ||
+ | void manualSerialPrint(const char* str) { | ||
+ | while (*str) { | ||
+ | manualSerialWrite(*str++); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | * transformarea numerelor in caractere | ||
+ | <code>// transforma numar intreg in caracter ascii si il transmite caracter cu caracter | ||
+ | void manualSerialPrintNumber(int num) { | ||
+ | if (num == 0) { | ||
+ | manualSerialWrite('0'); | ||
+ | return; | ||
+ | } | ||
+ | | ||
+ | char buffer[10]; | ||
+ | int i = 0; | ||
+ | bool negative = false; | ||
+ | | ||
+ | if (num < 0) { | ||
+ | negative = true; | ||
+ | num = -num; | ||
+ | } | ||
+ | ... | ||
+ | }</code> | ||
+ | * **Serial 1** | ||
+ | * asemanator ca la serial 0 (UART1), insa la registri se schimba numarul in 1 | ||
+ | * initializare | ||
+ | <code>void manualSerial1Init(long baud) { | ||
+ | // Setare registri pentru UART1 (Serial1) | ||
+ | // calculare viteza de comunicare, F_CPU(viteza procesorului) | ||
+ | uint16_t ubrr = F_CPU/16/baud-1; | ||
+ | // impartim pe 2 registri valoarea | ||
+ | UBRR1H = (unsigned char)(ubrr>>8); | ||
+ | UBRR1L = (unsigned char)ubrr; | ||
+ | // Activeaza receptorul (RXEN1) si transmisorul (TXEN1) pentru UART0 | ||
+ | UCSR1B = (1<<RXEN1)|(1<<TXEN1); | ||
+ | // setez marimea datelor la 8 biti | ||
+ | UCSR1C = (1<<UCSZ11)|(1<<UCSZ10); | ||
+ | }</code> | ||
+ | |||
+ | <code>void manualSerial1Write(unsigned char data){ | ||
+ | ... | ||
+ | }</code> | ||
+ | * Citire de date pe UART1 | ||
+ | <code> | ||
+ | unsigned char manualSerial1Read() { | ||
+ | // Asteapta sa se primeasca date pe uart1 apoi il citeste, RXC1 = activ => date disponibile | ||
+ | while (!(UCSR1A & (1<<RXC1))); | ||
+ | return UDR1; | ||
+ | }</code> | ||
+ | * Verificare dacă sunt date primite | ||
+ | <code>bool manualSerial1Available() { | ||
+ | // Verifica daca exista date primite in buffer-ul UART1 | ||
+ | return (UCSR1A & (1<<RXC1)); | ||
+ | }</code> | ||
+ | * **clasa pentru serial1 care extinde stream ** | ||
* **setup()** | * **setup()** | ||
Line 74: | Line 161: | ||
<code> | <code> | ||
- | void setup() { | + | void setup() { |
// setare pini rgb pentru iesire | // setare pini rgb pentru iesire | ||
int pins[] = {led1R, led1G, led1B, led2R, led2G, led2B}; | int pins[] = {led1R, led1G, led1B, led2R, led2G, led2B}; | ||
Line 86: | Line 173: | ||
attachInterrupt(digitalPinToInterrupt(touchPin), schimbareMod, RISING); | attachInterrupt(digitalPinToInterrupt(touchPin), schimbareMod, RISING); | ||
- | // initializare comunicati seriale | + | // initializare comunicatii seriale manual |
- | Serial.begin(9600); | + | manualSerialInit(9600); |
- | Serial1.begin(9600); //dfplayer | + | manualSerial1.begin(9600); //dfplayer manual |
| | ||
// pornire lcd | // pornire lcd | ||
Line 94: | Line 181: | ||
lcd.backlight(); | lcd.backlight(); | ||
- | if (!player.begin(Serial1)) { | + | if (!player.begin(manualSerial1)) { |
- | Serial.println("DFPlayer nu a fost gasit!"); | + | manualSerialPrintln("DFPlayer nu a fost gasit!"); |
while (true); | while (true); | ||
} | } | ||
Line 152: | Line 239: | ||
+ | **Cod github** | ||
+ | [[https://github.com/NeculauSanda/Lampa_interactiva/blob/main/mod_leduri/mod_leduri.ino|Proiect IP]] | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 165: | Line 254: | ||
Arhiva contine: poze cu schema, biblioteca de la lcd+i2c si codul. | Arhiva contine: poze cu schema, biblioteca de la lcd+i2c si codul. | ||
- | {{:pm:prj2025:atoader:lampa_interactiva_sanda.zip|}} | + | {{:pm:prj2025:atoader:lampa_interactiva_neculau_sanda.zip|}} |
+ | ===== Bibliografie/Resurse ===== | ||
+ | Pentru a afla registri pentru scrierea sriala m-am documentat din urmatoarele resurse | ||
+ | [[https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf|documentatie placuta artmega 2560]], pagina 400(tabel cu registri descrisi) | ||
- | ===== Bibliografie/Resurse ===== | + | |
+ | Pentru a implementa functiile de scriere citire si transmitere pe serial [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|datasheet]], paginile 149, 150, 151, 152 | ||
<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> |