ˇ ENI´ TECHNICKE´ V BRNE ˇ VYSOKE´ UC BRNO UNIVERSITY OF TECHNOLOGY
ˇ NI´CH TECHNOLOGII´ FAKULTA INFORMAC ˚ ´ STAV INTELIGENTNI´CH SYSTE´MU U FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS
I/O KARTA OVLA´DANA´ POMOCI´ SMS
ˇ SKA´ PRA´CE BAKALA´R BACHELOR’S THESIS
AUTOR PRA´CE AUTHOR
BRNO 2009
MARTIN BACHTI´K
ˇ ENI´ TECHNICKE´ V BRNEˇ VYSOKE´ UC BRNO UNIVERSITY OF TECHNOLOGY
ˇ NI´CH TECHNOLOGII´ FAKULTA INFORMAC ´ STAV INTELIGENTNI´CH SYSTE´MU ˚ U FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS
I/O KARTA OVLA´DANA´ POMOCI´ SMS I/O CARD CONTROLLED BY SMS
ˇ SKA´ PRA´CE BAKALA´R BACHELOR’S THESIS
AUTOR PRA´CE
MARTIN BACHTI´K
AUTHOR
VEDOUCI´ PRA´CE SUPERVISOR
BRNO 2009
Ing. FILIP ORSA´G , Ph.D.
Zada´nı´ bakala´rˇske´ pra´ce/8585/2008/xbacht00 Vysoke´ ucˇenı´ technicke´ v Brneˇ – Fakulta informacˇnı´ch technologiı´ ´ stav inteligentnı´ch syste´mu˚ U
Akademicky´ rok 2008/2009
Zada´nı´ bakala´rˇske´ pra´ce ˇ esˇitel: R Obor: Te´ma: Kategorie:
Bachtı´k Martin Informacˇnı´ technologie I/O karta ovla´dana´ pomocı´ SMS Vestaveˇne´ syste´my
Pokyny: 1. Prostudujte literaturu ty´kajı´cı´ se popisu rozsˇ´ıˇreny´ch AT prˇ´ıkazu˚ pro komunikaci s mobilnı´mi telefony a dokumentaci tzv. PDU forma´tu pro prˇenos textovy´ch zpra´v. 2. Navrhneˇte vhodne´ ˇresˇenı´ vstupnı´ch obvodu˚ zarˇ´ızenı´ pro detekci AC/DC napeˇtı´ v pozˇadovane´m rozsahu 12 – 30V, zvolte vhodny´ zpu˚sob da´lkove´ konfigurace zarˇ´ızenı´, promyslete mozˇnosti online GPRS prˇenosu dat. 3. Navrzˇene´ rˇesˇenı´ implementujte pomocı´ bud’ pomocı´ mobilnı´ho telefonu rˇady Siemens x35, x45, x55, x65, x75 nebo pomocı´ pru˚myslove´ho GSM modulu. 4. Prˇedved’te funkcˇnost vytvorˇene´ho zarˇ´ızenı´ - odesla´nı´m ovla´dacı´ zpra´vy a prˇijmutı´m zpra´vy potvrzujı´cı´ novy´ stav vy´stupu˚ zarˇ´ızenı´. Literatura: • Dle specifikace sˇkolitele a pru˚myslove´ho zadavatele. • Mann, B.: C pro mikrokontrole´ry, BEN, 2003. ISBN 80-7300-077-6. • Kainka, B.: Meˇrˇenı´, ˇr´ızenı´ a regulace pomocı´ PC, BEN, 2003. ISBN 80-7300-089-X. Prˇi obhajobeˇ semestra´lnı´ cˇa´sti projektu je pozˇadova´no: • Body 1 a 2. Podrobne´ za´vazne´ pokyny pro vypracova´nı´ bakala´ˇrske´ pra´ce naleznete na adrese http://www.fit.vutbr.cz/info/szz Technicka´ zpra´va bakala´rˇske´ pra´ce musı´ obsahovat formulaci cı´le, charakteristiku soucˇasne´ho stavu, teoreticka´ odborna´ vy´chodiska rˇesˇeny´ch proble´mu˚ a specifikaci etap (20 azˇ 30% celkove´ho rozsahu technicke´ zpra´vy). Student odevzda´ v jednom vy´tisku technickou zpra´vu a v elektronicke´ podobeˇ zdrojovy´ text technicke´ zpra´vy, u´plnou programovou dokumentaci a zdrojove´ texty programu˚. Informace v elektronicke´ podobeˇ budou ulozˇeny na standardnı´m neprˇepisovatelne´m pameˇt’ove´m me´diu (CD-R, DVD-R, apod.), ktere´ bude vlozˇeno do pı´semne´ zpra´vy tak, aby nemohlo dojı´t k jeho ztra´teˇ prˇi beˇzˇne´ manipulaci.
Vedoucı´: Konzultant: Datum zada´nı´: Datum odevzda´nı´:
Orsa´g Filip, Ing., Ph.D., UITS FIT VUT Pavelka Ondrˇej, Ing., UTKO FEKT VUT 1. listopadu 2008 20. kveˇtna 2009 doc. Dr. Ing. Petr Hana´cˇek vedoucı´ pra´ce
Abstrakt Cílem této bakalářské práce je návrh a realizace univerzálního zařízení se vstupně výstupním charakterem. Zařízení detekuje podněty na několika vstupech a nastavuje několik výstupů. Uživatel ovládá zařízení pomocí zpráv SMS nebo krátkých násobných vytočení. Zařízení interaguje s uživatelem pomocí diod LED, zpráv SMS nebo krátkých násobných vytočení.
Abstract The aim of this bachelor’s thesis is design and implementation of a universal device with input-output character. The device detects incitations on few inputs and sets few outputs. The user controls the device via SMS or short multiple dialling. The device interacts with the user via LED diodes, SMS or hort multiple dialing.
Klíčová slova SMS, GSM, PDU, SIM, AT, detekce napětí, SIM300DZ, RS-232, AVR, WinAVR, AVR GCC, AVR Libc, UART, USART, sériová linka, ATmega128, TPS40200, spínaný zdroj
Keywords SMS, GSM, PDU, SIM, AT, detection voltage, SIM300DZ, RS-232, AVR, WinAVR, AVR GCC, AVR Libc, UART, USART, serial interface, ATmega128, TPS40200, switch-mode power supply
Citace Martin Bachtík: I/O karta ovládaná pomocí SMS, bakalářská práce, Brno, FIT VUT v Brně, 2009
I/O karta ovládaná pomocí SMS Prohlášení Prohlašuji, že jsem tuto bakalářskou práci vypracoval samostatně pod vedením Ing. Filipa Orsága, Ph.D. a uvedl všechny literární prameny a publikace, ze kterých jsem čerpal. ....................... Martin Bachtík 21. května 2009
Poděkování Děkuji rodině za finanční podporu a nestresové prostředí, Ing., Dipl.-Ing. Martinovi Drahanskému, Ph.D. za zajištění konference pro článek a Ing. Filipu Orságovi, Ph.D. za kritiku práce.
© Martin Bachtík, 2009. Tato práce vznikla jako školní dílo na Vysokém učení technickém v Brně, Fakultě informačních technologií. Práce je chráněna autorským zákonem a její užití bez udělení oprávnění autorem je nezákonné, s výjimkou zákonem definovaných případů.
Obsah 1 Úvod
13
2 Sada WinAVR / AVR Libc 2.1 Překladač avr-gcc . . . . . . . . . . . . . 2.2 Knihovna avr-libc . . . . . . . . . . . . 2.2.1 Paměť . . . . . . . . . . . . . . . . 2.2.2 Přerušení . . . . . . . . . . . . . . 2.2.3 Nastavení rychlosti modulu UART 2.3 Sada AVR Libc dále obsahuje . . . . . . . 2.4 Překlad a sestavení . . . . . . . . . . . . . 2.4.1 Překlad . . . . . . . . . . . . . . . 2.4.2 Sestavení . . . . . . . . . . . . . . 2.4.3 Disassembling . . . . . . . . . . . . 2.4.4 Sestavení s informacemi o paměti . 2.4.5 Binární data pro paměť flash ROM 2.4.6 Binární data pro paměť EEPROM
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
15 15 15 15 18 20 20 20 21 21 21 21 22 22
3 Síť GSM 3.1 Zařízení ME . . . . . . . 3.1.1 Komunikace . . . 3.1.2 Mobilní telefon . 3.1.3 Modul GSM . . . 3.2 Zpráva SMS . . . . . . . 3.2.1 Délka . . . . . . 3.2.2 7bitové kódování 3.2.3 Formát PDU . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
23 23 23 24 24 24 24 25 25
. . . . . . . . . .
27 27 27 28 28 29 35 38 41 43 47
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
4 Návrh a realizace I/O karty 4.1 Znalosti . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Požadavek malých rozměrů . . . . . . . . . . . 4.2.2 Požadavek nízké spotřeby . . . . . . . . . . . . 4.2.3 Obvod pro detekci úrovně vstupního napětí (A) 4.2.4 Obvod pro řízení I/O karty (B) . . . . . . . . . 4.2.5 Obvod pro komunikaci se sítí GSM (C) . . . . 4.2.6 Obvod pro nastavování výstupu (D) . . . . . . 4.2.7 Obvod pro napájení I/O karty (E) . . . . . . . 4.2.8 DPS . . . . . . . . . . . . . . . . . . . . . . . . 1
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
4.3
4.4
4.2.9 Výdaje . . . . . . . . . . Ovládání . . . . . . . . . . . . . . 4.3.1 Terminologie . . . . . . . 4.3.2 Zprávy SMS . . . . . . . 4.3.3 Krátké násobné vytočení . Software . . . . . . . . . . . . . . 4.4.1 Vývojové prostředí . . . . 4.4.2 Terminologie . . . . . . . 4.4.3 Činnost programu . . . . 4.4.4 Implementace . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
48 48 48 49 51 52 52 53 53 54
5 Závěr
60
A DPS I/O karty
64
B Sériové rozhraní B.1 Rychlost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Duplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3 Zařízení podle směru přenosu dat . . . . . . . . . . . . . . . . . . . . . . . . B.4 Synchronní přenos dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4.1 Znak SYN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.5 Asynchronní přenos dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.5.1 Rámec doporučení RS-232 . . . . . . . . . . . . . . . . . . . . . . . . B.6 Doporučení RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.1 Definuje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.2 Nedefinuje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.3 Omezení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.4 Úrovně napětí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.5 Zařízení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.6 Vodiče jen pro modemy . . . . . . . . . . . . . . . . . . . . . . . . . B.6.7 Vodiče pro přenos dat . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.8 Vodiče pro přenos stavu připravenosti zařízení . . . . . . . . . . . . B.6.9 Vodiče pro hardwarové řízení toku ze zařízení DTE do zařízení DCE B.6.10 Vodiče pro nestandardní hardwarové řízení obousměrného toku dat . B.6.11 Softwarové řízení toku dat . . . . . . . . . . . . . . . . . . . . . . . . B.6.12 Propojení zařízení DTE a zařízení DCE . . . . . . . . . . . . . . . . B.6.13 Délka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6.14 Převod úrovní napětí doporučení RS-232 na úrovně logiky TTL . . . B.6.15 Aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.7 Doporučení EIA/TIA-232-E . . . . . . . . . . . . . . . . . . . . . . . . . . . B.7.1 Vodiče pro hardwarové řízení obousměrného toku dat . . . . . . . . B.8 Doporučení EIA/RS-485 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67 67 67 67 67 67 68 68 69 69 69 70 70 71 71 71 72 72 72 73 73 74 74 74 74 75 75
C Síť GSM C.1 Nevýhody . . . . . . . C.1.1 Mobilní telefon C.2 Karta SIM . . . . . . . C.2.1 Rozhraní . . . C.3 Služba GPRS . . . . .
76 76 77 77 78 78
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . 2
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
C.3.1 Třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D MCU ATmega128 D.1 Zapojení . . . . . . . . . . . . . . . D.2 Kompatibilita s MCU ATmega103 D.3 Jádro . . . . . . . . . . . . . . . . D.3.1 Jednotka ALU . . . . . . . D.3.2 Registry . . . . . . . . . . . D.3.3 Registr SP . . . . . . . . . . D.4 Reset a přerušení . . . . . . . . . . D.5 Paměti . . . . . . . . . . . . . . . . D.5.1 Paměť flash ROM . . . . . D.5.2 Paměť SRAM . . . . . . . . D.5.3 Paměť EEPROM . . . . . . D.6 Zdroj hodinového signálu . . . . . D.6.1 Krystal . . . . . . . . . . . D.6.2 Kalibrovaný oscilátor RC . D.7 Reset . . . . . . . . . . . . . . . . . D.7.1 Externí reset . . . . . . . . D.7.2 Reset hlídacím psem . . . . D.7.3 Reset rozhraním JTAG . . D.8 Zámky a pojistky . . . . . . . . . . D.8.1 Bloky . . . . . . . . . . . . D.8.2 Blok zámků paměti . . . . . D.9 Porty . . . . . . . . . . . . . . . . D.9.1 Registry . . . . . . . . . . . D.9.2 Nenastavené piny . . . . . . D.10 16bitový časovač/čítač . . . . . . . D.10.1 Režimy . . . . . . . . . . . D.10.2 Registry . . . . . . . . . . . D.11 Modul USART . . . . . . . . . . . D.11.1 Hodinový signál . . . . . . D.11.2 Inicializace . . . . . . . . . D.11.3 Vysílač . . . . . . . . . . . D.11.4 Přijímač . . . . . . . . . . . D.11.5 Registry . . . . . . . . . . . D.12 Modul SPI . . . . . . . . . . . . . D.13 Elektrické vlastnosti . . . . . . . . E Kontrolér TPS40200 E.1 Schopnosti . . . . . . E.2 Popis pinů . . . . . . E.3 Doporučené zapojení E.4 Doporučené zapojení
78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79 79 79 80 80 80 81 81 82 82 82 82 82 82 83 83 83 83 83 83 83 83 85 85 87 87 87 88 90 90 91 91 91 91 95 95
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pro snížení citlivosti
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
96 96 96 97 99
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F Modul GSM SIM300DZ F.1 Vlastnosti . . . . . . . . . . . . . F.1.1 Společné vlastnosti . . . . F.1.2 Zprávy SMS . . . . . . . F.1.3 Hlas . . . . . . . . . . . . F.1.4 Rozhraní . . . . . . . . . F.2 Instrukční sada . . . . . . . . . . F.2.1 Druhy zpráv . . . . . . . F.2.2 Základní skupina příkazů F.2.3 Registr S . . . . . . . . . F.2.4 Rozšířená skupina příkazů F.2.5 Odeslání více příkazů . . F.2.6 Podporovaná kódování . . F.2.7 Řízení toku dat . . . . . . F.3 Popis pinů . . . . . . . . . . . . . F.4 Spuštění . . . . . . . . . . . . . . F.5 Modul UART . . . . . . . . . . . F.6 Doporučené zapojení karty SIM . F.7 Doporučené zapojení signalizace
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
4
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
100 100 100 101 101 101 101 101 102 102 102 103 103 103 104 104 105 105 106
Seznam obrázků 2.1 2.2
Organizace paměti RAM MCU ATmega128 . . . . . . . . . . . . . . . . . . Překlad a sestavení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 20
4.1 4.2 4.3 4.4 4.6 4.6 4.7 4.9 4.9 4.10
Blokový diagram I/O karty . . . . . . . . . . . . . . . . . . . . . . . . . . . Schéma zapojení obvodu pro detekci úrovně vstupního napětí (A) I/O karty Schéma zapojení obvodu pro řízení I/O karty (B) – část 1 . . . . . . . . . . Schéma zapojení obvodu pro řízení I/O karty (B) – část 2 . . . . . . . . . . Schéma zapojení obvodu pro komunikaci se sítí GSM (C) I/O karty – část 1 Schéma zapojení obvodu pro komunikaci se sítí GSM (C) I/O karty – část 2 Schéma zapojení obvodu pro nastavování výstupu (D) I/O karty . . . . . . Schéma zapojení obvodu pro napájení I/O karty (E) – část 1 . . . . . . . . Schéma zapojení obvodu pro napájení I/O karty (E) – část 2 . . . . . . . . Organizace DPS I/O karty . . . . . . . . . . . . . . . . . . . . . . . . . . .
28 29 35 36 38 39 41 43 44 47
A.1 Obrazec vrchní strany DPS I/O karty . . . . . . . . . . . . . . . . . . . . . A.2 Obrazec spodní strany DPS I/O karty . . . . . . . . . . . . . . . . . . . . . A.3 Osazení vrchní strany DPS I/O karty . . . . . . . . . . . . . . . . . . . . .
64 65 66
B.1 Rámec doporučení RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Úrovně napětí doporučení RS-232 . . . . . . . . . . . . . . . . . . . . . . . .
68 70
D.1 Piny MCU ATmega128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.2 Doporučené zapojení krystalu k MCU ATmega128 . . . . . . . . . . . . . . D.3 Pin MCU ATmega128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79 83 85
E.1 Doporučené zapojení kontroléru TPS20400 . . . . . . . . . . . . . . . . . . E.2 Doporučené zapojení pro snížení citlivosti kontroléru TPS20400 . . . . . . .
97 99
F.1 F.2 F.3 F.4 F.5
Vrchní strana modulu GSM SIM300DZ . . . . . . . . . . . . Spodní strana modulu GSM SIM300DZ . . . . . . . . . . . Spuštění modulu GSM SIM300DZ . . . . . . . . . . . . . . Doporučené zapojení karty SIM k modulu GSM SIM300DZ Doporučené zapojení signalizace modulu GSM SIM300DZ .
5
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
100 100 104 105 106
Seznam tabulek 3.1 3.2
Sady příkazů AT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Příklad zakódování textu hellohello v 7bitovém kódování . . . . . . . . .
24 25
4.1 4.2
Ceny zpráv SMS mobilních operátorů v České republice k datu 2009-05-19 . Výdaje při návrhu I/O karty . . . . . . . . . . . . . . . . . . . . . . . . . .
40 48
B.1 B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9 B.10 B.11 B.12 B.13 B.14 B.15 B.16 B.17
Úrovně napětí doporučení RS-232 . . . . . . . . . . . . . . . . Vodič DCD doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič RI doporučení RS-232 . . . . . . . . . . . . . . . . . . . Vodič RXD doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič TXD doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič DTR doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič DSR doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič RTS doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič CTS doporučení RS-232 . . . . . . . . . . . . . . . . . . Vodič RTS nestandardního řízení toku doporučení RS-232 . . Vodič CTS nestandardního řízení toku doporučení RS-232 . . 3vodičové propojení zařízení DTE a zařízení DCE doporučení 5vodičové propojení zařízení DTE a zařízení DCE doporučení 7vodičové propojení zařízení DTE a zařízení DCE doporučení Maximální délka vodičů doporučení RS-232 . . . . . . . . . . Vodič RTR doporučení EIA/TIA-232-E . . . . . . . . . . . . . Vodič CTS doporučení EIA/TIA-232-E . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
70 71 71 71 71 72 72 72 72 73 73 73 73 74 74 75 75
C.1 Mobilní telefony s modemem . . . . . . . . . . . . . . . . . . . . . . . . . .
77
D.1 Registr SREG . . . . . . . D.2 Bit I . . . . . . . . . . . . D.3 Blok zámků paměti . . . . D.4 Blok rozšířených pojistek D.5 Blok vyšších pojistek . . . D.6 Blok nižších pojistek . . . D.7 Bit BODLEVEL . . . . . . . D.8 Bity CKSEL3:0 . . . . . . D.9 Registr DDRx . . . . . . . D.10 Registr PORTx . . . . . . . D.11 Bit PORTxn . . . . . . . . D.12 Registr PINx . . . . . . . D.13 Registr SFIOR . . . . . . .
80 80 83 84 84 84 84 85 85 86 86 86 86
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . 6
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RS-232 RS-232 RS-232 . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
D.14 Bit PUD . . . . . . . . . . . . . . . . . . . . D.15 Registr TCCR1A . . . . . . . . . . . . . . . . D.16 Bity COMnA1:0 . . . . . . . . . . . . . . . . D.17 Bity WGMn1:0 . . . . . . . . . . . . . . . . . D.18 Registr TCCR1B . . . . . . . . . . . . . . . . D.19 Bity CSn2:0 . . . . . . . . . . . . . . . . . . D.20 Registr OCR1AH . . . . . . . . . . . . . . . . D.21 Registr OCR1AL . . . . . . . . . . . . . . . . D.22 Registr TIMSK . . . . . . . . . . . . . . . . . D.23 Bit TOIE1 . . . . . . . . . . . . . . . . . . . D.24 Vzorec pro výpočet rychlosti modulu UART D.25 Registr UDRn . . . . . . . . . . . . . . . . . D.26 Registr UCSRnA . . . . . . . . . . . . . . . . D.27 Bit RXCn . . . . . . . . . . . . . . . . . . . . D.28 Bit TXCn . . . . . . . . . . . . . . . . . . . . D.29 Bit UDREn . . . . . . . . . . . . . . . . . . . D.30 Bit FEn . . . . . . . . . . . . . . . . . . . . D.31 Bit DORn . . . . . . . . . . . . . . . . . . . . D.32 Bit UPEn . . . . . . . . . . . . . . . . . . . . D.33 Bit U2Xn . . . . . . . . . . . . . . . . . . . . D.34 Registr UCSRnB . . . . . . . . . . . . . . . . D.35 Bit RXCIEn . . . . . . . . . . . . . . . . . . D.36 Bit TXCIEn . . . . . . . . . . . . . . . . . . D.37 Bit RXEn . . . . . . . . . . . . . . . . . . . . D.38 Bit TXEn . . . . . . . . . . . . . . . . . . . . D.39 Registr UCSRnC . . . . . . . . . . . . . . . . D.40 Bit UMSELn . . . . . . . . . . . . . . . . . . D.41 Bity UPMn1:0 . . . . . . . . . . . . . . . . . D.42 Bit USBSn . . . . . . . . . . . . . . . . . . . D.43 Bity UCSZn2:0 . . . . . . . . . . . . . . . . D.44 Registr UBRRnH . . . . . . . . . . . . . . . . D.45 Registr UBRRnL . . . . . . . . . . . . . . . . D.46 Piny modulu UART . . . . . . . . . . . . . D.47 Elektrické vlastnosti MCU ATmega128 . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
F.1 Dovolené rychlosti modulu UART modulu GSM
7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87 88 88 89 89 89 90 90 90 90 90 91 92 92 92 92 92 92 93 93 93 93 93 93 94 94 94 94 94 94 95 95 95 95
. . . . . . . . . . . . . . . 105
Seznam zkratek zkratka
I/O ASCII UCS-2 UTF-16 B b LSB MSB
původní znění přeložené znění Input/Output Vstupně-výstupní American Standard Code for Information Interchange Americký standardní kód pro výměnu informací 2-byte Universal Character Set 2B univerzální znaková sada 16-bit Unicode Transformation Format 16b Byte Bajt Bit Bit Least Significant Bit Nejméně významný bit Most Significant Bit Nejvíce významný bit GSM
SMS GSM ME ID ETSI PLMN BCCH IMSI
Short Message Service Krátká textová zpráva Groupe Spécial Mobile, Group System for Mobile communication Globální systém pro mobilní komunikaci Mobile Equipment Mobilní zařízení Identification Identifikace European Telecommunication Standards Institute Evropský ústav pro telekomunikační normy Public Land Mobile Network Veřejná pozemní pohyblivá síť Broadcast Control Channel Vysílací řídící kanál International Mobile Subscriber Identity Identifikační číslo SIM karty Mobile Country Code
8
MCC MNC MSIN LAI PIN PUK MSISDN K PDU GPRS 3GPP IrDA WLAN WiFi IEEE EDGE MS
Kód země v mobilní síti Mobile Network Code Kód mobilní sítě Mobile Subscriber Identification Number Identifikační číslo účastníka v mobilní síti Location Area Identity Kód oblasti výskytu Personal Identification Number Osobní identifikační číslo Personal Unlocking Key Osobní odemykací klíč Mobile Station International Subscriber Directory Number Identifikační číslo karty SIM Key Klíč Protocol Description Unit Protokol k popisu jednotky SMS General Packet Radio Service Služba paketového přenosu dat 3rd Generation Mobile Group Partnerský projekt třetí generace (Infrared Data Association Asociace infračerveného přenosu Wireless Local Area Network Bezdrátová lokální síť Wireless Fidelity Bezdrátová věrnost Institute of Electrical and Electronics Engineers Institut pro elektrotechnické a elektronické inženýrství Enhanced Data Rates for GSM Evolution Rozšířené datové rychlosti pro GSM Mobile Station Mobilní stanice Elektronika
H L V VCC VPP CLK
High Level Vysoká úroveň Low Level Nízká úroveň Volt Volt Common-Collector Voltage Kolektorové napětí Power Voltage Napájecí napětí Clock Hodinový signál
9
R D T IC SOIC MCU LED SMD AVR TQFP QFN DIL DIP JTAG DPS EEPROM PWM CMOS RISC ROM RAM SRAM
Resistor Rezistor Diode Dioda Transistor Tranzistor Integrated Circuit Integrovaný obvod Small-Outline Integrated Circuit Nízkoprofilový integrovaný obvod Microcontroller Unit Mikroprocesorová jednotka Light-Emitting Diode Elektroluminiscenční dioda Surface-Mount Devices Povrchově montované zařízení Advanced Virtual RISC Rozšířený virtuální RISC Thin Quad Flat Pack Tenké čtvercové ploché pouzdro Quad Flat No leads Dvouřadé pouzdro Dual in-line package Dvouřadé pouzdro Dual in-line package Tenké ploché bezvývodové pouzdro Joint Test Action Group Standard pro testování plošných spojů Deska plošných spojů Deska plošných spojů Electronically Erasable Programmable Read-Only Memory Elektricky mazatelná semipermanentní paměť typu ROM-RAM Pulse Width Modulation Pulsně šířková modulace Complementary Metal-Oxide-Semiconductor Doplňující se kov-oxid-polovodič Reduced Instruction Set Computer Počítač s redukovanou instrukční sadou Read Only Memory Paměť pouze pro čtení Random-Access Memory Paměť s náhodným přístupem Static Random-Access Memory Sttaická paměť s náhodným přístupem Analog-to-Digital Converter
10
ADC ALU MOSFET MOSFET
Analogově digitální převodník Arithmetic Logic Unit Aritmeticko-logická jednotka Metal Oxide Semiconductor Field Effect Transistor Polem řízený tranzistor Equivalent Series Resistance Ekvivalentní sériový odpor Sériové rozhraní
ITU TIA EIA RS-232 RS-485 DTE DCE NP OP SP MP EP TTL DTR RTS DCD RI RXD TXD
International Telecommunication Union Mezinárodní telekomunikační unie Telecommunications Industry Association Asociace pro telekomunikační průmysl Electronic Industry Association Asociace pro elektronický průmysl Recommended Standard 232 Doporučený standard 232 Recommended Standard 485 Doporučený standard 485 Data Terminal Equipment Terminál Data Circuit-terminating Equipment Modem None Parity Žádná parita Odd Parity Lichá parita Space Parity Nulová parita Mark Parity Jedničková parita Even Parity Sudá parita Transistor Transistor Logic Tranzistorově-tranzistorová logika Data Terminal Ready Terminál připraven Request to Send Žádat o odeslání Data Carrier Detect Detekován nosný kmitočet Ring Indicator Detekováno zvonění Receive Data Přijmout data Transmit Data Odeslat data
11
SGND DSR CTS GND UART USART AT SPI FIFO MISO MOSI
Signal Ground Signálová zem Data Set Ready Modem připraven Clear to Send Volný k odeslání Ground Zem Universal Asynchronous Receiver/Transmitter Univerzální asynchronní přijímač/vysílač Universal Synchronous/Asynchronous Receiver/Transmitter Univerzální synchronní/asynchronní přijímač/vysílač ATtention ATtention Sériové periferní rozhraní Serial Peripheral Interface První dovnitř, první ven First In, First Out Master dovnitř, Slave ven Master Input, Slave Output Master ven, Slave dovnitř Master Output, Slave Input Ostatní
GNU CR LF XOR CTC GCC DDD
GNU’s Not Unix GNU není Unix Carriage return Návrat vozíku Line feed Posun o řádek eXclusive Disjunction Exkluzivní disjunkce Clear Timer on Compare Vymazat při porovnání GNU Compiler Collectione Sada kompilátorů vytvořených v rámci projektu GNU Data Display Debugger Ladící nástroj
12
Kapitola 1
Úvod I/O karta ovládaná pomocí SMS (krátká textová zpráva) (dále I/O karta) je plně vestavěným zařízením neboli mikroprocesorovým zařízením. Pojem I/O indikuje, že obsahuje několik vstupů pro snímání stavu připojeného externího zařízení na vstupech a několik výstupů pro nastavování stavu I/O karty a tudíž i připojeného externího zařízení na výstupech. Takové externí zařízení oznamuje svůj stav například zvukem, světlem, pohybem, ale pro I/O kartu jedině úrovní napětí. V praxi je I/O karta známá jako GSM brána. Druhá kapitola čtenáře seznamuje se sadou nástrojů AVR Libc neboli WinAVR. Sada AVR Libc obsahuje vše potřebné pro naprogramování MCU (mikroprocesorová jednotka) AVR (architektura RISC od firmy Atmel). Sada AVR Libc poskytuje svůj vlastní překladač jazyka C AVR GCC, vlastní standardní knihovnu stejného jména AVR Libc, simulátory, ladící nástroje a spoustu utilit pro práci se soubory, které produkuje tato sada. Standardní knihovna AVR Libc vychází ze standardní knihovny jazyka C. Překladač AVR GCC vychází z úspěšného překladače GCC. Jelikož jsem na překladač GCC zvyklý z fakulty, netrvalo dlouho a rychle jsem si na překladač AVR GCC zvyknul. Změnou akorát je jiný výstup. Knihovna AVR Libc dokonce řeší problém se zbytečným zaplňováním paměti RAM (paměť s náhodným přístupem) konstantními řetězci přesouváním do paměti flash ROM (paměť pouze pro čtení). Kapitola vysvětluje i organizaci paměti pro překlad. Práce s přerušeními je v knihovně AVR Libc opravdu snadná. Kapitola závěrem popisuje průběh překladu od zdrojového kódu k binárnímu souboru pro MCU. Třetí kapitola čtenáře seznamuje se sítí GSM (celosvětová bezdrátová síť). Použitím sítě GSM se I/O karta stává mocným prostředkem pro ovládání zařízení z různých koutů světa. Se zařízením GSM se komunikuje přes klasickou sériovou linku pomocí příkazů, přičemž příkazů je velké množství a každý příkaz má svoji syntaxi. Implementací zařízení GSM je opravdu mnoho, ale zaměřuje se pouze na mobilní telefon a modul GSM. Zprávy SMS jsou revoluční službou sítě GSM. Služba SMS umožňuje přenos krátkých textů. Texty jsou opravdu krátké, typicky pouze 160 znaků, ale delší texty jsou možné při spojení několika zpráv SMS. Na velikosti zprávy SMS se šetřilo i s kódováním. Zpráva SMS se nekóduje klasicky 8bitově, ale 7bitově, protože nejvyšší bit u 8bitových znaků není využitý. Velikost zprávy SMS ale I/O kartě postačuje. Jako každý standard má i zpráva SMS svůj standard, kterým je formát PDU (formát SMS), který doslova definuje, kde má jaký bit být. Čtvrtá kapitola čtenáře seznamuje s návrhem a realizací I/O karty. Navrh zahrnuje návrh ovládání, hardwaru a softwaru. Návrh hardwaru se snaží respektovat požadavek malých rozměrů malými pouzdry součástek a požadavek nízké spotřeby nízkou frekvencí MCU, spínaným zdrojem a použitím nízkopříkonového modulu GSM. Oba tyto požadavky jsou ale zpracované subjektivně, protože se neudaly přesné hodnoty. Každý obvod hard13
waru je uvozený schématem zapojení a ukončený rozsáhlými výpočty. Kapitola mimojiné pomůže při výběru karty SIM (personalizuje mobilní zařízení) tak, aby byl provoz I/O karty co nejlevnější. V přílohách jsou převážně popisy použitých technologií použitých v práci.
14
Kapitola 2
Sada WinAVR / AVR Libc Tato kapitola popisuje vybrané vlastnosti sady WinAVR 20090306rc1 a AVR Libc 1.6.5 [3]. AVR Libc je sada nástrojů včetně stejnojmenné standardní knihovny jazyka C pro 8bitové MCU architektury AVR s licencí GNU (licence pro volné šíření) [3, s. 17]. WinAVR je AVR Libc pro systém Windows. Pokračování je v příloze 2.
2.1
Překladač avr-gcc
Hostitelský systém je systém, na kterém běží překladač. Cílový systém je systém, pro který překladač přeložil zdrojový kód. Nativní překladač je překladač, kde je hostitelský systém stejný jako cílový systém. Křížový překladač je překladač, kde je hostitelský systém jiný než cílový systém. Překladač avr-gcc je právě křížovým kompilátorem, kde cílovým systémem je architektura AVR. [3, s. 10-11]
2.2
Knihovna avr-libc
avr-libc je standardní knihovna, která poskytuje mnoho funkcí ze standardní knihovny jazyka C a funkcí specifických pro architekturu AVR. [3, s. 13]
2.2.1
Paměť
Architektura AVR je založená na Harvardské architektuře, kde paměť flash ROM je paměť programu a paměť RAM je paměť dat a každá z pamětí má samozřejmě svůj vlastní adresový prostor. [3, s. 25] Využití paměti programu pro konstantní data V architektuře AVR je velikost paměti RAM opravdu kritická a v některých případech dokonce nepoužitelná, oproti ní velikost paměti flash ROM je mnohonásobně větší. Co vedlo autory architektury AVR k tomuto je záhadou.
Co když program obsahuje velké množství konstantních dat a paměť flash ROM zaplňuje pouze z třetiny? Příčinou je zaplnění paměti RAM konstantními daty. Konstatní data jsou v paměti tedy dvakrát, a to v paměti flash ROM a v paměti RAM [3, s. 76]. Řešením může být umístění konstantních dat do paměti flash ROM nebo připojení externí paměti RAM. 15
Problém je, že se jazyk C nenavrhl pro Harvardskou architekturu, tedy dva různé adresové prostory, nýbrž pro Von Neumannovu architekturu, tedy jeden adresový prostor [3, s. 25]. Knihovna avr-libc používá jisté techniky pro simulaci jednoho adresového prostoru.
Problém není v přístupu do paměti flash ROM. Knihovna avr-libc přistupuje do paměti flash ROM pomocí instrukce LPM a instrukce ELPM [3, s. 249]. Mnoho překladačů pro MCU používá nestandardní klíčová slova, která rozšiřují syntaxi jazyka C. Je obtížné do překladače GCC zavést rozšíření syntaxe jazyka C. Knihovna avr-libc se vydala jinou cestou a používá pouze klíčové slovo __attribute__. __attribute__ je speciální klíčové slovo překladače GCC pro připojení různých atributů k deklaraci proměnné či funkce. Po tomto klíčovém slově následuje atribut v dvojitých kulatých závorkách.
Atribut progmem oznamuje překladači, aby data uložil do paměti programu. [3, s. 25] Mnohé uživatele napadla myšlenka použít klíčové slovo const místo atributu progmem. Zneužití klíčového slova const by ale změnilo jeho sémantiku. Klíčové slovo const oznamuje překladači, že data jsou pouze ke čtení; pomáhá překladači zbavovat se některých rutin; pomáhá překladači s kontrolou použití proměnných; ale vůbec neoznamuje překladači, kde by data měla být uložena. [3, s. 26] Knihovna
slouží pro práci s daty v paměti programu. Makro PROGMEM nahrazuje dlouhou specifikaci __attribute__((__progmem__)). Datové typy s prefixem prog_ nahrazují dlouhé definice datových typů ( PROGMEM). Makro PGM_P nahrazuje datový typ (prog_char *).
Makra s prefixem pgm_ a postfixem _byte, _word, _dword či _float jsou základní makra pro práci s nejmenšími jednotkami paměti programu. Pohodlnější, než je práce s bajty po bajtu, jsou spíše funkce s postfixem _P. Funkce s postfixem _P napodobují funkce z knihovny <string.h> s tím rozdílem, že používají datové typy s prefixem prog_. Tato podobnost je záměrná, neboť programátory zbavuje studia nových funkcí, na jejichž používání jsou už zvyklí ze starých funkcí. Jelikož se řetězcová konstanta nedeklaruje (například v argumentu funkce) a je výchozího datového typu (const char *), nedá se ve funkcích s postfixem _P použít, a proto se musí vložit do makra PSTR. Makro PSTR přetypuje řetězec na řetězec datového typu (const prog_char *) s prefixem prog_. [3, s. 250-262] # include // ... char temp[10] ; // řetězec v paměti RAM char text_1[] PROGMEM = "Text 1" ; // řetězec v paměti programu prog_char text_2[] = "Text 2" ; // řetězec také v paměti programu // ... strcpy_P ( temp, text_1 ) ; printf_P ( PSTR ( "Text 3" ) ) ; 16
// ... Sekce v paměti Sekce .text obsahuje aktuální instrukce, které vytvářejí program. [3, s. 20]
– Sekce .initN je součástí sekce .text a obsahuje kód pro volání funkce main. [3, s. 22] – Sekce .finiN je též součástí sekce .text a obsahuje kód po ukončení funkce main nebo po volání funkce exit. [3, s. 23] Sekce .data obsahuje inicializovaná statická data. Například:
char err_str[] = "Your program has died a horrible death!"; Začátek sekce je možné nastavit přidáním parametru -Wl,-Tdata, k příkazu avr-gcc při sestavování programu. K adrese sekce se musí přidat hodnota 0x800000. [3, s. 21] Sekce .bss obsahuje neinicializované globální nebo statické proměnné, které se při startu inicializují na nulu. Například:
int err_num ; [3, s. 21] – Sekce .noinit je součástí sekce .bss a obsahuje neinicializované globální nebo statické proměnné, které se při startu neinicializují na nulu. Začátek sekce je možné nastavit přidáním parametru -Wl,-section-start=.noinit= k příkazu avr-gcc při sestavování programu. K adrese sekce se musí přidat hodnota 0x800000. [3, s. 21-22] Sekce .eeprom je paměť EEPROM (elektricky mazatelná paměť ROM). [3, s. 21] Užití sekcí v jazyce C:
void my_init_portb (void) __attribute__ ((naked)) \ __attribute__ ((section (".init3"))) ; Oblasti v paměti Paměť RAM počínaje sekcí .data. Sekce .bss začíná tam, kde končí sekce .data. Halda začíná tam, kde končí sekce .bss a je rostoucí. Zásobník začíná na vrcholu paměti RAM a je klesající. Halda se používá pro dynamické alokování paměti. Zásobník se používá pro ukládání lokálních proměnných, parametrů funkcí a adres pro návrat z funkcí. Halda a zásobník se zvětšují proti sobě a může dojít k jejich kolizi. Architektura AVR nemá žádnou správu paměti, která by předcházela či upozorňovala na překrývání oblastí paměti. Při kolizi zásobníku s haldou dojde k porušení dat v zásobníku nebo v haldě. Proto se musí zásobník dokonale opečovávat, tedy počet rekurzivních volání funkcí a počet i velikost lokálních proměnných nesmějí být velké. [3, s. 15-16] 17
Obrázek 2.1: Organizace paměti RAM MCU ATmega128 [3, s. 16] Externí paměť RAM Pokud je k dispozici externí paměť RAM, je silně doporučeno přesunout do ní haldu bez ohledu na umístění sekcí .data a .bss. Zásobník by měl být vždy v interní paměti RAM, aby se zachoval nízký počet hodinových cyklů. Při použití tohoto pravidla se oddaluje pravděpodobnost kolize haldy se zásobníkem. [3, s. 16] Dynamické alokování paměti Funkce malloc vytvoří 2bajtovou hlavičku s velikostí alokované paměti a alokuje tolik paměti. Funkce free přečte velikost alokované paměti z hlavičky a uvolní tolik paměti. [3, s. 19] Paměť EEPROM Knihovna slouží pro práci s daty v paměti EEPROM. Funkce s prefixem eeprom_ a postfixem _byte, _word či _dword jsou základní funkce pro práci s nejmenšími jednotkami paměti EEPROM. Všechny funkce nejdříve čekají dokud nebude paměť EEPROM připravena, tudíž mohou čekat neznámou dobu. Programy reálného času by měly před použitím funkcí testovat makro eeprom_is_ready jako prevenci před čekáním v těchto funkcích. [3, s. 216]
2.2.2
Přerušení
Knihovna slouží pro práci s přerušeními. Funkce přerušení používá atribut signal. Makro ISR, dříve SIGNAL, nahrazuje definici funkce přerušení a poté zápis ukazatele na funkci do tabulky vektorů přerušení. # include ISR ( vektor, atributy ) { /* kód funkce přerušení */ 18
} Pokud nastane přerušení a není pro něj definovaná funkce přerušení, skočí se na výchozí vektor výchozího přerušení se jménem BADISR_vect. Výchozím vektorem přerušení je vektor přerušení RESET. Kód funkce výchozího přerušení lze změnit též makrem ISR. Makro sei nahrazuje instrukci SEI, tedy povolí všechna přerušení. Makro cli nahrazuje instrukci CLI, tedy zakáže všechna přerušení. Před skokem na vektor přerušení, architektura AVR vynuluje bit I v registru SREG, tedy zakáže všechna přerušení, což je většinou žádoucí jako prevence před rekurzivními přerušeními. Pokud při volání funkce přerušení není žádoucí zákaz všech přerušení, existují dva způsoby jak povolit všechna přerušení: Na začátek kódu funkce přerušení se vloží makro sei. Mezi zákazem a povolením všech přerušení však proběhne ještě několik instrukcí. V makru ISR se použije makro ISR_NOBLOCK. Makro ISR_NOBLOCK nahrazuje specifikaci __attribute__((interrupt)). Mezi zákazem a povolením všech přerušení proběhne minimum instrukcí.
ISR ( vektor, ISR_NOBLOCK ) { /* kód funkce přerušení */ } [3, s. 222-223] Přerušení při optimalizaci Mějme například tento kód, kde se v kódu cyklu ke globální proměnné nepřistupuje: uint8_t promenna ; ISR ( vektor ) { promenna = 1 ; } while ( promenna == 0 ) { /* kód */ } Při použití optimalizace překladač typicky přistoupí k proměnné pouze jednou. Aby se proměnná mohla měnit vně cyklu, například ve funkci přerušení, musí se proměnná deklarovat s klíčovým slovem volatile. volatile uint8_t promenna ; [3, s. 61]
19
2.2.3
Nastavení rychlosti modulu UART
Katalogové listy MCU nabízejí vzorec pro vypočítání rychlosti modulu UART: UBRR = ( F_CPU / ( UART_BAUD_RATE * 16L ) - 1 ) Bohužel tento vzorec neplatí na všechny kombinace rychlostí kvůli usekávání desetinné části při celočíselnému dělení. Výsledek dělení je lepší zaokrouhlit na nejbližší než na nejnižžší číslo. UBRR = ( ( F_CPU + UART_BAUD_RATE * 8L ) / ( UART_BAUD_RATE * 16L ) - 1 ) V knihovně existuje makro pro výpočet rychlosti. [3, s. 88]
2.3
Sada AVR Libc dále obsahuje
AVRDUDE – Programátor MCU. Ladící nástroje.
– avr-gdb – GNU Debbuger – Ladící nástroj v příkazovém řádku. – avr-insight – Insight – Ladící nástroj v GUI. – DDD – Ladící nástroj v GUI (grafické rozhraní). – AVaRICE – Ladící prostředek s podporou rozhraní JTAG. Simulátory.
– SimulAVR Ostatní utility.
?
-
-
-
.o
-
6
-
.elf
-
.map
-
6 makefile
Obrázek 2.2: Překlad a sestavení
20
6
.lst
-
.hex
-
MCU
.c
.a
-
programátor
-
-
avr-gcc
.h
avr-objcopy
-
-
avr-gcc -c
kate
-
avr-objdump
Překlad a sestavení
autor práce
2.4
-
2.4.1
Překlad
Parametr -mmcu říká překladači model MCU. Překladač používá parametr -mmcu pro výběr knihoven. Při neuvedení parametru -mmcu překladač vybere MCU 8815. Parametr -Os říká překladači, aby optimalizoval, tedy zmenšil, zdrojový kód. Parametr -g říká překladači, aby do objektového souboru vložil informace pro ladění či disassembling. Parametr -c říká překladači, aby nelinkoval. Malé projekty se mohou linkovat zároveň s překladem. Vstupem je zdrojový kód s příponou .c. Výstupem je objektový soubor s příponou .o. $ avr-gcc -g \ -Os \ -mmcu=atmega8 \ -c \ demo.c [3, s. 305-306]
2.4.2
Sestavení
Při sestavování je důležité uvést parametr -mmcu. Vstupem je objektový soubor s příponou .o. Výstupem je binární soubor s příponou .elf. $ avr-gcc -g \ -mmcu=atmega8 \ -o demo.elf \ demo.o [3, s. 306]
2.4.3
Disassembling
Výstup obsahuje zdrojový kód v jazyce C prokládaný řádky jazyka assembler. Vstupem je binární soubor s příponou .elf. Výstupem je textový soubor s příponou .lst. $ avr-objdump -h \ -S \ demo.elf \ > demo.lst [3, s. 306]
2.4.4
Sestavení s informacemi o paměti
Informace obsahují velikosti kódu a dat, přiřazené adresy identifikátorům a ukazují, jaké moduly se načetly a které z nich z knihoven. Vstupem je objektový soubor s příponou .o. Výstupem je binární soubor s příponou .elf a textový soubor s příponou .map.
21
$ avr-gcc -g \ -mmcu=atmega8 \ -Wl,-Map,demo.map \ -o demo.elf \ demo.o [3, s. 312-313]
2.4.5
Binární data pro paměť flash ROM
Parametr -j extrahuje data ze sekce .text a sekce .data. Vstupem je binární soubor s příponou .elf. Výstupem je soubor s příponou .hex. $ avr-objcopy -j .text \ -j .data \ -O ihex demo.elf \ demo.hex [3, s. 314]
2.4.6
Binární data pro paměť EEPROM
Vstupem je binární soubor s příponou .elf. Výstupem je soubor s příponou .hex. $ avr-objcopy -j .eeprom \ --change-section-lma .eeprom=0 \ -O ihex demo.elf \ demo_eeprom.hex [3, s. 314]
22
Kapitola 3
Síť GSM GSM je celosvětová síť určená primárně pro zařízení ME (GSM zařízení). Zařízení ME se připojují do sítě GSM prostřednictvím nejbližší buňky [5]. Teoreticky má buňka šestiúhelníkovitý tvar a buňky se dotýkají hranami, ale prakticky vlivem terénu má buňka mnohoúhelníkovitý tvar a buňky se částečně překrývají [6, s. 17]. Pro síť GSM existuje několik variant rádiových frekvencí. Síť GSM využívá více než 184 zemí v Asii, Africe, Evropě, Austrálii a Americe a více než 747 000 000 uživatelů [6, s. 3]. Pokračování je v příloze C.
3.1
Zařízení ME
ME je GSM zařízení, které zprostředkovává komunikaci se sítí GSM. Zařízení ME může být mobilní telefon s modemem nebo modul GSM s modemem.
3.1.1
Komunikace
Zařízení ME má sériové rozhraní, proto musí obsahovat modem. Přenos dat sériového rozhraní zařízení ME je asynchronní a plně-duplexní, tudíž pro komunikaci postačuje 3vodičové propojení. Komunikace se zařízením ME je založená na příkazech AT. Příkaz AT je řetězec znaků z tabulky ASCII. Příkazy se odesílají po vodiči TXD a odpovědi po vodiči RXD sériového rozhraní zařízení ME. Příkazy AT se vyvinuly původně pro ovládání modemu. Sada příkazů AT je seskupení několika příkazů AT stejné kategorie. Sada příkazů AT může pocházet z doporučení nebo od výrobce zařízení ME. Sadu příkazů AT z doporučení nazveme doporučenou sadou příkazů AT a sadu příkazů AT od výrobce nazveme firemní sadou příkazů AT. Výrobce zařízení ME ve firemních sadách příkazů AT napodobuje syntaxi příkazů AT z doporučených sad příkazů AT, čímž zachovává jednotnost. Doporučené sady příkazů AT jsou tedy pouze doporučené, tudíž je výrobce zařízení ME nemusí do zařízení ME implementovat všechny, nýbrž pouze jejich části nebo žádné. Výrobci zařízení ME většinou vytvářejí firemní sady příkazů AT navazující na doporučené sady příkazů AT a vytvářejí firemní sady příkazů AT specifické pro zařízení ME.
23
sada příkazů AT
autor
kategorie
V.25
ITU-T
Ovládání modemů.
GSM 07.07 GSM 07.05
Práce s GPRS. ETSI
GSM 11.14 vlastní
Práce s SMS. Práce se SIM Toolkit.
výrobce
Tabulka 3.1: Sady příkazů AT
3.1.2
Mobilní telefon
Mobilní telefon s modemem jako zařízení ME používají I/O karty domácí výroby. Mobilní telefon je s nadsázkou modul GSM s klávesnicí a displejem. Modemy v dnešních mobilních telefonech se už sice nevidí, ale pořád je lze najít ve starších mobilních telefonech.
3.1.3
Modul GSM
Modul GSM s modemem jako zařízení ME používají profesionální I/O karty. Modul GSM je s nadsázkou mobilní telefon bez klávesnice a displeje.
3.2
Zpráva SMS
SMS je krátká textová zpráva pro zasílání digitálních dat mezi uživateli sítě GSM. Zprávu SMS definuje sdružení ETSI.
3.2.1
Délka
Maximální délka zprávy SMS je 1120 b (140 B). Pokud zpráva SMS obsahuje pouze znaky 8bitové a celý text je kódován v 8bitovém kódování, tak maximální délka zprávy SMS je: 1120 = 140 8
(3.1)
V češtině je 8bitovým znakem znak bez diakritiky. Pokud zpráva SMS obsahuje pouze znaky 8bitové a celý text lze překódovat do 7bitového kódování, tak maximální délka zprávy SMS se zvýší na: 1120 = 160 7
(3.2)
Toto číslo je v oblasti zpráv SMS už velice známé. Pokud zpráva SMS obsahuje minimálně jeden znak 16bitový, tak je celý text překódován do 16bitového kódování UCS-2 a maximální délka zprávy SMS je: 1120 = 70 16
(3.3)
V češtině je 16bitovým znakem znak s diakritikou. Jak vyplývá ze zkratky SMS, zpráva SMS je poměrně krátká, proto lidé většinou píší bez diakritiky a v extrémních případech místo mezer píší velká počáteční písmena u každého slova. Složené zprávy SMS jsou složené z několika zpráv SMS. Maximální počet zpráv SMS ve složené zprávě SMS je 6 až 8. [14] 24
3.2.2
7bitové kódování
Text je složený ze 7bitových znaků. 7bitové znaky definuje tabulka ASCII. Text se rozdělí na sedmice znaků. V každé sedmici znaků je na začátek znaku A přesunuto tolik posledních bitů dalšího znaku B, jaké je pořadí znaku A při číslování od jedničky. Tak ze sedmice vnikne bajt. Před první bit prvního znaku je přesunut jeden poslední bit druhého znaku. Před první bit druhého znaku jsou přesunuty dva poslední bity třetího znaku. Před první bit třetího znaku jsou přesunuty tři poslední bity čtvrtého znaku. Před první bit pátého znaku je přesunuto pět posledních bitů šestého znaku. Před první bit šestého znaku je přesunuto šest posledních bitů sedmého znaku. Před první bit sedmého znaku je přesunuto sedm posledních bitů osmého znaku. [16] Příklad 7b znak h
e
l
l
o
h
e
l
l
o
7b dec 104
101
108
108
111
104
101
108
108
111
7b bin 1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111 8b bin 11101000 00110010 10011011 11111101 01000110 10010111 11011001
11101100 110111
32 9B FD 46 97 D9 EC 37 Tabulka 3.2: Příklad zakódování textu hellohello v 7bitovém kódování [16]
8b hex E8
Příklad je znázorněn v tabulce 3.2. Mějme text hellohello, který obsahuje 10 znaků. Každý znak potřebuje minimálně 7 b pro svoji existenci a 1 B pro uchování. V 8bitovém kódování by byl zakódován jako řetězec hellohello a měl by 10 B. V 7bitovém kódování je zakódován jako řetězec E8329BFD4697D9EC37 a má 9 B. 7bitové kódování tedy ušetřilo 1 B. [16]
3.2.3
Formát PDU
PDU popisuje formát zpráv. Princip formátu PDU definuje doporučení ETSI GSM 03.40. Vrstvový model formátu PDU obsahuje aplikační, transportní, přenosovou a fyzickou vrstvu v tomto pořadí. Nižší vrstvy poskytují služby vyšším vrstvám. Jednotkou transportní vrstvy je datagram. Datagram obsahuje několik polí, včetně vlastní zprávy. [7] Datagram SMS-SUBMIT Diagram SMS-SUBMIT je obyčejná zpráva. Datagram odesílá mobilní telefon na středisko zpráv. Datagram SMS-SUBMIT-REPORT Diagram SMS-SUBMIT-REPORT je odpověď na diagram SMS-SUBMIT. Datagram odeslá středisko zpráv na mobilní telefon. Datagram SMS-DELIVER Diagram SMS-DELIVER je obyčejná zpráva. Datagram odesílá středisko zpráv na mobilní telefon.
25
Datagram SMS-DELIVER-REPORT Diagram SMS-DELIVER-REPORT je odpověď na diagram SMS-DELIVER a diagram SMS-STATUS-REPORT. Datagram odesílá mobilní telefon na středisko zpráv. Datagram SMS-STATUS-REPORT Diagram SMS-STATUS-REPORT je oznámení o doručení. Datagram odesílá středisko zpráv na mobilní telefon. Datagram SMS-COMMAND Diagram SMS-COMMAND je příkaz pro práci se zprávou na středisku zpráv, která se odeslala pomocí předchozího datagramu SMS-SUBMIT. Příkazem může být například odstranění zprávy nebo zrušení čekání na doručení kvůli oznámení. Datagram odesílá mobilní telefon na středisko zpráv.
26
Kapitola 4
Návrh a realizace I/O karty Návrh vestavěného zařízení zahrnuje jak návrh hardwaru, tak i návrh softwaru.
4.1
Znalosti
Při návrhu silnoproudé části hardwaru jsem využil některé znalosti ze silnoproudé elektrotechniky z oboru Elektrotechnika ze Střední průmyslové školy elektrotechnické. Jelikož se bude pracovat s nebezpečným napětím 230 V ±10%, bude se odborná způsobilost v elektrotechnice 50/1978 Sb. §5 [19] hodit. Při návrhu slaboproudé části hardwaru jsem využil znalosti ze slaboproudé elektroniky ze zálib a odborné literatury. Při návrhu softwaru jsem využil znalosti z Fakulty informačních technologií a odborné literatury.
4.2
Hardware
I/O karta sestává z 8 obvodů pro detekci úrovně vstupního napětí, obvodu pro řízení I/O karty, obvodu pro komunikaci se sítí GSM, 8 obvodů pro nastavování výstupu a obvodu pro napájení I/O karty. Jelikož se piny integrovaných obvodů musí zatížit pouze malým proudem, nelze je připojit k silovým“ obvodům. Piny jsou připojené pouze k signálovým obvodům a k bázím ” tranzistorů, které teprve ovládají silové obvody. Schéma zapojení a DPS (deska plošných spojů) se navrhovaly v návrhovém systému CadSoft Eagle 4.16r2.
27
zdroj 12 V Obvod pro napájení I/O karty
?
zdroj 4,4 V
? zdroj 3 V
? ? -
?
?
spuštění
?
signalizace
signalizace
-
?
GSM
?
-
úprava napájení
6 ?
xtal
SIM
6 ?
Obvod pro řízení I/O karty
6 ? RF
-
?
MCU
? SPI
? JTAG
úprava napájení
Obvod vstupů
?
Obvod výstupů
? ?
Obvod pro komunikaci se sítí GSM
Obrázek 4.1: Blokový diagram I/O karty
4.2.1
Požadavek malých rozměrů
Pro DPS se použily součástky v pouzdru SMD (malé pouzdro), pokud byly k dispozici. Součástky s vývodovými pouzdry se pro vestavěná zařízení už příliš nepoužívají. Optočlen OK1 v pouzdru SMD se nepodařilo sehnat, a tak je v pouzdru DIL (pouzdro vývodové). MCU IC1 je v pouzdru TQFP64 (nízké pouzdro). Modul GSM GSM1 je zhruba 166krát menší než mobilní telefon. Kontrolér IC5 je v pouzdru SOIC (nízké pouzdro). V průběhu vývoje se používalo nepájivé pole. Pokud součástka nemá k dispozici klasickou vývodovou variantu, lze použít patici, která stojí několik desítek tisíc Kč, tudíž se experimentálně pájely vodiče přímo na piny.
4.2.2
Požadavek nízké spotřeby
Modul GSM GSM1 spotřebuje mnohem méně energie než mobilní telefon už z toho důvodu, že nemá displej. Zdroj napětí 4,4 V je spínaný, který má menší spotřebu energie než stabilizátor.
28
4.2.3
Obvod pro detekci úrovně vstupního napětí (A)
Obrázek 4.2: Schéma zapojení obvodu pro detekci úrovně vstupního napětí (A) I/O karty Podobvod pro úpravu vstupního napětí (A1) Stejnosměrné napětí výstupu zabezpečovací ústředny bývá typicky 12 V ±9%, tedy se může pohybovat mezi:
12 . · (100 − 9) = 11 V 100
(4.1)
12 . · (100 + 9) = 13 V 100
(4.2)
a
Jmenovité střídavé napětí spotřebičů v České republice bývá 230 V s normovanou tolerancí ±10%, tedy se může pohybovat mezi 230 . · (100 − 10) = 207 V 100
(4.3)
12 . · (100 + 10) = 253 V 100
(4.4)
a
Napětí, které chceme sledovat, se nazve sledovaným napětím. Protože sledovaným napětím bude nejspíše napětí výstupu zabezpečovací ústředny nebo spotřebiče, sjednotíme rozsah napětí výstupu zabezpečovací ústředny 11 V – 13 V a rozsah napětí 29
spotřebiče 207 V – 253 V na 11 V – 253 V. Sledované napětí pohybující se mezi 11 V a 253 V se nazve úrovní H sledovaného napětí. Minimální úroveň H sledovaného napětí tedy je 11 V. Maximální sledované napětí tedy je: . Usm = 253 V
(4.5)
Zbylé napětí, tedy sledované napětí pohybující se mezi 0 V a 10 V, se nazve úrovní L sledovaného napětí. Sledované napětí se připojí na svorky X3. Varistor R10 chrání před přepětím. Maximální napětí varistoru se zvolilo na 47 V. Dioda D3 funguje jako jednocestný usměrňovač střídavého napětí. Záporné půlvlny sinusového napětí se stávají kladnými. Dioda D3 zároveň chrání obvod proti přepólování stejnosměrného napětí. Napětí diody D3 v závěrném směru musí být minimálně 300 V. Napětí na diodě D3 v propustném směru je:
. UD3 = 1 V
(4.6)
Podobvod pro převod sledovaného napětí na operační napětí (A2) Operační zesilovač IC2 nemůže pracovat přímo s tak velkým napětím, proto se musí zmenšit. Zmenšené sledované napětí pro potřeby operačního zesilovače IC2 se nazve operačním napětím. Maximální operační napětí musí být menší než napájecí napětí operačního zesilovače IC2 [8]. Uom < UIC2
(4.7)
Maximální operační napětí se s rezervou zvolilo na: Uom = 11, 5 V
(4.8)
Napěťový dělič P1 + P2 transformuje sledované napětí na operační napětí tak, aby maximální sledované napětí bylo přímo úměrné maximálnímu operačnímu napětí. Odpory trimru P1 a trimru P2 se počítají tak, aby měly příkon menší než jejich maximální příkon. Maximální příkon trimru P1 a trimru P2 je: PP 1m = PP 2m = 0, 3 W
(4.9)
Trimry s vyšším maximálním příkonem se v katalogu nenašly. Maximální napětí na trimru P2 odpovídá maximálnímu operačnímu napětí. UP 2m = Uom = 11, 5 V
(4.10)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Lze vypočítat maximální proud trimrem P2. IP 2m =
0, 3 . PP 2m = 26, 09 mA = UP 2m 11, 5 30
(4.11)
Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice. − Usm + UD3 + UP 1m + UP 2m = 0
(4.12)
Lze vypočítat maximální napětí na trimru P1. . . UP 1m = Usm − UD3 − UP 2m = 253 − 1 − 11, 5 = 240, 5 V
(4.13)
Lze vypočítat maximální proud trimrem P1. IP 1m =
PP 1m . 0, 3 . = = 1, 25 mA UP 1m 240, 5
(4.14)
Maximální proudy trimru P1 a trimru P2 jsou už známé. Musí se vybrat ten nižší, aby vyhovoval oběma trimrům. . IP 1,P 2m = IP 1m = 1, 25 mA
(4.15)
Lze vypočítat odpor trimru P1. RP 1 =
UP 1m IP 1,P m2
. 240, 5 . = = 192, 4 kΩ 1, 25
(4.16)
Hodnota trimru P1 se zvolila na 500 k, přičemž se musí nastavit na 192,4 kΩ. Lze vypočítat odpor trimru P2. RP 2 =
UP 2m IP 1,P 2m
. 11, 5 . = = 9, 2 kΩ 1, 25
(4.17)
Hodnota trimru P1 se zvolila na 25 k, přičemž se musí nastavit na 9,2 kΩ. Původní návrh počítal s drátovými rezistory kvůli možnému většímu příkonu. Použítí rezistorů se ukázalo jako nevhodné, protože žádná normovaná hodnota nemusí zrovna vyhovovat referenčnímu napětí. Vhodnější je použití trimrů pro přesné nastavení jejich odporu. Jelikož se požaduje konstantní maximální sledované napětí, nastavení trimru P1 a trimru P2 se provádí pouze jednou, a to při výrobě I/O karty. Přenastavení trimru P1 a trimru P2 nekvalifikovanou osobou je pouze na vlastní nebezpečí. Neočekávané použití trimru P1 a trimru P2 vnáší do I/O karty nové schopnosti, a to možnost změny maximálního sledovacího napětí. Podobvod pro zdroj referenčního napětí (A3) Napětí, které se má detekovat ze sledovaného napětí, se nazve hraničním napětím.
Uh = 11 V
(4.18)
Zmenšené hraniční napětí pro potřeby operačního zesilovače IC2 se nazve referenčním napětím.
Ur = Uom ·
11 . Uh . = 11, 5 · = 0, 5 V Usm 253 31
(4.19)
Napěťový dělič P3 + P4 dodává referenční napětí. Maximální příkon trimrů P3 a P4 je: PP 3m = PP 4m = 0, 3 W
(4.20)
Maximální napětí na trimru P4 odpovídá referenčnímu napětí. . UP 4m = Ur = 0, 5 V
(4.21)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Lze vypočítat maximální proud trimrem P4.
IP 4m =
PP 4m 0, 3 . = 600 mA = UP 4m 0, 5
(4.22)
Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice. − U12 + UP 3m + UP 4m = 0
(4.23)
Lze vypočítat maximální napětí na trimru P3. . . UP 3m = U12 − UP 4m = 12 − 0, 5 = 11, 5 V
(4.24)
Lze vypočítat maximální proud trimrem P3.
IP 3m =
PP 3m 0, 3 . = 26, 02 mA = UP 3m 11, 5
(4.25)
Maximální proudy trimrů P3 a P4 jsou už známé. Musí se vybrat ten nižší, aby vyhovoval oběma trimrům. . IP 3,P 4m = IP 3m = 26, 02 mA
(4.26)
Lze vypočítat odpor trimru P3.
RP 3 =
UP 3m IP 3,P 4m
. 11, 5 . = = 441, 97 Ω 26, 02
(4.27)
Hodnota trimru P3 se zvolila na 1 k, přičemž se musí nastavit na 441,97 Ω. Lze vypočítat odpor trimru P4.
RP 4 =
UP 4m . 0, 5 . = 19, 22 Ω = IP 3,P 4m 26, 02
Hodnota trimru P4 se zvolila na 100 R, přičemž se musí nastavit na 19,22 Ω. 32
(4.28)
Operační zesilovač IC2 se zapojí jako napěťový komparátor. Operační zesilovač IC2 se napájí napětím:
UIC2 = U12 = 12 V
(4.29)
Na neinvertující vstup operačního zesilovače IC2 je přivedené operační napětí. Na invertující vstup operačního zesilovače IC2 je přivedené referenční napětí. Při operačním napětí vyšším než referenční napětí je na výstupu napájecí napětí operačního zesilovače, jinak zem GND (zem). Operační zesilovač IC2 musí být typu rail-to-rail. Operační zesilovač, který není typu rail-to-rail, nemusí mít na výstupu úroveň L jako zem GND. Podobvod pro stabilizaci (A4) Zenerova dioda D25 chrání vstup operačního zesilovače IC2 před vyšším napětím než je maximální operační napětí. Zenerova dioda D25 se zapojí v závěrném směru. Napětí na Zenerově diodě D25 je o něco vyšší než maximální operační napětí. Operační napětí menší než napětí na Zenerově diodě D25 se propustí v nezměněné podobě a operační napětí vyšší než napětí na Zenerově diodě D25 se omezí na napětí Zenerovy diody D25 a zbytek napětí se drží na rezistoru R12 před Zenerovou diodou D25. Podobvod pro signalizaci (A5) Rezistor R15 snižuje napětí na diodě LED (luminiscenční dioda) D13. Napájecí napětí diody LED D13 je:
UD15 = 3 V
(4.30)
Proud rezistorem R15 a diodou LED D13 je: IR13,D15 = 20 mA
(4.31)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice. − U12 + UR13 + UD15 = 0
(4.32)
Lze vypočítat napětí na rezistoru R13. UR13 = U12 − UD15 = 12 − 3 = 7 V
R13 =
7 UR13 = 350 V = IR13,D15 20
Hodnota rezistoru R13 se zvolila na 470 R. 33
(4.33)
(4.34)
Zelená dioda LED D13 signalizuje úroveň L sledovaného napětí. Červená dioda LED D14 signalizuje úroveň H sledovaného napětí. Rezistor R40 snižuje napětí na diodě LED D14. Napájecí napětí diody LED D14 je:
UD14 = 3 V
(4.35)
Proud diodou LED D14 a rezistorem R40 je:
ID14,R40 = 20 mA
(4.36)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice.
− U12 + UR40 + UD14 = 0
(4.37)
Lze vypočítat napětí na rezistoru R40.
UR40 = U12 − UD14 = 12 − 3 = 7 V
R40 =
UR40 ID14,R40
=
7 = 350 Ω 20
(4.38)
(4.39)
Hodnota rezistoru R13 se zvolila na 470 R. Podobvod pro stabilizaci (A6) Zenerova dioda D21 chrání vstup MCU IC1 před vyšším napětím než je napájecí napětí MCU IC1. Zenerova dioda D21 se zapojí v závěrném směru. Napětí na Zenerově diodě D21 je o něco vyšší než napájecí napětí MCU IC1. Napětí výstupu operačního zesilovače IC2 menší než napětí na Zenerově diodě D21 se propustí v nezměněné podobě a napětí výstupu operačního zesilovače IC12 vyšší než napětí na Zenerově diodě D21 se omezí na napětí Zenerovy diody D21 a zbytek napětí se drží na rezistoru R13 před Zenerovou diodou D21. Podovod pro úpravu napětí pro vstup MCU (A7) Optočlen OK1 galvanicky odděluje výstup operačního zesilovače IC2 a vstup MCU IC1. Rezistor R11 je externí pull-up rezistor pro MCU IC1.
Podobvod pro externí vstupy (A8) Na konektor JP1 se připojuje rozšiřující deska s externími vstupy. 34
4.2.4
Obvod pro řízení I/O karty (B)
Obrázek 4.3: Schéma zapojení obvodu pro řízení I/O karty (B) – část 1
35
Obrázek 4.4: Schéma zapojení obvodu pro řízení I/O karty (B) – část 2 Podobvod pro zdroj hodinového signálu (B1) Schéma zapojení krystalu vychází z katalogového zapojení D.2. Zdroj hodinového signálu se neosadil, protože MCU IC1 používá interní RC oscilátor jako prevenci před zablokováním MCU IC1 při nesprávné volbě krystalu. Krystal XTAL a kondenzátory C15, C35 vytváří hodinový signál. Podobvod pro úpravu napájecího napětí (B2) Kondenzátory C1, C2, C36, C37 a C34 vyhlazují napájecí napětí MCU IC1. Podobvod pro MCU (B3) Model MCU se zvolil takový, který má počet univerzálních pinů vyšší než součet 8 vstupů, 8 výstupů, výstupu pro zapnutí modulu GSM GSM1, výstupu pro spuštění modulu GSM GSM1, výstupu pro signalizaci a vstupu pro stav modulu GSM GSM1. MCU musí mít dostatečnou paměť, protože program je poměrně rozsáhlý. V žádném případě se nezvolil MCU s co nejmenším možným počtem vývodů, aby se nemusely použít expandéry, serializace pomocí posuvných registrů či další podobné techniky. Model MCU se zvolil na MCU ATmega128. MCU ATmega128 popisuje příloha D. I přesto, že pin MCU ATmega128 může dodávat proud až 40 mA, tak jsou na nich pomocné tranzistory. Při programování MCU ATmega128 se zakáže režim kompatibility s MCU ATmega103 vyjedničkováním bitu M103C v bloku rozšířených pojistek podle tabulky D.4 a nastaví zdroj hodinového signálu na kalibrovaný interní RC oscilátor 8 MHz vynulováním bitu CKSEL3, vyjedničkováním bitu CKSEL2 a vynulováním bitů CKSEL1:0 podle tabulky D.8 v bloku vyšších pojistek. Podobvod pro signalizaci (B4) Napěťový dělič R7 + R22 dodává napětí bázi tranzistoru T2. Přivedením napětí na bázi tranzistoru T2 tranzistor sepne a cesta mezi diodou LED D12 a zemí GND se stane vodivou.
36
Rezistor R27 snižuje napětí na diodě LED D12. Napájecí napětí diody LED D12 je:
UD12 = 2 V
(4.40)
Proud rezistorem R27 a diodou LED D12 je:
IR27,D12 = 20 mA
(4.41)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice.
− U3 + UR27 + UD12 = 0
(4.42)
Lze vypočítat napětí na rezistoru R27.
UR27 = U3 − UD12 = 3 − 2 = 1 V
R27 =
UR27 1 = 50 Ω = IR27,D12 20
(4.43)
(4.44)
Hodnota rezistoru R27 se zvolila na 270 R. Červená dioda LED D12 signalizuje stav I/O karty.
Podobvod pro reset (B7) Kondenzátory C19, C17, C27 a C28 vyhlazují napájecí napětí a rezistor R23 je pull-up rezistor. Podobvod pro rozhraní JTAG (B5) Univerzální dioda D8 zabraňuje přivedení napájecího napětí z I/O karty do rozhraní JTAG (rozhraní pro testování obvodů). Konektor JP4 vede k rozhraní JTAG.
Podobvod pro rozhraní SPI (B6) Univerzální dioda D8 zabraňuje přivedení napájecího napětí z I/O karty do rozhraní ISP (rozhraní pro programování pamětí). Konektor JP4 vede k rozhraní ISP.
37
4.2.5
Obvod pro komunikaci se sítí GSM (C)
Pro I/O kartu jsou klávesnice a displej zbytečné, tudíž mobilní telefon nepoužijeme a modul GSM se nám výborně hodí.
Obrázek 4.6: Schéma zapojení obvodu pro komunikaci se sítí GSM (C) I/O karty – část 1
38
Obrázek 4.6: Schéma zapojení obvodu pro komunikaci se sítí GSM (C) I/O karty – část 2 Podobvod pro ochranu sériové linky (C1) Rezistory R63, R64 a R65 chrání modul UART (modul sériové linky) MCU a modem modulu GSM GSM1. Podobvod pro úpravu napájecího napětí (C2) Kondenzátory C33, C18 a C26 vyhlazují napájecí napětí modulu GSM GSM1. Podobvod pro modul GSM (C3) I/O karta se osadila modulem GSM SIM300DZ firmy SIMCOM Ltd. s verzí hardwaru 2.02. Modul GSM SIM300DZ popisuje příloha F. Podle sekce B.6.9 se vodič RTS uzemní. Při minimálním napájecím napětí modulu GSM GSM1 podle sekce F.1.1 se modul GSM GSM1 odhlašoval ze sítě a dokonce se i vypínal. Podobvod pro kartu SIM (C4) Schéma zapojení SIM karty vychází z katalogového zapojení F.4. Komunikace se sítí GSM vyžaduje kartu SIM některého mobilního operátora. Zde se dostáváme do konfliktu s filosofií 39
karet SIM dnešních mobilních operátorů. Karta SIM dnešních mobilních operátorů je předurčená pro upovídaného“ uživatele masivně užívajícího placené služby mobilního op” erátora a pro pasivní“ I/O kartu není vůbec uzpůsobena. Mobilní operátor kartu SIM ” uzpůsobenou pouze pro I/O karty běžně nenabízí, takže si budeme muset vystačit s kartou SIM určenou pro uživatele a I/O karta bude uživatele simulovat. Používání služeb mobilního operátora bohužel stojí peníze. Od karty SIM budu požadovat co nejmenší výdaje. Dále budu požadovat nepravidelnou platbu, pro kterou jsou určené karty SIM s nabíjením přes kupóny, tedy ne s paušálem. Konečně budu požadovat nejlevnější tarif. Takovými kartami SIM bývají ty, které zástupci mobilních operátorů vnucují na ulicích či koncertech za malou anketu. Při návrhu I/O karty se vyvinulo co největší úsilí pro úsporu kreditu. mobilní operátor
tarif
cena včetně DPH [Kč]
SMS brána
Vodafone
Vodafone karta
1,19
ano
T-Mobile
Kredit
1,20
ano
Telefónica O2
O2 NA!VÍC
1,90
ano
Tabulka 4.1: Ceny zpráv SMS mobilních operátorů v České republice k datu 2009-05-19 V minulosti měl mobilní operátor T-Mobile SMS bránu zakázanou. Tarif O2 NA!VÍC navíc nabízí víkendové zprávy SMS za 0,50 Kč na 4 týdny [9]. Pro I/O kartu se nejvíce hodí tarif Vodafone karta. Nepříjemnou vlastností karet SIM, respektive dnešních mobilních operátorů, bývá, že v případě neuskutečnění placené služby za určitý čas mobilní operátor automaticky odregistruje kartu SIM ze sítě GSM. Tento čas je nastavený například na 6 měsíců. U předurčené činnosti nepoužívání karty SIM až 6 měsíců většinou nehrozí. Jelikož I/O karta může použít placenou službu mobilního operátora za delší dobu, může se do I/O karty implementovat funkce pro automatické zavolání na placené telefonní číslo s automatickým příjmem.
Podobvod pro hardwarové zapnutí modulu GSM (C5) Přivedením napětí na bázi tranzistoru T3 tranzistor sepne a cesta mezi rezistorem R18 a zemí GND se stane vodivou. Napěťový dělič R17 + R18 dodává napětí pro gate tranzistoru T3. Přivedením napětí na gate tranzistoru T5 tranzistor sepne a cesta mezi napájecím napětím a modulem GSM GSM1 se stane vodivou.
Podobvod pro anténu (C6) Konektor X11 vede k anténě. Podobvod pro signalizaci (C7) Napěťový dělič R38 + R39 dodává napětí bázi tranzistoru T4.
40
T4 Přivedením napětí na bázi tranzistoru T4 tranzistor sepne a cesta mezi diodou LED D19 a zemí GND se stane vodivou. Rezistor R19 snižuje napětí na diodě LED D11. Napájecí napětí diody LED D11 je:
UD11 = 2 V
(4.45)
Proud rezistorem R19 a diodou LED D11 je: IR19,D11 = 20 mA
(4.46)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice. − U4 + UR19 + UD11 = 0
(4.47)
Lze vypočítat napětí na rezistoru R19. UR19 = U4 − UD11 = 4 − 2 = 2 V
R19 =
UR19 IR19,D11
=
2 = 100 Ω 20
(4.48)
(4.49)
Hodnota rezistoru R19 se zvolila na 1 k. Modrá dioda LED D11 signalizuje stav modulu GSM GSM1.
4.2.6
Obvod pro nastavování výstupu (D)
Výstupy se řídí I/O kartou. Výstup má dva stavy – sepnutí a rozepnutí. Podnětem k sepnutí či rozepnutí je přijatá zpráva SMS s příkazem pro nastavení určených výstupů nebo krátké násobné vytočení. Maximální spínané napětí a proud výstupů nejsou stanovené.
41
Obrázek 4.7: Schéma zapojení obvodu pro nastavování výstupu (D) I/O karty Podobvod pro spínání (D1) Napěťový dělič R5 + R8 dodává napětí bázi tranzistoru T6. Přivedením napětí na bázi tranzistoru T6 tranzistor sepne a cesta mezi cívkou relé RE1, diodou D30 a zemí GND se stane vodivou. Relé RE1 spíná silové kontakty. Dioda D34 se připojí paralelně k relé RE1. Kontakty X6 vedou k silovým kontaktům relé RE1. Pojistka FU2 chrání proti zkratu na výstupu. Hodnota pojistky FU2 se zvolila na 5 A.
Podobvod pro signalizaci (D2) Rezistor R9 snižuje napětí na diodě LED D30. Napájecí napětí diody LED D30 je:
UD30 = 3 V
(4.50)
Proud rezistorem R9 a diodou LED D30 je:
IR9,D30 = 20 mA
(4.51)
Ví se dostatek veličin k tomu, aby se mohly vypočítat veličiny zbývající. Podle 2. Kirchhoffova zákona se stanoví napěťová rovnice.
− U4 + UR9 + UD30 = 0
(4.52)
Lze vypočítat napětí na rezistoru R9.
UR9 = U4 − UD30 = 4 − 3 = 1 V
R9 =
UR9 IR9,D30
=
1 = 50 Ω 20
Hodnota rezistoru R9 se zvolila na 270 R. Červená dioda LED D30 signalizuje sepnutí výstupu.
Podobvod pro externí výstupy (D3) Na konektor JP2 se připojuje rozšiřující deska s externími výstupy. 42
(4.53)
(4.54)
4.2.7
Obvod pro napájení I/O karty (E)
Obrázek 4.9: Schéma zapojení obvodu pro napájení I/O karty (E) – část 1
43
Obrázek 4.9: Schéma zapojení obvodu pro napájení I/O karty (E) – část 2 Podobvod pro úpravu vstupního napětí (E1) Jedná se o spínaný zdroj kvůli splnění požadavku nízké spotřeby. Jelikož ani desáté postavení zdroje pokaždé s novými součástkami na pokaždé jiný univerzální DPS nefungovalo, tak stačilo málo k tomu, aby se zvolila horší varianta – stabilizátor. K mému překvapení ale zdroj na DPS I/O karty funguje. Z toho plyne závěr, že zapojení je velice citlivé. I/O karta se musí napájet napájecím napětím:
U12 = 12 V
(4.55)
Napájecí napětí se připojí na svorky X2. Pojistka FU1 chrání proti zkratu. Hodnota pojistky FU1 se zvolila na 1 A. Varistor V1 chrání proti přepětí. Dioda D2 chrání proti přepólování. Kondenzátory C38 a C24 vyhlazují napájecí napětí. Cívka L2 zpomaluje náběh proudu. Svorky JP5 vedou k záložní baterii. Kondenzátory C39, C40, C12 a C41 vyhlazují napájecí napětí.
Podobvod pro zdroj napětí 4,4 V (E2) Schéma zapojení vychází z katalogového zapojení E.1. Zdroj je určený primárně pro modul GSM GSM1. Napětí zdroje musí být v rozsahu napájecího napětí modulu GSM GSM1 podle sekce F.1.1. Při minimálním napájecím napětí modulu GSM GSM1 vznikají problémy popsané v sekci 4.2.5, tudíž se napětí zdroje musí navrhnout na téměř maximální napájecí napětí modulu GSM GSM1. Napětí zdroje se zvolilo na: U4 = 4, 4 V
(4.56)
Maximální výstupní proud se zvolil na: Io = 2 A 44
(4.57)
Minimální výstupní proud se zvolil na: IP EAK = 200 mA
(4.58)
Kapacita C3 se zvolila na 470 p. Frekvence spínání fsw se zvolila na 300 kHz. Z rovnice E.1 se získá R6.
R6 =
1 1 = = 67554, 75 Ω = 67, 55 kΩ (4.59) −12 C3 · f · 0, 105 470 · 10 · 300 · 103 · 0, 105
Z rovnice E.2 se zkontroluje, zda odpor rezistoru R6 vyhovuje. V12 R6
≤ 750 µA
12 ≤ 750 µA 67554, 76 177, 63 · 10−6 ≤ 750 µA 177, 63 µA ≤ 750 µA
(4.60) (4.61) (4.62) (4.63)
Odpor rezistoru R6 skutečně vyhovuje. Hodnota rezistoru R6 se zvolila na 68 k. Doba měkkého startu tSS se zvolila na 10 ms. Z rovnice E.3 se získá kapacita kondenzátoru C10:
C10 =
tSS 10 · 10−3 = 49, 51 · 10−9 = 49, 51 nF = VSST 3 · ln( 8 ) 105 · 10 Rc · ln( VSST ) 8−1,4 −1,4
(4.64)
Hodnota kondenzátoru C10 se zvolila na 47 n. Hodnoty kondenzátoru C4, rezistoru R1 a kondenzátoru C13 se zvolily experimentálně. Hodnoty rezistoru R3, rezistoru R66, kondenzátoru C29 a rezistoru R67 se zvolily experimentálně. Model kontroléru IC5 se zvolil na TPS40200. Kontrolér TPS40200 popisuje příloha E.
Katalogové zapojení pokaždé způsobovalo vypínání kontroléru IC5. Vypínání kontroléru TPS40200 může způsobovat napětí vyšší než 100 mV mezi pinem VCC a pinem ISNS podle sekce E.3, tudíž se rezistor na pinu VCC zkratoval. Hodnoty kondenzátoru C30, rezistoru R4 a rezistoru R2 se zvolily experimentálně. Z rovnice E.4 se získá maximální napětí na tranzistoru T1:
UT 1 ≥ U12
(4.65)
UT 1 ≥ 12 V
(4.66)
Maximální napětí na tranzistoru T1 se zvolilo na 60 V a maximální proud tranzistorem T1 se zvolil na 2,5 A. 45
Z rovnice E.5 lze získat maximální proud diodou D1:
ID1 ≥ Io
(4.67)
ID1 ≥ 2 A
(4.68)
Z rovnice E.6 lze získat maximální napětí na diodě D1:
UD1 ≥ U4
(4.69)
UD1 ≥ 4, 4 V
(4.70)
Maximální napětí na diodě D1 se zvolilo na 60 V a maximální proud diodou D1 se zvolil na 2 A. Cívka L1 zpomaluje náběh proudu. Z rovnice E.7 lze získat maximální proud cívkou L1:
IL1 ≥ Io + IRIP P LE
(4.71)
IL1 ≥ 2 + 0, 2
(4.72)
IL1 ≥ 2, 2 A
(4.73)
IRIP P LE =
2 Io = = 0, 2 A = 200 mA 10 10
(4.74)
Z rovnice E.9 lze získat maximální indukčnost cívky L1: V12 − V4 · tON IP EAK 12 − 4, 4 · 1, 22 · 10−6 L1 ≥ 200 · 10−3 L1 ≥ 46, 35 · 10−6 H
(4.75)
L1 ≥ 46, 35 µH
(4.78)
L1 ≥
tON =
V4 1 4, 4 1 · = · = 1, 22 · 10−6 s = 1, 22 µs fsw V12 300 · 103 12
(4.76) (4.77)
(4.79)
Hodnota cívky L1 se zvolila na 47 µH. Kondenzátory C6, C32 a C7 vyhlazují napájecí napětí. Z rovnice E.11 lze získat maximální kapacity kondenzátorů C6, C32 a C7:
46
C6 + C32 + C7 ≥
L1 · Io2 2 −V2 VOS 4
(4.80)
47 · 10−6 · 22 (100 · 10− 3)2 − 4, 42 ≥ 9, 71 · 10−6 F
C6 + C32 + C7 ≥
(4.81)
C6 + C32 + C7
(4.82) (4.83)
C6 + C32 + C7 ≥ 9, 71 µF
Hodnota kondenzátoru C6 se zvolila na 100 n, hodnota kondenzátoru C32 se zvolila na 100 µ a hodnota kondenzátoru C7 se zvolila na 1 n. Podobvod pro zdroj napětí 3 V (E3) Kondenzázory C8, C9, C11 a C31 vyhlazují napájecí napětí. Stabilizátor IC3 dodává napájecí napětí:
U3 = 3 V
4.2.8
(4.84)
DPS C2 E1
E2
C6
C4 C5
C3
E3 C7
D1
D2
D1
D2
D1
D2
D1
D2
C1
A1
A2 A2
A5
A1
A2
A5
A1
A2
A4 A4 A4 A4
A3
A6
A7
A6
A7
A3
A6
A7
A3
A6
A7
A3
B4
B1
B2 B7
B3 D3
A5
A1
A8
A5
B5 B6
Obrázek 4.10: Organizace DPS I/O karty Obrazce DPS jsou v příloze A. Návrh DPS není vůbec jednoduchý a vyžaduje značný umělecký talent. Na počátku se zkoušela funkce autoroute“ programu Eagle pro auto” matické vytvoření spojů. Výsledek byl otřesný, a proto se přešlo na ruční vytváření spojů. Výsledkem klasického návrhu DPS je sice minimální velikost DPS, ale vysoká nepřehlednost DPS. Způsob návrhu DPS pro I/O kartu není klasický a součástky se na DPS umisťovaly podle speciálních pravidel. Umístění součástek na DPS musí korespondovat s umístěním prvků na schématu zapojení; to znamená, že například dvě součástky, které jsou na schématu zapojení pod sebou, jsou pod sebou i na DPS. To umožňuje přehledné uspořádání do logických celků. Podobvody musejí náležet svému obvodu. Silové spoje musejí dodržet rozestup.
47
Všechny země se musejí svést na spodní stranu DPS pomocí prokovů, pokud je to možné. Obě strany DPS musejí být vyplněné polygonem s potenciálem země. Svorky musejí tvořit svorkovnici a musejí být na okraji DPS. Vzdálenosti mezi součástkami v podobvodu, mezi podobvody v obvodu a mezi obvody musejí být nejmenší. Diody LED musejí být u svorek. Výroba DPS Máteriál je Umatex o síle 1,5 mm. Otvory jsou prokovené. Průměry otvorů udávají průměr otvoru a nikoli průměr vrtáku. Barva nepájivého laku je červená. Plošky jsou opracované technologií pasivace MacSeal pájivým organickým materiálem, který má výborné vlastnosti proti nepříznivým vlivům a je vhodný pro SMD kvůli rovným ploškám. Výroba je na zakázku bohužel s expresním příplatkem.
4.2.9
Výdaje předmět
kusů
suma za kus [Kč]
DPS
1
9 613
Ostatní součástky
1
cca 2 000
MCU ATmega128
5
145
Programátor AVR 1
1
350
Programátor AVR 2
1
1 200
Programátor AVR 3
1
960 14 848
Celkem
Tabulka 4.2: Výdaje při návrhu I/O karty
4.3
Ovládání
Dotazy nebo odpovědi zvýrazněné tučně se implementovaly do I/O karty v době psaní tohoto textu a ostatní příkazy nebo odpovědi jsou návrhem pro budoucí implementaci.
4.3.1
Terminologie
Index záznamu je pořadí příkazu uloženého v nastavení I/O karty, používá se jako identifikátor příkazu při jeho odebírání z nastavení I/O karty. Odesilatel a dotaz Uživatel, který ovládá I/O kartu pomocí zprávy SMS nebo krátkého násobného vytočení, se nazve odesilatelem. Zpráva SMS nebo krátké násobné vytočení od odesilatele se nazve dotazem. I/O karta přijímá dotazy pouze od autorizovaných odesilatelů nebo odesilatelů s loginem ve zprávě SMS. Autorizovaný odesilatel je odesilatel, který může odesílat zprávy bez loginu. Příjemce a odpověď Uživatel, kterého I/O karta informuje pomocí diod LED, zprávy SMS nebo krátkého násobného vytočení, se nazve příjemcem. Zpráva SMS nebo krátké násobné vytočení od I/O
48
karty se nazve odpovědí. I/O karta může odeslat odpovědi libovolnému příjemci, protože příjemce byl doporučen již autorizovaným odesilatelem.
4.3.2
Zprávy SMS
Inspirací syntaxe odpovědí a příkazů pro ovládání I/O karty je syntaxe příkazů AT. Dotazy Dotaz může obsahovat konfigurační příkazy a okamžité příkazy. Konfigurační příkazy nastavují I/O kartu. I/O karta je samozřejmě konfigurovatelná. Sestavení konfigurační zprávy SMS lze provést odesláním konfigurační zprávy SMS přímo na I/O kartu nebo uložením do paměti EEPROM.
– Příkaz pro přihlášení login=; – Příkaz pro nastavení hesla neautorizovaného odesilatele heslo=; – Příkaz pro odebrání hesla neautorizovaného odesilatele heslo-; – Příkaz pro přidání události o změně vstupu vstup+,<úroveň napětí>,; – Příkaz pro odebrání události o změně vstupu vstup-; – Příkaz pro přidání události o změně výstupu vystup+<úroveň napětí>; – Příkaz pro odebrání události o změně výstupu vystup-; – Příkaz pro přidání události o nízkém kreditu kredit+; – Příkaz pro odebrání události o nízkém kreditu kredit-; – Příkaz pro přidání události o přeposlání dotazu preposlat+; – Příkaz pro odebrání události o přeposlání dotazu 49
preposlat-; – Příkaz pro přidání události o výpadku energie vypadek+; – Příkaz pro odebrání události o výpadku energie vypadek-; – Příkaz pro přidání události o sabotáži sabotaz+; – Příkaz pro odebrání události o sabotáži sabotaz-; – Příkaz pro přidání události o slabém signálu signal+; – Příkaz pro odebrání události o slabém signálu signal-; – Příkaz pro přidání autorizovaného odesilatele odesilatel+; – Příkaz pro odebrání autorizovaného odesilatele odesilatel-; – Příkaz pro nastavení kódu mobilního operátora pro zjištění výše kreditu kod=; Okamžité příkazy způsobí okamžitou akci v I/O kartě.
– Příkaz pro čtení konfigurace konfigurace; – Příkaz pro čtení vstupů vstupy; – Příkaz pro nastavení výstupu vystup=,<úroveň>; – Příkaz pro čtení výstupů výstupy; – Příkaz pro čtení kreditu 50
kredit; – Příkaz pro deaktivaci I/O karty stop; – Příkaz pro aktivaci I/O karty start; – Příkaz pro restart I/O karty restart; Odpovědi Odpovědí může být návratový kód, informace nebo událost. Návratový kód oznamuje úspěch či neúspěch vykonání příkazu na popud příkazu a přichází synchronně.
– Návratový kód o úspěšném vykonání příkazu – Návratový kód o neúspěšném vykonání příkazu Informace poskytuje textovou informaci na popud příkazu a přichází synchronně.
– Informace o konfiguraci na příkaz pro čtení konfigurace – Informace o vstupech na příkaz pro čtení vstupů – Informace o výstupech na příkaz pro čtení výstupů – Informace o kreditu na příkaz pro čtení kreditu Událost poskytuje textovou informaci na popud nepředvídatelné činnosti I/O karty a přichází asynchronně.
– Událost o změně vstupu – Událost o změně výstupu – Událost o výpadku energie – Událost o sabotáži – Událost o nízkém kreditu – Událost o slabém signálu – Událost o přeposlání dotazu
4.3.3
Krátké násobné vytočení
I/O karta může znát několik druhů krátkého násobného vytočení. Maximální počet vytočení nesmí přesáhnout hranici lidské únosnosti.
51
Dotazy I/O karta vytočení nepřijme, ale po krátké době zavěsí z důvodu úspory kreditu. Dotaz může obsahovat pouze okamžitý příkaz. Okamžité příkazy způsobí okamžitou akci v I/O kartě.
– Příkaz pro nulování všech výstupů – 1 vytočení Odpovědi Pro odpovědi ve zprávě SMS, jejíž primárním účelem není zobrazení textové informace, existuje alternativní vytočení z důvodu úspory kreditu, protože vytáčení si mobilní operátoři neúčtují. Odpovědí může být návratový kód nebo událost. Návratový kód oznamuje úspěch či neúspěch vykonání příkazu na popud příkazu a přichází synchronně.
– Návratový kód o úspěšném vykonání příkazu – 1 vytočení – Návratový kód o neúspěšném vykonání příkazu – 2 vytočení Událost poskytuje informaci na popud nepředvídatelné činnosti I/O karty a přichází asynchronně.
– Událost o výpadku energie – 3 vytočení – Událost o sabotáži – 4 vytočení – Událost o nízkém kreditu – 5 vytočení
4.4 4.4.1
Software Vývojové prostředí
Jako prostředí se zkoušelo komerční prostředí CodeVisionAVR C Compiler. Sice v prostředí komunikace s modulem UART fungovala ihned, ale k mému údivu nefungovala obyčejná standardní funkce printf, a proto se prostředí ihned zavrhlo. Člověk by čekal, že vychvalované komerční prostředí musí fungovat lépe než freeware. . . Dále se zkoušelo i prostředí AVR Studio přímo od výrobce AVR. Prostředí AVR Studio má sice velice kvalitní debugger, ale ne zrovna dobrý editor a místo svého kompilátoru používá sadu AVR Libc, která by se dala použít s lepším editorem, a proto se též zavrhlo. Definitivně se použila sada AVR Libc s kvalitním linuxovým editorem kate. Sadu AVR Libc popisuje kapitola 2. Knihovna avr-libc ze sady AVR Libc používá standardní knihovnu jazyka C pod licencí GNU, na kterou jsem zvyklý z fakulty, takže jsem si knihovnu ihned oblíbil, a to jsem se integrování sady AVR Libc obával nejvíce ze všech prostředí. Sada AVR Libc má tolik vychytávek“, jmenovitě knihovnu , že nevím, ” co bych si počal v takovém prostředí CodeVisionAVR C Compiler.
52
4.4.2
Terminologie
Příchozí data je odpověď ohraničená řetězci (znak návratu vozíku, znak nového řádku) a přichází od modulu GSM do MCU. Odpověď jsou příchozí data zbavená okrajových řetězců . Pošta je souhrnný vystihující pojem pro složitý systém příjmu dat. Dotaz je text pro modul GSM. Odchozí data je dotaz ukončený znakem a odchází od MCU do modulu GSM. Text SMS je množina příkazů ukončených znakem ;. Příkaz je prostě příkaz.
4.4.3
Činnost programu
Inicializace Zapne se modul GSM podobvodem pro hardwarové zapnutí modulu GSM. Spustí se modul GSM nastavováním pinu PWRKEY podle sekce F.4. Zjistí se stav modulu GSM přečtením pinu STATUS modulu GSM. Zesynchronizuje se modul GSM několika dotazy AT. Nastaví se výchozí telefonní seznam na telefonní seznam v kartě SIM dotazem AT+CPBS="SM". Nastaví se indikace příchozího vytočení na zobrazování telefonního čísla v události dotazem AT+CLIP=1. Nastaví se výchozí adresář zpráv SMS na adresář zpráv v kartě SIM dotazem AT+CPMS="SM". Nastaví se indikace příchodu zprávy SMS na zobrazování indexu zprávy SMS v události dotazem AT+CNMI=1,1. Nastaví se formát zpráv SMS na textový dotazem AT+CMGF=1.
Vytáčení Odchozí vytočení se provede dotazem ATD.... Příchozí vytočení se indikuje událostí RING+CLIP: ....
Zpráva SMS Odeslání zprávy se provede dotazem AT+CMGS=.... Příjem zprávy se indikuje událostí +CNMI: .... Zpráva SMS se odstraní dotazem AT+CMGD=....
53
4.4.4
Implementace
Modul <SMS.h> Modul <SMS.h> je ten modul, který obsahuje hlavní funkci main a tedy i hlavní cyklus. Funkce inicializace inicializuje modul <posta.h>, modul <prichozi.h>, modul , modul a globální proměnné. Hlavní smyčka detekuje novou akci, příchozí data, odpověď, odchozí data a kontroluje vstupy a výstupy.
Modul Modul slouží pro práci s dynamickými řetězci. Modul je nejdůležitějším modulem programu, závisí na něm ostatní moduly, a proto se ladil a testoval pár týdnů. Dynamický řetězec je řetězec alokovaný za běhu programu. Dynamický řetězec má podobu struktury datového typu T__text obsahující délku řetězce, velikost alokované paměti a řetězec. Absolutně všechny řetězce, které nejsou konstantní, ale vznikají za běhu programu, se dynamicky alokují kvůli úspoře paměti RAM a flexibilitě. Modul vychází ze standardních funkcí malloc a free, jejichž princip je stručně vysvětlený v sekci 2.2.1. Funkce text__vytvorit alokuje strukturu řetězce. Funkce text__zrusit odalokuje řetězec a strukturu řetezce. Funkce text__realloc realokuje řetězec a nahrazuje standardní funkci realloc. Standardní funkce realloc totiž z nepochopitelných důvodů způsobuje vnitřní nekonečné čekání. Funkce text__realloc není tak sofistikovaná, aby hledala volnou souvislou paměť ihned za aktuální alokovanou pamětí, jen jednoduše alokuje nový řetězec, zkopíruje starý řetězec do nového řetězce a odalokuje starý řetězec. Funkce text__vypocitat_pamet vypočítá velikost paměti potřebnou pro délku řetězce s uvažováním koncové nuly. Délka paměti je v násobcích nastavitelné konstanty, přičemž výchozí velikost konstanty je 1 kvůli úspoře paměti RAM. Větší konstanta vede k většímu obsazení paměti RAM, ale k menší frekvenci realokování řetezce. Například u přidávání pouze jednoho znaku při konstantě 10 proběhne realokace každým 10. znakem. Funkce zajistit_pamet rozhoduje o tom, zda se řetězec realokuje. Při požadované velikosti paměti řetězce větší než aktuální velikost paměti řetězce se řetězec logicky realokuje. Při požadované velikosti paměti řetězce menší než aktuální velikost paměti řetězce se řetězec realokuje také, a to kvůli úspoře paměti RAM. Při požadované velikosti paměti řetězce stejné jako aktuální velikost paměti řetězce se řetězec zbytečně nerealokuje.
Ostatní funkce napodobují funkce z knihovny <string.h> s tím rozdílem, že používají dynamické řetězce. Jak praví sekce 2.2.1, tak při použití dynamického alokování dochází ke zvláštnosti, kdy alokování dynamického řetězce neprobíhá stejným směrem jako alokování statických dat, ale směrem opačným, což při nedostatku paměti krom nedostatku paměti vede navíc ke kolizi haldy se zásobníkem vyúsťující v poškození dat. Jelikož se v implementaci vyskytly snad všechny problémy, tak samozřejmě i k této kolizi pravidelně docházelo. Po několika týdnech zjišťování jsem s údivem zjistil, že nedostek 54
paměti je způsobený dlouhými konstantními řetězci používanými při ladění, které obsadily jak paměť flash ROM, tak zároveň i paměť RAM. Celou problematiku podrobně popisuje a řeší sekce 2.2.1, a proto není třeba se tím zde zabývat. Modul <posta.h> Modul <posta.h> slouží pro obsluhu sériové linky. Řetězec UART_fronta je globální a funguje jako vyrovnávací paměť a řetězec posta_fronta je globální a funguje jako fronta přijatých dat. Příchozí znaky se přidávají do dynamického řetězce, protože v žádném případě nesmí dojít ke ztrátě znaku. Modul <posta.h> je nejproblematičtější modul programu, který prošel dlouhodobým vývojem s 3 etapami: 1. Hlavní cyklus přijímal znaky a přidával je do řetězce UART_fronta. Hlavní cyklus nestíhal přijímat znaky, protože doba zpracování hlavního cyklu roste s velikostí kódu hlavního cyklu. 2. Z toho plynulo ponaučení a zavedlo se přerušení při příjmu znaku. Funkce přerušení při příjmu přijímala znaky a přidávala je do řetězce UART_fronta. Funkce přerušení při příjmu nestíhala znaky přidávat do řetězce UART_fronta a docházelo ke ztrátě přijatých znaků, protože doba kopírování v rámci realokování řetězce UART_fronta roste s jeho délkou. 3. Z toho plynulo ponaučení a řetezec UART_fronta se nerealokuje, nýbrž má konstantní alokovanou paměť. Jelikož má řetězec UART_fronta omezenou délku, vzniká potřeba řetězec UART_fronta přesunout někam jinam. Otázkou je, kdy řetězec UART_fronta přesunout. Na první pohled by k přesunu mohlo dojít při detekci přeplnění řetězce UART_fronta. To ale není možné, protože řetězec UART_fronta nemusí být vždy plný. Tak se řetězec UART_fronta musí přesouvat v pravidelných časových intervalech, což je výzva pro časovač. Přesun se děje záměnou ukazatele na starý řetězec UART_fronta za ukazatel na prázdný nový řetězec UART_fronta, což je nejrychlejší způsob přesunu. Vzniká tak potřeba nového řetězce posta_fronta, do kterého se přidává starý řetězec UART_fronta. Funkce přerušení časovače nemusí stíhat přidávání starého řetězce UART_fronta do řetězce posta_fronta a může dojít k přetečení řetězce UART_fronta, protože doba kopírování v rámci realokování řetezce posta_fronta roste s jeho délkou. Z toho vyplývá, že při realokování libovolného řetězce se nedá zpoždění vyhnout. V této etapě se alespoň pravděpodobnost zpoždění oddálila a předpokládá se, že program stihne řetězec posta_fronta zpracovat. Funkce posta__inicializovat inicializuje modul včetně povolení všech přerušení. Funkce UART__prijem_inicializovat vytvoří řetězec UART_fronta a alokuje řetězec UART_fronta na velikost nastavitelné konstanty. Funkce UART__modul_nastavit povoluje přijímač a vysílač modulu UART vyjedničkováním bitu RXEN podle tabulky D.37 a bitu TXEN podle tabulky D.38 v registru UCSRB. Funkce UART__parametry_nastavit nastavuje rychlost 9600 Bd podle tabulky D.24 zápisem do registru UBRR, žádnou paritu vynulováním bitů UPM1:0 podle tabulky D.41 v registru UCSRC, 1 stop-bit vynulováním bitu USBS podle tabulky D.42 v registru
55
UCSRC a 8 data-bitů vyjedničkováním bitů UCSZ11:0 a vynulováním bitu UCSZ12 podle tabulky D.43 v registru UCSRB a registru UCSRC. Funkce UART__soubor_inicializovat mapuje modul UART na standardní výstup stdout a nikoli na standardní vstup stdin. Místo standardního vstupu se používá přerušení. Funkce UART__prijem_obslouzit obslouží přerušení při příjmu znaku, tedy přečte znak a přidá znak do řetězce UART_fronta. Funkce UART__putchar odešle znak na sériovou linku. Funkce se předává standardnímu výstupu a musí dodržovat předdefinovaný prototyp funkce. Funkce UART__odeslat_znak odešle znak na sériovou linku zápisem znaku do registru UDR podle tabulky D.25 při vyjedničkovaném bitu UDREN podle tabulky D.29 v registru UCSRA jak popisuje sekce D.11.5. Funkce UART__prijmout_znak přijme znak ze sériové linky přečtením znaku z registru UDR podle tabulky D.25 při vyjedničkovaném bitu RXC podle tabulky D.27 v registru UCSRA. Funkce se volá funkcí přerušení. Funkce UART__pridat_znak přidá znak do řetězce UART_fronta. Funkce se volá funkcí přerušení. Při přidávání znaku nesmí být povolené přerušení, což zajišťuje automaticky AVR při volání funkce přerušení podle sekce 2.2.2.
Na počátku vznikl problém, že se znak do řetězce UART_fronta vůbec nepřidával. Ze sekce 2.2.2 jsem zjistil, že se při zapnuté optimalizaci globální proměnná používaná mimojiné i přerušením musí deklarovat s klíčovým slovem volatile. Vypnout optimalizaci nelze, protože optimalizaci vyžaduje používaná knihovna . Funkce casovac__parametry_nastavit nastavuje režim časovače na 10bitovou modulaci PWM s korekcí fáze vyjedničkováním bitů WGM11:0 podle tabulky D.17 v registru TCCR1A, zdroj hodinového signálu dělený 256 vyjedničkováním bitu CS12 a vynulováním bitů CS11:0 podle tabulky D.19 v registru TCCR1B a vynulováním registru OCR1A. Funkce casovac__obslouzit obslouží přerušení časovače, tedy zamění ukazatel na starý řetězec UART_fronta za ukazatel na nový řetězec UART_fronta a přidá starý řetězec UART_fronta do řetězce posta_fronta. Při prázdném řetězci UART_fronta nemá vykonávání funkce smysl a končí.
Modul <parsovani.h> Modul <parsovani.h> slouží pro parsování textů. Funkce používají funkce pro práci s řezězci z modulu . Funkce prichozi__parsovat parsuje příchozí data na odpověď. Funkce prichozi__najit hledá v příchozí frontě požadovaná příchozí data.
Ostatních funkcí je mnoho.
56
Modul <prikaz.h> Modul <prikaz.h> slouží pro práci s příkazy. Příkaz specifikuje, jestli se má přidat do nastavení, odebrat z nastavení nebo přímo vykonat. Příkazy pro přidání se přidávají do nastavení v paměti EEPROM. Jelikož se s pamětí EEPROM zachází jako s úložištěm, nelze na řetězec v paměti EEPROM aplikovat funkce pro práci s řetězci; řetězec v paměti EEPROM se musí zkopírovat do pomocného řetězce, na pomocný řetězec se aplikuje funkce a pomocný řetězec se zkopíruje zpět do řetězce v paměti EEPROM. Funkce nastaveni__inicializovat přidá výchozí heslo ”1234”do nastavení. Funkce nastaveni__prikaz_pridat přidá příkaz do nastavení. Funkce nastaveni__prikaz_odebrat odebere příkaz z nastavení na základě typu a indexu příkazu. Funkce prikaz__zpracovat zpracuje přijatý příkaz.
Ostatních funkcí je mnoho. Modul <prichozi.h> Modul <prichozi.h> slouží pro práci s příchozími daty a odpověďmi. Řetězec previs_fronta je globální a funguje jako vyrovnávací paměť a řetězec prichozi_fronta je globální a funguje jako fronta příchozích dat. Funkce prichozi__inicializovat vytvoří řetězec previs_fronta a řetězec prichozi_fronta. Funkce prichozi__detekovat detekuje příchozí data neprázdným řetězcem previs_fronta nebo neprázdným řetězcem prichozi_fronta. Funkce prichozi__ziskat získá příchozí data a přidá příchozí data do řetězce prichozi_fronta. Čte se znak po znaku, aby se mohl počítat počet řetězců . Nejdříve se z řetězce previs_fronta čte možný začátek příchozích dat z předchozího volání funkce a poté z řetězce posta_fronta konec příchozích dat, aby bylo čtení souvislé. Čte se tak dlouho, dokud se nedetekuje poslední řetězec . Při detekci posledního řetězce je v řetězci posta_fronta k dispozici konec příchozích dat. Zamění se ukazatel na starý řetězec posta_fronta za ukazatel na nový řetězec posta_fronta. Jelikož se musí řetězec posta_fronta vyměnit celý, tak ve starém řetězci posta_fronta za koncem příchozích dat může být začátek dalších příchozích dat, což je důvod existence řetězce previs_fronta. Starý řetězec posta_fronta se přidá do řetězce previs_fronta, čímž se spojí možný začátek příchozích dat s koncem příchozích dat. Vyjmou se příchozí data z řetězce previs_fronta. Příchozí data se přidají do řetězce prichozi_fronta.
Program neumí řešit situaci, kdy se poruší synchronizace vlivem ztráty řetězce chybou komunikace. V tomto případě se musí program jedině restartovat. Funkce odpoved__detekovat detekuje odpověď neprázdným řetězcem prichozi_fronta. V řetězci prichozi_fronta se vyhledají požadovaná příchozí data a v případě, že se žádná příchozí data nepožadují, se vyberou první příchozí data. Příchozí data se rozparsují na odpověď.
57
Funkce odpoved__zpracovat zpracuje odpověď. Na základě typu odpovědi se odpověď zpracuje individuálně.
Modul Modul slouží pro práci s odchozími daty a dotazy. Modul Modul slouží pro práci se vstupy a výstupy. Proměnná vstupy je globální a indikuje předchozí úrovně napětí na vtupech a proměnná vystupy je globální a indikuje předchozí úrovně napětí na výstupech. Úroveň napětí na 1 vstupu stačí uložit do jednoho bitu, takže úrovně napětí na 8 vstupech stačí uložit do 8 bitů, tedy do proměnné datového typu uint8_t. Funkce brana__inicializovat inicializuje proměnnou vstupy a proměnnou vystupy. Funkce brana__zkontrolovat detekuje změnu úrovní napětí na vstupech či výstupech. Přečtou se úrovně napětí na vstupech a výstupech. Při odlišné proměnné vstupy či proměnné vystupy se detekovala změna úrovní napětí na vtupech či výstupech. Při žádném nastavení nemá vykonávání funkce smysl a končí. Prochází se seznamem příkazů v nastavení a při shodě ID vstupu či výstupu v příkazu a ID vstupu či výstupu a úrovně napětí v příkazu a úrovně napětí se odešle zpráva SMS. Do proměnné vstupy se uloží aktuální úrovně napětí na vstupech a do proměnné vystupy se uloží aktuální úrovně napětí na výstupech. Funkce brana__vstupy_precist uloží úrovně napětí na vstupech do proměnné datového typu uint8_t. Funkce brana__vystupy_precist uloží úrovně napětí na výstupech do proměnné datového typu uint8_t. Funkce brana__vystup_nastavit nastaví úroveň napětí na výstupu. Funkce brana__vystup__info_sestavit sestaví obsah zprávy SMS pro výstup. Funkce brana__vstup__info_sestavit sestaví obsah zprávy SMS pro vstup. Funkce brana__vstup__info_poslat odešle zprávu SMS pro vstup. Funkce brana__vystup__info_poslat odešle zprávu SMS pro výstup.
Modul Modul slouží pro manipulaci s hardwarem MCU. Funkce pin_vystupni nastavuje pin jako výstupní. Funkce pin_vstupni nastavuje pin jako vstupní. Funkce pin_invertovat invertuje úroveň napětí na pinu. Funkce pin_zapsat nastavuje uroveň napětí na pinu.
58
Funkce pin_precist přečte úroveň napětí na pinu. Funkce zapsat_do_EEPROM zapíše řetězec do paměti EEPROM a nahrazuje standardní makro eeprom_write_block. Standardní makro eeprom_write_block totiž nefungovalo. Funkce precist_z_EEPROM přečte řetězec z paměti EEPROM a nahrazuje standardní makro eeprom_read_block. Standardní makro eeprom_read_block totiž očekává délku řetězce, která není předem známá.
59
Kapitola 5
Závěr Závěrem bych zhodnotil průběh mé práce. V první etapě jsem testoval modul GSM obvodu pro komunikaci se sítí GSM, operační zesilovač obvodu pro detekci vstupního napětí a napěťový kontrolér podobvodu pro zdroj napětí 4,4 V na univerzální DPS. Zapojení modulu GSM přes drobné potíže s převodníkem USB-UART fungovalo, odesílání zpráv SMS, vytáčení a spoustu dalších funkcí se přes terminál počítače dařilo. Zapojení operačního zesilovače fungovalo bez problémů. Zapojení napěťového kontroléru pokaždé s novými součástkami nefungovalo ani podesáté. V druhé etapě jsem se učil vytvářet složitější schémata zapojení v programu Eagle včetně používání sběrnic. Po úspěšném ovládnutí programu Eagle jsem navrhoval schéma zapojení. Většinu času jsem trávil vytvářením nové knihovny součástek pro program Eagle, protože spoustu součástek jsem bohužel ve standardních knihovnách nenašel. Přesto, že napěťový kontrolér na univerzální DPS nefungoval, zariskoval jsem a zakomponoval jsem napěťový kontrolér do schématu zapojení. Po několikanásobné kontrole schématu zapojení a estetického vzhledu jsem přešel k etapě druhé. Ve třetí etapě jsem navrhoval DPS. Nejdříve jsem zkoušel automatické vytváření spojů pomocí autoroute“, ale výsledek byl otřesný, tak jsem navrhoval spoje ručně. Díky ručnímu ” návrhu spojů vypadá DPS velice dobře a přehledně. Při návrhu jsem nepokládal součástky na spodní stranu, protože v tom nejsem zkušený. Ve čtvrté etapě jsem zkoušel experimentovat s dočasným MCU ATmega8. MCU ATmega8 jsem vybral proto, že je ve vývodovém pouzdru a dá se zasunout do nepájivého pole. Při zaplnění paměti ROM MCU ATmega8 jsem už musel přejít na aktuální MCU ATmega128, přičemž jsem musel na vývody naletovat vodiče, které poté vedly do nepájivého pole. V páté etapě jsem si nechal vyrobit DPS a osadil jsem ji. Zjistil jsem, že DPS má několik chyb. Umístění plošek pro pouzdro karty SIM neodpovídalo vývodům pouzdra, tak jsem vývody zkrátil. Kvůli reorganizaci napájecích napětí jsem nepoužil třetí zdroj. Plošky pro operační zesilovač neodpovídaly zapojení pouzdra, protože jsem se spletl při vytváření knihovny součástek. Proto jsem upravil schéma zapojení a návrh DPS. Jelikož jsem kvůli vysoké ceně staré verze DPS už neměl finance, tak jsem si novou verzi DPS vyrobit nenechal, tudíž I/O karta má starou verzi DPS s opravami. Technická zpráva novou verzi DPS dokumentuje. Nejnovější verze DPS je na CD. K mému překvapení napěťový kontrolér, který na univerzální DPS nefungoval, fungoval, zřejmě je hodně citlivý. V šesté etapě jsem se pustil do programování softwaru. Dopustil jsem pár základních chyb, které by nenastaly, kdybych si přečetl manuál celý. Neuvedl jsem klíčové slovo volatile u globální proměnné, ke které se přistupuje z funkce přerušení. Konstantní řetězce 60
zaplňovaly celou paměť RAM. S pomocí manuálu jsem vše napravil. Často program nestíhal přijímat znaky ze sériové linky kvůli nevyhnutelným časovým prodlevám v programu, což je nepřípustné. Proto bylo velkou výzvou udělat sofistikovaný příjem znaků ze sériové linky, který by fungoval. Nakonec se stal nejpropracovanější částí programu. Do I/O karty jsem implementoval základní funkce zvýrazněné v sekci 4.3. Nezvýrazněné funkce by mohly být inspirací pro budoucí vylepšení I/O karty. Jsem rád, že jsem si krom MCU Microchip PIC z mládí vyzkoušel i pravý MCU RISC AVR.
61
Literatura [1] Atmel Corporation, San Jose, USA: ATmega128(L). červen 2008, revize 2467R-06/08. URL [2] BARAN, I.: Rs232 communication (sk).svg. [online], duben 2008, citováno 2009-05-15. URL [3] Free Software Foundation, Inc., Boston, USA: avr-libc 1.6.5. březen 2009. URL [4] General Packet Radio Service. [online], duben 2009, citováno 2009-05-15. URL [5] Global System for Mobile Communications. [online], duben 2009, citováno 2009-05-15. URL [6] HANÁČEK, P.: Bezdrátové a mobilní sítě – GSM. Brno, Česká republika, září 2008. [7] MITOŠINKA, P.: Transport krátkých textových zpráv SMS v síti GSM. [online], prosinec 1998, citováno 2009-05-15. URL [8] National Semiconductor Corporation: LM124/LM224/LM324/LM2902. srpen 2000. [9] O2 NA!VÍC. [online], citováno 2009-05-19. URL [10] OLMR, V.: HW server představuje – Sériová linka RS-232. [online], prosinec 2005, citováno 2009-05-15. URL [11] RS-232. [online], květen 2009, citováno 2009-05-15. URL [12] SCHWARZ, J.; RŮŽIČKA, R.; STRNADEL, J.: Mikroprocesorové a vestavěné systémy. Brno, Česká republika, leden 2006. [13] SHI, C.: SIM300DZ Hardware Design. SIMCOM Ltd., Shanghai, Čína, leden 2007. 62
[14] Short message service. [online], květen 2009, citováno 2009-05-15. URL [15] SIM karta. [online], květen 2009, citováno 2009-05-15. URL [16] SMS and the PDU format. [online], citováno 2009-05-15. URL [17] STROLENÝ, J.: Srovnávací tabulky GSM telefonů. [online], listopad 2006, citováno 2009-05-15. URL [18] Texas Instruments Incorporated, Dallas, Texas: TPS40200. listopad 2008. URL [19] Vyhláška o odborné způsobilosti v elektrotechnice. [online], citováno 2009-05-19. URL [20] YONGJUN, F.: SIM300D AT Command Set. SIMCOM Ltd., Shanghai, Čína, březen 2006.
63
Příloha A
DPS I/O karty
Obrázek A.1: Obrazec vrchní strany DPS I/O karty
64
Obrázek A.2: Obrazec spodní strany DPS I/O karty
65
Obrázek A.3: Osazení vrchní strany DPS I/O karty
66
Příloha B
Sériové rozhraní Tato příloha popisuje vlastnosti sériové linky, která se použila v práci.
B.1
Rychlost
Přenos dat probíhá pevně nastavenou rychlostí. Rychlost má jednotku 1 Baud. Baud udává počet změn signálu za sekundu. Do jedné signálové změny lze zakódovat i více než jeden bit, a proto nelze slučovat b/s s Baudem. Jednotka Baud se pojmenovala po Jean-MauriceÉmile Baudotovi (1845 – 1903). [10]
B.2
Duplex
Plně-duplexní přenos dat – Přenos dat ze zařízení DTE do zařízení DCE dedikovaným vodičem a ze zařízení DTE do zařízení DCE dedikovaným vodičem. Polo-duplexní přenos dat – Přenos dat ze zařízení DTE do zařízení DCE nebo ze zařízení DCE do zařízení DTE tím samým vodičem.
B.3
Zařízení podle směru přenosu dat
Vysílač – Zařízení, které odesílá data. Přijímač – Zařízení, které přijímá data.
B.4
Synchronní přenos dat
Synchronní přenos dat vyžaduje přídavný vodič pro přenos hodinového signálu. Přenášenými daty mohou být data-bity nebo znak SYN. Synchronizaci zajišťuje občasný přenos znaku SYN.
B.4.1
Znak SYN
SYN je znak zajišťující synchronizaci mezi zařízením DCE a zařízením DTE.
67
B.5
Asynchronní přenos dat
Přenášenými daty jsou rámce. Synchronizaci zajišťuje každý přenos start-bitu a stop-bitu rámce [1].
B.5.1
Rámec doporučení RS-232
Rámec obsahuje start-bit, data-bity, volitelně paritní bit, a stop-bity.
Obrázek B.1: Rámec doporučení RS-232 [2] Start-bit Start-bit označuje začátek rámce a jeho sestupná hrana zajišťuje synchronizaci [10]. Startbit je v opačné úrovni napětí než klid, tedy v úrovni L. Data-bity Data-bit je bit uživatelských dat. Bit LSB je odeslaný jako první a bit MSB je odeslaný jako poslední. 5 data-bitů – Pro zpětnou kompatibilitu s Baudot kódem. 6 data-bitů 7 data-bitů – Pro zpětnou kompatibilitu s tabulkou ASCII. 8 data-bitů – Pro moderní zařízení. 9 data-bitů
Parita Paritní bit zajišťuje nejjednodušší, ale nespolehlivé, zabezpečení data-bitů. Parita NP je žádná. Parita EP je sudá. Paritní se nastaví tak, aby součet bitů v úrovni H v data-bitech a paritního bitu byl sudý. Parita OP je lichá. Paritní bit se nastaví tak, aby součet bitů v úrovni H v data-bitech a paritního bitu byl lichý. Lichá parita je nejspolehlivější. Parita SP je nulová. Paritní bit je v úrovni L. Nejedná se přesně o paritu, ale o simulaci 8 data-bitů při 7 data-bitech kvůli kompatibilitě s 8 data-bity. Parita MP je jedničková. Paritní bit je v úrovni H. Nejedná se přesně o paritu, ale o simulaci 8 data-bitů při 7 data-bitech kvůli kompatibilitě s 8 data-bity.
68
Stop-bity Stop-bit označuje konec rámce, jeho vzestupná hrana zajišťuje synchronizaci a zároveň zajišťuje pro přijímač dobu potřebnou pro zpracovávání data-bitů [10]. Stop-bit je ve stejné úrovni napětí jako klid, tedy v úrovni H. 1 stop-bit – Pro moderní přijímače. 1,5 stop-bitů 2 stop-bity – Pro pomalejší přijímače, které vyžadují větší dobu potřebnou pro zpracovávání data-bitů.
B.6
Doporučení RS-232
Doporučení RS-232 je doporučení pro sériové rozhraní s asynchronním a plně-duplexním přenosem dat. Doporučení RS-232 definuje sdružení EIA.
B.6.1
Definuje
Elektrické charakteristiky
– Úrovně napětí – Přenosová rychlost – Časování signálů – Sledovací rychlost signálů – Úrovně výdržného napětí – Zkratové chování – Maximální kapacitní odpor Mechanické charakteristiky
– Konektory – Zapojení vodičů ke konektoru – Časování Funkce jednotlivých vodičů Podmnožina vodičů pro dálkové ovládání
B.6.2
Nedefinuje
Kódování Rámec
– Start-bit – Data-bity – Stop-bity 69
– Paritní bity Protokoly pro detekci chyb Algoritmy pro kompresi dat Rychlost přenosu dat (doporučení RS-232 definuje pouze rychlost menší než 20,000 b/s) Napájení zařízení Délka kabelu
B.6.3
Omezení
Úrovně napětí jsou vysoké a nejsou kompatibilní s logikou TTL. Definice konektorů nejsou jednotné. U zařízení musí být rozhodnuto, zda se navrhne jako zařízení DCE nebo zařízení DTE. Napájení zařízení není definováno. Malý proud lze však získat z vodiče DTR a vodiče RTS stejně jako to dělá počítačová myš [11]. Konektory nejsou moderní.
B.6.4
Úrovně napětí
Pro větší odolnost proti rušení se data přenáší větším napětím, než je zvykem u logiky TTL [10]. úroveň
vysílač
přijímač
funkce
L H
5 V – 15 V
3 V – 25 V
vypnuto
-5 V – -15 V
-3 V – -25 V
zapnuto
nedefinovaná
-3 V – 3 V
Tabulka B.1: Úrovně napětí doporučení RS-232 [10] Z tabulky B.1 je patrné, že nulová úroveň napětí není platná. Zařízení musí odolat zkratu mezi vodiči. Na všech vodičích je klid v úrovni H z technologického a historického původu [12, strana 50].
Obrázek B.2: Úrovně napětí doporučení RS-232
70
B.6.5
Zařízení
Zařízení podle účelu Zařízení DTE – Terminál. Zařízení DCE – Modem.
B.6.6
Vodiče jen pro modemy
Vodič DCD Vodič DCD přenáší stav nosného kmitočtu. Směr je ze zařízení DCE do zařízení DTE. DCD
funkce
0
Na telefonní lince je nosný kmitočet.
1
Na telefonní lince není nosný kmitočet.
Tabulka B.2: Vodič DCD doporučení RS-232 Vodič RI Vodič RI přenáší stav zvonění. Směr je ze zařízení DCE do zařízení DTE. funkce
RI 0
Na telefonní lince je signál zvonění.
1
Na telefonní lince není signál zvonění.
Tabulka B.3: Vodič RI doporučení RS-232
B.6.7
Vodiče pro přenos dat
Vodič RXD Vodič RXD přenáší data. Směr je ze zařízení DCE do zařízení DTE. RXD
funkce
x
Vodič RXD přenáší data ze zařízení DCE do zařízení DTE.
1
Vodič RXD nepřenáší data ze zařízení DCE do zařízení DTE.
Tabulka B.4: Vodič RXD doporučení RS-232 Vodič TXD Vodič TXD přenáší data. Směr je ze zařízení DTE do zařízení DCE. TXD
funkce
x
Vodič TXD přenáší data ze zařízení DTE do zařízení DCE.
1
Vodič TXD nepřenáší data ze zařízení DTE do zařízení DCE.
Tabulka B.5: Vodič TXD doporučení RS-232 Vodič SGND Vodič SGND je signálová zem.
71
B.6.8
Vodiče pro přenos stavu připravenosti zařízení
Vodič DTR Vodič DTR přenáší stav připravenosti zařízení DTE. Směr je ze zařízení DTE do zařízení DCE. DTR
funkce
0
Zařízení DTE je připraveno.
1
Zařízení DTE není připraveno.
Tabulka B.6: Vodič DTR doporučení RS-232 Vodič DSR Vodič DSR přenáší stav připravenosti zařízení DCE. Směr je ze zařízení DCE do zařízení DTE. DSR
funkce
0
Zařízení DCE je připraveno.
1
Zařízení DCE není připraveno.
Tabulka B.7: Vodič DSR doporučení RS-232
B.6.9
Vodiče pro hardwarové řízení toku ze zařízení DTE do zařízení DCE
Řízení toku dat pomocí vodičů vyžaduje minimálně 5-vodičové zapojení. Vodič RTS Vodič RTS přenáší stav připravenosti zařízení DTE k odeslání dat. Směr je ze zařízení DTE do zařízení DCE. [11] RTS
funkce
0
Zařízení DTE chce odeslat data.
1
Zařízení DTE nechce odeslat data.
Tabulka B.8: Vodič RTS doporučení RS-232 Vodič CTS Vodič CTS přenáší stav připravenosti zařízení DCE k příjmu dat. Vodič CTS je odpovědí na vodič RTS. Směr je ze zařízení DCE do zařízení DTE. [11] CTS
funkce
0
Zařízení DCE může přijmout data.
1
Zařízení DCE nemůže přijmout data.
Tabulka B.9: Vodič CTS doporučení RS-232
B.6.10
Vodiče pro nestandardní hardwarové řízení obousměrného toku dat
Pro nestandardní řízení obousměrného toku dat je též vžitý termín handshaking [11]. 72
Vodič RTS Vodič RTS přenáší stav připravenosti zařízení DTE k příjmu dat. Vodičem RTS se simuluje vodič RTR. Směr je ze zařízení DTE do zařízení DCE. [11] RTS
funkce
0
Zařízení DTE může přijmout data.
1
Zařízení DTE nemůže přijmout data.
Tabulka B.10: Vodič RTS nestandardního řízení toku doporučení RS-232 Vodič CTS Vodič CTS přenáší stav připravenosti zařízení DCE k příjmu dat. Směr je ze zařízení DCE do zařízení DTE. [11] CTS
funkce
0
Zařízení DCE může přijmout data.
1
Zařízení DCE nemůže přijmout data.
Tabulka B.11: Vodič CTS nestandardního řízení toku doporučení RS-232
B.6.11
Softwarové řízení toku dat
Softwarové řízení toku dat využívá dvou speciálních znaků. Směr přenosu speciálních znaků je opačný než směr přenosu dat. Vodič RXD přenáší speciální znak ze zařízení DCE do zařízení DTE v případě, že vodič TXD přenáší data ze zařízení DTE do zařízení DCE. Vodič TXD přenáší speciální znak ze zařízení DTE do zařízení DCE v případě, že vodič RXD přenáší data ze zařízení DCE do zařízení DTE. Řízení toku dat pomocí speciálních znaků vyžaduje minimálně 3-vodičové sériové rozhraní. Softwarové řízení toku je pomalejší než hardwarové řízení toku. Znak XON – Přijímač může přijmout data. Znak XOFF – Přijímač nemůže přijmout data.
B.6.12
Propojení zařízení DTE a zařízení DCE DTE
DCE
RXD
TXD
TXD
RXD
GND
GND
CD + DTR + DSR
-
-
CD + DTR + DSR
Tabulka B.12: 3vodičové propojení zařízení DTE a zařízení DCE doporučení RS-232 DTE
DCE
RXD
TXD
TXD
RXD
GND
GND
RTS
CTS
CTS
RTS
Tabulka B.13: 5vodičové propojení zařízení DTE a zařízení DCE doporučení RS-232 73
DTE
DCE
TXD TXD RXD GND GND RTS CTS CTS RTS DTR DSR DSR DTR Tabulka B.14: 7vodičové propojení zařízení DTE a zařízení DCE doporučení RS-232 RXD
B.6.13
Délka
Maximální délka vodičů je 15 m při rychlosti 20 kb/s. Délka vodičů může být větší při snížení rychlosti díky větší odolnosti vůči velké kapacitě vedení. Pro větší délku vodičů je výhodnější používat doporučení RS-422 nebo doporučení EIA/RS-485. [10] rychlost [Bd]
maximální délka [m]
19200
15
9600
150
4800
300
2400
900
Tabulka B.15: Maximální délka vodičů doporučení RS-232 [10]
B.6.14
Převod úrovní napětí doporučení RS-232 na úrovně logiky TTL
Úrovně napětí nejsou slučitelné s žádnou logikou, tudíž musí být použit převodník úrovní napětí. Nejpoužívanějším převodníkem napětí je MAX232 firmy Maxim, který převádí úrovni L na 3,15 V a úrovni H na -3,15 V.
B.6.15
Aplikace
UART UART je zařízení pro převod mezi paralelními daty a sériovým rozhraním s asynchronním přenosem dat podle doporučení RS-232. USART USART je zařízení pro převod mezi paralelními daty a sériovým rozhraním se synchronním nebo asynchronním přenosem dat. Sériový port Sériový port je modul UART v počítači.
B.7
Doporučení EIA/TIA-232-E
Doporučení EIA/TIA-232-E řeší některé nedostatky doporučení RS-232, hlavně hardwarové řízení obousměrného toku dat. Doporučení EIA/TIA-232-E definuje sdružení EIA a sdružení TIA. 74
B.7.1
Vodiče pro hardwarové řízení obousměrného toku dat
Pro řízení obousměrného toku dat je též vžitý termín handshaking. Vodič RTR Vodič RTR přenáší stav připravenosti zařízení DTE k příjmu dat. Směr je z zařízení DTE do zařízení DCE. [11] RTR 0 1
funkce Zařízení DTE může přijmout data. Zařízení DTE nemůže přijmout data.
Tabulka B.16: Vodič RTR doporučení EIA/TIA-232-E Vodič CTS Vodič CTS přenáší stav připravenosti zařízení DCE k příjmu dat. Směr je z zařízení DCE do zařízení DTE. [11] CTS 0 1
funkce Zařízení DCE může přijmout data. Zařízení DCE nemůže přijmout data.
Tabulka B.17: Vodič CTS doporučení EIA/TIA-232-E
B.8
Doporučení EIA/RS-485
Doporučení EIA/RS-485 je doporučení pro sériové rozhraní s asynchronním a polo-duplexním přenosem dat. Doporučení RS-485 definuje sdružení EIA.
75
Příloha C
Síť GSM C.1
Nevýhody
Neexistuje šifrování dat od začátku do konce. Intenzivní elektromagnetické vyzařování. Možnost zneužití osobních dat. Velká složitost systému.
76
C.1.1
Mobilní telefon rychlost
počet data-bitů
počet stop-bitů
parita
napětí
Ericsson 868 A1018s A2628s GA628
5
GF768 GF788 SH888
9600
8
1
N
R310s T10s T18e T20e
3
T28s
5
T65 Siemens A50 A60 A65
19200
C10 C25
57600
C35 C45
19200
C55 C62
115200
C70
3
C75
8
1
N
1
N
M35 M50 MT50
19200
S10 S25 S35 Alcatel 501
19200
8
3,6
Tabulka C.1: Mobilní telefony s modemem [17]
C.2
Karta SIM
Karta SIM zavádí nezávislost na výrobci zařízení ME [6, s. 4]. Kartu SIM definuje doporučení ETSI GSM 11.11. Karta SIM obsahuje zakázané PLMN, BCCH, IMSI (MCC, MNC, MSIN), LAI, PIN, PUK, MSISDN, klíče, účastnické informace, zprávy SMS, adresáře, SIM Toolkit a lokaci [15].
77
C.2.1
Rozhraní
Data – data. Vcc – napájení. Vpp – programovací napětí. V moderních kartách SIM se už nepoužívá. Res – reset. CLK – hodinový signál. GND – zem.
Ostatní kontakty jsou rezervovány.
C.3
Služba GPRS
GPRS je služba pro přenos paketů mezi mobilním telefonem a internetem. Službu GPRS definuje sdružení 3GPP, dříve sdružení ETSI. [4]
C.3.1
Třídy
Třída definuje maximální počet využitelných slotů. A – umožňuje přenos hlasu. B – umožňuje přenos hlasu nebo dat. C – umožňuje přenos data.
78
Příloha D
MCU ATmega128 Tato příloha popisuje vybrané funkce MCU ATmega128 [1], které se použily v práci. ATmega128 je 8bitový MCU založený na rozšířené architektuře RISC. Modul ISP umožňuje přeprogramování paměti flash ROM konvenčním programátorem nebo zavaděčem běžícím v jádře. MCU ze softwaru podporuje kompilátory jazyka C, assembler, ladící prostředky, simulátory a emulátory.
D.1
Zapojení
Obrázek D.1: Piny MCU ATmega128 [1, s. 2]
D.2
Kompatibilita s MCU ATmega103
MCU ATmega128 se stává kompatibilním s MCU ATmega103 vynulováním pojistky M103C v bloku rozšířených pojistek. [1, s. 5] 2 × modul USART −→ 1 × modul USART, synchronní/asynchronní −→ asynchronní, UBRR −→ Registr UBRRL, 1 × fronta FIFO −→ 0 × fronta FIFO (data přichází rychleji).
79
2 × 16bitový časovač/čítač −→ 1 × 16bitový časovač/čítač, 3 × komparátor −→ 2 × komparátor. Podpora dvouvodičového sériového rozhraní. −→ Dvouvodičové sériové rozhraní není podporováno. Port C je I/O. −→ Port C je pouze výstupní. Port G není plnohodnotným I/O portem. Port F je vstupní pouze při modulu ADC. Není možné nastavit frekvenci interního oscilátoru RC.
D.3
Jádro
Architektura AVR je založená na Harvardské koncepci. Harvardská architektura má oddělenou paměť i sběrnici pro program i data. Instrukce se vykonávají v jednoúrovňovém zřetězení. Zatímco se vykonává první instrukce, druhá instrukce se načítá z paměti programu. Tento koncept umožňuje vykonávání instrukcí v 1 hodinovém cyklu, takže dosahuje 1 MIPS za 1 MHz. [1, s. 10]
D.3.1
Jednotka ALU
Jednotka ALU má přímý přístup k 32 8bitovým registrům všeobecného použití. Instrukce jsou rozdělené do tří kategorií – aritmetické, logické a bitové. Řada ATmega má navíc hardwarovou násobičku pro celočíselnou a desetinnou aritmetiku, u které vypočet zabere pouhé 2 hodinové cykly. [1, s. 11]
D.3.2
Registry
Registr SREG Registr SREG obsahuje výsledek právě vykonané aritmetické operace a aktualizuje se po všech operacích. Při přerušení se registr SREG automaticky neukládá a při ukončení subrutiny přerušení automaticky neobnovuje, to musí program. [1, s. 11] SREG index
7
6
bit R/W
5
4
3
2
1
0
I
T
H
V
V
N
Z
C
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Tabulka D.1: Registr SREG [1, s. 11] Bit I Je vynulován hardwarem po přerušení a vyjedničkuje se instrukcí RETI. Bit I se ručně vynuluje instrukcí CLI a vyjedničkuje instrukcí SEI. [1, s. 12] funkce
I 0
Všechna přerušení jsou zakázaná.
1
Všechna přerušení jsou povolená.
Tabulka D.2: Bit I 80
Bit T
Úložiště pro zdroj nebo cíl u bitových instrukcí BLD a instrukcí BST. [1, s. 12]
Bit H
Indikuje poloviční přenos u některých aritmetických operací. [1, s. 12]
Bit S
Je vždy operace XOR mezi bitem N a bitem V. [1, s. 12]
Bit V
Podporuje dvojkový doplněk. [1, s. 12]
Bit N
Indikuje negativní výsledek u aritmetických a logických operací. [1, s. 12]
Bit Z
Indikuje nulový výsledek u aritmetických a logických operací. [1, s. 12]
Bit C
Indikuje přenos u aritmetických a logických operací. [1, s. 12]
D.3.3
Registr SP
Zásobník se používá hlavně pro ukládání dočasných dat jako jsou lokální proměnné a data při volání subrutin a subrutin přerušení. Zásobník se nachází v paměti SRAM. Velikost zásobníku je limitovaná pouze velikostí a zaplněním paměti SRAM. Registr SP vždy ukazuje na vrchol zásobníku. Zásobník je implementovaný jako klesající. Příkaz PUSH snižuje registr SP a příkaz POP zvyšuje registr SP. Registr SP ukazuje do paměti SRAM, kde jsou umístěné subrutiny a subrutiny přerušení. Vrchol zásobníku v paměti SRAM musí definovat program před voláním subrutin a povolením všech přerušení, přičemž musí být vyšší než $60. Registr SP se sníží o 1, když se do zásobníku uloží data instrukcí PUSH a sníží se o 2, když se do zásobníku uloží návratové adresy při volání subrutiny nebo volání subrutiny přerušení. Registr SP se zvýší o 1, když se ze zásobníku vyjmou data instrukcí POP a zvýší se o 2, když se ze zásobníku vyjmou návratové adresy při ukončení subrutiny instrukcí RET nebo ukončení subrutiny přerušení instrukcí RETI. Registr SP je implementovaný jako 8bitový registr SPH a registr SPL, přičemž je převážně využitý pouze registr SPL. [1, s. 14]
D.4
Reset a přerušení
Každé přerušení se nastavuje individuálně. Nezávisle na programu se všechna přerušení mohou zakázat vyjedničkováním bitu BLB02 nebo bitu BLB12 v bloku zámků paměti. Všechna přerušení se povolují vyjedničkováním bitu I v registru SREG. Všechna přerušení mají svůj vektor přerušení. Priorita přerušení je daná adresou vektoru přerušení, přičemž nižší adresa vektoru přerušení má vyšší prioritu. Vektor přerušení RESET má nejvyšší prioritu a hned za ním je vektor přerušení INT0. Při přerušení se automaticky vynuluje bit I, tudíž se zakážou všechna přerušení. Jedině program může toto chování pozměnit tak, že jiné přerušení může přerušit aktuální vykonávání subrutiny přerušení. Při přerušení během vykonávání instrukce s více hodinovými cykly se před voláním subrutiny přerušení tato instrukce dokončí. Při volání subrutiny přerušení se na zásobník uloží registr PC. Při ukončování subrutiny přerušení se ze zásobníku vyjme hodnota PC a vyjedničkuje bit I, tudíž se opět povolí všechna přerušení. Volání subrutiny přerušení včetně uložení registru PC na zásobník zabere minimálně 4 hodinové cykly. Vektor přerušení je normální skok na subrutinu přerušení, který zabere 81
3 hodinové cykly. Poté se vykonává subrutina přerušení. Ukončování subrutiny přerušení včetně vyjmutí hodnoty PC ze zásobníku zabere 4 hodinové cykly. [1, s. 15-17]
D.5
Paměti
Architektura AVR obsahuje hned 3 typy pamětí, jsou to paměť flash ROM, paměť SRAM a paměť EEPROM.
D.5.1
Paměť flash ROM
Paměť flash ROM slouží jako paměť programu a jako paměť dat. MCU ATmega128 obsahuje, jak už název napovídá, 128 kB paměti flash ROM. Jelikož jsou všechny instrukce 16bitové nebo 32bitové, paměť flash ROM je organizovaná jako 64 k × 16. Paměť programu obsahuje sekci se zavaděčem a sekci s programem. Každá sekce má svoji pojistku proti vyčtení či přepsání. Paměť flash ROM má životnost 10 000 zápisových či mazacích cyklů. Registr PC je 16bitový, tudíž adresuje 64 kB paměti. [1, s. 18]
D.5.2
Paměť SRAM
Maximální velikost paměti SRAM je 4 kB a maximální velikost externí paměti SRAM je 64 kB, tudíž maximální velikost celkové paměti SRAM je 68 kB. Při nedostatku paměti SRAM se může připojit externí paměť SRAM. Do externí i interní paměti SRAM se přistupuje stejnými instrukcemi. Externí paměť SRAM se povoluje vyjedničkováním bitu SRE v registru MCUCR. Přistupování do externí paměti SRAM vezme navíc 1 hodinový cyklus. Při umístění zásobníku do externí paměti SRAM vezme volání subrutiny, volání subrutiny přerušení, ukončení subrutiny a ukončení subrutiny přerušení navíc 3 hodinové cykly, protože se ukládá a vyjímá 2bajtový registr PC. [1, s. 19]
D.5.3
Paměť EEPROM
Paměť EEPROM slouží jako úložiště dat. ATmega128 obsahuje 4 kB paměti EEPROM. Paměť EEPROM je organizovaná po bajtech. Paměť EEPROM má životnost 100 000 zápisových či mazacích cyklů. Při nízkém napájecím napětí se data do paměti EEPROM nemusejí úspěšně zapsat. [1, s. 21]
D.6 D.6.1
Zdroj hodinového signálu Krystal
Pin XTAL1 je vstupní a pin XTAL2 je výstupní. Zesilovač hodinového signálu má dva režimy, které se nastavují bitem CKOPT v bloku vyšších pojistek. První režim povoluje úplné kmitání, má vysoký frekvenční rozsah 16 MHz a je vhodný pro rušivá prostředí nebo případ, kdy pin XTAL2 tvoří zdroj hodinového signálu. Druhý režim povoluje omezené kmitání, má nízký frekvenční rozsah 8 MHz a není vhodný pro případ, kdy pin XTAL2 tvoří zdroj hodinového signálu. Nízký frekvenční rozsah vede k nižší spotřebě. Hodnoty kondenzátoru C1 a kondenzátoru C2 by měly být vždy stejné. Optimální hodnota kondenzátoru C1 a kondenzátoru C2 závisí na použitém krystalu, velikosti kapacitní reaktance a množství rušení. [1, s. 39]
82
Obrázek D.2: Doporučené zapojení krystalu k MCU ATmega128 [1, s. 39]
D.6.2
Kalibrovaný oscilátor RC
Kalibrovaný oscilátor RC poskytuje hodinový signál o frekvenci 1, 2, 4, nebo 8 MHz. Bit CKOPT v bloku vyšších pojistek by měl být vyjedničkovaný. [1, s. 42]
D.7
Reset
Během resetu se všechny registry a I/O porty nastaví na výchozí hodnoty, a skáče na vektor přerušení RESET. Po resetu se spustí čítač, který čeká na stabilní stav MCU. [1, s. 50]
D.7.1
Externí reset
MCU se restartuje, pokud je na pinu ~RESET úroveň L po určitou dobu. [1, s. 50]
D.7.2
Reset hlídacím psem
MCU se restartuje při expiraci periody časovače hlídacího psa po dobu jednoho hodinového cyklu. [1, s. 50]
D.7.3
Reset rozhraním JTAG
MCU se restartuje při programování přes rozhraní JTAG. [1, s. 50]
D.8
Zámky a pojistky
Zámky a pojistky nastavují MCU. Zámky a pojistky jsou uložené ve 4 8bitových buňkách jiné paměti EEPROM. Z technických důvodů se buňky paměti EEPROM mazají přepsáním do úrovně H, tudíž nenaprogramované zámky či pojistky mají úroveň H [3, s. 80]. Zámky a pojistky se programují zvlášť. Chybné nastavení pojistek může zablokovat MCU.
D.8.1
Bloky
D.8.2
Blok zámků paměti Zámky paměti index bit R/W
výchozí hodnota
7
6
5
4
3
2
1
0
-
-
BLB12
BLB11
BLB02
BLB01
LB2
LB1
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
1
1
1
1
1
1
1
1
Tabulka D.3: Blok zámků paměti [1, s. 286]
83
Blok rozšířených pojistek rozšířené posjitky index
7
bit výchozí hodnota
6
5
4
3
2
1
0
-
-
-
-
-
-
M103C
WDTON
1
1
1
1
1
1
0
1
Tabulka D.4: Blok rozšířených pojistek [1, s. 287] M103C
Nastavuje kompatibilitu s MCU ATmega103. [1, s. 287]
WDTON Nastavuje hlídacího psa. [1, s. 287] Blok vyšších pojistek vyšší pojistky index
7
bit výchozí hodnota
3
2
1
0
OCDEN
6 JTAG
5 SPIEN
4 CKOPT
EESAVE
BOOTSZ1
BOOTSZ0
BOOTRST
1
0
0
1
1
0
0
1
Tabulka D.5: Blok vyšších pojistek [1, s. 288] Bit JTAG Nastavuje modul JTAG, tedy i funkci pinů PF4 až PF7. [1, s. 288] Bit SPIEN Nastavuje modul SPI, tedy i funkci pinů PE0 až PE1. [1, s. 288] Bit CKOP Nastavuje režim oscilátoru. [1, s. 288] Blok nižších pojistek nižší pojistky index bit výchozí hodnota
7
6
5
4
3
2
1
0
BODLEVEL
BODEN
SUT1
SUT0
CKSEL3
CKSEL2
CKSEL1
CKSEL0
1
1
1
0
0
0
0
1
Tabulka D.6: Blok nižších pojistek [1, s. 288] Bit BODLEVEL Nastavuje maximální úroveň napětí, při které dojde k resetu. [1, s. 288] BODLEVEL funkce 0
MCU se restartuje při napětí nižším než 4,0 V.
1
MCU se restartuje při napětí nižším ne 2,7 V.
Tabulka D.7: Bit BODLEVEL Bit SUT1:0 Nastavují spouštěcí čas. [1, s. 288]
84
Bit CKSEL3:0 Nastavují zdroj hodinového signálu. [1, s. 288] funkce
CKSEL3
CKSEL2
CKSEL1
CKSEL0
0
0
0
0
Externí zdroj hodinového signálu.
0
0
0
1
Kalibrovaný interní oscilátor RC 1 MHz.
0
0
1
0
Kalibrovaný interní oscilátor RC 2 MHz.
0
0
1
1
Kalibrovaný interní oscilátor RC 4 MHz.
0
1
0
0
Kalibrovaný interní oscilátor RC 8 MHz.
0
1
0
1
Externí oscilátor RC 100 – 900 kHz.
0
1
1
0
Externí oscilátor RC 900 k – 3 MHz.
0
1
1
1
Externí oscilátor RC 3 – 8 MHz.
1
0
0
0
Externí oscilátor RC 8 – 12 MHz.
1
0
0
1
Externí NF krystal 32 kHz.
1
0
1
x
Externí krystal 400 – 900 kHz.
1
1
0
x
Externí krystal 900 k – 3 MHz.
1
1
1
x
Externí krystal 3 – 8 MHz.
Tabulka D.8: Bity CKSEL3:0
D.9
Porty
MCU ATmega128 má 53 univerzálních I/O pinů. Univerzální pin má volitelný pull-up“ ” rezistor o hodnotě 20 až 50 kΩ a ochranné diody zapojené proti napětí VCC a proti zemi GND [1, s. 66]. Univerzální pin může mít 1 nebo 2 alternativní funkce. Alternativní funkce se nastavuje v registru konkrétního modulu. Maximální proud pinem je 40 mA a maximální proud celkově všemi piny je 400 mA [1, s. 318], takže piny mohou přímo napájet například displeje LED.
Obrázek D.3: Pin MCU ATmega128 [1, s. 66]
D.9.1
Registry
Registr DDRx DDRx index
7
6
5
4
3
2
1
0
bit
DDx7
DDx6
DDx5
DDx4
DDx3
DDx2
DDx1
DDx0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
výchozí hodnota
Tabulka D.9: Registr DDRx [1, s. 87] 85
Bit DDxn Nastavuje směr pinu [1, s. 67]. Po resetu se všechny piny nastaví jako vstupní. Pro přepnutí vstupního směru na výstupní se musí nastavit nejdříve bit PORTxn a poté bit DDx kvůli vyloučení nedefinovaného mezistavu. Registr PORTx PORTx index bit
7
6
5
4
3
2
1
0
PORTx7
PORTx6
PORTx5
PORTx4
PORTx3
PORTx2
PORTx1
PORTx0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
R/W výchozí hodnota
Tabulka D.10: Registr PORTx [1, s. 87] Bit PORTxn Nastavuje pull-up rezistor u vstupního pinu nebo úroveň napětí na výstupního pinu [1, s. 67]. Po resetu se u všech pinů deaktivuje pull-up rezistor. Přečtený bit PORTxn nevrátí úroveň pinu. DDxn
PORTx
PUD
I/O
pull-up
úroveň třetí stav
0
0
x
vstupní
deaktivován
0
1
0
vstupní
aktivován
0
1
1
vstupní
deaktivován
třetí stav
1
0
x
výstupní
deaktivován
L
1
1
x
výstupní
deaktivován
H
Tabulka D.11: Bit PORTxn [1, s. 68] Registr PINxn PINx index bit
7
6
5
4
3
2
1
0
PINx7
PINx6
PINx5
PINx4
PINx3
PINx2
PINx1
PINx0
R
R
R
R
R
R
R
R
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
R/W výchozí hodnota
Tabulka D.12: Registr PINx [1, s. 87] Bit PINx Informuje o úrovni pinu bez ohledu na směru pinu [1, s. 68]. Mezi zápisem bitu PORTxn a okamžitým čtením bitu PINxn je doporučeno použít instrukci NOP pro synchronizaci [1, s. 69]. Registr SFIOR SFIOR index bit R/W výchozí hodnota
7
6
5
4
3
2
1
0
TSM
-
-
-
ACME
PUD
PSR0
PSR321
R/W
R
R
R
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
Tabulka D.13: Registr SFIOR [1, s. 73]
86
Bit PUD
Nastavuje všechny pull-up rezistory. [1, s. 73] PUD
funkce
0
Všechny pull-up rezistory jsou povoleny.
1
Všechny pull-up rezistory jsou zakázány.
Tabulka D.14: Bit PUD
D.9.2
Nenastavené piny
Je doporučeno nastavit všechny piny. Nejjednodušší metodou je povolení interního pullup rezistoru. V tomto případě bude pull-up rezistor zakázaný během resetu. Jestliže se požaduje úroveň L na pinu během resetu, je doporučeno použít externí pull-up nebo pulldown rezistor. Připojení napětí VCC nebo země GND přímo na nenastavený pin není doporučeno. [1, s. 71]
D.10
16bitový časovač/čítač
16bitový časovač/čítač umožňuje přesné časování, generování průběhů a měření časování signálů. 16bitový časovač/čítač zahrnuje jednotku záchytu a porovnávací jednotku. [1, s. 112]
D.10.1
Režimy
Režim časovače/čítače se nastavuje kombinací bitů WGMn3:0 a bitů COMnx1:0. [1, s. 124] Normální Normální režim je nejjednodušším režimem časovače/čítače. Směr čítání je vždy rostoucí. Pokud hodnota registru TCNTn dosáhne hodnoty 0xFFFF, vynuluje se. [1, s. 124] CTC Pokud hodnota registru TCNTn dosáhne hodnoty registru OCRnA nebo ICRn, vynuluje se. Při povoleném přerušení může subrutina přerušení aktualizovat hodnotu registru OCRnA nebo ICRn. Pokud je aktualizovaná hodnota menší než aktuální hodnota registru TCNTn, čítač mine shodu porovnání. [1, s. 124] Rychlá PWM Poskytuje vysokou frekvenci průběhu. Čítač opakovaně čítá od hodnoty 0x0000 do hodnoty TOP. Při shodě hodnoty registru TCNTn s hodnotou registru OCRnx se registr OCnx vynuluje v neinvertujícím režimu či vyjedničkuje v invertujícím režimu. [1, s. 125] PWM, korekce fáze Umožňuje vysoké rozlišení průběhu. Čítač opakovaně čítá od hodnoty 0x0000 do TOP a poté z TOP do 0x0000. Při shodě hodnoty registru TCNTn s hodnotou registru OCRnx se registr OCNx v neinvertujícím režimu vynuluje u rostoucího čítání a vyjedničkuje u klesajícího čítání a v invertujícím režimu vyjedničkuje u rostoucího čítání a vynuluje u klesajícího čítání. [1, s. 127] 87
PWM, korekce fáze a frekvence Poskytuje vysoké rozlišení fáze a frekvence průběhu. Čítač opakovaně čítá od hodnoty 0x0000 do TOP a poté z TOP do 0x0000. Při shodě hodnoty registru TCNTn s hodnotou registru OCRnx se registr OCNx v neinvertujícím režimu vynuluje u rostoucího čítání a vyjedničkuje u klesajícího čítání a v invertujícím režimu vyjedničkuje u rostoucího čítání a vynuluje u klesajícího čítání. [1, s. 129]
D.10.2
Registry
Registry TCNTn, OCRnA, OCRnB, OCRnC a ICRn jsou 16bitové registry, ke kterým se může přistupovat přes 8bitovou datovou sběrnici. Každý 16bitový časovač má 8bitový dočasný registr pro uložení vyššího bajtu. Při zápisu do 16bitového registru se vyšší bajt uloží do dočasného registru. Nižší bajt a bajt z dočasného registru se zkopírují do 16bitového registru v tom samém hodinovém cyklu. Zápis do 16bitového registru představuje nejprve zápis do vyššího bajtu a poté do nižšího bajtu. Čtení z 16bitového registru představuje nejprve čtení z nižšího bajtu a poté z vyššího bajtu. Přístup k 16bitovému registru je atomický. Jestliže mezi dvěmi instrukcemi, které přistupují k 16bitovému registru, vznikne přerušení a vykonávání subrutiny přerušení aktualizuje dočasný registr, tak hodnota bude porušena. Pokud hlavní program a vykonávání subrutiny přerušení provádějí aktualizaci dočasného registru, tak je doporučeno během přístupu k 16bitovému registru zakázat přerušení v hlavním programu. [1, s. 115] Registr TCCR1A TCCR1A index bit R/W výchozí hodnota
7
6
5
4
3
2
1
0
COM1A1
COM1A0
COM1B1
COM1B0
COM1C1
COM1C0
WGM11
WGM10
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
Tabulka D.15: Registr TCCR1A [1, s. 133] Bity COMnA1:0 Nastavují pin OCnA. Směr pinu se musí nastavit na výstupní v registru DDR. [1, s. 133] funkce
COMnA1
COMnA0
0
0
Výchozí funkce pinu OCnA.
0
1
Invertovat pin OCnA při shodě porovnání.
1
0
Vynulovat pin OCnA při shodě porovnání.
1
1
Vyjedničkovat pin OCnA při shodě porovnání.
Tabulka D.16: Bity COMnA1:0 [1, s. 133] Bity WGMn1:0 Nastavují čítající sekvenci čítače, zdroj pro maximální hodnotu (TOP) a typ průběhu. [1, s. 135]
88
režim
TOP
OCRnx
TOVn
0
0
0
0
Normální.
0xFFFF
okamžitě
0xFFFF
0
0
0
1
PWM, korekce fáze, 8b.
0x00FF
TOP
0x0000
0
0
1
0
PWM, korekce fáze, 9b.
0x01FF
TOP
0x0000
0
0
1
1
PWM, korekce fáze, 10b.
0x03FF
TOP
0x0000
0
1
0
0
CTC.
OCRnA
okamžitě
0xFFFF
0
1
0
1
Rychlá PWM, 8b.
0x00FF
0x0000
TOP
0
1
1
0
Rychlá PWM, 9b.
0x01FF
0x0000
TOP
0
1
1
1
Rychlá PWM, 10b.
0x03FF
0x0000
TOP
1
0
0
0
PWM, korekce fáze a frekvence.
ICRn
0x0000
0x0000
1
0
0
1
PWM, korekce fáze a frekvence.
OCRnA
0x0000
0x0000
1
0
1
0
PWM, korekce fáze.
ICRn
TOP
0x0000
1
0
1
1
PWM, korekce fáze.
OCRnA
TOP
0x0000
1
1
0
0
CTC.
ICRn
okamžitě
0xFFFF
1
1
1
0
Rychlá PWM.
ICRn
0x0000
TOP
1
1
1
1
Rychlá PWM.
OCRnA
0x0000
TOP
WGMn3
WGMn2
WGMn1
WGMn0
Tabulka D.17: Bity WGMn1:0 [1, s. 135] Registr TCCR1B TCCR1B index
7
6
5
4
3
2
1
0
bit
ICNC1
ICES1
-
WGM13
WGM12
CS12
CS11
CS10
R/W
R/W
R/W
R
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
výchozí hodnota
Tabulka D.18: Registr TCCR1B [1, s. 136] Bity CSn2:0 Nastavují hodinový signál. [1, s. 136] funkce
CSn2
CSn1
CSn0
0
0
0
Žádný hodinový signál, časovač/čítač neběží.
0
0
1
Hodinový signál.
0
1
0
Hodinový signál dělený 8.
0
1
1
Hodinový signál dělený 64.
1
0
0
Hodinový signál dělený 256.
1
0
1
Hodinový signál dělený 1024.
1
1
0
Externí hodinový signál na pinu Tn klesající.
1
1
1
Externí hodinový signál na pinu Tn stoupající.
Tabulka D.19: Bity CSn2:0 [1, s. 137] Registr OCR1A OCR1AH index
7
6
5
4
bit R/W výchozí hodnota
3
2
1
0
OCR1AH7:0 R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
89
Tabulka D.20: Registr OCR1AH [1, s. 138] OCR1AL index
7
6
5
4
3
bit
2
1
0
OCR1AL7:0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
výchozí hodnota
Tabulka D.21: Registr OCR1AL [1, s. 138] Registr TIMSK TIMSK index
7
6
5
4
3
2
1
0
bit
OCIE2
TOIE2
TICIE1
OCIE1A
OCIE1B
TOIE1
OCIE0
TOIE0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
výchozí hodnota
0
Tabulka D.22: Registr TIMSK [1, s. 139] Bit TOIE1 Nastavuje přerušení při přetečení časovače/čítače. [1, s. 140] TOIE1
funkce
0
Přerušení při přetečení časovače/čítače 1 je zakázáno.
1
Přerušení při přetečení časovače/čítače 1 je povoleno.
Tabulka D.23: Bit TOIE1
D.11
Modul USART
MCU ATmega128 má 2 moduly USART, přičemž jeden z nich sdílí piny s modulem SPI, takže je použitelný pouze jeden modul USART.
D.11.1
Hodinový signál
Modul USART podporuje 4 režimy hodinového signálu – normální asynchronní, dvojnásobný asynchronní, synchronní Master a synchronní Slave. [1, s. 173] Interní hodinový signál Interní hodinový signál se používá pro asynchronní a synchronní Master režim. Čítač generuje rychlost modulu USART. [1, s. 174] režim normální asynchronní dvojnásobný asynchronní Master synchronní
výraz pro výpočet rychlosti fosc v = 16(UBRR+1) fosc v = 8(UBRR+1) fosc v = 2(UBRR+1)
výraz pro výpočet hodnoty U BRR osc UBRR = f16v −1 fosc UBRR = 8v − 1 osc UBRR = f2v −1
Tabulka D.24: Vzorec pro výpočet rychlosti modulu UART [1, s. 174] Kde v je rychlost modulu USART, UBRR je hodnota registru UBRR a fosc je frekvence oscilátoru. 90
Externí hodinový signál Externí hodinový signál se používá pro synchronní Slave. [1, s. 175]
D.11.2
Inicializace
Inicializace sestává z nastavení rychlosti a formátu rámce. Při inicializaci by měla být všechna přerušení zakázaná. Před změnou rychlosti či formátu rámce by neměl probíhat přenos. [1, s. 177]
D.11.3
Vysílač
Vysílač přesune data z registru UDRn do posuvného registru, pokud je posuvný registr v klidovém stavu nebo se poslední stop-bit předchozího rámce již odeslal. Data se sériově přenesou na pin TxDn. [1, s. 178]
D.11.4
Přijímač
Data se přenesou z pinu RxDn. Počínaje detekcí přechodu z úrovně H do úrovně L se navzorkuje každý bit na 3 vzorky. Vzorkovací rychlost je 16krát větší než normální rychlost nebo 8krát větší než dvojnásobná rychlost. Pokud jsou 2 nebo více vzorků v úrovni H, tak se bit považuje za úrovni H. Pokud jsou 2 nebo více vzorků v úrovni L, tak se bit považuje za úrovni L. Pokud je start-bit v úrovni H, vyhodnotí se jako šum a hledá se další přechod z úrovně H do úrovně L. Pokud je start-bit v úrovni L, přijímač se zesynchronizuje a mohou se detekovat data-bity. Data-bity se přesouvají do posuvného registru, dokud se nepřijme první stop-bit. Pokud je stop-bit v úrovni L, vyjedničkuje se bit FEn v registru UCSRnA. Ignoruje se druhý stop-bit. Vypočítá se parita a pokud nesouhlasí, vyjedničkuje se bit UPEn v registru UCRSnA. Data se přesunou z posuvného registru do registru UDRn. [1, s. 185-186]
D.11.5
Registry
Registr UDRn Se sdílí vysílačem i přijímačem, avšak při zápisu se jedná o registr TXBn a při čtení o registr RXBn. Do registru UDRn se zapisuje pouze při vyjedničkovaném bitu UDREn v registru UCSRAn, jinak vysílač zápis ignoruje. [1, s. 189] UDRn index
7
6
5
4
3
bit R/W výchozí hodnota
2
1
0
UDRn7:0 R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
Tabulka D.25: Registr UDRn [1, s. 189]
91
Registr UCSRnA UCSRnA index bit
7
6
5
4
3
2
1
0
RSCn
TXCn
UDREn
FEn
DORn
UPEn
U2Xn
MPCMn
R/W
R
R/W
R
R
R
R
R/W
R/W
výchozí hodnota
0
0
1
0
0
0
0
0
Tabulka D.26: Registr UCSRnA Bit RXCn Informuje o stavu přijatých dat. [1, s. 189] RXCn
funkce
0
Přijímač ještě nepřesunul data z posuvného registru do registru UDRn.
1
Přijímač přesunul data z posuvného registru do registru UDRn.
Tabulka D.27: Bit RXCn [1, s. 189] Bit TXCn Informuje o stavu odeslaných dat. [1, s. 189] TXCn
funkce
0
Vysílač ještě nepřesunul data z registru UDRn do posuvného registru.
1
Vysílač přesunul data z registru UDRn do posuvného registru.
Tabulka D.28: Bit TXCn Bit UDREn Informuje o stavu registru UDRn. [1, s. 189] UDREn
funkce
0
Registr UDRn je plný a není připravený k zápisu.
1
Registr UDRn je prázdný a je připravený k zápisu.
Tabulka D.29: Bit UDREn Bit FEn
Informuje o stavu rámce. Je platný dokud se nepřečte registr UDRn. [1, s. 190] FEn
funkce
0
Nedošlo k chybě rámce, první stop-bit je v úrovni H.
1
Došlo k chybě rámce, první stop-bit je v úrovni L.
Tabulka D.30: Bit FEn Bit DORn Informuje o stavu paměti. Je platný dokud se nepřečte registr UDRn. [1, s. 190] DORn
funkce
0
Paměť přijímače není plná.
1
Paměť přijímače je plná, tedy registr UDRn je plný, posuvný registr je plný a detekoval se nový start-bit.
Tabulka D.31: Bit DORn
92
Bit UPEn Informuje o stavu parity. Je platný dokud se nepřečte registr UDRn. [1, s. 190] funkce
UPEn 0
Nedošlo k chybě parity.
1
Došlo k chybě parity.
Tabulka D.32: Bit UPEn Bit U2Xn Nastavuje režim rychlosti. Má efekt pouze v asynchronním režimu. [1, s. 190] funkce
U2Xn 0
Při asynchronním režimu je rychlost dvojnásobná a při synchronním režimu se má nastavit tato volba.
1
Při asynchronním režimu je rychlost normální.
Tabulka D.33: Bit U2Xn Registr UCSRnB UCSRnB index bit R/W výchozí hodnota
7
6
5
RXCIEn
TXCIEn
UDRIEn
4 RXENn
3 TXENn
2 UCSZn2
1 RXB8n
TXB8n
R/W
R/W
R/W
R/W
R/W
R/W
R
R/W
0
0
0
0
0
0
0
0
Tabulka D.34: Registr UCSRnB [1, s. 190] Bit RXCIEn Nastavuje přerušení při příjmu. [1, s. 190] RXCIEn
funkce
0
Přerušení při příjmu je povolené.
1
Přerušení při příjmu je zakázané.
Tabulka D.35: Bit RXCIEn Bit TXCIEn Nastavuje přerušení při odeslání. [1, s. 190] TXCIEn
funkce
0
Přerušení při odeslání je povolené.
1
Přerušení při odeslání je zakázané.
Tabulka D.36: Bit TXCIEn Bit RXEn Nastavuje přijímač. [1, s. 190] RXEn
funkce
0
Přijímač je povolený. Výchozí funkce pinu RxDn je potlačená.
1
Přijímač je zakázaný.
Tabulka D.37: Bit RXEn
93
0
Bit TXEn Nastavuje vysílač. [1, s. 191] funkce
TXEn 0
Vysílač je povolený. Výchozí funkce pinu TxDn je potlačená.
1
Vysílač je zakázaný.
Tabulka D.38: Bit TXEn Registr UCSRnC UCSRnC index bit R/W výchozí hodnota
7
6
5
4
3
2
1
0
-
UMSELn
UPMn1
UPMn0
USBSn
UCSZn1
UCSZn0
UCPOLn
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
1
1
0
Tabulka D.39: Registr UCSRnC [1, s. 191] Bit UMSELn Nastavuje asynchronní nebo synchronní režim. [1, s. 191] UMSELn
funkce
0
Režim je asynchronní.
1
Režim je synchronní.
Tabulka D.40: Bit UMSELn Bity UPMn1:0 Nastavuje paritu. [1, s. 191] UPMn1
UPMn0
funkce
0
0
Žádná parita.
1
0
Sudá parita.
1
1
Lichá parita.
Tabulka D.41: Bity UPMn1:0 [1, s. 191] Bit USBSn Nastavuje počet stop-bitů pro vysílač, nikoli pro přijímač. [1, s. 192] USBSn
funkce
0
1 stop-bit.
1
2 stop-bity.
Tabulka D.42: Bit USBSn Bity UCSZn2:0 Nastavuje počet data-bitů. [1, s. 192] funkce
UCSZn2
UCSZn1
UCSZn0
0
0
0
5 data-bitů.
0
0
1
6 data-bitů.
0
1
0
7 data-bitů.
0
1
1
8 data-bitů.
0
1
1
9 data-bitů.
Tabulka D.43: Bity UCSZn2:0 [1, s. 192] 94
Registr UBRRn UBRRnH index
7
6
5
4
3
2
1
0
bit
-
-
-
-
R
R
R
R
R/W
R/W
R/W
R/W
R/W
výchozí hodnota
0
0
0
0
0
0
0
0
UBRRnH7:0
Tabulka D.44: Registr UBRRnH [1, s. 192] UBRRnL index
7
6
5
4
3
bit R/W výchozí hodnota
2
1
0
UBRRnL7:0 R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0
0
0
0
0
0
0
0
Tabulka D.45: Registr UBRRnL [1, s. 192] Bity UBRRn11:0 Nastavují rychlost. [1, s. 193]
D.12
Modul SPI
Modul SPI umožňuje sériové programování paměti flash ROM nebo EEPROM, pokud je ~RESET v úrovni L. SPI místo pinů PB2 (MOSI) a PB3 (MISO) používá piny PE0 (PDI) a PE1 (PDO)! [1, s. 300] nová funke
pin
I/O
nahrazuje funkci
PDI
PE0
I
MOSI
PDO
PE1
O
MISO
PB1
I
SCK
SCK
Tabulka D.46: Piny modulu UART [1, s. 300]
D.13
Elektrické vlastnosti Operační teplota
-55°C – +125°C
Paměťová teplota
-65°C – +150°C
Napětí na pinech kromě pinu RESET Napětí na pinu RESET Maximální proud pinem I/O Maximální proud pinem VCC a GND
-0.5 V – VCC+0.5 V -0.5 V – +13.0 V 40 mA 200 – 400 mA
Tabulka D.47: Elektrické vlastnosti MCU ATmega128 [1, s. 318]
95
Příloha E
Kontrolér TPS40200 Tato příloha popisuje kontrolér TPS20400 [18], který se použil v práci. TPS20400 je napěťový kontrolér s velkým rozsahem vstupního napětí. Kontrolér se vyrábí v pouzdru SOIC a pouzdru QFN. Frekvence, měkký start, proudový limit se nastavují externími komponentami. Kontrolér se navrhnul pro maximální frekvenci 500 kHz. [18, s. 1]
E.1
Schopnosti
Vstupní napětí: 4,2 – 52 V. Výstupní napětí: 700 mV – 90% vstupního napětí.
E.2
Popis pinů
Pin COMP indikuje chybu zesilovače. Připojuje se do kontrolní smyčky s pinem FB. Pin FB je vstup zpětné vazby. Pin GND je zem. Pin GDRV řídí výstup. Připojuje se k tranzistoru typu MOSFET. Proud pinem je 200 mA. Pin ISNS nastavuje citlivost. Pin RC nastavuje frekvence. Pin SS nastavuje měkký start. Při napětí 150 mV na tomto pinu se kontrolér vypne. Na pin VDD se připojuje vstupní napětí.
96
E.3
Doporučené zapojení
Obrázek E.1: Doporučené zapojení kontroléru TPS20400 [18, s. 1] Rezistor R5 a kondenzátor C3 nastavují frekvenci spínání. Lze získat frekvenci spínání [18, s. 10]:
fsw =
1 R5 · C3 · 0, 105
(E.1)
Odpor rezistoru R5 se musí zvolit tak, aby proud rezistorem R5 nepřesáhl 750 µA. [18, s. 10] VIN ≤ 750µ A R5
(E.2)
Kde VIN je vstupní napětí. Kondenzátor C4 nastavuje měkký start.
Výpočet doby měkkého startu je jednoduchý, protože se jedná o exponenciální průběh přechodného děje článku RC. Rezistor je zevnitř připojený na pin SS a má odpor 105 kΩ. [18, s. 15]
tSS = Rc · CSS · ln
VSST VSST − 1, 4
(E.3)
Kde tSS je doba měkkého startu, Rc je vnitřní rezistor (105 kΩ) a VSST je vstupní napětí (maximálně 8 V). Rezistor R4, kondenzátor C6 a rezistor R1 nastavují zpětnou vazbu. Tranzistor Q1 spíná výstupní napětí. Rezistor RSENSE a pin S tranzistoru Q1 slouží pro detekci spínaného proudu. Pokud je tranzistor Q1 sepnut a kontrolér detekuje napětí 100 mV mezi pinem VCC a pinem ISNS, tak to kontrolér chápe jako přetížení a vypne tranzistor Q1. Při napětí nižším než 150 mV na kondenzátoru C4 se kontrolér pokusí restartovat. [18, s. 12]
97
Lze získat maximální napětí na tranzistoru Q1 [18, s. 18]:
UQ1 ≥ UIN
(E.4)
Lze získat maximální proud diodou D1:
(E.5)
ID1 ≥ IO Lze získat maximální napětí na diodě D1:
UD1 ≥ UO
(E.6)
Vysoká frekvence spínání umožňuje použít cívku s malou indukčností. Cívka musí mít feritové jádro pro svoje dobré frekvenční vlastnosti. Nízká induktance má vyšší zvlněný proud, které přispívá zvlněnému napětí přes odpor kondenzátorů na výstupu. Výhody nízké induktance jsou vyšší odezva, nižší DCR, vyšší saturační proud a nižší cena. S keramickými kondenzátory low ESR“ na výstupu může být zvlněné napětí ” pro relativně velký zvlněný proud malé. [18, s. 21]
Lze získat maximální proud cívkou L1 [18, s. 21]:
IL1 ≥ IO + IRIP P LE
(E.7)
Kde IO je maximální výstupní proud a IRIP P LE je zvlněný proud způsobený spínáním. Lze získat zvlněný proud [18, s. 21]:
IRIP P LE =
IO 10
(E.8)
Lze získat maximální indukčnost cívky L1 [18, s. 21]:
L1 ≥
VIN − VOU T · tON IP EAK
(E.9)
Kde VO je výstupní napětí a IP EAK je minimální výstupní proud [18, s. 21].
tON =
1 VO · fsw VIN
(E.10)
Kondenzátor C4 musí absorbovat napětí z cívky L1 [18, s. 22].
i 1 1 h 2 2 · L1 · IO ≤ · C2 · (VOS − VO2 ) 2 2 Kde VOS je povolený převis nad výstupním napětím (typicky 100 mV). 98
(E.11)
E.4
Doporučené zapojení pro snížení citlivosti
Obrázek E.2: Doporučené zapojení pro snížení citlivosti kontroléru TPS20400 [18, s. 13]
IOC =
VILIM RF 1 + RF 2 · RILIM RF 2
(E.12)
Kde IOC je proud citlivosti a VILIM (typicky 100 mV).
CF ≤
VO VIN ·fsw RF 1 ·RF 2 RF 1 +RF 2
99
(E.13)
Příloha F
Modul GSM SIM300DZ Tato příloha popisuje modul GSM SIM300DZ [13], který se použil v práci. Modul GSM je určený přímo pro implementaci do vestavěných zařízení, podporuje síť GSM a technologii GPRS, může pracovat ve frekvenčním pásmu 800, 1800 nebo 1900 Mhz, umožňuje přenos hlasu, zpráv SMS, dat a faxu a má nízkou spotřebu.
Obrázek F.1: Vrchní strana modulu GSM SIM300DZ
Obrázek F.2: Spodní strana modulu GSM SIM300DZ
F.1 F.1.1
Vlastnosti Společné vlastnosti
Frekvenční pásma 800 Mhz 1800 Mhz 1900 MHz
100
Napájení Od: 3,4 V Do: 4,5 V
F.1.2
Zprávy SMS
Formát Textový PDU
F.1.3
Hlas
Kódování Poloviční rychlost (HR) Plná rychlost (FR) Rozšířená plná rychlost (EFR).
F.1.4
Rozhraní
Karta SIM (s napájecím napětím 3 V / 1,8 V). Analogový zvuk Záloha RTC Sériová linka SPI Anténa Nabíjení GPIO
F.2 F.2.1
Instrukční sada Druhy zpráv
Příkaz Příkaz je uvozený řetězcem AT či at a ukončený znakem . [20, s. 5] AT
101
Odpověď Odpověď se nachází mezi řetězci [20, s. 5]. Odpovědí může být návratový kód, informace nebo nevyžádaný návratový kód. Nevyžádaný návratový kód se pro zjednodušení pojmenuje jako událost, protože se chová stejně jako zpráva či událost v programovacích jazycích.
F.2.2
Základní skupina příkazů
AT<parametry>
F.2.3
Registr S
ATS= Při neudané hodnotě se jako hodnota použije výchozí hodnota.
F.2.4
Rozšířená skupina příkazů
Příkaz testu AT+=? Odpovědí je při příkazu zápisu seznam parametrů a rozsahy hodnot. Příkaz čtení Příkaz čtení přečte hodnoty parametrů. AT+? Odpovědí jsou hodnoty parametrů. Příkaz zápisu Příkaz nastaví hodnotu parametru. AT+=<parametry> Odpovědí je stav. Příkaz spuštění AT+
102
F.2.5
Odeslání více příkazů
Na jednom příkazovém řádku více příkazů Řetězec AT lze psát pouze u prvního příkazu. Oddělovačem příkazů je středník. Vyrovnávací paměť může obsahovat maximálně 256 znaků. Při překročení tohoto limitu se nevykoná žádný příkaz a odpovědí bude chyba. [20, s. 6] Na jednom příkazovém řádku jeden příkaz Před odesláním dalšího příkazu je nutné čekat na odpověď předchozího příkazu. [20, s. 5]
F.2.6
Podporovaná kódování
GSM UCS2 HEX IRA PCCP437 PCDN 8859-1
Kódování se může nastavit nebo přečíst příkazem: AT+CSCS
F.2.7
Řízení toku dat
Při zaplnění vyrovnávací paměti přijímače vysílač čeká, dokud se neuvolní. [20, s. 7] Softwarové Softwarové řízení toku dat odesílá speciální znak XOFF pro pozastavení a znak XON pro pokračování přenosu dat. Softwarové řízení toku dat se používá u zařízení s třemi vodiči pro sériovou linku. Výchozí řízení toku dat je hardwarové. Softwarové řízení toku dat se aktivuje příkazem: AT+IFC=1,1 Toto nastavení je volatilní. Softwarové řízení toku dat by se nemělo použít u přenosu binárních dat, protože by se v nich mohl ocitnout speciální znak softwarového řízení toku dat. [20, s. 7] Hardwarové Hardwarové řízení toku dat používá vodič RTS a vodič CTS. Pokud by data měla být pozastavena, vodič CTS se nastaví jako neaktivní, dokud se přenos dat z vyrovnávající paměti přijímače nedokončí. Pokud je vyrovnávací paměť přijímače připravená přijmout více dat, vodič CTS se nastaví jako aktivní znovu. [20, s. 7] 103
F.3
Popis pinů
Následuje seznam použitých pinů v práci. [13, s. 14] Pin PWRKEY zapíná, resetuje či vypíná modul GSM. Pin STATUS indikuje činnost modulu GSM. Pin NETLIGHT indikuje stav sítě GSM. Pin RXD přijímá data ze sériové linky. Pin TXD odesílá data na sériovou linku. Pin SIMVDD dodává napětí pro kartu SIM. Pin SIMDATA přenáší data mezi modulem GSM a kartou SIM. Pin SIMCLK dodává hodinový signál kartě SIM. Pin SIMRESET resetuje kartu SIM. Pin GND je zem. Na pin VDD se připojuje napájecí napětí.
F.4
Spuštění
Modul GSM se může spustit třemi způsoby, prvním způsobem je nastavování pinu PWRKEY podle obrázku F.3.
Obrázek F.3: Spuštění modulu GSM SIM300DZ [13, s. 20] Modul GSM po spuštění odešle návratový kód RDY při nenastavené autodetekci rychlosti sériové linky. Pin STATUS se vyjedničkuje. [13, s. 19-21]
104
F.5
Modul UART
Následuje seznam dovolených rychlostí modulu UART. [13, s. 35] rychlost [b/s]
pevná
autodetekce
300
ano
ne
1200
ano
ano
2400
ano
ano
4800
ano
ano
9600
ano
ano
19200
ano
ano
38400
ano
ano
57600
ano
ano
115200
ano
ano
Tabulka F.1: Dovolené rychlosti modulu UART modulu GSM
F.6
Doporučené zapojení karty SIM
Modul GSM podporuje kartu SIM na napětí 1,8 V a napětí 3 V. Proud je 10 mA. [13, s. 42]
Obrázek F.4: Doporučené zapojení karty SIM k modulu GSM SIM300DZ [13, s. 43]
105
F.7
Doporučené zapojení signalizace
Obrázek F.5: Doporučené zapojení signalizace modulu GSM SIM300DZ [13, s. 47]
106