|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s
permission is not required when using copyrighted material in:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Mikrokontroler ATtiny15L posiada wbudowany przetwornik analogowo/cyfrowy o następujących własnościach:
Mikrokontroler ATtiny15L posiada 10-bitowy kompensacyjny przetwornik analogowo/cyfrowy, który jest połączony z 4-kanałowym multiplekserem analogowym, który umożliwia przetwornikowi pomiar jednego napięcia różnicowego oraz czterech nie-różnicowych napięć pobranych z końcówek portu B.

Wejście różnicowe (PB3, PB4) jest wyposażone w programowalny stopień wzmacniający 26 dB (20 razy) różnicowe napięcie wejściowe przed przetworzeniem w przetworniku A/C. Wejściowe napięcia nie-różnicowe na końcówkach PB2...PB5 są względem 0V (GND).
Przetwornik zawiera wzmacniacz z próbkowaniem i podtrzymaniem próbki w celu zapewnienia, iż napięcie wejściowe dla przetwornika jest stałe podczas przetwarzania. Poniżej przedstawiono schemat blokowy przetwornika A/C.
Udostępnione jest wewnętrzne napięcie odniesienia o wartości nominalnej 2,56V, które może być zewnętrznie odsprzężane na końcówce AREF (PB0) za pomocą kondensatora w celu lepszego uodpornienia go na zakłócenia. Alternatywnie można używać napięcia zasilającego VCC jako napięcia odniesienia dla kanałów nie-różnicowych. Istnieje również opcja użycia zewnętrznego napięcia odniesienia z wyłączeniem wewnętrznego napięcia odniesienia. Opcje te są wybierane bitami REFS1...0 w rejestrze sterującym multiplekserem analogowym ADMUX.

Przetwornik analogowo/cyfrowy zamienia analogowe napięcie wejściowe w 10-bitową wartość cyfrową poprzez kolejne przybliżenia. Wartość minimalna reprezentuje GND, a wartość maksymalna reprezentuje wybrane napięcie odniesienia minus 1 LSB (najmniej znaczący bit).
Napięcie odniesienia dla przetwornika A/C może zostać wybrane przez zapis do bitów REFS1...0 w rejestrze ADMUX, jako VCC, końcówka AREF (PB0) lub wewnętrzne napięcie odniesienia 2,56V. Opcjonalnie wewnętrzne napięcie odniesienia 2,56V może zostać odsprzężone za pomocą zewnętrznego kondensatora na końcówce AREF w celu zwiększenia odporności na zakłócenia.
Wejście analogowe i wzmocnienie różnicowe są wybierane przez zapis do bitów MUX2..0 w rejestrze ADMUX. Jako pojedyncze wejścia analogowe dla przetwornika A/C można wybrać dowolną z czterech końcówek ADC3...0. Końcówki ADC2 i ADC3 mogą zostać wybrane odpowiednio jako wejście nieodwracające i odwracające dla wzmacniacza różnicowego.
Jeśli zostaną wybrane kanały różnicowe, to różnicowy stopień wzmacnia różnicę napięć pomiędzy wybraną parą wejść przez wybrany współczynnik 1 lub 20 razy zgodnie z ustawieniami bitów MUX2...0 w rejestrze ADMUX. Ta wzmocniona wartość staje się następnie wejściem analogowym dla przetwornika A/C. Dla kanałów nie-różnicowych stopień wzmacniający jest całkowicie omijany.
Jeśli wejście ADC2 zostanie wybrane jednocześnie jako wejście nieodwracające i odwracające dla wzmacniacza różnicowego (ADC2 - ADC2), to pozostałe niezrównoważenie w stopniu wzmacniającym oraz w obwodzie przetwornika może być bezpośrednio mierzone jako wynik przetwarzania. Otrzymany rezultat można odejmować od wyników dalszych przetwarzań z tymi samymi ustawieniami wzmocnienia w celu zmniejszenia błędu niezrównoważenia poniżej 1 LSB.
Przetwornik A/C może pracować w dwóch trybach – w trybie przetwarzania pojedynczego (ang. single conversion mode) oraz w trybie przetwarzania ciągłego (ang. free running mode). W trybie przetwarzania pojedynczego każde przetwarzanie będzie musiało zostać zainicjowane przez użytkownika. W trybie ciągłym występuje ciągłe próbkowanie i uaktualnianie rejestru danych przetwornika A/C. Bit ADFR w rejestrze ADCSR dokonuje wyboru pomiędzy tymi dwoma dostępnymi trybami pracy.
Przetwornik jest uaktywniany przez ustawienie bitu włączania przetwornika A/C (ang. ADC Enable bit, ADEN) w rejestrze ADCSR. Wybór napięć odniesienia oraz kanałów wejściowych nie będzie działał, dopóki nie zostanie ustawiony bit ADEN. Gdy bit ADEN jest wyzerowany, przetwornik nie pobiera prądu, zatem zaleca się wyłączenie przetwornika A/C przed wejściem w tryby uśpienia oszczędzające energię.
Przetwarzanie jest uruchamiane przez zapis logicznej jedynki do bitu rozpoczynania przetwarzania w przetworniku A/C (ang. ADC Start Conversion bit, ADSC). Bit ten pozostaje w stanie 1 aż do momentu zakończenia przetwarzania, gdy jest on sprzętowo zerowany. Jeśli podczas wykonywania przetwarzania zostanie wybrany inny kanał danych, przetwornik A/C dokończy bieżącego przetwarzania przed wykonaniem zmiany kanału.
Przetwornik tworzy 10-bitowy wynik, który zostaje umieszczony w rejestrach danych przetwornika A/C (ang. ADC
Data Registers, ADCH i ADCL). Standardowo wynik jest
wyrównany bitowo do prawej strony (ADCL
zawiera 8 dolnych bitów wyniku, ADCH zawiera 2 górne bity
wyniku), lecz opcjonalnie wynik może być wyrównywany
bitowo do lewej strony
(ADCH zawiera 8 górnych bitów wyniku,
ADCL
zawiera 2 dolne bity wyniku przesunięte o 6 pozycji w lewo)
przez ustawienie bitu ADLAR w rejestrze ADMUX.
Jeśli wynik jest wyrównany na lewo i nie jest potrzebna
dokładność większa niż 8 bitów, wystarczy odczytywać rejestr
górnego bajtu wyniku ADCH. W przeciwnym razie należy najpierw
odczytać rejestr ADCL, a następnie ADCH, aby mieć pewność, iż zawartość obu tych rejestrów jest wynikiem tego samego
przetwarzania. Po odczycie ADCL dostęp przetwornika do rejestrów
danych jest blokowany. Oznacza to, że jeśli został odczytany
rejestr ADCL, a przetwarzanie kończy się przed odczytem
ADCH, to żaden z tych rejestrów nie zostanie uaktualniony i wynik
przetwarzania zostaje utracony. Gdy zostaje odczytany rejestr ADCH,
przetwornik uzyskuje ponownie dostęp do rejestrów danych.
Przetwornik A/C posiada swoje własne przerwanie, które może być
wyzwalane w momencie zakończenia przetwarzania. Gdy dostęp
przetwornika do rejestrów danych jest zablokowany pomiędzy
odczytem ADCL a ADCH, przerwanie zostanie wyzwolone nawet wtedy,
gdy wynik przetwarzania będzie utracony.

Obwód dokonujący kolejnych przybliżeń wymaga częstotliwości zegara wejściowego pomiędzy 50 kHz a 200 kHz. Większa częstotliwość zmniejsza dokładność przetwarzania. Moduł przetwornika A/C zawiera preskaler, który dzieli częstotliwość zegara systemowego, aby otrzymać na wyjściu częstotliwość zegarową akceptowalną dla przetwornika A/C. Bity ADPSn w rejestrze ADCSR są wykorzystywane przy generacji właściwej częstotliwości zegara wejściowego dla przetwornika A/C z częstotliwości CK ponad 100 kHz. Preskaler rozpoczyna zliczanie od momentu włączenia przetwornika A/C przez ustawienie bitu ADEN w ADCSR. Preskaler działa tak długo, jak bit ten jest ustawiony na 1 i jest ciągle resetowany, gdy bit ADEN ma stan niski 0.
Przy inicjowaniu przetwarzania przez ustawienie bitu ADSC w ADCSR przetwarzanie rozpoczyna się od następnego zbocza narastającego cyklu zegara przetwornika A/C. Jeśli wybrane są kanały różnicowe, to przetwarzanie rozpocznie się dopiero od drugiego narastającego zbocza cyklu zegarowego przetwornika A/C po ustawieniu bitu ADEN.
Zwykłe przetwarzanie zajmuje 13 cykli zegarowychprzetwornika A/C. W pewnych sytuacjach przetwornik A/C potrzebuje więcej cykli, aby dokonać inicjalizacji i zminimalizować błędy niezrównoważenia. Takie wydłużone czasowo przetwarzanie zajmuje 25 cykli zegarowych przetwornika A/C i występuje jako pierwsze przetwarzanie po jednym z następujących zdarzeń:
Próbkowanie z podtrzymaniem ma miejsce 1,5 cyklu zegarowego przetwornika A/C po rozpoczęciu normalnego przetwarzania i 13,5 cyklu zegarowego przetwornika A/C po rozpoczęciu przetwarzania wydłużonego czasowo. Gdy przetwarzanie się zakończy, wynik zostanie wpisany do rejestrów danych przetwornika A/C, a bit ADIF będzie ustawiony. W trybie przetwarzania pojedynczego bit ADSC jest zerowany równocześnie z ustawieniem ADIF. Oprogramowanie może następnie ustawić bit ADSC ponownie, a wtedy nowe przetwarzanie rozpocznie się przy pierwszym narastającym zboczu zegarowym przetwornika A/C. W trybie pracy ciągłej nowe przetwarzanie rozpocznie się natychmiast po zakończeniu bieżącego, a bit ADSC pozostanie w stanie wysokim 1.
Użycie trybu ciągłego i częstotliwości zegarowej przetwornika A/C 200 kHz daje najkrótszy czas konwersji równy 65 mikrosekund, czyli 15 kSPS.



| Warunek | Próbkowanie z podtrzymaniem od startu przetwarzania |
Czas przetwarzania (cykle) |
Czas przetwarzania (mikrosekundy) |
| Przetwarzanie wydłużone czasowo |
13,5 | 25 | 125 ... 500 |
| Normalne przetwarzania |
1,5 | 13 | 65 ... 260 |
Przetwornik A/C posiada opcję zmniejszania szumów, która umożliwia przetwarzanie w trybie zmniejszania szumów dla przetwornika A/C (ang. ADC Noise Reduction mode) (zobacz do opisu bitów rejestru MCUCR) w celu usunięcia szumów indukowanych przez rdzeń mikroprocesora oraz inne moduły we/wy. Jeśli podczas przetwarzania muszą być aktywne inne moduły we/wy, to tryb ten pracuje tak samo jak tryb bezczynny. Aby skorzystać z tej funkcji, powinieneś zastosować poniższą procedurę:
Tam, gdzie wymagana jest wysoka dokładność przetwornika A/C, zaleca się stosowanie trybu zmniejszania szumu. Dobrze zaprojektowany system z właściwie rozmieszczonymi, zewnętrznymi kondensatorami bocznikowymi zmniejsza potrzebę stosowania trybu zmniejszania szumu dla przetwornika A/C.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x07 | REFS1 | REFS0 | ADLAR | - | - | MUX2 | MUX1 | MUX0 | ADMUX |
| Zapis/Odczyt | Z/O | Z/O | Z/O | O | O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bity te wybierają napięcie odniesienia dla przetwornika A/C wg poniższej tabeli. Jeśli zostaną one zmienione podczas przetwarzania, to zmiana ta nie wejdzie w życie aż do zakończenia przetwarzania (bit ADIF w ADCSR jest ustawiony). Zawsze po zmianie tych bitów następne przetwarzanie zabierze 25 cykli zegara przetwornika A/C. Jeśli są używane kanały różnicowe, to stosowanie jako napięcia odniesienia napięcia VCC lub zewnętrznego napięcia odniesienia o wartości wyższej niż VCC - 1V nie jest zalecane, ponieważ wpłynie to na dokładność przetwornika A/C. Opcje wewnętrznych napięć odniesienia nie mogą być stosowane, jeśli zewnętrzne napięcie odniesienia zostało podpięte do końcówki AREF (PB0).
| REFS1 | REFS0 | Wybrane napięcie odniesienia |
| 0 | 0 | VCC jako
analogowe napięcie odniesienia, odłączone od końcówki AREF (PB0). |
| 0 | 1 | Zewnętrzne napięcie
odniesienia na końcówce PB0 (AREF), wewnętrzne napięcie odniesienia wyłączone. |
| 1 | 0 | Wewnętrzne napięcie
odniesienia bez zewnętrznego kondensatora, odłączone od końcówki PB0. |
| 1 | 1 | Wewnętrzne napięcie
odniesienia z zewnętrznym kondensatorem na końcówce PB0 (AREF). |
Bit ADLAR wpływa na sposób prezentacji wyniku przetwarzania przetwornika A/C w rejestrze danych. Jeśli ADLAR jest wyzerowany, to wynik jest wyrównany bitowo do prawej strony. Jeśli ADLAR jest ustawiony, to wynik jest wyrównany do lewej strony. Zmiana stanu bitu ADLAR wpływa natychmiast na rejestr danych przetwornika A/C bez względu na trwające przetwarzanie. Zobacz na opis rejestrów danych ADCL i ADCH.
Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość zero.
Wartość tych bitów określa, które z wejść analogowych zostanie połączone z przetwornikiem A/C. W przypadku wejścia różnicowego (PB3 - PB4) można również wybierać tymi bitami wzmocnienie. Wybór PB3 jako obu wejść dla stopnia wzmacniacza różnicowego umożliwia pomiary niezrównoważenia. Szczegóły przedstawia tabela poniżej. Jeśli bity te zostaną zmienione podczas przetwarzania, to zmiana ta nie wejdzie w życie aż do zakończenia przetwarzania (ADIF w ADCSR jest ustawiony).
| MUX2:0 | Wejście pojedyncze |
Różnicowe wejście nieodwracające |
Różnicowe wejście odwracające |
Wzmocnienie |
| 000 | ADC0 (PB5) | N/A | ||
| 001 | ADC1 (PB2) | |||
| 010 | ADC2 (PB3) | |||
| 011 | ADC3 (PB4) | |||
| 100(1) | N/A | ADC2 (PB3) | ADC2 (PB3) | razy 1 |
| 101(1) | ADC2 (PB3) | ADC2 (PB3) | razy 20 | |
| 110 | ADC2 (PB3) | ADC3 (PB4) | razy 1 | |
| 111 | ADC2 (PB3) | ADC3 (PB4) | razy 20 | |
| Uwaga: | 1. | Tylko do kalibracji niezrównoważenia. |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x06 | ADEN | ADSC | ADFR | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 | ADCSR |
| Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Zapisanie jedynki do tego bitu włącza moduł przetwornika A/C. Zapis zera powoduje wyłączenie przetwornika A/C. Wyłączenie przetwornika podczas wykonywania przetwarzania spowoduje jego przerwanie i zakończenie.
W trybie pojedynczego przetwarzania (ang. Single Conversion mode), zapisuj ten bit logiczną jedynką, aby rozpocząć każde przetwarzanie. W trybie ciągłym (ang. Free Running mode) zapisz do tego bitu jedynkę, aby rozpocząć pierwsze przetwarzanie. Pierwsze przetwarzanie po włączeniu przetwornika zajmuje 25 cykli zegarowych przetwornika A/C zamiast standardowo 13. W trakcie tego pierwszego przetwarzania wykonywana jest inicjalizacja przetwornika A/C.
W trakcie przetwarzania bit ADSC będzie dawał odczyt 1. Gdy przetwarzanie się zakończy, wróci do stanu zero. Zapis zera do tego bitu nie daje żadnego efektu.
Gdy zostanie ustawiony ten bit, przetwornik A/C będzie pracował w trybie ciągłym (ang. Free Running mode). W trybie tym przetwornik A/C w sposób ciągły próbkuje, przetwarza sygnał wejściowy i uaktualnia rejestry danych. Wyzerowanie tego bitu spowoduje zakończenie pracy w trybie ciągłym. Jeśli są używane kanały różnicowe (ustawiony bit MUX2 w rejestrze ADMUX), to kanał musi zostać wybrany przed wejściem w tryb ciągły. Wybór kanału różnicowego po wejściu w tryb ciągły może doprowadzić do niezdefiniowanego zachowania się przetwornika A/C.
Ten bit jest ustawiany, gdy ukończone zostanie przetwarzanie w przetworniku A/C i rejestry danych zostaną uaktualnione. Przerwanie przy zakończeniu przetwarzania w przetworniku A/C jest wykonywane, jeśli są ustawione oba bity ADIE i I w rejestrze SREG. Bit ADIF jest zerowany przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie można wyzerować ADIF przez zapis do tego bitu logicznej jedynki. Miej świadomość, iż odczyt-modyfikacja-zapis rejestru ADCSRA może spowodować zablokowanie oczekującego przerwania. Odnosi się to również do instrukcji SBI i CBI.
Gdy bit ten zostanie zapisany stanem 1 oraz jest ustawiony bit I w rejestrze SREG, to uaktywnia sięprzerwanie przy zakończeniu przetwarzania w przetworniku A/C.
Bity te określają współczynnik podziału pomiędzy częstotliwością zegara CK a częstotliwością wejściową zegara do przetwornika A/C.
| ADPS2 | ADPS1 | ADPS0 | Współczynnik podziału |
| 0 | 0 | 0 | 2 |
| 0 | 0 | 1 | 2 |
| 0 | 1 | 0 | 4 |
| 0 | 1 | 1 | 8 |
| 1 | 0 | 0 | 16 |
| 1 | 0 | 1 | 32 |
| 1 | 1 | 0 | 64 |
| 1 | 1 | 1 | 128 |
ADLAR = 0 – wynik wyrównany prawostronnie
| Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
| 0x05 | - | - | - | - | - | - | ADC9 | ADC8 | ADCH |
| 0x04 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADC1 | ADC0 | ADCL |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ADLAR = 1 – wynik wyrównany lewostronnie
| Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
| 0x05 | ADC9 | ADC8 | ADC7 | ADC6 | ADC5 | ADC4 | ADC3 | ADC2 | ADCH |
| 0x04 | ADC1 | ADC0 | - | - | - | - | - | - | ADCL |
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Zapis/Odczyt | O | O | O | O | O | O | O | O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy przetwarzanie w przetworniku A/C dobiegnie końca, wynik znajdzie się w tych dwóch rejestrach. Gdy zostanie odczytany rejestr ADCL (z dolnym bajtem wyniku), rejestr danych przetwornika A/C nie będzie uaktualniany aż do momentu odczytu ADCH (z górnym bajtem wyniku). W konsekwencji, jeśli wynik jest wyrównany lewostronnie i nie jest wymagana precyzja większa od 8 bitów, to wystarczy odczytać rejestr ADCH (otrzymasz 8 najstarszych bitów wyniku przetwarzania). W przeciwnym razie najpierw należy odczytać ADCL, a następnie ADCH. Bit ADLAR w rejestrze ADMUX, wpływa na sposób odczytu wyniku przetwarzania z tych rejestrów. Jeśli bit ADLAR jest ustawiony, to wynik zostaje wyrównany lewostronnie. Jeśli bit ADLAR jest wyzerowany (wartość standardowa), to wynik jest wyrównany prawostronnie.
Te bity reprezentują 10-bitowy wynik przetwarzania. Dla kanału różnicowego jest to wartość po wyregulowaniu wzmocnienia, co pokazuje poniższa tabelka:
| MUX2:0 | Wejście pojedyncze |
Różnicowe wejście nieodwracające |
Różnicowe wejście odwracające |
Wzmocnienie |
| 000 | ADC0 (PB5) | N/A | ||
| 001 | ADC1 (PB2) | |||
| 010 | ADC2 (PB3) | |||
| 011 | ADC3 (PB4) | |||
| 100 | N/A | ADC2 (PB3) | ADC2 (PB3) | razy 1 |
| 101 | ADC2 (PB3) | ADC2 (PB3) | razy 20 | |
| 110 | ADC2 (PB3) | ADC3 (PB4) | razy 1 | |
| 111 | ADC2 (PB3) | ADC3 (PB4) | razy 20 | |
Dla pojedynczych kanałów lub dla kanałów różnicowych, jeśli bit ALDAR lub bit znaku mają wartość 0, wynik 0x000 odpowiada napięciu masy, a 0x3FF odpowiada wybranemu napięciu odniesienia minus jeden bit LSB.
Ponieważ zmiana kanału analogowego jest zawsze opóźniana do zakończenia przetwarzania, do skanowania wielu kanałów można stosowaćtryb pracy ciągłej bez zakłócania przetwarzania w przetworniku A/C. Typowo do zmiany kanału jest używane przerwanie przy zakończeniu przetwarzania w przetworniku A/C. Jednakże użytkownik powinien rozważyć następujący fakt: przerwanie jest wyzwalane w momencie, gdy wynik jest gotowy do odczytu. W trybie pracy ciągłej następne przetwarzanie rozpocznie się natychmiast po wygenerowaniu przerwania. Gdy rejestr ADMUX zostanie zmieniony po wyzwoleniu przerwania, to nowe przetwarzanie już się rozpoczęło i zostaną w nim użyte stare ustawienia.
| Symbol | Parametr | Warunki | Min. | Typowo | Maks. | Jednostki |
| Rozdzielczość | Zwykłe kanały | 10 | Bity | |||
| Kanały różnicowe Wzmocnienie x1 lub x20 |
8 | Bity | ||||
| Dokładność bezwzględna | Zwykły kanał VREF = 4V Zegar przetwornika = 200 kHz |
1 | 2 | LSB | ||
| Zwykły kanał VREF = 4V Zegar przetwornika = 1 MHz |
4 | LSB | ||||
| Zwykły kanał VREF = 4V Zegar przetwornika = 2 MHz |
16 | LSB | ||||
| Nieliniowość całkowa | VREF > 2V | 0,5 | LSB | |||
| Nieliniowość różniczkowa | VREF > 2V | 0,5 | LSB | |||
| Błąd niezrównoważenia | VREF > 2V | 1,0 | LSB | |||
| Czas przetwarzania | Tryb pracy ciągłej | 65 | 260 | μs | ||
| Częstotliwość zegarowa | 50 | 200 | kHz | |||
| VREF | Napięcie odniesienia | Zwykły kanał | 2,0 | VCC | V | |
| Kanał różnicowy | 2,0 | VCC - 0,2 | V | |||
| VINT | Wewnętrzne napięcie odniesienia | 2,4 | 2,56 | 2,7 | V | |
| RREF | Oporność wejścia napięcia odniesienia | 6 | 10 | 13 | kΩ | |
| RAIN | Oporność wejścia analogowego | 100 | MΩ |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.