This shows you the differences between two versions of the page.
|
pm:prj2025:atoader:sanda_elena.neculau [2025/05/27 20:07] 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 65: | Line 67: | ||
| == 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 75: | 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 87: | 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 95: | 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 153: | 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 166: | 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|}} |
| - | + | ||
| Line 174: | Line 260: | ||
| Pentru a afla registri pentru scrierea sriala m-am documentat din urmatoarele 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 2650]], pagina 400(tabel cu registri descrisi) | + | [[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) |
| + | 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> | ||