Cuprins:

Registrul de schimbare 74HC164 și Arduino: 9 pași
Registrul de schimbare 74HC164 și Arduino: 9 pași

Video: Registrul de schimbare 74HC164 și Arduino: 9 pași

Video: Registrul de schimbare 74HC164 și Arduino: 9 pași
Video: Cum prelungești la Registrul Comerțului valabilitatea sediului social al firmei tale 2024, Noiembrie
Anonim
Registrul de schimbare 74HC164 și Arduino
Registrul de schimbare 74HC164 și Arduino
Registrul de schimbare 74HC164 și Arduino
Registrul de schimbare 74HC164 și Arduino

Registrele de schimbare sunt o parte foarte importantă a logicii digitale, ele acționează ca un adeziv între lumea paralelă și cea în serie. Acestea reduc numărul de cabluri, utilizarea pinilor și chiar ajută la eliminarea încărcării procesorului dvs. prin posibilitatea de a stoca datele lor. Acestea vin în diferite dimensiuni, cu modele diferite pentru utilizări diferite și caracteristici diferite. Cel despre care voi discuta astăzi este 74HC164 8 biți, serial în paralel, fără blocare, registru de schimbare. De ce? Ei bine, pentru unul este unul dintre cele mai elementare registre de schimburi acolo, ceea ce face ca învățarea despre el să fie mai ușoară, dar s-a întâmplat să fie singurul pe care l-am avut (lol!) Acest instructiv acoperă modul în care funcționează acest cip, cum să îl conectez, și interfațați-l cu un arduino, inclusiv câteva schițe de probă și circuite led. Sper să vă bucurați cu toții!

Pasul 1: Deci, ce sunt registrele de schimbare?

Deci, ce sunt registrele de schimb?
Deci, ce sunt registrele de schimb?

Așa cum am menționat mai devreme, acestea vin în diferite arome și am menționat, de asemenea, că folosesc un 74HC164 8 biți, serial în paralel, fără blocare, registru de schimbare, ce înseamnă asta?!? În primul rând, numele 74 - înseamnă partea sa din familia logică 74xx și, din moment ce logica sa nu poate controla direct foarte mult curent (16-20ma pentru întregul cip este comun), transmite doar semnale în jur, dar asta nu înseamnă semnalul respectiv nu merge către un tranzistor care poate comuta o sarcină de curent mai mare. dispozitiv de alimentare și va funcționa de la 2 la 5 volți (deci dacă utilizați un arduino de 3,3 volți este ok) De asemenea, poate funcționa corect la viteze mari, acest cip special are o viteză tipică de 78mhz, dar puteți merge la fel de lent sau la fel de rapid (până când începe să se ridice) după cum doriți www.kpsec.freeuk.com/components/74series.htm164 este numărul modelului pentru acest cip, există o diagramă mare a acestora pe wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits Următorul, 8 biți Un registru de schimbare este alcătuit din circuite flip flop, un flip flop este 1 bit de memorie, acesta ha s 8 (sau 1 octet de memorie). Deoarece este memorie, dacă nu este nevoie să actualizați registrul, puteți opri „vorbirea” cu acesta și va rămâne în orice stare l-ați lăsat, până când îl „vorbiți” din nou sau resetați alimentarea. alte registre de schimbare din seria logică 7400 pot merge până la 16 biți în serie în paralel. Aceasta înseamnă că arduino-ul dvs. îi trimite date în serie (impulsuri de oprire unul după altul), iar registrul de schimbare plasează fiecare bit pe pinul de ieșire corect. Acest model necesită doar 2 fire pentru a fi controlate, astfel încât să puteți utiliza 2 pini digitali pe arduino și să rupeți aceste 2 până la 8 ieșiri digitale mai multe alte modele sunt paralele în ieșire serială, fac același lucru, dar ca intrări în arduino (de exemplu un gamepad NES) fără blocare Aceasta poate fi o cădere a acestui cip dacă aveți nevoie de el. Pe măsură ce datele intră într-un registru de schimbare prin serial, acestea apar pe primul pin de ieșire, când intră un impuls de ceas, primul bit se deplasează peste 1 loc, creând un efect de defilare pe ieșiri, de exemplu 00000001 ar apărea pe ieșiri ca 101001000100001000001000000100000001 Dacă vorbiți cu alte dispozitive logice care partajează același ceas și nu așteaptă acest lucru, ar putea cauza probleme. Registrele de schimbare blocate au un set suplimentar de memorie, așa că, odată ce datele sunt terminate, intrând în registru, puteți răsturna un comutator și puteți afișa ieșirile, dar adaugă un alt fir, software și lucruri cu care să țineți pasul. controlăm afișajele cu LED-uri, efectul de derulare se întâmplă atât de repede încât nu îl puteți vedea (cu excepția când porniți foarte întâi cipul) și, odată ce octetul este în registrul de schimbare, nu mai există derulare Vom controla tipul de grafic cu bare, 7 segmente, și o matrice 16LED 4x4 dot cu acest cip și software pe arduino folosind doar 2 pini digitali (+ alimentare și masă)

Pasul 2: Cablare și funcționare de bază

Cablare și funcționare de bază
Cablare și funcționare de bază
Cablare și funcționare de bază
Cablare și funcționare de bază

Cablare 74HC164 este un cip cu 14 pini, are 4 pini de intrare, 8 pini de ieșire, alimentare și împământare, deci permiteți pornirea de sus. Pinii 1 și 2 sunt ambele intrări seriale, sunt configurate ca o poartă AND logică, ceea ce înseamnă că ambele trebuie să fie logice ridicate (adică 5 volți) pentru ca bitul să fie văzut ca 1, o stare scăzută (0 volți) pe oricare dintre ele se va citi ca un zero. Nu avem nevoie de acest lucru și este mai ușor de tratat în software, așa că alegeți unul și legați-l la V +, astfel încât acesta să citească întotdeauna mare. Aleg să folosesc un jumper de la pinul 1 la pinul 14 (V +), deoarece puteți purta doar un jumper de panou peste chip. Singura intrare serială rămasă (pinul 2 din schemele mele) va trece la pinul digital 2 al arduino-ului. Pinii 3, 4, 5 și 6 din 74HC164 sunt primii 4 octeți de ieșire Pinul 7 se conectează la sol Salt la dreapta, pinul 8 este pinul de ceas, așa știe registrul de schimbare că următorul bit serial este pregătit pentru citire, acesta ar trebui conectat la pinul digital 3 de pe arduino., aveți opțiunea de a-l utiliza, dar nimic din acest lucru de neîncercat nu face, așa că legați-l la pinii V + 10, 11 12 și 13 sunt ultimii 4 octeți ai pinului de ieșire 14 este puterea cipurilor Operațiune Mai întâi trebuie să setați intrarea serială din registru (pinul digital 2 de pe arduino) ridicat sau scăzut, apoi trebuie să întoarceți pinul de ceas (pinul digital 3) de la scăzut la înalt, registrul de schimbare va citi datele de pe intrarea serială și deplasa pinii de ieșire cu 1, repetați de 8 ori și ați setat toate cele 8 ieșiri. Acest lucru se poate face manual cu bucle și scrieri digitale în IDE arduino, dar din moment ce t a lui este o comunicație la nivel hardware (SPI) foarte comună, au o singură funcție care o face pentru dvs. shiftOut (dataPin, clockPin, bitOrder, valoare) Spuneți-i doar unde sunt conectați datele și pinii de ceas la arduino, ce modalitate de a trimite datele și ce să trimiteți și care este îngrijită pentru dvs. (la îndemână)

Pasul 3: Proiecte

Proiecte
Proiecte

Bine, suficientă prelegere și teorie, să facem câteva lucruri distractive cu acest cip! Există 3 proiecte de încercat în acest instructable, primele 2 sunt ușoare și pot fi rezolvate în câteva momente. Al treilea, matricea cu leduri 4x4, necesită mai mult timp și gândire pentru a construi, datorită cablajului cu leduri. compatibil (5v) 1 * 330 ohm rezistor de 1/4 wați 8 * ieșire normală LED-uri roșii 12 * fire jumper Proiect 2: controler de afișare pe 7 segmente „2 fire” 1 * 74HC164 Registr de schimbare 1 * panou fără sudură 1 * arduino sau compatibil arduino (5v) 1 * 330 ohm rezistență de 1/4 wați 1 * afișaj cu șapte segmente de catod comun 9 * fire jumper Proiect 3: Afișaj cu matrice cu leduri „2 fire” 4x * Registru de schimbare 1 * 74HC164 Registr de schimbare 1 * compatibil arduino sau arduino (5v) 4 * 150 ohmi 1 Rezistor de 1/4 wați 8 * 1 Kohm rezistor de 1/8 wați (sau mai mare) tranzistor de 8 * NpN (2n3904 sau mai bun) 16 * LED roșu de ieșire normală este un mijloc de a-l construi și putere reglementată de 5 volți care poate gestiona 160 + ma (puteți porniți toate LED-urile simultan ca o lumină de frână)

Pasul 4: Proiect 1 [pt 1]: Hardware cu controlor de afișaj cu LED-uri „2 fire”

Proiectul 1 [pt 1]: Hardware cu controlor de afișaj cu LED-uri „2 fire”
Proiectul 1 [pt 1]: Hardware cu controlor de afișaj cu LED-uri „2 fire”
Proiectul 1 [pt 1]: Hardware cu controlor de afișaj cu LED-uri „2 fire”
Proiectul 1 [pt 1]: Hardware cu controlor de afișaj cu LED-uri „2 fire”

Conectați arduino-ul și schimbați registrul conform schemei, am deja un afișaj bargraph pe 10 segmente pregătit pentru utilizarea panoului de bord și asta veți vedea în imagine, dar puteți face același lucru cu led-urile individuale. Pe a doua pagină Am afirmat că acestea nu erau dispozitive driver, că erau dispozitive logice, cu cantități mici de curent capabile să treacă prin ele. Pentru a rula 8 LED-uri, menținând circuitul simplu și nu gătind registrul de schimbare, este necesar să limităm curentul destul de puțin. sursa de alimentare trebuie să treacă printr-un rezistor de 330 ohmi, limitând cantitatea totală de curent pe care toate LED-urile ar putea să o folosească la 10ma (la 5 volți) Acest lucru lasă LED-urile într-o stare bolnavă, dar se aprind și, astfel, acest exemplu, pentru a conduce LED-urile la curentul lor corect, va trebui să introduceți un tranzistor unde registrul de schimbare poate activa / opri o sursă de curent mai mare (a se vedea proiectul 3) Pinul de date al registrului de schimbare (pinul 2) are nevoie pentru a vă conecta la pinul arduino digital # 2 Pinul de ceas al registrului de schimbare (pinul 8) trebuie să se conecteze la pinul digital arduino # 3

Pasul 5: Proiect 1 [pt 2]: Software-ul de control al afișajului cu LED-uri Bargraph „2 fire”

Proiectul 1 [pt 2]: software-ul de control al afișajului cu LED-uri „2 fire”
Proiectul 1 [pt 2]: software-ul de control al afișajului cu LED-uri „2 fire”
Proiectul 1 [pt 2]: software-ul de control al afișajului cu LED-uri „2 fire”
Proiectul 1 [pt 2]: software-ul de control al afișajului cu LED-uri „2 fire”

Exemplul 1: Deschideți fișierul „_164_bas_ex.pde” În interiorul IDE-ului arduino, este o schiță simplă, care vă permite doar să definiți LED-urile pornite sau oprite în afișajul bargraph Primele 2 linii definesc numerele de pin pe care le vom folosi pentru date și ceas, I folosiți #define peste const integer, mi se pare mai ușor de reținut și nu există niciun avantaj pentru unul sau altul odată compilate #define data 2 # define ceasul 3 următorul este funcția de configurare nulă, rulează o singură dată, astfel încât arduino se transformă on, setează registrul de schimbare și nu are altceva de făcut. În interiorul funcției de configurare a golului setăm pinii de ceas și de date ca pinii OUTPUT, apoi folosind funcția shiftOut trimitem datele către setarea nulă a registrului de schimbare () {pinMode (ceas, OUTPUT); // faceți pinul de ceas un pinMode de ieșire (date, OUTPUT); // faceți pinul de date o ieșire shiftOut (date, ceas, LSBFIRST, B10101010); // trimiteți această valoare binară la registrul de schimbare} În funcția shiftOut îi puteți vedea argumentele date sunt pinul de date, ceasul este pinul de ceas LSBFIRST se referă la ordinea în care se află, când îl scrieți în notație binară (Bxxxxxxxx) al 7-lea elementul trecut de B este cel mai puțin semnificativ bit În primul rând, acesta este introdus mai întâi, astfel încât ajunge la ultima ieșire odată ce toți cei 8 biți sunt alimentați în B10101010, valoarea binară este trimisă la registrul de schimbare și va aprinde fiecare lumină impar, încercați să jucați cu valori diferite pentru a activa sau a dezactiva diferite modele și în cele din urmă o buclă goală goală (pentru că aveți nevoie de una chiar dacă nu o utilizați) buclă void () {} // buclă goală pentru moment Exemplul 2: primele 8 linii sunt la fel ca primele 8 linii ale primului exemplu, de fapt nu se vor schimba pentru niciunul dintre celelalte proiecte, așa că #define data 2 # define clock 3void setup () {pinMode (clock, OUTPUT); // faceți pinul de ceas un pinMode de ieșire (date, OUTPUT); // faceți pinul de date o ieșire Dar acum în configurarea nulă există un contor de 8 bucle, luând un octet gol și schimbând 1 bit la un moment dat, începând de la bitul din stânga și deplasându-se spre dreapta. Aceasta este înapoi de la primul exemplu în care am pornit de la bitul din dreapta și am lucrat la stânga, dar folosind MSBFIRST funcția shift out trimite datele în mod corect De asemenea, adăugăm o întârziere în bucla for, astfel încât aceasta să încetinească suficient pentru a fi vizibilă. for (int i = 0; i <8; ++ i) // pentru 0 - 7 do {shiftOut (data, clock, MSBFIRST, 1 << i); // schimbă o valoare logică mare (1) cu i întârziere (100); // întârziere 100ms sau nu l-ați putea vedea}} void loop () {} // bucla goală pentru moment încărcați scriptul și ar trebui să vedeți acum graficul de bare aprind fiecare lumină pe rând

Pasul 6: Proiect 2: Controler de afișare pe 7 segmente „2 fire”

Proiect 2: Controler de afișare pe 7 segmente „2 fire”
Proiect 2: Controler de afișare pe 7 segmente „2 fire”
Proiect 2: Controler de afișare pe 7 segmente „2 fire”
Proiect 2: Controler de afișare pe 7 segmente „2 fire”

Uitați-vă la afișarea afișajului dvs. pe 7 segmente (am avut doar unul dual, dar doar folosind jumătate) și utilizați desenul de mai jos pentru a conecta fiecare segment la bitul corect de pe registrul shift 1 = pin 3 biți 2 = pin 4 biți 3 = pin 5 biți 4 = pin 6 biți 5 = pin 10 biți 6 = pin 11 biți 7 = pin 12 biți 8 = pin 13 (dacă doriți să utilizați punctul zecimal) Și catodul afișajului prin rezistorul de 330ohm și la sursa de alimentare acum deschideți seven_seg_demo.pde în IDE-ul arduino În primul rând vedeți unde definim datele și pinii de ceas #define data 2 # define clock 3 În continuare setăm toate tiparele de caracter în binar, acest lucru este destul de ușor, uitați-vă la desenul de mai jos, dacă aveți nevoie de segmentul de mijloc tastați unul, apoi aveți nevoie de segmentul de sus, dacă da, tastați altul, continuați să faceți acest lucru până când acoperiți toate cele 8 segmente, observați că bitul meu din dreapta (bitul 8) este întotdeauna 0, pentru că nu pornesc niciodată zecimalul punct. octet zero = B01111110; octet unu = B00000110; octet doi = B11011010; octet trei = B11010110; octet patru = B10100110; octet cinci = B11110100; octet șase = B11111100; octeț șapte = B01000110; octet opt = B11111110; octet în setarea nulă, setăm datele și pinii de ceas la ieșirile de configurare nulă () {pinMode (ceas, IEȘIRE); // faceți pinul de ceas un pinMode de ieșire (date, OUTPUT); // faceți pinul de date o ieșire3} apoi în bucla de gol folosim shiftOut pentru a afișa fiecare model (număr) așteptați 1/2 secundă și afișați următorul, de la 0 la 9, deoarece se face în funcția de buclă de gol va conta 0-9 și repetați pentru totdeauna. bucla void () {shiftOut (date, ceas, LSBFIRST, zero); întârziere (500); shiftOut (date, ceas, LSBFIRST, unul); întârziere (500); shiftOut (date, ceas, LSBFIRST, două); întârziere (500); shiftOut (date, ceas, LSBFIRST, trei); întârziere (500); shiftOut (date, ceas, LSBFIRST, patru); întârziere (500); shiftOut (date, ceas, LSBFIRST, cinci); întârziere (500); shiftOut (date, ceas, LSBFIRST, șase); întârziere (500); shiftOut (date, ceas, LSBFIRST, șapte); întârziere (500); shiftOut (date, ceas, LSBFIRST, opt); întârziere (500); shiftOut (date, ceas, LSBFIRST, nouă); întârziere (500);}

Pasul 7: Proiect 3 [pt 1]: Afișaj cu matrice cu LED 4x4 „2 fire”

Proiectul 3 [pt 1]: Afișaj cu matrice Led „2 fire” 4x4
Proiectul 3 [pt 1]: Afișaj cu matrice Led „2 fire” 4x4
Proiectul 3 [pt 1]: Afișaj cu matrice cu LED 4x4 „2 fire”
Proiectul 3 [pt 1]: Afișaj cu matrice cu LED 4x4 „2 fire”

Proiectul cu matrice cu LED-uri 4x4 este destul de complex, dar este aproape totul în construcție, aleg să fac alea lipită pe placă, dar ar trebui să poată fi reprodusă pe o placă, doar mult mai distanțată. diferă prin faptul că registrul de schimbare nu conduce direct led-ul, în schimb ieșirile registrului de schimbare sunt trimise printr-un rezistor de 1 Kohm la baza unui tranzistor NpN, când ieșirea bitului este mare, lasă să treacă suficient curent și tensiune în tranzistor pentru a comuta conexiunea între colector și emițător, colectorii sunt legați de un reglaj "robust" de 5 volți. Emițătorii tranzistoarelor sunt conectați la rezistențe de 150 ohmi, iar rezistențele sunt legate de anodele a 4 led-uri la rând și limitează rândul la 20ma, deși atunci când desenezi imagini pe afișaj, doar 1 led este aprins la un moment dat și, prin urmare, aproape de luminozitate maximă (aproape că se aprind și se opresc foarte repede pentru a alcătui întreaga imagine) Există 4 rânduri și 4 coloane, fiecare rândul primește un rezistor și un tranzistor, pe fiecare coloană catodii LED-ului sunt legați între ei, au intrat în colectorul unui tranzistor, a cărui bază este, de asemenea, controlată de registrul de deplasare și, în cele din urmă, la sol. Versiune mare a schemei www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

Pasul 8: Proiect 3 [pt 2]: Afișaj cu matrice cu LED 4x4 „2 fire”

Proiectul 3 [pt 2]: Afișaj cu matrice Led „2 fire” 4x4
Proiectul 3 [pt 2]: Afișaj cu matrice Led „2 fire” 4x4
Proiectul 3 [pt 2]: Afișaj cu matrice LED „2 fire” 4x4
Proiectul 3 [pt 2]: Afișaj cu matrice LED „2 fire” 4x4
Proiectul 3 [pt 2]: Afișaj cu matrice Led „2 fire” 4x4
Proiectul 3 [pt 2]: Afișaj cu matrice Led „2 fire” 4x4

Registrul de deplasare controlează atât anodul cât și catodii LED-urilor într-un format YX, uitați-vă la bitul următor 1 = coloana 1 (cea mai dreaptă) bit 2 = coloana 2bit 3 = coloana 3bit 4 = coloana 4bit 5 = rândul 1 (cel mai sus) bit 6 = rândul 2bit 7 = rândul 3bit 8 = rândul 4 Pentru a face o imagine trageți un pătrat 4x4 pe hârtie milimetrică și completați cele pe care doriți să le afișați, apoi faceți un tabel YX. Mai jos veți vedea o mapare pentru o comparație, precum și cel mai bun lucru pe care îl puteți face pe 4x4 "pixeli". Pentru fiecare secțiune completată notez în ce coloană (Y) se află, apoi în ce rând se află (X) Acum deschideți fișierul _4x4.pde din IDE arduino veți vedea vechii noștri 2 prieteni #define data 2 # define clock 3 apoi o serie de numere întregi int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Dacă vă uitați doar la o listă a coordonatelor mele YX scrise, ar fi o mare durere în fund să convertim aceste valori manual, iar noi avem un computer … lăsați-l să o facă! ceasul nostru și pinii de date OUTPUTS setare nulă () {pinMode (ceas, OUTPUT); // faceți pinul ceasului un pin pinMode de ieșire (date, OUTPUT); // faceți pinul de date să fie o ieșire3} Și o buclă nulă care arată confuz, pentru a începe lucrurile trebuie să declarăm unele variabile locale bucla nulă () {int Y; int X; octeți; Apoi o buclă for, această buclă trebuie să fie atâta timp cât cantitatea de intrări din matricea img, pentru această imagine am folosit doar 6 pixeli, deci asta face 12 coordonate YX. Îl fac să sărind orice alt număr folosind i + = 2, deoarece citim 2 coordonate pe buclă pentru (int i = 0; i <12; i + = 2) // numărul de puncte din matricea img, în acest caz 12 {Acum citim introducerea Y la din matrice și scăzem una din valoarea sa, deoarece octeții nu încep de la unu, încep de la zero, dar am numărat de la 1 // obțineți prima pereche de corzi YX Y = (img - 1); // scădeți unul, deoarece numărul de biți începe la 0 Apoi citim intrarea X la [i + 1] din matrice și scădem una din valoarea sa, din același motiv X = (img [i + 1] - 1); După ce avem valorile YX ale pixelului, facem unele bit sau matematică și ne deplasăm la stânga. Mai întâi trebuie să citim valoarea X și, indiferent de valoarea sa, o deplasăm cu atât mai multe locuri + 4, deci dacă X este 4 și adăugați 4 este bitul 8 (MSB), uitându-vă din nou la diagramă … bitul 1 = coloana 1 (cea mai dreaptă) bitul 2 = coloana 2bit 3 = coloana 3bit 4 = coloana 4bit 5 = rândul 1 (cel mai sus) bit 6 = rândul 2bit 7 = rândul 3bit 8 = rândul 4 Bitul 8 este ultimul rând Următorul valoarea Y este, de asemenea, deplasată spre stânga, de data aceasta doar de sine, nimic adăugat. (ciuguliri), folosind bit sau (simbolul |) ia doi octeți și, în principiu, le adaugă, să presupunem X = 10000000Y = 00000001 -------------------- SAU = 10000001row 4 column 1 out = 1 << (X + 4) | 1 << Y; Și în cele din urmă shiftOut pentru a afișa imaginea curentă și continuați să faceți acest lucru până când nu mai avem date în tablou … întârziați un moment și buclați-vă pentru totdeauna, deoarece schimbam datele spre stânga și avem nevoie ca MSB să fie pe ultimul pin de ieșire din registrul turei trimite-l mai întâi. shiftOut (date, ceas, MSBFIRST, out); // deplasați octetul către întârzierea înregistrării noastre (1); // întârziați-l, astfel încât să aibă șansa de a lăsa o pată de lumină în ochii dvs. Simțiți-vă liber să vă creați propriile imagini și efecte. și în cele din urmă un producător de sclipiri aleatorii

Pasul 9: Concluzie

Concluzie
Concluzie
Concluzie
Concluzie
Concluzie
Concluzie

Peste toate acestea este un cip mic destul de la îndemână și mă bucur că l-am scos dintr-o piesă electronică veche îndreptată către coșul de gunoi. Poate fi folosit și pentru alte lucruri în afară de sistemele de afișare, dar tuturor le plac luminile și feedback-ul instantaneu de a vedea Ce se întâmplă este extrem de util pentru gânditorii vizuali ca I. De asemenea, vă rog să-mi iertați codul, am avut arduino doar de la a treia săptămână a lunii octombrie și a fost un curs destul de mare. Dar acesta este lucrul minunat al sistemului, dacă vă așezați și lucrați cu el, este plin de caracteristici îngrijite care fac controlul lumii cu un microcontroler de 8 biți destul de ușor de făcut. Ca întotdeauna întrebările și comentariile sunt cele mai binevenite și vă mulțumim pentru citind, sper că ai învățat multe

Recomandat: