Lokalizator ultradźwiękowy



Podobne dokumenty
Układ transmisji szeregowej AVR

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Instytut Teleinformatyki

Programowanie mikrokontrolerów. 5 grudnia 2007

Komunikacja w mikrokontrolerach Laboratorium

Programowanie mikrokontrolerów. 15 stycznia 2008

1. Struktura urządzeń z wykorzystaniem mikrokontrolerów...13

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

Układy czasowe / liczniki (timers/counters)

SYSTEM PRZERWAŃ ATmega 32

Wstęp Architektura... 13

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

Programowanie mikrokontrolerów. 3 stycznia 2008

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Kod produktu: MP01105T

Programowanie mikrokontrolerów. 8 listopada 2007

Kod produktu: MP01611

Kod produktu: MP01105

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Wykrywacz kłamstw. Grzegorz Puzio, Łukasz Ulanicki 15 czerwca 2008

2. Architektura mikrokontrolerów PIC16F8x... 13

Laboratorium mikroinformatyki. Szeregowe magistrale synchroniczne.

Hardware mikrokontrolera X51

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

Wbudowane układy peryferyjne cz. 2 Wykład 8

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Uniwersalny sterownik silnika krokowego z portem szeregowym RS232 z procesorem AT90S2313 na płycie E200. Zestaw do samodzielnego montażu.

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Mikroprocesory i Mikrosterowniki

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Programowanie mikrokontrolerów

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Mikrokontrolery AVR Wprowadzenie

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Komunikacja w mikrokontrolerach Laboratorium

Komunikacja w mikrokontrolerach Laboratorium

Ultradźwiękowy generator mocy MARP wersja Dokumentacja techniczno-ruchowa

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Podstawy Techniki Mikroprocesorowej Laboratorium

Opis czytnika TRD-80 CLASSIC ver Moduł czytnika transponderów UNIQUE z wbudowaną anteną

2.1 Porównanie procesorów

Instytut Teleinformatyki

Instytut Teleinformatyki

Opis procedur asemblera AVR

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski

Technika mikroprocesorowa. Konsola do gier

Mikroprocesory i mikrosterowniki

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0

TRD-MINI COMBO. Uniwersalny moduł czytnika transponderów UNIQUE - wersja OEM. Podstawowe cechy :

Kod produktu: MP01611-ZK

Konfigurator Modbus. Instrukcja obsługi programu Konfigurator Modbus. wyprodukowano dla

Politechnika Wrocławska

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

SML3 październik

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Wbudowane układy peryferyjne cz. 1 Wykład 7

MIKROPROCESORY architektura i programowanie

Opis czytnika TRD-FLAT CLASSIC ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Pomoc dla użytkowników systemu asix 6. Strategia buforowa

Enkoder magnetyczny AS5040.

Mikroprocesory i Mikrosterowniki

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Mikroprocesory i Mikrosterowniki Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

MOBOT-RCR v2 miniaturowe moduły radiowe Bezprzewodowa transmisja UART

MCAR Robot mobilny z procesorem AVR Atmega32

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

asix5 Podręcznik użytkownika Strategia buforowa

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

SAIA PROGRAMOWALNY STEROWNIK PLC

Mikrokontrolery AVR ATmega

Mikrokontroler AVR ATmega32 - wykład 9

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Układy czasowo-licznikowe w systemach mikroprocesorowych

Sterownik procesorowy S-2 Komunikacja RS485 MODBUS

Przetworniki analogowo-cyfrowe (A/C)

Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32

PRUS. projekt dokumentacja końcowa

LITEcomp aplikacje Zdalnie sterowany włącznik ośmiu urządzeń

Instytut Teleinformatyki

Programowanie mikrokontrolerów 2.0

Architektury Komputerów - Laboratorium Informatyka III rok studia dzienne

Kod produktu: MP01611-ZK

Dokumentacja mikrokontrolera Atmega16 firmy Atmel

LSPY-21 LISTWOWY MODUŁ WYJŚĆ ANALOGOWYCH DOKUMENTACJA TECHNICZNO-RUCHOWA. Wrocław, październik 2003 r.

Instrukcja integracji urządzenia na magistrali Modbus RTU

Transkrypt:

Lokalizator ultradźwiękowy Arkadiusz Materek 7 czerwiec 2006 1. Cel projektu Celem projektu było zapoznanie się z działaniem sonarów ultradźwiękowych i ich własnościami, oraz zapoznaniu się z komunikacją miedzy mikroprocesorami oraz miedzy komputerem PC a mikrokontrolerem. 2. Założenia projektowe Urządzenie wyposażone będzie w trzy niezależne odbiorniki ultradźwiękowe, każdy z nich wyposażony w mikrokontroler, główny mikrokontroler odpowiedzialny za komunikację z odbiornikami i komputerem PC, oraz sterowaniem nadajnikiem ultradźwiękowym. Użytkownik obsługujący lokalizator z poziomu PC, będzie miał możliwość wykonania pomiaru oraz odczytania wyników i na podstawie znajomości położenia odbiorników określenia pozycji nadajnika. 3. Odbiornik ultradźwiękowy Celem było zaprojektowanie prostego odbiornika. Do tego celu wykorzystano mikrokontroler ATtiny12, mikrofon ultradźwiękowy, jeden rezystor i kondensator. Własności ATtini12: - posiada komparator analogowy - wewnętrzny oscylator 1.2Mhz - 32 rejestry ogólnego przeznaczenia - 1KB FLASH - 64 Bajty EEPROM - Tirem/Licznik 8mi bitowy z programowalnym preskalerem - Watchdog 1

Rysunek 1. Schemat odbiornika Zasada działania odbiornika ultradźwiękowego: Mikrofon podłączony jest bezpośrednio na wejścia komparatora analogowego równolegle z rezystorem 470kΩ. Piny PB0 i PB1 (wejścia komparatora), gdy nie wykonywany jest pomiar ustawione są jako wyjścia w stanie niskim, co powoduje szybkie rozładowanie mikrofonu. Podczas pomiaru przełączane są na wejścia w stanie wysokiej impedancji. Mikrokontroler dokonuje pomiar czasu od momentu otrzymania impulsu synchronizującego do momentu ustawienia bitu ACO w rejestrze ACSR (bit odzwierciedla aktualny stan komparatora) lub przepełnienia licznika. Czas od sygnał synchronizującego (zbocze opadające na PB2) do zliczania czasu wynosi ok. 5μs. Stan komparatora sprawdzany jest co ok. 5μs, co przy liczniku 8-bitowy daje pomiar czasu do 1,28ms (przy prędkości dźwięku 340 m/s odległość 43,52cm). Kod w asemblerze realizujący wyżej opisaną procedurę: Pomiar: Pomiar2: ;czekamy na sygnal synchronizujacy sbic PINB, Wire rjmp Pomiar2 ;przelaczenie pinow komparatora z wyjsc na wejscia in, DDRB andi, ~((1<<PB0) (1<<PB1)) out DDRB, ;pomiar czasu clr r20 Pomiar0: sbic ACSR, ACO rjmp Pomiar1 nop inc r20 brne Pomiar0 Pomiar1: dec r20 2

4. Nadajnik ultradźwiękowy ;przelaczenie pinow komparatora z wejsc na ;wyjscia w stanie niskim in, DDRB ori, ((1<<PB0) (1<<PB1)) out DDRB, Nadajnik jest zbudowany na układzie MAX232. Zadaniem tego układu jest wytworzenie odpowiedniego dla rawnego działania sonaru napięcia, które powinno wynosić ok. 20V, co zapewnia wyżej wymieniony układ. Rysunek 2. Schemat nadajnika Na wejście T1IN podawany jest sygnał prostokątny 0-5V o częstotliwości 40kHz, a na wejście T2IM jego negacja, co daje różnice napięć na wyjściach T1OUT i T2OUT ok. 20V. Tranzystor T1 oraz oporniki R1 i R2 tworzą bramkę NOT. 5. Obwód głównego mikrokontrolera Jako głównego mikrokontrolera użyto ATtini2312. Własności ATtini2313: - 2kB pamięci FLASH - 128 bajtów pamięci EEPROM - 128 bajtów RAM - jeden tirem 8-bitowy z (2xPWM, 2xOC) - jeden 16-bitowy (2xPWM, 2xOC, IC) 3

- USART - USI - Watchdog Rysunek 3. Schemat głównego obwodu Mikrokontroler jako źródła zegara używa zewnętrzny kwarc o częstotliwości 8Mhz. W tym celu należy odpowiednio ustawić bity konfiguracyjne (patrz dokumentacja ATtini2313 str. 23 i 24). a) Obsługa nadajnika Do nadajnika podawany jest sygnał prostokątny o częstotliwości 40kHz generowany przy pomocy funkcji Output Compare timera 0. Wycie OC znajduje się na pinie 2 portu B. Konfiguracja Timera 0 w trybie CTC z przerwaniem: ldi out ldi out ldi out, (1<<COM0A0) (1<<WGM01) TCCR0A, ;PB2 wyjcie OC, 100 ;stala przy ktorej licznik sie zeruje OCR0A,, (1<<OCIE0A) ;odblokowanie przerwania TIMSK, Włączenie timera 0 taktowanego, co jeden takt zegara odbywa się przez ustawienie bitu CS00 w rejestrze TCCR0B. W funkcji obsługi przerwania dekrementowany jest licznik, a gdy osiągnie wartość 0 to tirem zostaje wyłączony. Rozwiązanie takie możliwość wysłania określonej liczby okresów fali. 4

Funkcja obsługi przerwania OC0 ObslugaOC0: in r3, SREG ;zapamietanie resjestru flag dec r24 ;zminiejszenie licznika brne ObslugaOC00 out TCCR0B, r24 ;jesli r24==0 to wylaczamy timer ObslugaOC00: out SREG, r3 ;przywrocenie rejestru flag i Do rawnego wykorzystania funkcji trzeba zainicjować rejestr r24 podwójną liczbą wysyłanych okresów fali oraz do rejestru licznika TCNT0 wpisać wartość taka samą jak w rejestrze TCCR0A, aby wymusić przerwanie zaraz po włączeniu timera. b) Procedura pomiaru sonarem Do wszystkich odbiorników jednocześnie wysyłana jest komenda oczekiwania na sygnał synchronizujący, następnie wysyłana jest fala ultradźwiękowa i zboczem opadającym synchronizowany pomiar czasu przez odbiorniki (ta sama linia, co do magistrali 1-wire). Należy poczekać na zakończenie pomiarów np. 5ms i odczytujemy kolejno z odbiorników zmierzone wartości przez z magistrali 1-wire. Przykładowa implementacja: WykonajPomiary: cli r18 ;zablokowanie przeran ldi r18, 0x00 ;adres wszystkich urzadzen ;wysylamy adres do sonarow ldi r18, SonarPomiar ;wysylamy komende do sonarow sei ;odblokowanie przerwan ;wysylamy fale ldi r24, 16 ldi, 100 out TCNT0, ldi, (1<<CS00) out TCCR0B, ;wlaczenie timera ;czekamy na wyslanie fali Pomiary2: tst r24 brne Pomiary2 ;zbocze synchronizujace cbi PORTD, PD6 delay 40 sbi PORTD, PD6 ;czekamy ok. 5ms 5

ldi, 52 Pomiary0: delay 255 dec brne Pomiary0 cli ;zablokowanie przeran ;pomiary juz sa wykonane, odczytujemy dane z sonarow ldi r18, SonarAddr1 ;odczyat z sonaru 1 ldi r18, SonarWynik ;komenda wyslaniia wyniku ;wyslanie komendy ;wysylane zawsze do 1mastera ;nie ma potrzeby sprawdzac adresu ;odebranie wyniku pomiaru sts Pomiary+0, r18 ;zapisanie wyniku w RAM ;pomiary juz sa wykonane, odczytujemy dane z sonarow ldi r18, SonarAddr2 ;odczyat z sonaru 1 ldi r18, SonarWynik ;komenda wyslaniia wyniku ;wyslanie komendy ;wysylane zawsze do 1mastera ;nie ma potrzeby sprawdzac adresu ;odebranie wyniku pomiaru sts Pomiary+1, r18 ;zapisanie wyniku w RAM ;pomiary juz sa wykonane, odczytujemy dane z sonarow ldi r18, SonarAddr3 ;odczyat z sonaru 1 ldi r18, SonarWynik ;komenda wyslaniia wyniku ;wyslanie komendy ;wysylane zawsze do 1mastera ;nie ma potrzeby sprawdzac adresu ;odebranie wyniku pomiaru sts Pomiary+2, r18 ;zapisanie wyniku w RAM sei ;odblokowanie przerwan r18 c) Komunikacja z komputerem PC Komunikacja z PC odbywa się interfejsem RS232. Mikrokontroler ATtiny2313 ma sprzętową obsługę UART. Standard 0-5V jest konwertowany na standard R232 za pomocą układu MAX232. Prędkość transmisji ustalona została na 9600 bodów na sekundę. Format ramki to 8 bitów danych 2bity stopu i kontrola parzystości ODD. ;inicjowanie UART clr out UBRRH, ldi, 51 ;predkosc transmisji 9600 przy kwarcu 8Mhz out UBRRL, ;wlaczenie odbiornika i nadajnik i odblokowanie przerwan ldi, (1<<RXCIE) (1<<RXEN) (1<<TXEN) 6

out UCSRB, Komputer PC wysyła do mikrokontrolera komendy, na które mikrokontroler odpowiednio reaguje. Zaimplementowane zostały komendy: - wykonaj pomiar - prześlij wynik pomiaru - prześlij informacje o urządzeniu (ciąg znaków Lokalizator ultradzwiękowy ) - sprawdzenie obecności urządzenia (wysyła bajt 0x07) W przypadku wystąpienia błędów transmisji komenda zostaje odrzucona. Komenda odbierana jest w przerwaniu URX. ObslugaURX: in r2, SREG ;zapamietanie rejestru flag in r12, UDR ;zapamietanie odebrabego bajtu in, UCSRA andi, (1<<FE) (1<<UPE) ;czy wystapily blady breq ObslugaURX0 clr r12 ;jesli tak to zerujemy odebrany bajt ObslugaURX0: out SREG, r2 ;przywrocenie rejestru flag i Proceura wysyłajaca wyniki pomoarów ;wyniki zapisane w tabli pomiary WyslijWyniki: ldi r31, HIGH(Pomiary) ;ladujemy adres ldi r30, LOW(Pomiary) ;pierwszego elementu tablicy ldi, 3+1 ;licznik wysylamy 3 bajty WyslijWyniki0: dec breq WyslijWyniki2 WyslijWyniki1: sbis UCSRA, UDRE ;czekamy na wolny bufor rjmp WyslijWyniki1 ld, Z+ ;odczyt bajtu z ram ;z pod adresu w Z i zwieksz Z o 1 out UDR, ;wysylamy bajt rjmp WyslijWyniki0 WyslijWyniki2: Procedura wysyłająca informację o urządzeniu: ;dane zapisane są pamieci programu WyslijInfo: ldi r31, HIGH(Info<<1) ;ladujemy adres ldi r30, LOW(Info<<1) 7

WyslijInfo0: lpm, Z+ ;do bajt z pamieci programu i ;inkrementacja rejestru indeksowego Z tst breq WyslijInfo2 ;koniec gdy napotkamy znak 0 WyslijInfo1: sbis UCSRA, UDRE ;czekamy na wolny bufor rjmp WyslijInfo1 out UDR, ;wysylamy bajt rjmp WyslijInfo0 WyslijInfo2: Procedura wysyłająca potwierdzenie obecności urządzenia: ldi, 0x07 łtaki wzmzslone potwierdzenie loop: sbis UCSRA, UDRE ;czekamy na wolny bufor rjmp loop out UDR, ;wysylamy bajt z rejestru 6. Komunikacja 1-wire Komunikacja pomiędzy głównym mikrokontrolerem a odbiornikami odbywa się za pomocą interfejsu 1-wire. W projekcie zmodyfikowano ramkę do dwóch bajtów, pierwszy bajt oznacza adres urządzenia, a drugi dane. Jeżeli urządzenie odbierze pakiet z adresem, który się nie zgadza z adresem urządzenia to dane nie są ignorowane. Przesyłanie bitów interfejsem 1-wire pokazuje rysunek 4. Rysunek 4. Przesyłanie bitów Rozpoznawanie przesyłanych bitów odbywa się przez pomiar czasu stanu niskiego na magistrali. Układ master generuje zbocze opadające na magistrali, co synchronizuje układy slave przy obieraniu i nadawaniu bitow. 8

Ważną rzeczą podczas wykorzystania software owej implementacji 1-wire jest, aby blokować przerwania na czas komunikacji przez magistrale, które mogą wprowadzić przesunięcia czasowe sygnału na magistrali, co może doprowadzić do błędów podczas przesyłania danych. a) Odbiorniki (slave) - Przykład implementacji odbierania bitu: wire_r_b: ;czekamy na sygnal synchronizujacy wrb0: sbic PINB, Wire rjmp wrb0 delay 8 ;odczekanie ok 20us sbic PINB, Wire ;odczytanie stanu magistrali ;(przeskocz jesli 0) ori r18, 0b10000000 delay 15 ;odczekanie ok 45us Odebrany bit jest zapisywany jako najstarszy w rejestrze r18, ale przed wywołaniem procedury mus być wyzerowany. - Przykład implementacji nadawania bitu: wire_w_b ;czekamy na sygnal synchronizujacy wwb0: sbic PINB, Wire rjmp wwb0 nop nop cbi PORTB, Wire sbrc r18, 0 ;(przeskocz jesli 0) sbi PORTB, Wire sbi DDRB, Wire ;zapis na magistrale (PB2 - wyjscie) delay 10 ;czekamy cbi DDRB, Wire ;przelaczenie pinu na wejscie cbi PORTB, Wire delay 6 W tym przypadku nadawany jest najmłodszy bit rejestru r18. - Przykład implementacji odbierania bajtu: ;procedura czyta bajt z magistrali 1-wire do rejestru r18 wire_r: clr r18 ;zerujemy wynik ldi R17, 8 ;licznik do petli wire_r_1: ;przed kazdym odczytaniu bitu lsr r18 ;przesuwamy ostatni odebrany w prawo _b ;odczyt bitu dec ;dekrementacja licznika brne wire_r_1 ;jesli!=0 to powtarzamy czytanie bitu - Przykład implementacji wysyłania bajtu: ;procedura zapisuje bajt na magistrale 1-wire z rejestru r18 wire_w: ldi, 8 ;licznik petli 9

wire_w_1: _b ;wyslanie najmlodszego bitu bitu lsr r18 ;pzesuniecie w lewo dec brne wire_w_1 ;jesli!=0 to nadajemy nastepny b) Główny mikrokontroler (master) - Przykład implementacji odbierania bitu: wire_r_b: cbi PORTD, PD6 ;zbocze synchronizujacy delay 14 ;odczekanie 5us cbi DDRD, PD6 ;przelaczeny PD6 na wejscie delay 39 sbic PIND, PD6 ;odczytanie stanu magistrali ori r18, 0b10000000 delay 105 ;odczekanie ok 45us sbi PORTD, PD6 ; stan wysoko na magistrali sbi DDRD, PD6 ; przełac PD6 na wyjscie Odebrany bit jest zapisywany jako najstarszy w rejestrze r18, ale przed wywołaniem procedury mus być wyzerowany. - Przykład implementacji nadawania bitu: wire_w_b: cbi PORTD, PD6 ;zbocze synchronizujace delay 13 sbrc r18, 0 ;(przeskocz jesli 0) sbi PORTD, PD6 delay 146 ;czekamy sbi PORTD, PD6 ;stan wysoki na magistrale W tym przypadku nadawany jest najmłodszy bit rejestru r18. - Przykład implementacji odbierania bajtu: wire_r: in r2 r2, SREG clr r18 ;zerujemy wynik ldi R17, 8 ;licznik do petli wire_r_1: lsr r18 ;po kazdym odczytaniu bitu przesuwamy go w lewo _b ;odczyt bitu delay 100 dec ;dekrementacja licznika brne wire_r_1 ;jesli!=0 to powtarzamy out SREG, r2 r2 - Przykład implementacji wysyłania bajtu: 10

wire_w: in r2 r2, SREG ldi, 8 ;licznik pli wire_w_1: _b ;wysylamy najmlodszy bit r18 lsr r18 ;przygotwanie nastepnego bitu delay 100 dec brne wire_w_1;jeli!=0 to powtarzamy wysylanie out SREG, r2 r2 7. Wnioski Urządzenie zostało zmontowane i przetestowane. Działanie jest rawne. Dobrym rozwiązaniem okazało się użycie zintegrowanego komparatora analogowego w mikrokontrolerze. Jest on wystarczająco czuły, aby wychwycić fale z nadajnika nawet z kilku metrów a jednocześnie dość odporny na zakłócenia. Dodatkowo dokonuje pomiaru czasu bez obciążania innego mikrokontroler, a wynik można w każdej chwili odczytać. Napisany został również interfejs graficzny z wykorzystaniem biblioteki QT. Do kompilacji programów w asemblerze użyto AVRSTudio 4.12. 8. Literatura Dokumentacje producentów podzespołów elektronicznych. Materiały internetowe: http://konar.ict.pwr.wroc.pl/uploads/download/raporty/sonar.pdf 11