Skip to content

Commit

Permalink
sequence diagram for debounce example
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusmm committed Mar 2, 2019
1 parent b6cb4a1 commit 6e313c6
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
13 changes: 11 additions & 2 deletions capitol_5.tex
Original file line number Diff line number Diff line change
Expand Up @@ -573,12 +573,13 @@ \section{\em Debounce}

Les tècniques més habituals es basen en programar un {\em timer} o una tasca programada per que cridi una funció d'avaluació de forma periòdica (cada X mil·lisegons) i la dita funció llegeixi el valor de l'entrada i decideixi el valor real de l'entrada \cite{debounce1}\cite{debounce2}.

Un altre forma de fer-ho, potser més senzilla és la de un cop detectat un primer flanc, deixar de llegir l'entrada fins passat un temps i un cop transcorregut el temps, es llegeix el valor de l'entrada altre cop. Això es pot fer fàcilment controlant un Timer des de la ISR d'entrada del pin.
Un altre forma de fer-ho, potser més senzilla és la de un cop detectat un primer flanc, deixar de llegir l'entrada fins passat un temps i un cop transcorregut el temps, es llegeix el valor de l'entrada altre cop. Això es pot fer fàcilment controlant un Timer des de la ISR d'entrada del pin, tal com es veurà a continuació.

\subsection{Un exemple de {\em debouce}}
El codi d'aquest examples està, com sempre, al \href{https://github.com/mariusmm/cursembedded/tree/master/Simplicity/GPIO_Debouncing}{repositori}.
Primer cal configurar el Timer per què compti un cert temps i generi una IRQ un cop transcorregut aquest temps. Per això configurem el valor Top tal com ja vàrem fer a \fullref{sub:Timers}.

En aquest exemple es configura el valor top per que estigui comptant 100 mil·lisegons fent un càlcul molt similar al de l'exemple amb Timers anterior. També es prepara la \gls{ISR} pel {\em Timer1} tal com es veu al Llistat~\ref{timer_debouncing}
En aquest exemple es configura el valor top per que estigui comptant 100 mil·lisegons fent un càlcul molt similar al de l'exemple amb Timers anterior. També es prepara la \gls{ISR} pel {\em Timer1} tal com es veu al Llistat~\ref{timer_debouncing} (veure Figura~\ref{fig:TimerDebounce}).

\index{TIMER1\_IRQHandler()}\index{TIMER\_IntGet()}\index{TIMER\_IntClear()}\index{GPIO\_PinInGet()}
\begin{lstlisting}[style=customc, caption=ISR del timer per fer debouncing, label=timer_debouncing]
Expand All @@ -597,6 +598,14 @@ \subsection{Un exemple de {\em debouce}}
}
\end{lstlisting}


\begin{figure}
\centering
\includegraphics[width=0.85\textwidth, keepaspectratio]{imatges/DebouceSeq.png}
\caption{Diagrama de seqüència de l'exemple de {\em debounce}}
\label{fig:TimerDebounce}
\end{figure}

La variable {\em timer\_running} es defineix com una variable booleana (i volàtil) amb valor per defecte a false. A aquesta \gls{ISR} es comprova el valor desitjat de l'entrada i si és el cas, s'actualitza el comptador.

Per últim a la ISR del \gls{GPIO} corresponent inserim el codi següent per engegar el {\em Timer} quan es detecti un flanc al senyal (un canvi al seu valor), tal com es veu al Llistat~\ref{timer_debouncing_ISR}:
Expand Down
Binary file added imatges/DebouceSeq.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions plantuml/DebouceSeq.plantuml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
' Debounce example activity diagram

@startuml

skinparam sequence {
ArrowColor #009944
ActorBorderColor #009944
LifeLineBorderColor #009944
LifeLineBackgroundColor #00AA55
ParticipantBorderColor #009944
ParticipantBackgroundColor #00AA55
}

actor Usuari order 1
participant GPIO_ISR order 2
participant Timer order 3
participant Timer_ISR order 4
|||
Usuari -> GPIO_ISR: Botó
GPIO_ISR -->> Timer: Start
Timer -->> Timer: counting
... 100 mil·lisegons...
Timer -->> Timer_ISR: Timer overflow

@enduml

0 comments on commit 6e313c6

Please sign in to comment.