Cum se configurează smartphone-uri și PC-uri. Portal informativ

Control ușor al dispozitivelor de pe un computer. Controlul dispozitivelor prin portul USB al computerului

Una dintre cele mai simple și mai frecvent utilizate modalități de organizare a schimbului de date între un computer și dispozitive externe este utilizarea porturi I/O standard - cum ar fi COM, LPT, IrDA și USB, precum și interfețe industriale SPI, 12C, I-Wire. . Această carte este dedicată explicării principiilor de funcționare a acestora și creării de programe de control pentru utilizator. Sunt luate în considerare problemele legate de împerecherea dispozitivelor cu un computer utilizând interfețele specificate. Sunt luate în considerare problemele legate de împerecherea dispozitivelor cu un computer utilizând interfețele specificate. Sunt furnizate exemple de circuite, precum și coduri sursă pentru programe de calculator și microcontrolere din familia AVR.Manualul se adresează dezvoltatorilor de echipamente electronice care trebuie să ofere suport software pentru dispozitivele lor.

2. PROGRAMARE PORT LPT
2.1. Instalarea driverului de sistem giveio
2:2. Controlul stării liniilor portului LPT
2.3. Schema unui stand pentru depanarea unui program
2.4. Asocierea unui microcontroler cu un port LPT
2.5. Hardware și software pentru măsurarea caracteristicilor curent-tensiune ale dispozitivelor semiconductoare
2.5.1. Citirea caracteristicilor curent-tensiune ale tranzistoarelor bipolare
2.5.2. Preluarea caracteristicilor curent-tensiune ale tranzistoarelor cu efect de câmp
2.5.3. Citirea caracteristicilor curent-tensiune ale diodelor
2.5.4. Îndepărtarea caracteristicilor curent-tensiune ale diodelor zener
2.5.5. Bloc de control
2.5.6. Descrierea software-ului

3 PORT SERIAL
3.1. Organizarea hardware a portului
3.2. Interfață RS-232C
3.3. Interfață electrică
3.4. Controlul fluxului transmisiei
3.4. Interfață buclă curentă
3.6. Interfață cu infraroșu
3.7. Interfață MIDI
3.8. Configurarea porturilor COM
3.9. Folosind porturile COM
3.10. Defecțiuni și testarea porturilor COM
3.10.1. Verificarea configurației
3.10.2. Testare funcțională
3.11. Programare UART pentru microcontrolere
3.11.1. Transfer de date
3 11.2. Primirea datelor
3.11.3. control UART
3.11.4. Baud Rate Generator
3.12. Asocierea unui computer cu un microcontroler prin portul COM
3.13. Program pentru microcontroler

4. PROGRAMARE PORTURI COM
4.1. Deschiderea portului
3.2. Configurarea setărilor portului
4.3. Setarea timeout-urilor
4.4. Folosind dialogul de setări standard de port
4.5. Recepția și transmiterea datelor
4.6. Folosind Threads

5. USB BUS
5.1. Hardware organizare autobuz
5.2. Convertoare USB-FIFO
5.3. Conectarea cipul FT245BM la USB
5.4. Convertoare USB-RS232
5.5. Conectarea cipul FT232BM la USB

6. PROGRAMARE USB BUS
6.1. Instalarea driverelor
6.2 Identificarea dispozitivelor conectate. Obținerea informațiilor despre dispozitiv
6.3. Organizarea schimbului de date
6.4. Program pentru controler AVR
6.5. Utilizarea Timeouts
6.6. Programarea dispozitivelor bazate pe FT232
6.7. Programare EEPROM
6.8. Coduri de eroare atunci când lucrați cu USB

7. PREZENTARE GENERALĂ A INSTRUMENTELE SOFTWARE PENTRU LUCRU CU PORTURI
7.1. Proteus
7.2. sisteme SCADA
7.2.1. Principiul de funcționare al sistemelor SCADA
7.2.2. Sistemul Genie
7.3. Teiminat
7.4. Wtnscope

8. PRINCIPII DE ORGANIZARE A COMUNICAȚILOR ÎN REȚEA
8.1. Utilizarea Windows Sockets
8.2. Se inițializează Winsock
8.3. Crearea unei prize și deschiderea unei conexiuni
8.4. Trimiterea și primirea mesajelor
8.5. Gestionarea procesului de generare a mesajelor
8.6. Exemplu de dezvoltare a programului
APLICAȚII
LITERATURĂ

Editura: Oldi-plus
Anul publicării: 2008
Pagini: 380
ISBN: 978-966-8447-51-8
Limba rusă
Format: PDF
Dimensiune: 8,5 MB
Descărcați: Ryabenky V.M. Controlul computerizat al dispozitivelor externe prin interfețe standard

La Habré despre controlul unei lămpi prin Internet, a venit ideea de a controla iluminarea acasă de la un computer și, din moment ce o am deja configurată pentru a controla computerul de la un telefon mobil, asta înseamnă că lumina poate fi controlată de la acelasi telefon. După ce i-a arătat articolul unuia dintre colegii mei de muncă, acesta a spus că tocmai de asta avea nevoie. Pentru că deseori adoarme în timp ce se uită la filme pe computer. La ceva timp după terminarea filmului, computerul adoarme și el și stinge monitorul, dar lumina din cameră rămâne aprinsă. Acestea. s-a decis că acest lucru este util și am început să adun informații și detalii pentru acest miracol.
Restul informatiilor sunt sub habracut (atentie, sunt multe poze - trafic).

Diagrama dispozitivului

Schema originală a fost preluată dintr-una dintre schemele găsite pe Internet și arăta astfel:

Dar doar cu o mică modificare: a fost adăugat un rezistor de 390 Ohm între primul pin al optocuplerului 4N25 și al doilea pin LPT și a fost adăugat și un LED pentru a indica pornirea. Circuitul a fost asamblat în modul de testare, adică pur și simplu conectat cu fire după cum este necesar și testat. În această versiune, pur și simplu a pornit și stins o lanternă veche sovietică.
S-a hotărât că dacă ar fi să facem control, atunci nu pentru un dispozitiv, ci pentru cel puțin 4 dispozitive (pe baza: o lampă pe masă, un candelabru cu două întrerupătoare, o priză de rezervă). În această etapă, a devenit necesară construirea unei scheme de circuit completă a dispozitivului și a început selecția diferitelor programe.
Instalat:

  1. KiCAD
  2. Vultur
După ce le-am uitat pe toate, m-am hotărât pe Eagle, deoarece avea părți „similare” în biblioteca sa. Iată ce s-a întâmplat în ea:

Diagrama folosește portul DB9, adică. un port COM obișnuit, acest lucru s-a făcut din motive de economisire atât a spațiului pe placă, cât și a conectorilor înșiși (eu am avut cei COM), iar din moment ce vom folosi doar 5 conductori, acest lucru ne va fi suficient cu o rezervă. faceti si un adaptor de la DB25 (LPT) la DB9 (COM), in cazul meu se face in felul urmator:
LPT 2-9 pini = COM 1-8 pini sunt pini de control al datelor;
LPT 18-25 pini (deseori sunt conectați unul la altul) = COM 9 pini - acesta este terenul nostru.
Circuitul folosește, de asemenea, o sursă de alimentare suplimentară de 12 V pentru a alimenta releul; conform planului, va fi un simplu încărcător chinezesc sau poate o coroană de 9 V (un releu funcționează bine, trebuie să verificați 4 în același timp). Sursa de alimentare separată și izolarea galvanică folosind un optocupler sunt utilizate pentru a securiza portul computerului. Dacă doriți, puteți, desigur, să îl alimentați de la o sursă de alimentare de 12 V pentru computer, dar fiecare face acest lucru singur și pe riscul și riscul său.

Piese necesare pentru crearea dispozitivului
  1. Port COM - 1 bucată
  2. conector de alimentare - 1 buc.
  3. LED verde - 4 buc
  4. optocupler 4n25 - 4 buc
  5. scaun pentru optocupler (am avut doar unul pentru 8 picioare) - 4 buc.
  6. rezistență 390 Ohm - 4 buc.
  7. rezistență 4,7 kOhm - 4 buc.
  8. tranzistor KT815G - 4 buc.
  9. releu HJR-3FF-S-Z - 4 buc.
  10. cleme pentru 3 contacte - 4 buc.
  11. folie PCB

Pregătirea schemei PCB

După ce am încercat să folosesc Eagle pentru a pregăti un PCB, mi-am dat seama că va fi puțin complicat și am decis să găsesc o opțiune mai ușoară. Aceasta optiune a fost programul sprint layout 5, chiar daca este facut pentru Windows, dar ruleaza fara probleme in wine sub Linux. Interfața programului este intuitivă, în limba rusă și programul are ajutor (ajutor) destul de clar. Prin urmare, toate acțiunile ulterioare privind dezvoltarea plăcii de circuit imprimat au fost efectuate în aspectul sprint 5 (denumit în continuare SL5).
Deși mulți oameni folosesc acest program pentru a dezvolta plăci pentru dispozitivele lor, nu conținea părțile de care aveam nevoie (chiar și într-o grămadă de colecții de macro descărcate). Prin urmare, a trebuit mai întâi să creăm părțile lipsă:
  1. Port COM (cel care nu era la fel cu al meu, conform orificiilor de montare)
  2. priza de curent
  3. clemă cu trei dinte
  4. releu HJR-3FF-S-Z
Tipul acestor piese:

După adăugarea pieselor necesare, a început proiectarea propriu-zisă a plăcii de circuit imprimat. A fost nevoie de mai multe încercări, au fost vreo cinci. Fiecare versiune a plăcii a fost imprimată pe carton, au fost perforate găuri și au fost introduse piese în ele. De fapt, s-a aflat că portul meu COM nu se potrivește cu cel din SL5. O mică eroare a apărut și în circuitul releului - de fapt, corpul releului a fost deplasat cu 2-3 mm. Desigur, toate erorile au fost corectate.
La prima versiune tipărită, sa dovedit că tranzistorul a fost conectat incorect; două contacte au fost amestecate.
După toate corecțiile și ajustările, placa rezultată arăta astfel:

SL5 are o funcție Photo View pentru vizualizarea plăcii, iată cum arată în ea:

Versiunea finală a plăcii va avea mai multe modificări ale pieselor, dar în rest arată la fel.

SL5 are, de asemenea, o opțiune convenabilă pentru imprimarea plăcii; puteți ascunde straturi inutile și puteți selecta culoarea de imprimare a fiecărui strat, ceea ce este foarte util.

Pregătirea PCB-ului

S-a decis realizarea plăcii folosind metoda LUT (tehnologia laser-iron). În continuare, întregul proces este în fotografie.

Tăiați o bucată de PCB la dimensiunea necesară.

Luăm cea mai fină hârtie abrazivă și curățăm cu atenție suprafața de cupru.

După curățarea suprafeței, aceasta trebuie spălată și degresată. Se poate spala cu apa si degresa cu acetona (in cazul meu a fost solvent 646).
În continuare, imprimăm tabla noastră pe o imprimantă laser pe hârtie cretată, fără a uita să setăm imprimanta la cea mai îndrăzneață imprimare (fără a economisi toner). Această opțiune s-a dovedit a fi puțin nereușită, deoarece tonerul a pătat, dar o altă încercare a fost corectă.

Acum trebuie să transferați desenul de pe hârtie pe textolit. Pentru a face acest lucru, tăiem designul și îl aplicăm pe textolit, încercăm să-l aliniem după cum este necesar și apoi îl încălzim cu un fier de călcat. Este necesar să se încălzească bine întreaga suprafață, astfel încât tonerul să se topească și să se lipească de suprafața de cupru. Apoi lasam tabla sa se raceasca putin si mergem sa o udam sub jet de apa. Când hârtia se udă suficient, trebuie să fie separată de tablă. Doar tonerul blocat va rămâne pe tablă. Arata cam asa:

Apoi, trebuie să pregătiți o soluție pentru gravare. Am folosit clorură ferică pentru asta. Pe borcanul cu clorură ferică scrie că soluția trebuie făcută 1 la 3. M-am abătut puțin de la aceasta și am făcut 60 g clorură ferică la 240 g apă, adică. S-a dovedit 1 la 4, în ciuda acestui fapt, gravarea plăcii s-a întâmplat normal, doar puțin mai lent. Vă rugăm să rețineți că procesul de dizolvare a clorurii ferice uscate în apă produce căldură, așa că trebuie să o turnați în apă în porții mici și să amestecați. Desigur, pentru gravare este necesar să folosiți recipiente nemetalice; în cazul meu a fost un recipient din plastic (precum un hering). Am primit aceasta solutie:

Înainte de a coborî placa în soluție, am folosit bandă adezivă pentru a lipi o fir de pescuit pe partea din spate, pentru a facilita îndepărtarea și întoarcerea plăcii. Dacă soluția ajunge pe mâini, ar trebui să o spălați rapid cu săpun (săpunul o neutralizează), dar petele pot rămâne, totul depinde de condițiile specifice. Petele de pe haine nu se îndepărtează deloc, dar am avut norocul să nu testez asta pentru mine. Placa ar trebui să fie scufundată în soluție cu partea de cupru în jos și nu toată plană, ci în unghi. Din când în când, este recomandabil să curățați placa de minerit, deoarece interferează cu gravarea ulterioară. Acest lucru se poate face folosind tampoane de bumbac.

Întregul proces de gravare mi-a luat 45 de minute, 40 de minute ar fi fost de ajuns, dar eram doar ocupat cu încă un lucru.
După gravare, spălăm placa cu săpun, rupem banda cu firul de pescuit și obținem:

Atenţie! Nu turnați soluția de clorură ferică în chiuvetă (canal) - acest lucru poate deteriora părțile metalice ale chiuvetei și, în general, soluția poate fi totuși utilă.
Apoi, trebuie să spălăm tonerul, acest lucru se face cu succes cu același solvent 646 care a fost folosit pentru degresare (contactul prelungit al solventului cu pielea îl poate deteriora).

Următorul pas este să găuriți găurile. Am avut inițial găuri de 1 mm și 1,5 mm pe placă, deoarece nu am putut găsi burghie mai subțiri. De asemenea, în orașul nostru nu a fost posibil să găsești o mandră cu mâner pentru a o atașa la un motor electric, așa că totul a fost făcut cu un burghiu mare.

A sosit primul aparat

Prima dată am luat doar două burghie, iar când am folosit un astfel de burghiu, acest lucru s-a dovedit a nu fi suficient. Un burghiu s-a rupt, iar celălalt a fost îndoit. Tot ce am reușit să forez în prima zi:

A doua zi am cumpărat cinci burghie. Și au fost doar destui, pentru că, dacă nu se rup (apropo, doar unul dintre cele cinci s-a rupt), devin plictisiți, iar atunci când sunt găuriți cu cei plictisiți, șinele se deteriorează și cuprul începe să se desprindă. După găurirea completă a plăcii, obținem:

După găurire, este necesar să cositorizați placa. Pentru a face acest lucru, am folosit vechea metodă - un fier de lipit, flux TAGS și cositor. Am vrut să-l încerc folosind aliaj Rose, dar nu se găsește în orașul nostru.

După cositorizare obținem următorul rezultat:

Apoi, trebuie să spălați placa pentru a îndepărta reziduurile de flux, deoarece TAGS se poate curăța cu apă, acest lucru se poate face fie cu apă, fie cu alcool. Am făcut ceva între ele - am spălat-o cu vodcă veche și am șters-o cu tampoane de vată. După toți acești pași, placa noastră este gata.

Instalarea pieselor

Pentru a verifica corectitudinea plăcii, inițial asamblam o singură linie (din patru) de piese, nu știi niciodată unde s-a strecurat o eroare.

După instalarea pieselor, mergem și conectăm dispozitivul la computer prin LPT; pentru aceasta, un adaptor de la DB25(LPT) la DB9(COM) este lipit în următoarea formă:

  • 2 pini DB25 la 1 pin DB9
  • DB25 cu 3 pini la DB9 cu 2 pini
  • DB25 cu 4 pini la DB9 cu 3 pini
  • DB25 cu 5 pini la DB9 cu 4 pini
  • DB25 cu 6 pini la DB9 cu 5 pini
  • DB25 cu 7 pini la DB9 cu 6 pini
  • DB25 cu 8 pini la DB9 cu 7 pini
  • 21 pini DB25 (oricare de la 18 la 25 este posibil) la 9 pini DB9
Deoarece perechea răsucită obișnuită a fost folosită ca fir, un fir lipsea, dar pentru acest dispozitiv sunt suficiente doar cinci fire, așa că această opțiune este potrivită. Sarcina noastră comutată este o simplă lanternă sovietică. Ei bine, ca sursă de alimentare - o sursă de alimentare universală chineză (4 conectori și sursă de alimentare de la 3 la 12 V). Iată totul asamblat:

Dar dispozitivul funcționează deja:

Aceasta s-a încheiat în altă seară și montarea pieselor rămase a fost lăsată pentru a doua zi.

Și iată dispozitivul complet asamblat:

Ei bine, un scurt videoclip despre cum funcționează (calitatea nu este foarte bună, nu a existat nicio modalitate de a o filma corect)

Atât, nu mai rămâne decât să găsești o carcasă normală pentru dispozitiv și să o dai în folosință.

Partea software

Desigur, pentru a controla portul LPT ai nevoie de un fel de software, dar din moment ce am Linux acasă, s-a decis să scriu eu un program simplu, apoi să-l adaug și să-l adaptez după cum este necesar. Ea arăta cam așa:
#include
#include
#include
#include
#define BASE 0x378
#definiți TIME 100000
int main()
{
int x = 0x0F;
int y = 0x00;
dacă (ioperm(BAZĂ, 1, 1))
{
perror("ioperm()");
ieșire (77);
}
outb(x,BASE);
întoarce 0;
}

Acest program trimite 0x0F = 00001111 la portul LPT, adică. furnizează 1 la pinii 2-5 (Data0-Data3), iar aceasta este tensiunea noastră de control între pinii 2-5 și masă (pinii 18-25), astfel încât toate cele patru relee se vor porni. Programul pentru trimiterea 0x00 la un port pentru oprire funcționează exact în același mod, doar trimite y în loc de x - outb (y, BASE). Puteți citi și starea portului:
#define BASEPORT 0x378 /* lp1 */
...
printf("starea: %d\n", inb(BASEPORT));
...

Singurul avertisment al acestui program este că trebuie să fie executat ca root, deoarece funcția ioperm nu este disponibilă pentru utilizatorii obișnuiți. Cred că nu trebuie să vă spunem cum să rezolvați o astfel de problemă; fiecare va alege opțiunea care li se potrivește mai mult.

Ulterior, programul a fost modificat astfel încât, prin transmiterea parametrilor liniei de comandă acestuia, să fie posibil să se specifice ce dispozitiv și ce să facă.
Ieșirea „sw --help”:
Program pentru controlul releelor ​​prin portul LPT.
Un program poate avea unul sau doi parametri.
Format parametru: sw [număr dispozitiv] [acțiune]
numărul dispozitivului - de la 1 la 8
acțiune - "on", "off", "st" - on, off, status
Exemplu: „sw 2 on” pentru a porni al doilea dispozitiv sau „sw --help” pentru a afișa ajutor

PS dacă cineva are nevoie de el, atunci pot posta undeva fișierul diagramei plăcii în sl5 și codul sursă al programului de control.

P. VYSOCHANSKY, Rîbniţa, Transnistria, Moldova

Există un dispozitiv de control al computerului pentru diferite dispozitive, a cărui diagramă este prezentată în Fig. 1, similar funcțional cu cel descris în, dar se conectează la portul USB al computerului, care (spre deosebire de portul COM) este prezent în fiecare dintre ele astăzi. Singurul cip din dispozitiv este microcontrolerul comun ATmega8. Este necesar pentru organizarea comunicării prin magistrala USB. Deși nu are un modul hardware dedicat, această funcție este realizată în software.

Rezistorul R1, conectat între terminalul pozitiv al sursei de alimentare și linia USB D-bus, îl comută în modul LS de viteză redusă cu un curs de schimb de 1,5 Mbit/s, ceea ce vă permite să decriptați mesajele computerului în software. Rezistoarele R4 și R5 elimină tranzitorii care apar în timpul schimbului de informații, ceea ce crește stabilitatea de funcționare. Condensatorul C1 blochează zgomotul de impuls în circuitul de alimentare, ceea ce îmbunătățește și stabilitatea dispozitivului. Diodele VD1 și VD2 servesc la scăderea tensiunii de alimentare a microcontrolerului la aproximativ 3,6 V - acest lucru este necesar pentru a potrivi nivelurile cu magistrala USB. Semnalele de control al dispozitivului sunt generate la ieșirile RVO-RV5 și RSO, PC1 ale microcontrolerului. Nivel logic ridicat - tensiunea este de aproximativ 3,4 V. Tensiunea de nivel scăzut este aproape de zero. Puteți conecta dispozitive la ieșirile care consumă un curent de cel mult 10 mA (de la fiecare ieșire). Dacă sunt necesare valori mari de curent sau tensiune, atunci nodurile de potrivire prezentate în Fig. 5 și 6.

Dispozitivul a fost asamblat pe o placă de breadboard; nu a fost dezvoltată nicio placă de circuit imprimat. Se folosesc rezistențe MLT, condensatoarele C2 și SZ sunt condensatoare ceramice de înaltă frecvență, C1 este K50-35 sau similar importat. Diode de siliciu cu o cădere de tensiune pe joncțiune de aproximativ 0,7 V.

Programul pentru microcontroler a fost dezvoltat în mediul Bascom-AVR versiunea 1.12.0.0. Pentru a lucra cu magistrala USB, se folosește biblioteca swusb.LBX, care realizează decodarea software a semnalelor USB în timp real. Codul de program rezultat dintr-un fișier cu extensia HEX ar trebui să fie încărcat în memoria FLASH a microcontrolerului. În acest scop, programatorul a fost folosit împreună cu utilitarul încorporat în Bascom-AVR. Starea biților de configurare a microcontrolerului trebuie să corespundă cu cea prezentată în Fig. 2.

Când conectați dispozitivul la computer pentru prima dată, sistemul de operare va detecta un nou dispozitiv compatibil USB HID numit „uniUSB” și va instala driverele necesare. După câteva secunde, dispozitivul este configurat și gata de utilizare. Pentru a lucra cu el, a fost creat programul UniUSB. Este prezentat în două versiuni: pentru sistemele de operare pe 32 de biți (x86) și 64 de biți (x64) din familia Windows. Versiunea pe 32 de biți a fost testată în sistemele de operare Windows 98, Windows XP, Windows 7, iar versiunea pe 64 de biți a fost testată doar în Windows XPx64.

Programul UniUSB este scris în limbajul PureBasic (versiunea 4.31) folosind biblioteca HIDJJb de funcții definite de utilizator, care acceptă lucrul cu dispozitive USB HID. Aspectul ferestrei programului este prezentat în Fig. 3.

În același folder cu fișierul său executabil ar trebui să existe un fișier numit UniUSB_KOfl.txt sau UniCOM_KOfl.txt. Ultima opțiune este necesară pentru compatibilitatea cu programul UniCOM propus în . Acest fișier stochează scriptul pentru controlul dispozitivelor externe. Când programul pornește, datele din fișier sunt încărcate într-un tabel situat în fereastra principală, iar când lucrarea este finalizată, acestea sunt salvate în fișier. Făcând clic stânga pe celulele tabelului vă permite să le schimbați starea: 1 - nivel logic ridicat, 0 sau gol - nivel logic scăzut.

Pentru a adăuga sau șterge o coloană de tabel, trebuie să faceți clic dreapta pe ea și să selectați acțiunea necesară în meniul care apare.

Când conectați un dispozitiv la un port USB, programul îl va detecta și va activa butonul > situat în partea de sus a ferestrei din bara de instrumente. Făcând clic pe acest buton, începe procesul de sortare a coloanelor din tabel și setarea stărilor de ieșire indicate în acestea. Pentru o mai mare claritate, în stânga tabelului sunt evidențiate numărul de ieșiri la care nivelul logic este setat în prezent la mare. Viteza de căutare (timp în milisecunde între tranzițiile de la coloană la coloană) este setată în câmpul „Viteză, ms”.

Vă rugăm să rețineți că sistemul de operare Windows este multitasking! Aceasta înseamnă că timpul procesorului este împărțit între multe procese, uneori ascunse utilizatorului, care sunt executate pe rând, ținând cont de prioritățile stabilite în sistem. Prin urmare, nu trebuie să vă așteptați la o mare precizie în menținerea intervalelor de timp mai mici de 100 ms.

Pentru a opri scurt defilarea coloanelor, utilizați butonul JB. Apăsând din nou, va continua căutarea de unde s-a oprit. Butonul ■ oprește complet căutarea prin coloanele tabelului. Dacă schimbul de informații între computer și dispozitiv eșuează sau dispozitivul este deconectat de la conectorul USB al computerului, programul va raporta o eroare prin afișarea unui mesaj corespunzător în bara de stare.

Cele mai bune articole pe această temă