\chapter {Mikrokontrol\'{e}ry Freescale HC08}
\label{HC08}

Řada HC08 firmy \emph{Freescale Semiconductor, Inc.} je početná skupina mikrokontrolérů, používajících CPU typu M68HC08. Vyznačují se univerzálností, nízkým příkonem a množstvím funkcí. Obsahují řadu integrovaných periferií, umožňují emulaci (ICE). Jsou dostupné v~širokém rozmezí velikostí pamětí, množství portů a periferií, různých pouzdrech \cite{GP32}.

\section{V\'{y}b\v{e}r mikrokontrol\'{e}ru}

Nejprve je nutné vybrat vhodný mikrokontrolér. Abychom správně zvolili, stanovíme si kritéria, která musí vybraný typ splňovat, které vlastnosti jsou výhodou a které můžeme naopak oželet.

Požadované vlastnosti:
\begin{itemize}
  \item{rozhraní SCI s~možností přenosové rycholsti $115\,200\,\jedn{Bd}$,}
  \item{pouzdro PDIP (možnost používat v~nepájivém kontaktním poli),}
  \item{časovač,}
  \item{napájecí napětí 5V,}
  \item{dostatek vstupních/výstupních pinů pro připojení displeje a klávesnice.}
\end{itemize}

Další zohledněná kritéria:
\begin{itemize}
  \item{velikost paměti FLASH,}
  \item{velikost paměti RAM,}
  \item{možnost zaslání vzorku zdarma.}
\end{itemize}

%Nevyužité vlastnosti:
%\begin{itemize}
%  \item{taktovací kmitočet}
%\end{itemize}

Všechny požadované vlastnosti splňuje většina mikrokontrolérů řady HC08. Při zohlednění dalších kritérií se jeví jako vhodný typ MC68HC908GP32. Při výběru nebyla zohledněna cena. Zcela jistě by mohl být použit i nižší a levnější typ.

\section{Popis MC68HC908GP32}

Freescale MC68HC908GP32 je 8-bitový mikrokontrolér, obsahující CPU typu M68HC08. Vyznačuje se dobrým poměrem cena/výkon. Je dostupný v~pouzdrech PDIP, SPDIP a QFP \cite{GP32}. 

\subsection{Vlastnosti MC68HC908GP32}

Základní vlastnosti mikrokontroléru MC68HC908GP32 jsou:

\begin{itemize}
  \item{architektura typu von Neumann (program a data jsou umístěny ve stejném paměťovém prostoru),}
  \item{paměťově mapované periferie,}
  \item{zpětná kompatibilita s~řadami 6805, 146805 a 68HC05,}
  \item{maximální kmitočet sběrnice 8 MHz,}
  \item{32 kB paměti FLASH,}
  \item{512 B paměti RAM,}
  \item{29 vstupně/výstupních pinů (pouzdro PDIP),}  
  \item{pull-up rezistory na většině pinů,}
  \item{interní oscilátor se smyčkou fázového závěsu (PLL),}
  \item{možnost externího taktování,}
  \item{možnost programování v~aplikaci, tzv. In-system programming (ISP),}
  \item{ochrana proti neautorizovanému čtení FLASH,}
  \item{dva úsporné módy:}
  \begin{itemize}
    \item{wait mode,}
    \item{stop mode.}
  \end{itemize}
\end{itemize}

\subsection{Vlastnosti CPU 68HC08}

Centrální procesorová jednotka (CPU) typu 68HC08 je vývojovým nástupcem 68HC05, se kterou je zpětně kompatibilní. Mezi důležité vlastnosti 68HC08 patří: 

\begin{itemize}
  \item{instrukční sada typu CISC,}
  \item{16 adresních módů,}
  \item{5 registrů:}
  \begin{description}
    \item[A] -- {střadač (Accumulator), 8 bitů,}
    \item[CCR] -- {registr příznaků (Condition code register), 8 bitů, využito 6,}
    \item[IX] -- {indexový registr (Index register), 16 bitů,}
    \item[PC] -- {programový čítač (Program counter), 16 bitů,}
    \item[SP] -- {ukazatel zásobníku (Stack pointer), 16 bitů,}
  \end{description}
  \item{hardwarová násobička $8 \times 8$ bitů,}
  \item{hardwarová dělička 16/8 bitů,}
  \item{instrukce pro přímý přesun z~paměti do paměti,}
  \item{instrukce pro počítání v~BCD kódu,}
  \item{optimalizace pro programování v~jazyce C.}
\end{itemize}

\subsection{Pam\v{e}ti, porty a periferie}

Nyní si stručně popíšeme další součásti a integrované periferie.

\begin{description}
  \item[Paměť FLASH] -- {GP32 obsahuje $32\,256\jedn{B}$ uživatelské paměti FLASH, $36\,\jedn{B}$ uživatelských vektorů a $2\,\jedn{B}$ pro další registry (FLASH block protect register a FLASH control register). }
  \item[Paměť RAM] -- {Operační paměť má velikost $512\,\jedn{B}$. Z~toho je $192\,\jedn{B}$ v~\emph{zero page}, umožňující jednobytové adresování. V~\emph{zero page} jsou umístěny často používané proměnné, což v~důsledku zmenšuje velikost programu a zvyšuje rychlost. Ukazatel zásobníku (Stack pointer) lze nastavit zcela libovolně, ale pro správnou funkci je nutné, aby nabýval hodnot pouze v~rozsahu adres paměti RAM.}
  \item[Monitor ROM] -- {Program \emph{Monitor} je uložen ve zvláštní paměti ROM a umožňuje komunikaci s~hostitelským PC při programování, ladění a emulaci. Komunikace může probíhat po standardní sériové lince RS-232, přičemž pro spojení s~PC se používá jediný pin (\verb|PTA0|), zatímco ostatní piny mají zachovanou původní funkci.}
  \item[Porty] -- {Porty slouží pro komunikaci mikrokontroléru s~okolím. GP32 má 5 portů označených \verb|PTA -- PTE|. Porty jsou obousměrné, pro nastavení směru komunikace slouží \verb|DDR| (Data Direction Register). Porty \verb|A|, \verb|C| a \verb|D| mají integrované vypínatelné pull-up rezistory.}
  \item[COP (Watchdog)] -- {Obvod sloužící k~ochraně před nežádoucími stavy počítače. Je to v~podstatě čítač nezávislý na chodu procesoru, který provede restart, pokud dojde k~jeho přetečení. Správně běžící program provádí nulování watchdogu, takže k~restartu nedojde. Pokud se například program zacyklí, watchdog ho restartem z~tohoto stavu vyvede.}
  \item[SCI -- sériové rozhraní] -- {Sériové rozhraní slouží ke komunikaci s~periferiemi nebo s~dalším mikrokontrolérem. V~této práci se SCI používá pro komunikaci s~GSM modulem. Mezi vlastnosti a funkce SCI patří:
\begin{itemize}
  \item{plně duplexní komunikace,}
  \item{formát NRZ (non-return-to-zero),}
  \item{32 programovatelných přenosových rychlostí,}
  \item{délka slova 8 nebo 9 bitů,}
  \item{oddělený vysílač a příjímač,}
  \item{nezávislá přerušení od vysílače a přijímače,}
  \item{volitelná polarita vysílače,}
  \item{hardwarová kontrola parity.}
\end{itemize}  
}
  \item[TIM -- modul rozhraní časovače] -- {GP32 je vybaven dvěma dvoukanálovými časovači. Jejich využití je široké a zahrnuje pulsně-šířkovou modulaci, zpracování a generování signálu, čítání impulzů, zpoždění.}
  \item[ADC -- analogově digitální převodník] -- {Mikrokontrolér obsahuje osmikanálový 8-bitový A/D převodník. Převod může být jednoduchý (na požadavek mikroprocesoru) nebo kontinuální (A/D převodník pravidelně generuje přerušení).}
  \item[KBI -- rozhraní klávesnice] -- {Tento modul umožňuje vyvolat přerušení při stisku klávesy.}
%  \item[]{}
\end{description}














