\chapter{Výsledky študentskej práce}

Návrh dosky plošného spoja je prvým riešeným problémom, Navrhujú sa dve dosky plošného spoja, samotný prípravok a riadiaci modul.\cite{sem}

\section{Návrh dosky plošného spoja modulu prípravku \cite{sem}}
Prípravok obsahuje konektory pre jednotlivé testované moduly. Plánovaný spôsob používania je rozdelenie fungovania na jeden usecase pre test modulov dodávaných s kitom a druhý usecase pre pripojenie samotného vývojového kitu za účelom testovania správania sa jeho programu.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=1\textwidth]{obrazky/SchemaMod}
  \end{center}
  \caption{Bloková schéma prípravku. Tabuľka v pravom dolnom rohu určuje význam prepojení.}
  \label{SchemaMod}
\end{figure}

Bloková schéma na ukážke \ref{SchemaMod} opisuje architektúru prípravku. Tá je rozdelená na nasledujúce bloky:
\begin{enumerate}
\item Zásuvka pre riadiaci modul,
\item Prevodník napätí i2c a uart rozhraní,
\item Zásuvka pre lcd modul a testovaný kit,
\item Prevodník digitálnych napäťových úrovní,
\item Digitálno-analógový prevodník,
\item Prevodník rozsahu signálu tlačidiel LCD modulu,
\item Časť pripájania i2c modulu, enkodéru a modulu s teplomerom.
\item Dekodér obsluhujúci maticovú klávesnicu a LED indikátory.
\item Časť pripájania relé modulu.
\end{enumerate}

\subsubsection{Zásuvka pre riadiaci modul}
Riadiaci modul je tvarovo kompatibilný s Arduino DUE. Nie všetky piny sú ale využité, všetky využité piny sú chránené \textit{TVS} diódami.

\subsubsection{Prevodník napätí i2c a uart rozhraní}
Pri tak nízkych rýchlostiach rozhraní aké sa vyskytujú v prípravku je implementácia rozhraní značne zjednodušená. Rýchlosť I2C je určená ako 100 \unit{kHz}, pri takýchto rýchlostiach sú podstatné vlastnosti \textit{rise-time}, \textit{fall-time} signálu a kapacita zbernice. 

Prevod napätí je zariadení v prípade \textit{i2c} aj \textit{uart} zbernice použitím obojstranného zapojenia s unipolárnym tranzistorom. Takéto zapojenie je vhodné pre zbernice ktorých kľudové napätie je rovné napájaciemu.

Ako tranzistor bol zvolený \textit{BSS138} jedná sa o \textit{jelly bean} súčiastku medzi MOSFET tranzistormi. Jedná sa o obohacovací unipolárny tranzistor s N-kanálom, prahovým napätím 1.5 \unit{V}, kontinuálnym prúdom $I_d$ 220 \unit{mA}.

\subsubsection{Zásuvka pre LCD modul a testovaný kit}
LCD modul a vývojový kit majú spoločnú zásuvku keďže ich pripojenie zapadá do separátnych use-casov. V prípade testovania modulov bude v tejto zásuvke zapojený  LCD modul. V prípade použitia pre testovanie správania programu výukového kitu, bude v celom prípravku pripojený len riadiaci modul a samotný kit \textit{ATmega328P Xplained Mini} a prípravok bude emulovať správanie modulov s ktorými má program kitu interagovať.

Digitálne vstupy privedené z prevodníku úrovní sú vedené cez kolíkovú lištu a každý jeden cez svoj jumper, to umožňuje ľubovoľne meniť spôsob prepojenia digitálnych vstupov medzi riadiacou jednotkou a zásuvkou pre LCD modul a testovaný kit.

\subsubsection{Prevodník digitálnych napäťových úrovní}
Na prevod napätí pre relé modul a zásuvku pre lcd modul a testovaný kit je Použitý prevodník \textit{TXB0108PWR} jedná sa o už spomenutý  obojsmerný prevodník napäťových úrovní s automatickou detekciou smeru. Jeho reakcia na zmenu napäťovej úrovne má typickú dĺžku v rádoch \unit{ns} a maximálny kontinuálny prúd výstupu je $\pm$ 50 \unit{mA}.

\subsubsection{Digitálno-analógový prevodník}
Použitý prevodník je \textit{AD5305BRMZ}, jeho napájacie napätie v prípravku je 5 \unit{V}, prevodník komunikuje pomocou \textit{I2C} rozhrania. \textit{AD5305BRMZ} obsahuje 4 kanály ktoré sú cez prepájací jumper zavedené do zásuvkových pinov na ktorých má \textit{ATmega328P Xplained Mini} analógové vstupy.

\subsubsection{Prevodník rozsahu signálu tlačidiel LCD modulu}
Jedná sa o aktívny napäťový delič využívajúci operačný zosilňovač \textit{LM358} vstupný odpor zapojenia má veľkosť 4 \unit{G}$\Omega$. \textit{LM358} je \textit{jelly bean} súčiastka. Jedná sa o \textit{unity gain stable} operačný zosilňovač kompatibilný s použitým  napájacím napätím. Prevod analógových úrovní v tejto aplikácií je na presnosť a rýchlosť nenáročná úloha.
\subsubsection{Časť pripájania i2c modulu , enkodéru a modulu s teplomerom}
Enkodér s tlačidlom je možné napájať napätím 3.3 \unit{V} a vďaka tomu je možné pripojiť ho priamo na vstupy riadiaceho modulu.

Modul s teplomerom je napájaný napätím 5 \unit{V} a jeho analógový výstup je prevádzaný na rozsah 3.3 \unit{V} rovnakým zapojením využívajúcim \textit{LM358} ako prevodník rozsahu signálu tlačidiel LCD modulu. Digitálny výstup modulu s teplomerom je ignorovaný ale na má vlastnú LED diódu na module pre indikáciu.

\textit{I2C} modul je napájaný 5\unit{V} napätím a na tomto napätí pracuje aj jeho zbernica. Digitálny výstup generátoru štvorcovej vlny je prevádzaný na úroveň riadiacej jednotky pomocou \textit{AD5305BRMZ} prevodníku.

\subsubsection{Dekodér obsluhujúci maticovú klávesnicu a LED indikátory.}
Maticová klávesnica a LED indikátory ktoré indikujú úspešnosť testov pre každý modul vyžadujú 10 digitálnych výstupov, použitím dekodéru sú obslúžené pomocou štyroch. Použitý je dekodér \textit{MC14028B}.

Výstupy dekodéru s LED diódami sú pre zjednodušenie riadenia doplnené SR klopným obvodom \textit{CD4043BDW} ktorého reset je riešený 4 vstupovým AND hradlom \textit{SN74HC21DG4}, reset je vykonaný privedením všetkých vstupov dekodéru do stavu logickej 1.

\subsubsection{Časť pripájania relé modulu}

Všetky testované moduly vrátane \textit{lcd} modulu sú pripájané na kolíkové lišty. Relé modul  má výstup riešený svorkovnicou a nie je možné ho napojiť na kolíkovú lištu. Pripojenie relé modulu je primárne realizované pogo konektormi a ako záložné riešenie je vyvedená kolíková lišta na pripojenie pripájacích káblov.

Spínacie kontakty relé modulu obsahujú \textit{pulldown} rezistory. Pripojenie relé modulu zmení na jednom zo spínacích modulov logickú úroveň, čo umožňuje spínanie testovania modulov.  

\section{Návrh dosky plošného spoja modulu systémového jadra \cite{sem}}
Systémové jadro je break-out board pre \textit{mkl27z} ktorý je zároveň kompatibilný aj s ďalšími mikrokontrolérmi z rodiny \textit{Kinetis}. Modul systémového jadra má pinout kompatibilný s \textit{Arduino DUE} nezapája ale všetky piny. Použité rozhrania rešpektujú primárne rozloženie pinov.

Systémové jadro je univerzálny modul ktorý je použiteľný aj mimo túto aplikáciu. Modul je programovaný cez \textit{SWD 10} rozhranie a využíva interný oscilátor. Interný oscilátor mikrokontroléru \textit{mkl27z} umožňuje beh USB zbernice bez externého kryštálového oscilátoru. Kryštálový oscilátor 32 \unit{kHz} slúži len ako zdroj hodín pre \textit{Real-Time-Clock}.

\subsection{Napájacie napätie}
Modul získava napájacie napätia z \textit{USB} zbernice. Obsahuje 3 separátne zdroje napätia. 

Jeden \textit{Low dropout} regulátor na získavanie 3.3 \unit{V}, ten obsahuje rezistor a jumper slúžiaci na meranie výstupného prúdu regulátoru.

Ďalšie dva regulátory sú pripojené cez jumper a tak je možné ich úplne odpojiť, slúžia na stabilizáciu napätia 5 \unit{V}. Jeden \textit{Low dropout} \textit{TPS7B8750QKVURQ1} a druhý spínaný regulátor \textit{TPS63000} zobrazený na ukážkach \ref{TPS} a \ref{TPSDPS}.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=1\textwidth]{obrazky/Switching5}
  \end{center}
  \caption{Schéma regulátoru TPS63000.}
  \label{TPS}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.66\textwidth]{obrazky/Switching5brd}
  \end{center}
  \caption{Realizácia regulátoru TPS63000.}
  \label{TPSDPS}
\end{figure}
\subsection{Vedenie USB rozhrania}
Vedenie USB dátových vodičov je realizované rovnakým spôsobom ako firma \textit{NXP} používa vo svojich \textit{freedom} doskách ako napríklad aj v prípade\textit{FRDM-K64F}. Zariadenie využíva dva 33 $\Omega$ rezistory a jeho diferenciálny pár je vedený ako koplanárny vlnovod. Spôsob realizácie USB rozhrania vidieť na ukážkach \ref{USBsch} a \ref{USBbrd}.

Ukážka \ref{USBsch} zároveň zobrazuje tvs diódy, feritovú tlmivku ktorá chráni pred nárazovým prúdom a rezistor jumper kombináciu na meranie napájacieho prúdu zariadenia.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/USBsch}
  \end{center}
  \caption{Schéma USB rozhrania.}
  \label{USBsch}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/USBbrd}
  \end{center}
  \caption{Zapojenie USB rozhrania.}
  \label{USBbrd}
\end{figure}

\FloatBarrier
\section{Procedúry testov HW modulov}
Detailný popis testovacích procedúr pre jednotlivé moduly je opísaný v následujúcej časti.

\subsubsection{Relé modul}
Relé modul je ovládaný dvoma digitálnymi vstupmi Inv1 a Inv2 na ktorých je pred začatím testu a po jeho konci logická úroveň 0.
Spínacia časť relé modulu je zapojená nasledovne:
\begin{itemize}
\item Spoločné kontakty sú prepojené a sú zapojené na napájacie napätie 3.3 alebo 5 voltov,
\item NC výstupy sú prepojené a sú zapojené na vedenie PTD4,
\item NO výstupy sú prepojené a sú zapojené na vedenie PTD5.
\end{itemize}
Test modulu prebieha nasledovne:
\begin{enumerate}
\item Kontrola PLU(prítomnosti logickej úrovňe) 1 na NC a 0 na NO. 
\item Privedenie log. 1 na vstup Inv1.
\item Kontrola PLU 1 na NO a NC. 
\item Privedenie log. 1 na vstup Inv2.
\item Kontrola PLU 1 na NO a PLU 0 na NC. 
\item Privedenie log. 0 na vstup Inv1.
\item Kontrola PLU 1 na NO a NC.
\end{enumerate}
\subsubsection{LCD modul}
LCD modul pozostáva z LCD ktorého funkcionalitu spadá na užívateľa, jeho tlačidlá tiež vyžadujú akciu od užívateľa.
\begin{enumerate}
\item Výpis znakov do každého pola lcd.
\item Postupný test jednotlivých tlačidiel:
\begin{enumerate}
\item Test neutrálnej napäťovej úrovne.
\item AU(akcia užívateľa) - stlačenie tlačidla v poradí
\item Čakanie na ustálenie napäťovej úrovne
\item Kontrola správnosti napäťovej úrovne na základe predpísaného pásma pre dané tlačidlo.
\item AU - uvoľnenie tlačidla
\end{enumerate}
\end{enumerate}
\subsubsection{Maticová klávesnica}
\begin{enumerate}
\item Kontrola PLU 0 na všetkých riadkoch pri napájaní všetkých stĺpcov
\item AU - postupné stlačenie všetkých tlačidiel užívateľom, tlačidlá sú stláčané po riadkoch začínajúc horným. Tlačidlá sú v rámci riadku stláčané z ľava do prava.
\end{enumerate}

\subsubsection{Enkodér}
Test pozostáva z akcií užívateľa ktoré sú vyhodnotené pomocou jednoduchej logiky na základe zmeny signálu CLK a stavu signálu TD počas tej zmeny.
\begin{enumerate}
\item AU - rotácia enkodéru v smere hodinových ručučiek
\item AU - rotácia enkodéru v protismere hodinových ručičiek
\item AU - stlačenie tlačidla
\end{enumerate}

\subsubsection{Teplomer}
Testovanie modulu s teplomerom je komplikované nejednotnosťou modulov, čo umožňuje len rudimentárny test ktorý nemusí byť adekvátny alebo je nutný komplikovanejší a časovo náročný zásah užívateľa. Tento zásah zároveň vyžaduje nástroj, spočíva v nastavení kalibračného trimra na dosiahnutie správnej indikovanej teploty a následne dotyk čidla na zvýšenie indikovanej teploty a overenie fungovania aj mimo pracovný bod na ktorom bol modul nastavený. Kompromisom ktorý zjednodušuje proces je nechať samotné zhodnotenie fungovania čidla na užívateľa. LCD modul slúži na zobrazovanie meraných hodnôt.

\begin{enumerate}
\item AU - Nastavenie trimra na dosiahnutie smerodajnej hodnoty vypísanej na lcd module.
\item AU - Zahriatie čidla.
\item AU - Zhodnotenie funkčnosti na základe zmene vypisovanej hodnoty.
\end{enumerate}

\subsubsection{I2C modul}
\begin{enumerate}
\item Nastavenie dátumu a času RTC.
\item Nastavenie generátoru obdĺžnikových pulzov.
\item Test prítomnosti pulzov.
\item Test správnosti hodnoty.
\item Prepis hodnôt EEPROM na logickú 1 na všetkých bitoch.
\item Kontrola správnosti hodnôt.
\item Prepis hodnôt EEPROM na logickú 0 na všetkých bitoch.
\item Kontrola správnosti hodnôt.
\end{enumerate}

\section{Problémy navrhnutej DPS}

DPS navrhnutá vrámci tejto práce trpí na niekoľko problémov a nedostatkov. Niektoré sú následkom krízy v dostupnosti elektronických komponentov a kompromisov ktoré situácia vyžadovala. Pri výbere komponentov dochádzalo bežne k nedostupnosti vybraných komponentov a dokonca ich alternatív, mnohé súčiastky boli zvolené čisto na bázy toho čo bolo po ruke.

Jedny z takto zvolených komponentov boli operačné zosilňovače LM358, ktoré by bolo v prípade dostupnosti alternatív lepšie nahradiť vhodnejšími. Na tieto zosilňovače sú kladené nároky ktoré vyžadujú fungovanie v režime napäťového sledovača.

Ďalšími komponentmi ktoré boli volené neoptimálne je niekoľko kondenzátorov ktoré neboli v potrebnom čase dostupné vo variante s ideálnym dielektrikom pre danú aplikáciu.

Niekoľko komponentov nebolo možné zohnať, jedným z nich ne predlžovacia DPS zásuvka ktorá funguje z jednej strany ako zásuvková rada a z druhej ako kolíková lišta, tá mala byť osadená do miesta pre kit kde by z jednej strany slúžila na pripojenie lcd modulu a z druhej na pripojenie kitu.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/DekodFix}
  \end{center}
  \caption{Obvod LED indikátorov, komponenty z ľava do prava:1. rezistory 2. LED diódy 3. RS klopné obvody 4. dekodér.
  Na obvode dekodéru sú znázornené prepoje ktorými je možné ho nahradiť pre zfunkčnenie obvodu maticovej klávesnice bez jeho použitia. }
  \label{DekodFix}
\end{figure}


Ďalším komponentom ktorý bol dodaný ale v nesprávnom púzdre bol dekodér ktorý slúži na ovládanie obvodu LED indikátorov a  stĺpcov maticovej klávesnice. Nahradenie chýbajúceho dekodéru prepojmi ktoré prepoja jeho pôvodné vstupy priamo na obvod stĺpcov maticovej klávesnice, toto prepojenie je znázornené oranžovými čiarami na ukážke \ref{DekodFix}. Funkčnosť LED indikátorov je plne nahraditeľná sériovou komunikáciou a výpismi v konzolovom okne. Spôsob zfunkčnenia samotných LED indikátorov bez použitia dekodéru je možné rôznymi spôsobmi. Najjednoduchší z nich by bol pridanie káblových spojov na voľné výstupy jadra na prípravku, tieto spoje by boli prispájkované v najjednoduchšom prípade na anódu LED (Elektróda vpravo) a voľný pin na prípojke do ktorej sa pripája jadro(pin závisí od použitého jadra).

V prípade jadra bolo pre nedostupnosť mikrokontroléru so správnou veľkosťou pamäti nutné improvizovať. Jediné dostupné dva kusy boli už naspájkované na iných DPS. Oživiť mikrokontrolér jadra sa ale nepodarilo napriek tomu že jadro návrhovo vychádza z overeného návrhu obvodu. Pri snahe programovať MCU jadra dochádzalo k chybe. S jedným MCU nebolo možné pripojiť sa na programovacie rozhranie. Napájacie napätie MCU bolo na všetkých vstupoch stabilné a malo správnu úroveň. Napätie RESET prívodu nevykazovalo anomálne správanie pri snahách MCU programovať. Druhé MCU po naspájkovaní do obvodu nebolo programátorom vôbec detekované.

Príčina nefunkčnosti jadra nebola zistená, nebolo ani zistené či dôvod nefunkčonsti MCU pochádza z DPS alebo z MCU samotných. Tie boli počas svojho života vystavované vplyvom ktoré ich mohli zničiť ak napr. tepelné namáhanie pri prespájkovaní alebo ESD.

DPS prípravku pozostáva zo štandardných zapojení použitých súčiastok ktoré sú popísané v ich katalógových listoch. Test s vybranými napäťovými úrovňami ukázal že prevodníky digitálnych úrovní fungujú. Prevodník analógového napätia pre výstup tlačidla lcd modulu je funkčný, ten pre modul teplomeru momentálne nie. Keďže sa jedná o rovnaký obvod ale s inou súčiastkou od iného výrobcu, pravdepodobne je tento problém riešiteľný výmenou operačného zosilňovača. 

\section{Migrácie na iné jadro}
SW architektúra je vytvorená tak aby umožnila jednoduchú portovateľnosť na akúkoľvek platformu ktorá je na úlohu adekvátna. Zásahy na DPS prípravku samotného sú nutné len v prípade migrácie na jadro ktoré funguje na inom pracovnom napätí.
\subsection{Konverzie pre podporu 5 V jadra}
Prípravok bol navrhnutý primárne pre 3.3 V jadro, v prípade migrácie na jadro ktoré pracuje na napäťovej úrovni piatich voltov je nutné vykonať niekoľko opatrení. Tieto opatrenia je nutné vykonať na nasledovných obvodoch:
\begin{itemize}
\item Prevodník i2c rozhrania.
\item Prevodník sériového rozhrania.
\item Prevodníky napäťových úrovní GPIO rozhrania.
\item Prevodník úrovňe napätia tlačidla lcd modulu.
\item Prevodník úrovňe napätia výstupu modulu teplomeru.
\item LED indikátory.
\end{itemize}

Zmeny ktoré vyžadujú odpájanie súčiastky a prepojenie kontaktov jej obvodu na DPS sú vyznačené oranžovou farbou. Každá oranžová čiara znázorňuje prepojenie ktoré je nutné vytvoriť medzi plôškami DPS ktorých sa jej konce dotýkajú.

Modrou farbou sú prekrížené súčiastky ktoré majú byť vrámci konverzie len odstránené.

Ukážky \ref{ConvLocations} a \ref{ConvLocations2} zobrazujú miesta na ktorých sa na DPS prípravku nachádzajú obvody ktoré je v prípade zmeny napätia použitého jadra nutné vykonať.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/ConvLocations}
  \end{center}
  \caption{Umiestnenie i2c a sériového prevodníku napätí.}
  \label{ConvLocations}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/ConvLocations2}
  \end{center}
  \caption{Umiestnenie prevodníku digitálnych a analógových napätí.}
  \label{ConvLocations2}
\end{figure}

 Ukážka \ref{ConvSerialsSch} zobrazuje schému prevodníkov napäťových úrovní sériového a i2c rozhrania. Z fungovania tohoto obvodu vyplýva že pre konverziu je nutné odstrániť pull-up rezistory 3.3 $V$ časti obvodu. Ďalej je nutné odpájať unipolárne tranzistory a nahradiť ich prepojom. Umiestnenie súčiastok na PCB a spôsobu prepojenia ktorým je nutné tranzistory nahradiť sú zobrazené na ukážkach \ref{ConvSerial} a \ref{ConvI2c}.
 
\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.66\textwidth]{obrazky/ConvSerialsSch}
  \end{center}
  \caption{Schéma I2C a sériového prevodníku napäťových úrovní.}
  \label{ConvSerialsSch}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/ConvSerial}
  \end{center}
  \caption{Konverzné úkony na prevodníku napätí sériového rozhrania medzi jadrom a kitom.}
  \label{ConvSerial}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.75\textwidth]{obrazky/ConvI2c}
  \end{center}
  \caption{Konverzné úkony na prevodníku napätí i2c rozhrania medzi jadrom a kitom.}
  \label{ConvI2c}
\end{figure}

Konverzný úkon prevodníku digitálnych úrovní je zobrazený na ukážke \ref{ConShifter}. 

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.65\textwidth]{obrazky/ConShifter}
  \end{center}
  \caption{Konverzné úkony na prevodníku napäťových úrovní pre GPIO.}
  \label{ConShifter}
\end{figure}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/ConvOpAmp1}
  \end{center}
  \caption{Konverzný úkon na prevodníku analógového výstupu tlačidiel lcd modulu.}
  \label{ConvOpAmp1}
\end{figure}

Konverzné úkony na prevodníku úrovňe napätia tlačidla lcd modulu a prevodníku úrovňe napätia výstupu modulu teplomeru spočívajú len v odpájaní duálneho operačného zosilňovača a prepojenia vstupu a výstupu jeho obvodu. Toto prepojenie môže byť pre jednoduchosť vedené aj medzi plôškami 6 a 3. Všetky pomocné súčiastky oboch obvodov sú odstránením púzdra operačných zosilňovačov vypojené.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/ConvOpAmp2}
  \end{center}
  \caption{Konverzný úkon na prevodníku výstupu modulu teplomeru.}
  \label{ConvOpAmp2}
\end{figure}

\section{SW architektúra}
Pre problémy s HW jadra a situáciou ktorá znemožnila nájsť náhradu včas, bolo úsilie smerované na architektúru a cross-platformovú časť kódu. Táto časť kódu pozostáva z nasledovných súborov:
\begin{itemize}
\item scriptingInterface
\item HWTest
\item highlevelSettings
\item fixtureBrd
\item LowLevelWrapper
\end{itemize}

súbory scriptingInterface.c a ScriptingInterface.c slúžia na obsluhu Lua virtuálneho stroja. ScriptingInterface obsahuje definície funkcií ktoré slúžia ako wrapper na volanie C funkcií Lua funkciami, obsahuje C funkciu \textit{lua\_State* luainit(void)} ktorá vytvorí Lua kontext, importuje základné Lua knižnice a namapuje Lua funkcie s C funkciami. Táto funkcia je volaná funkciou \textit{int luamain(char* payload, int payloadLen, int error, int intArg, int event)} ak Lua kontext neexistuje v čase volania.

Funkcia \textit{int luamain(char* payload, int payloadLen, int error, int intArg, int event)} slúži na spustenie Lua virtuálneho stroja, kde argument payload slúži na dodanie Lua binárneho kódu na spustenie, payLoadLen má obsahovať jeho dĺžku a event vyberá udalosť ktorá sa má v Lua virtuálnom stroji počas behu volať. Momentálne je vytvorená len jedna, ich pridávanie je ale jednoduché. Súbor usb\_device\_interface\_0\_cic\_vcom.c obsahuje príklad načítania a spustenia Lua kódu, ten sa nachádza na rozsahu riadkov 191 až 299.

HWTest obsahuje kód pre testovanie modulov obsiahnutých v kite. Obsahuje jednu funkciu v ktorej je hard-code na skúšanie modulov. Je možné volať túto funkciu na test modulov alebo ju nahradiť vlastnou, prípadne použiť prístup písania testov v Lua.

súbor highlevelSetting obsahuje len definície na prepínanie medzi zvolenými high level riešeniami (Prepínanie medzi Lua, Custom jazyka a Hard-Code prístupu) z ktorých je pripravená implementácia pre Lua a Hard-Code.

Súbor fixtureBrd obsahuje funkcie na prácu z HW ktorý sa nachádza na prípravku a je nezávislý od voľby jadra. To umožňuje jeho implementáciu v podobe cross-platformového kódu.

Súbor LowLeverWrappers obsahuje wrapery ktoré je pri portovaní a implementácií jadra definovať tak aby volali platformovo závislé funkcie na obsluhu periférií jadra. Definície funkcií tohoto súboru vychádzajú z tých aké sa bežne používajú v API rôznych platforiem. Názvy obsiahnutých funkcií sú väčšinou samo-opisné. Funkcie čo začínajú slovom COM\_ slúžia na komunikáciu s PC cez sériové rozhranie, či sa jedná o VCOM alebo iné. Mapovanie pinov a periférnych zariadený je v HW také ako zodpovedá platforme arduino Due, (zobrazené na ukážke \ref{Pins}) a pri implementácií je nutné dbať na to aby čísla pinov boli v súlade s použitou predlohou. 


\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=0.95\textwidth]{obrazky/Pins}
  \end{center}
  \caption{Detail vývodov zásuvky pre modul jadra.}
  \label{Pins}
\end{figure}

