MidiCtrl – prosty sterownik MIDI - AVT

4
38 ELEKTRONIKA PRAKTYCZNA 8/2019 PROJEKTY Dodatkowe materiały do pobrania ze strony www.media.avt.pl W ofercie AVT* AVT-5692 Podstawowe parametry: Liczba obsługiwanych kontrolerów MIDI: 128 Liczba obsługiwanych komunikatów MMC: 5 Liczba obsługiwanych identyfikatorów urządzeń: 128 Liczba obsługiwanych kanałów MIDI: 16 Zasilanie: 7,5...9 VDC, 100 mA Projekty pokrewne na www.media.avt.pl: AVT-5594 Konwerter MIDI-SPI (EP 7/2017) AVT-960 Płyta ewaluacyjna i klawiatura muzyczna MIDI (EP 12/2006) AVT-842 Asynchroniczny konwerter RS232-MIDI (EP 12/1999) * Uwaga! Elektroniczne zestawy do samodzielnego montażu. Wymagana umiejętność lutowania! Podstawową wersją zestawu jest wersja [B] nazywana potocznie KIT-em (z ang. zestaw). Zestaw w wersji [B] zawiera elementy elektroniczne (w tym [UK] – jeśli występuje w projekcie), które należy samodzielnie wlutować w dołączoną płytkę drukowaną (PCB). Wykaz elementów znajduje się w dokumentacji, która jest podlinkowana w opisie kitu. Mając na uwadze różne potrzeby naszych klientów, oferujemy dodatkowe wersje: wersja [C] – zmontowany, uruchomiony i przetestowany zestaw [B] (elementy wlutowane w płytkę PCB) wersja [A] – płytka drukowana bez elementów i dokumentacji Kity w których występuje układ scalony wymagający zaprogramowania, mają następujące dodatkowe wersje: wersja [A+] – płytka drukowana [A] + zaprogramowany układ [UK] i dokumentacja wersja [UK] – zaprogramowany układ Nie każdy zestaw AVT występuje we wszystkich wersjach! Każda wersja ma załączony ten sam plik pdf! Podczas składania zamówienia upewnij się, którą wersję zamawiasz! http://sklep.avt.pl. W przypadku braku dostępności na http://sklep.avt.pl, osoby zainteresowane zakupem płytek drukowanych (PCB) prosimy o kontakt via e-mail: [email protected]. MidiCtrl – prosty sterownik MIDI W swojej praktyce inżynierskiej kilkukrotnie podejmowałem wyzwanie skonstruowania różnorakich urządzeń audio wyposażonych w prosty inter- fejs MIDI. Dotyczyło to zwłaszcza tych urządzeń, które zdradzały konotacje estradowe. Wynika to z faktu, że mając do dyspozycji wspomniany inter- fejs komunikacyjny, możemy zautomatyzować proces produkcji dźwięku, czyniąc go w pełni powtarzalnym. Nie bez znaczenia jest też fakt, że MIDI, mimo że choć wymyślone w latach 80., jest na tyle uniwersalne, iż z po- wodzeniem wykorzystują je najnowsze urządzenia estradowe. W praktyce prawie każde urządzenie estradowe korzysta z dobrodziejstw tego medium transmisyjnego. Jednym z powodów użycia technologii MIDI jest szeroka dostępność i uniwersalność takich sterowników. Jako że czasami zdarza mi się stosować elektroniczne urządzenia muzyczne (np. syntezatory), wy- godne byłoby zaopatrzenie się w jakiś prosty, sterownik MIDI, który ułatwi zapanowanie nad dziesiątkami parametrów edycyjnych, wszak nie zawsze mają one odzwierciedlenie w postaci rzeczywistych elementów regulacyj- nych na panelu urządzenia. 31250 (±1%) bits/s, w którym dane przesy- łane są w paczkach po 8 bitów, z jednym bitem startu i jednym bitem stopu, bez bi- tów kontroli parzystości. Układ wejściowy interfejsu MIDI wykonuje się zwykle przy użyciu szybkiego transoptora (6N138), który zamienia prąd w linii (ok. 5 mA) na przebiegi napięciowe, zaś interfejs wyjściowy z wyko- rzystaniem pary rezystorów ograniczających Zanim jednak przejdziemy do opisu pre- zentowanego urządzenia, należy, choćby pokrótce, przypomnieć sobie podstawowe informacje na temat tego dość leciwego, jed- nak świetnie pomyślanego standardu. Podstawowe informacje o MIDI Interfejs MIDI jest szeregowym interfejsem komunikacyjnym pracującym z szybkością

Transcript of MidiCtrl – prosty sterownik MIDI - AVT

Page 1: MidiCtrl – prosty sterownik MIDI - AVT

38 ELEKTRONIKA PRAKTYCZNA 8/2019

PROJEKTY

Dodatkowe materiały do pobrania ze strony www.media.avt.pl

W ofercie AVT* AVT-5692Podstawowe parametry:• Liczba obsługiwanych kontrolerów MIDI: 128

• Liczba obsługiwanych komunikatów MMC: 5• Liczba obsługiwanych identyfikatorów urządzeń: 128

• Liczba obsługiwanych kanałów MIDI: 16• Zasilanie: 7,5...9 VDC, 100 mA

Projekty pokrewne na www.media.avt.pl:AVT-5594 Konwerter MIDI-SPI (EP 7/2017)AVT-960 Płyta ewaluacyjna i klawiatura muzyczna MIDI (EP 12/2006)AVT-842 Asynchroniczny konwerter RS232-MIDI (EP 12/1999)

* Uwaga! Elektroniczne zestawy do samodzielnego montażu. Wymagana umiejętność lutowania!Podstawową wersją zestawu jest wersja [B] nazywana potocznie KIT-em (z ang. zestaw). Zestaw w wersji [B] zawiera elementy elektroniczne (w tym [UK] – jeśli występuje w projekcie), które należy samodzielnie wlutować w dołączoną płytkę drukowaną (PCB). Wykaz elementów znajduje się w dokumentacji, która jest podlinkowana w opisie kitu.Mając na uwadze różne potrzeby naszych klientów, oferujemy dodatkowe wersje: wersja [C] – zmontowany, uruchomiony i przetestowany zestaw [B] (elementy wlutowane w płytkę PCB)

wersja [A] – płytka drukowana bez elementów i dokumentacjiKity w których występuje układ scalony wymagający zaprogramowania, mają następujące dodatkowe wersje: wersja [A+] – płytka drukowana [A] + zaprogramowany układ [UK] i dokumentacja

wersja [UK] – zaprogramowany układNie każdy zestaw AVT występuje we wszystkich wersjach! Każda wersja ma załączony ten sam plik pdf! Podczas składania zamówienia upewnij się, którą wersję zamawiasz!http://sklep.avt.pl. W przypadku braku dostępności na http://sklep.avt.pl, osoby zainteresowane zakupem płytek drukowanych (PCB) prosimy o kontakt via e-mail: [email protected].

MidiCtrl – prosty sterownik MIDIW swojej praktyce inżynierskiej kilkukrotnie podejmowałem wyzwanie skonstruowania różnorakich urządzeń audio wyposażonych w prosty inter-fejs MIDI. Dotyczyło to zwłaszcza tych urządzeń, które zdradzały konotacje estradowe. Wynika to z faktu, że mając do dyspozycji wspomniany inter-fejs komunikacyjny, możemy zautomatyzować proces produkcji dźwięku, czyniąc go w pełni powtarzalnym. Nie bez znaczenia jest też fakt, że MIDI, mimo że choć wymyślone w latach 80., jest na tyle uniwersalne, iż z po-wodzeniem wykorzystują je najnowsze urządzenia estradowe. W praktyce prawie każde urządzenie estradowe korzysta z dobrodziejstw tego medium transmisyjnego. Jednym z powodów użycia technologii MIDI jest szeroka dostępność i uniwersalność takich sterowników. Jako że czasami zdarza mi się stosować elektroniczne urządzenia muzyczne (np. syntezatory), wy-godne byłoby zaopatrzenie się w jakiś prosty, sterownik MIDI, który ułatwi zapanowanie nad dziesiątkami parametrów edycyjnych, wszak nie zawsze mają one odzwierciedlenie w postaci rzeczywistych elementów regulacyj-nych na panelu urządzenia.

31250 (±1%) bits/s, w którym dane przesy-łane są w paczkach po 8 bitów, z  jednym bitem startu i  jednym bitem stopu, bez bi-tów kontroli parzystości. Układ wejściowy interfejsu MIDI wykonuje się zwykle przy użyciu szybkiego transoptora (6N138), który zamienia prąd w linii (ok. 5 mA) na przebiegi napięciowe, zaś interfejs wyjściowy z wyko-rzystaniem pary rezystorów ograniczających

Zanim jednak przejdziemy do  opisu pre-zentowanego urządzenia, należy, choćby pokrótce, przypomnieć sobie podstawowe informacje na temat tego dość leciwego, jed-nak świetnie pomyślanego standardu.

Podstawowe informacje o MIDIInterfejs MIDI jest szeregowym interfejsem komunikacyjnym pracującym z szybkością

Page 2: MidiCtrl – prosty sterownik MIDI - AVT

39ELEKTRONIKA PRAKTYCZNA 8/2019

MidiCtrl – prosty sterownik MIDI

23

24

25

26

27

28

ATmega48

AVCC

AREF

AGND

GND

VCC

PC6(/RESET/PCIN

T14)

PB6(X

TAL1/TOSC1/PCIN

T6)

PB7(X

TAL2/TOSC2/PCIN

T7)

PC0(A

DC0/PCIN

T8)

PC1(A

DC1/PCIN

T9)

PC2(A

DC2/PCIN

T10)

PC3(A

DC3/PCIN

T11

)

PC4(A

DC4/SDA/PCIN

T12)

PC5(A

DC5/SCL/PCIN

T13)

PD0(R

XD/PCINT16)

PD1(TXD/PCINT17)

PD2(INT0/PCINT18)

PD3(INT1/O

C2B/PCINT19)

PD4(T0/XCK/PCINT20)

PD5(T1/O

C0B/PCINT21)

PD6(AIN0/O

C0A/PCINT22)

PD7(AIN1/PCINT23)

PB0(ICP1/C

LK0/PCIN

T0)

PB1(O

C1A/PCIN

T1)

PB2(S

S/O

C1B/PCIN

T2)

PB3(M

OSI/OC2/PCIN

T3)

PB4(M

ISO/PCIN

T4)

PB5(S

CK/PCIN

T5)

U1

5V

GND

5V

R1

47k

C4

22pF

C5

22pF

Q1

4MHz

1 9

10 7

C1

100nF

C2

100nF

C3

100nF

20

21 22 8

L1

10uH

2 3 4 5 6 11 12

13

14

15

16

17

18

19

C11

100nF

MIDI_TX

C12

100nF

C13

100nF

C14

100nF

C15

100nF

C16

100nF

GND

GND

GND

GND

GND

GND

GND

GND

GND

GND

GND

GND

GND

GND

1 23 4

1 21 2

1 21 2

3 43 4

3 43 4

PLAY/EDIT

PAUSE/–

STOP/+

REWIND/<

FF/>

GND

5V

5V

5V

R3

220

R4

220

R5

220

POT7

10k

C10

100nF

PE

MIDI-OUT

LCD

PE

2 53

41

LCD-AC-0802EDIG

4 5 6 7 8 910 11 12

13

14

2 3 1 A K

VDD

VO

VSS A K

RS

R/W

E DB0

DB1

DB2

DB3

DB4

DB5

DB6

DB7

R2B

59k

R2A

59k

POT1

3

2

1

POT2

POT3

POT4

POT5

POT6

3

3

3

3

3

22

22

2

1

1

1

1

1

5V

PWR

2 1

C6

100nF

C7

100uF

78L05

U2 OUT

IN

GND

C8

100uF

C9

100uF

Rysunek 1. Schemat ideowy sterownika MIDI

Wykaz elementów:Rezystory: (obudowy miniaturowe, 1/8 W)R1: 47 kVR2A, R2B: 59 kV 1%R3…R5: 220 VPOT1…POT6: potencjometr suwakowy 50 kV typu POT50K/B-SUWD (wym. 88×12,5×11 mm, posuw suwaka 60 mm)POT7: potencjometr montażowy leżący 10 kV

Kondensatory: (raster 0,1”)C1…C3, C6…C16: ceramiczny 100 nF C4, C5: ceramiczny 22 pF

Półprzewodniki:U1: ATmega48 (DIL28)U2: 78L05 (TO-92)LCD: wyświetlacz alfanumeryczny 2×8 znaków typu LCD-AC-0802E-DIG G/KK

Inne:Q1: rezonator kwarcowy 4 MHz (raster 0,2”)L1: dławik osiowy 10 mH (raster 0,2”)PWR: złącze śrubowe AK500/2 (raster 0,1”)FF/>, PAUSE/–, PLAY/EDIT, REWIND/<, STOP/+: mikroswitch TACT 9 mmMIDI-OUT: gniazdo DIN-5 do montażu THT

prąd diody LED w urządzeniu odbiorczym. W standardzie MIDI dane przesyłane są gru-powo w formie tzw. komunikatów (Messa-ges), przy czym wprowadzono bardzo prosty sposób na odróżnienie bajtów poleceń steru-jących (Status Byte) od bajtów danych (Data Byte): bajty poleceń mają ustawiony najstar-szy bit (0xFF...0x80) a bajty danych najstarszy bit mają wyzerowany (0x7F...0x00). Zwykle informacje przesyłane są w kolejności: bajt polecenia i po nim jeden lub dwa bajty da-nych (w zależności od rodzaju polecenia). Polecenia wysyłane są tylko przy zmianie danego elementu sterującego. Bajt polecenia określa jedną ze standardowo zdefiniowa-nych funkcji, którą instrument ma wykonać (4 najstarsze bity), np. Note On/Off (włącz/wyłącz nutę), Control Change (zmień para-metr urządzenia), Program Change (zmień rodzaj brzmienia) oraz numer kanału MIDI, na którym informacja ma być odebrana (po-zostałe 4 bity określające jeden z 16 kana-łów MIDI). Dla porządku należy wspomnieć o możliwości ograniczenia transferu danych poprzez usunięcie redundancji, z której ko-rzysta metoda Running Status. Polega ona na wysłaniu jednego bajta polecenia i wielu bajtów danych (bez każdorazowego ponawia-nia bajta polecenia) w przypadku przesyłania tego samego rodzaju sygnałów sterujących jeden za drugim, np.  sygnały wywołane zmianą jednego i tego samego regulatora.

Budowa urządzeniaPrezentowany układ to  prosty sterownik MIDI złożony z  6  elementów regulacyj-nych (potencjometrów suwakowych), któ-rym możemy przypisać dowolny kontroler MIDI (Control Change) i 5 przycisków funk-cyjnych przeznaczonych do sterowania do-wolnym rejestratorem MIDI, wspierającym rozszerzenie MIDI zwane MMC (Midi Ma-chine Control). Schemat ideowy urządzenia pokazano na rysunku 1. Zaprojektowano bardzo prosty system mikroprocesorowy,

Page 3: MidiCtrl – prosty sterownik MIDI - AVT

40 ELEKTRONIKA PRAKTYCZNA 8/2019

...

potencjometrów POT1…POT6 i na skutek zmiany ich wartości wysyła stosowny ko-munikat typu Control Change (0xB0) ze zde-finiowanym wcześniej numerem kontrolera MIDI i wartością zależną od położenia su-waka każdego z  potencjometrów (zakres wartości 0…127). Podobnie mikrokontro-ler monitoruje cały czas stan przycisków sterujących i w przypadku ich naciśnięcia wysyła stosowny komunikat MIDI. Komuni-kat ten należy do grupy komunikatów typu System Exclusive, czyli dedykowanych kon-kretnemu urządzeniu odbiorczemu, którego identyfikator ustawiamy w ramach konfigu-racji niniejszego sterownika. Konstrukcja ko-munikatu System Exclusive takiego rodzaju wygląda następująco:

0xF0, 0x7F, Device-ID,Sub-ID1, Sub-ID2, 0xF7

gdzie:• Device-ID – określa identyfikator doce-

lowego urządzenia odbiorczego (0…127),• Sub-ID1 – określa rodzaj przesyłanego

komunikatu, w naszym przypadku war-tość ta równa 0x06 oznacza rozkaz stan-dardu MMC,

• Sub-ID2 – określa typ rozkazu MMC, dla przykładu 0x01 polecenie Stop, 0x02 polecenie Play, 0x04 polecenie Fast forward itd.

Dla dociekliwych – wartości 0xF0 oraz 0xF7 to znaczniki początku i końca ko-munikatu System Exclusive, zaś 0x7F to  wartość uniwersalnego urządzenia SysEx, dla którego przeznaczony jest bie-żący komunikat.

Warto również podkreślić, że przyciski funkcyjne nie służą tylko do generowania komunikatów MIDI (typu MMC), lecz za ich

PROJEKTY

pomocą dokonujemy również konfiguracji sterownika MidiCtrl, korzystając ze specjal-nego trybu edycyjnego uruchamianego po-przez długie naciśnięcie przycisku PLAY/EDIT. W trybie edycji klawisze oznaczone REWIND/< i FF/> służą do przełączania kolejnych pozycji menu edycyjnego, zaś PAUSE/–, STOP+ służą do regulacji para-metru wybranego menu edycyjnego. Wyjście z menu edycyjnego możliwe jest poprzez po-nowne, długie przyciśnięcie klawisza PLAY/EDIT, czemu towarzyszy zapisanie wszyst-kich ustawień konfiguracyjnych w  nie-ulotnej pamięci EEPROM mikrokontrolera. Ustawienia te to: numery kontrolerów MIDI przyporządkowane do kolejnych potencjo-metrów regulacyjnych, numer aktywnego kanału MIDI, na którym odbywa się trans-misja danych oraz identyfikator urządzenia odbiorczego, dla którego przeznaczone są ko-munikaty MMC.

Wygląd ekranu graficznego interfejsu użytkownika w trybie normalnym pokazano na rysunku 2, na rysunku 3 pokazano wy-gląd poszczególnych ekranów menu edycyj-nego (konfiguracyjnego). Warto zauważyć, że  w  trybie normalnym na  ekranie urzą-dzenia MidiCtrl pokazywane są dodatkowo w sposób graficzny wartości poszczególnych kontrolerów MIDI, którym odpowiadają po-łożenia suwaków kolejnych potencjometrów suwakowych (za pomocą bargrafów).

Rysunek 2. Wygląd ekranu graficznego in-terfejsu użytkownika w trybie normalnym

Rysunek 3. Wygląd ekranu graficznego interfejsu użytkownika w trybie edycji (konfiguracji)

którego sercem jest niewielki mikrokontro-ler firmy Microchip (dawniej Atmel) o ozna-czeniu ATmega48 taktowany zewnętrznym rezonatorem kwarcowym o częstotliwości 4 MHz. Zastosowanie rezonatora kwarco-wego jako źródła taktowania mikrokontro-lera wynikało z potrzeby zapewnienia dużej dokładności prędkości transmisji MIDI. Mi-krokontroler nasz odpowiedzialny jest za obsługę 6 potencjometrów suwakowych po-łączonych w konfiguracji dzielnika napię-cia, które mierzone jest każdorazowo przez kolejne kanały wbudowanego w strukturę mikroprocesora przetwornika ADC, obsługę 5 przycisków do zdalnej kontroli dowolnego rejestratora MIDI (za pomocą komunikatów MMC), obsługę niewielkiego wyświetlacza alfanumerycznego o organizacji 2×8 zna-ków stanowiącego element interfejsu użyt-kownika oraz obsługę wyjściowego interfejsu MIDI zbudowanego zaledwie z 2 rezystorów i gniazda DIN 5.

Działanie i obsługaZasada działania programu obsługi aplika-cji jest banalna. Mikrokontroler cały czas mierzy napięcia na  zaciskach kolejnych

Listing 5. Funkcja wysyłająca komunikat typu MMCinline void MIDIsendMMC(uint8_t commandType, uint8_t deviceID){ MIDIsendByte(MIDI_SYSEX_START); MIDIsendByte(MIDI_UNIVERSAL_ID); MIDIsendByte(deviceID); MIDIsendByte(MIDI_MMC_COMMAND); MIDIsendByte(commandType); MIDIsendByte(MIDI_SYSEX_END);}

Listing 1. Plik nagłówkowy modułu obsługującego interfejs MIDI//Definicje prędkości interfejsu MIDI#define MIDI_BAUD 31250//Obliczamy UBRR dla U2X=0#define __UBRR_MIDI F_CPU/16/MIDI_BAUD-1

//Definicje wybranych komunikatów MIDI#define MIDI_CTRL_CHANGE 0xB0#define MIDI_PRGM_CHANGE 0xC0

//Definicje dla MIDI SYSEX#define MIDI_SYSEX_START 0xF0#define MIDI_SYSEX_END 0xF7#define MIDI_UNIVERSAL_ID 0x7F

//Definicje dla MIDI Machine Control#define MIDI_MMC_COMMAND 0x06#define MIDI_MMC_STOP 0x01#define MIDI_MMC_PLAY 0x02#define MIDI_MMC_FF 0x04#define MIDI_MMC_REWIND 0x05#define MIDI_MMC_PAUSE 0x09

Listing 2. Funkcja inicjująca interfejs USART mikrokontrolera do pracy jako sprzęg MIDIvoid initMIDI(void){ //Ustawienie prędkości dla MIDI UBRR0H = (__UBRR_MIDI)>>8; UBRR0L = __UBRR_MIDI; //Załączenie nadajnika UCSR0B |= (1<<TXEN0); //Ustawienie formatu ramki: //8bitów danych, 1 bit stopu UCSR0C = (3<<UCSZ00);}

Listing 3. Funkcja wysyłająca jeden bajt za pomocą interfejsu MIDIinline void MIDIsendByte(uint8_t Byte){ //Czekamy na ewentualne opróżnienie bufora nadawczego while (!(UCSR0A & (1<<UDRE0))); UDR0 = Byte;}

Listing 4. Funkcja wysyłająca komunikat typu Control Changeinline void MIDIsendCC(uint8_t ctrlNumber, uint8_t ctrlValue, uint8_t Channel){ MIDIsendByte(MIDI_CTRL_CHANGE|Channel); MIDIsendByte(ctrlNumber); MIDIsendByte(ctrlValue);}

Ustawienia Fuse-bitów (ważniejszych):CKSEL3...0: 1101SUT1...0: 11CKDIV8: 1EESAVE: 0

Page 4: MidiCtrl – prosty sterownik MIDI - AVT

41ELEKTRONIKA PRAKTYCZNA 8/2019

MidiCtrl – prosty sterownik MIDI

Opis programu sterującegoNa początek przedstawię zawartość pliku nagłówkowego, który pokazano na  li-stingu  1. Dalej, na  listingu  2, przedsta-wiono funkcję inicjującą interfejs USART mikrokontrolera do pracy jako sprzęg MIDI (w tym wypadku wyłącznie jako nadajnik komunikatów MIDI). Z kolei na listingu 3 zilustrowano banalną wręcz funkcję wy-syłającą jeden bajt za pomocą interfejsu MIDI (USART). I na sam koniec dwie proste funkcje narzędziowe pozwalające wysłać komunikat MIDI typu Control Change (li-sting 4) i MMC (listing 5). Tyle w kwestiach

Rysunek 4. Schemat montażowy sterownika MIDI

implementacyjnych, które, jak widzicie, okazały się bajecznie proste.

Montaż i uruchomienieSchemat montażowy urządzenia MidiCtrl pokazano na rysunku 4. Jak widać, zapro-jektowano bardzo zwarty obwód druko-wany przeznaczony do montażu elementów przewlekanych. Montaż urządzenia rozpo-czynamy od wlutowania mikrokontrolera i rezonatora kwarcowego. Dalej lutujemy sta-bilizator napięcia, rezystory i kondensatory a na samym końcu potencjometry suwakowe, gniazda połączeniowe i przyciski sterujące.

Ostatnim etapem montażu urządzenia jest przylutowanie alfanumerycznego wyświe-tlacza LCD czego dokonujemy korzystając z  typowych listew typu goldpin. Popraw-nie zmontowany układ wymaga wyłączenie regulacji kontrastu wyświetlacza LCD (po-tencjometr montażowy POT7) oraz konfigu-racji parametrów MIDI (menu edycyjne). Dla zmniejszenia ryzyka ewentualnych zakłóceń w pracy urządzenia (generowanie „niepo-trzebnych” komunikatów Control Change) metalowe obudowy potencjometrów suwako-wych najlepiej połączyć z masą sterownika.

Robert Wołgajew, EP

Aby skorzystać z materiałów dodatkowych dołączonych do numeru, należy: 1. Wejść na stronę www.media.avt.pl2. Zarejestrować się lub zalogować3. Wybrać wydanie „Elektroniki Praktycznej”,

które ma trafić do biblioteki osobistej4. Odpowiedzieć na proste pytanie

dotyczące bieżącego numeru5. Pobrać pliki

R E K L A M A