master
Øyvind Skaaden 2020-10-04 23:46:13 +02:00
parent b93294bd34
commit aa4c1886d1
100 changed files with 17713 additions and 0 deletions

BIN
D9/D9.pdf Normal file

Binary file not shown.

196
D9/D9.tex Normal file
View File

@ -0,0 +1,196 @@
%Dokumentinnstillinger:---------------------------------
\documentclass[11pt,norsk]{elsys-design}
\input{clangTex}
\heading{Designnotat}
\title{FSK-Demodulator}
\author{Øyvind Skaaden}
\version{2.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
\begin{figure}[!htbp]
\centering
\includegraphics[width=0.6\textwidth]{figurer/innledning.pdf}
\caption{En prinsipiell FSK-demodulator. Har inngangen $r(t)$ og utgangene $b(t)$ og $u(t)$.}
\label{fig:problem}
\end{figure}
Det å overføre data er en viktig oppgave innenfor elektronikk. Det kan gjøres på veldig mange måter, som for eksempel å gjøre det direkte ved å sende digitale pulser. Men i andre tilfeller ønsker vi at signalet skal være så simpelt som overhodet mulig.
Et sinus-signal har den egenskapen at den er veldig enkel og har en veldig definert oppførsel gjennom veldig mange systemer og medier. Si hvis du skal sende et radio-signal er et sinus-signal ofte det beste signalet. Men hvordan skal vi overføre informasjon gjennom et sinus-signal? Igjen er det mange måter å gjøre det på men en av de er å endre litt på frekvensen til signalet, såkalt FSK (Frekvensskift-modulasjon \cite{fsk-wiki}).
For å lese av informasjonen som er modulert av FSK, må vi ha en FSK-demodulator som i \autoref{fig:problem}.
Her vil systemet ta inn et FSK-signal på inngangen $r(t)$, og utgangen $b(t)$ vil være det demodulerte signalet. Utgangen $u(t)$ vil fortelle status på om det kommer inn et FSK-signal som demoduleres til ugangen $b(t)$.
Inngangssignalet vil inneholde to frekvensen $f_0 $ og $f_1 $. Vi ønsker at $b(t) = \text{HØY}$ når $f_1 $ er på inngangen $r(t)$ og $b(t) = \text{LAV}$ når $f_0 $ er på inngangen $r(t)$.
Den ferdige demodulatoren må også ha et areal mindre enn $4\text{cm}^{2}$.
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det å lage en enkel FSK-demodulator, kan gjøres på mange måter. Det går ann å bruke digital signalprossesering og digitale filtere for å oppnå ønsket oppførsel. Men her baseres vi oss på å måle perioden på signalet som kommer.
Det er ønskelig å lage et firkantpuls-tog med samme frekvens som inngangssignalet, fordi det er mye letter å måle perioden, eller bredden, på signalet med et signal med en brå kant når det skal leses av med en mikrokontroller.
Vi trenger en komparator som kan gjøre om et sinussignal til et firkantpuls-tog med samme frekvens. En enkel komparatorkrets er som i \autoref{circ:komparator}.
\begin{figure}
\centering
\begin{circuitikz}[scale=1, every node/.style={transform shape}]
\draw
(0,0) node[op amp,yscale=-1](opamp){}
(opamp.up) node[ground] {} -- (opamp.up)
(opamp.down) ++ (0,.5) node[opampuplbl] {$5V$} -- (opamp.down)
(opamp.+) to [short, -*] ++(-2,0) coordinate(inn)
to [R, l=$R_1$] ++(0,2) coordinate(R1)
(R1) node[opampuplbl] {$5V$}
(inn) -- ++(0,-1)
to [R, l_=$R_2$] ++(0,-2) node[ground] {}
(inn) to [C, l=$C_1$, -o] ++(-2,0) node[left] {Signal inn}
(opamp.-) to [short, -*] ++(-1,0) coordinate(minus)
to [R, l=$R_4$] ++(0,-2) node[ground] {}
(minus) -- ++(0,1)
to [R, l_=$R_3$] ++(0,2) coordinate(R3)
(R3) node[opampuplbl] {$5V$}
(opamp.out) to [short, -o] ++(1,0) node[right, text width=3cm] {Firkant ut, til mikrokontroller}
;
\end{circuitikz}
\caption{Enkel komparator-krets for enkel strømforsyning. Tar inn et periodisk signal, og på utgangen er det et firkanpuls-tog med samme periode.}
\label{circ:komparator}
\end{figure}
Komparatoren har en spennings-bias på inngangene. Dette er for at den skal kunne fungere med en enkel spenningskilde. Da lager vi en virtuel jord med mostandene $R_3 $ og $R_4 $ og flytter nullpunktet til inngangen like mye. For enkelhetens skyld, pleier alle motstandene å være like store, i størrelsesorden $1k\Omega$ til $100k\Omega$ grunnet komparatoren. Kondensatoren $C_1 $ må kun være tilstrekkelig stor for å ikke endre på det orginale signalet.
Ved å ha signalet som er firkantpuls med samme periode eller frekvens som det orginale signalet kan vi bruke signalet til å trigge en interupt på en mikrokontroller og måle perioden mellom interuptsene. Vi kan da enkelt regne ut frekvensen med \eqref{eq:periodeFreq}, der perioden er $T$ og frekvensen $f$.
\begin{align}
f = \frac{1}{T} \label{eq:periodeFreq}
\end{align}
Etter å ha regnet ut frekvensen er det så enkelt som å sjekke om frekvensen som leses er enten $f_0 $ eller $f_1 $ for å så sette utgangene $b(t)$ og $u(t)$ etter kravene i \autoref{sec:innledning}.
\section{Realisering og test}
\label{sec:realisering}
\subsection{Realisering}
For å realisere kretsen vil vi bruke en Arduino Uno, med mikrokontrolleren ATmega328P \cite{atmega}. Denne finnes i to størrelser, der den ene er under $1\text{cm}^{2}$. Vi kommer også til å bruke en LF353-P \cite{opamp} operasjons-forsterker som komparator.
Som motstander bruker vi $20k\Omega$ motstander. Dette vil sette spenningsbiasen inn på komparatoren til ca $2.5$V. Kondensatoren ble valgt til $1\mu$F.
Vi velger utganene D6 og D7 på mikrokontrolleren som utganger til henholdsvis $u(t)$ og $b(t)$. Biblioteket som blir brukt til å måle frekvensen bruker pinne D8. Så inngangen $r(t)$ skal inn på D8.
Biblioteket som blir brukt heter \textit{FreqMeassure} \cite{freqMes}. Det måler frekvensen på pinne D8 på en Arduino. Frekvensen kan da taes gjennomsnitt av og deretter brukes til å bestemme hvordan $u(t)$ og $b(t)$ skal oppføre seg. Biblioteket krever også at signalet er enten logisk høy eller lav, altså et firkantpuls-tog.
Ferdig krets som i \autoref{fig:ferdigKrets}.
\begin{figure}[!htpb]
\centering
\includegraphics[width=\textwidth]{figurer/FerdigKrets.pdf}
\caption{Den ferdige kretsen med ferdig oppkoblede pinner på Arduinoen. }
\label{fig:ferdigKrets}
\end{figure}
For å finne frekvensene FSK-demodulatoren skal fungere på, så sjekker vi lydsignalet med en spektrumanalysator. Ut i fra målinger gjort i \autoref{fig:maaling}, så ser vi at frekvensene er $f_0 = 325$Hz og $f_1 = 750$Hz. Bruker dette i koden som kan leses i \autoref{sec:code}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavfrekvenser.png}
\caption{Måling av frekvenser i lydsignal. Den røde linjen er $f_0$ og den blå linjen for $f_1$.}
\label{fig:maaling}
\end{figure}
\subsection{Test}
\label{sec:test}
Etter å ha skrevet inn frekvensene i koden, så klarer Arduinoen å demodulere signalet i signalet som skal testes. Se \autoref{fig:bt}, \autoref{fig:ut} og \autoref{fig:btut}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavbt.png}
\caption{Demodulering av FSK signalet, den gule linjen er det detmodulerte signalet $b(t)$, det blå er inngangssignalet $r(t)$. De partinene med liten amplitude er $750$Hz og de med stor er $325$Hz.}
\label{fig:bt}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavut.png}
\caption{Demodulering av FSK signalet, den gule linjen er signalet $u(t)$ som sier om det er et demodulert signal, og det blå er inngangssignalet $r(t)$. De partinene med liten amplitude er $750$Hz og de med stor er $325$Hz.}
\label{fig:ut}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavbtut.png}
\caption{Demodulering av FSK signalet, den gule linjen er det detmodulerte signalet $b(t)$, det blå er $u(t)$. }
\label{fig:btut}
\end{figure}
Den realiserte kretsen ser ut som i \autoref{fig:kretsIRL}. Det totale arealet overstiger ikke $4\text{cm}^2$. Det ser kanskje ikke sånn ut, men breadboard tar veldig mye plass.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/krets.jpg}
\caption{Realisert krets, signalet $r(t)$ går inn ved kondensatoren, $u(t)$ kommer ut på D6, $b(t)$ kommer ut på D7.}
\label{fig:kretsIRL}
\end{figure}
\section{Konklusjon}
\label{sec:konklusjon}
Kretsen gjorde det den skal gjøre, ved å måle frekvensen ved hjelp av et bibliotek til Arduino. Siden det kun er to variabler som styrer hvilke frekvenser som skal brukes i demoduleringen, er det også en veldig enkel demodulator å bruke. Den kunne vært gjort mindre ved å ikke bruke et breadboard, men klarer å fremdeles ha et totalareal på under $4\text{cm}^2$.
\clearpage
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{fsk-wiki}
Wikipedia contributors. (2019, November 10). \textit{Frequency-shift keying}. In Wikipedia, The Free Encyclopedia. Retrieved 18:13, November 19, 2019, from \url{https://en.wikipedia.org/w/index.php?title=Frequency-shift_keying&oldid=925429929}
\bibitem{atmega}
ATMEL. (2009). \textit{ATmega328P, Rev. 8025IAVR02/09}. \url{https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf}
\bibitem{opamp}
Texas Instruments. (2009). \textit{LF353 Wide-Bandwidth JFET-Input Dual Operational Amplifier}. SLOS012C MARCH 1987REVISED MARCH 2016. \url{http://www.ti.com/lit/ds/symlink/lf353.pdf}
\bibitem{freqMes}
PJRC, (Hentet 19. november 2019). \textit{FreqMeasure Library}. \url{https://www.pjrc.com/teensy/td_libs_FreqMeasure.html}
\bibitem{notat}
L. Lundheim. (05.11.2019). \textit{Teknisk Notat: Digital kommunikasjon med FSK, v.3}. NTNU, Elsys-2017-LL-1.2.
\end{thebibliography}{}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\section{Kode til arduino}
\label{sec:code}
\lstinputlisting[style=CStyle]{D9Arduino/D9Arduino.ino}
\end{document}

196
D9/D9.tex.old Normal file
View File

@ -0,0 +1,196 @@
%Dokumentinnstillinger:---------------------------------
\documentclass[11pt,norsk]{elsys-design}
\input{clangTex}
\heading{Designnotat}
\title{FSK-Demodulator}
\author{Øyvind Skaaden}
\version{1.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
\begin{figure}[!htbp]
\centering
\includegraphics[width=0.6\textwidth]{figurer/innledning.pdf}
\caption{En prinsipiell FSK-demodulator. Har inngangen $r(t)$ og utgangene $b(t)$ og $u(t)$.}
\label{fig:problem}
\end{figure}
Det å overføre data er en viktig oppgave innenfor elektronikk. Det kan gjøres på veldig mange måter, som for eksempel å gjøre det direkte ved å sende digitale pulser. Men i andre tilfeller ønsker vi at signalet skal være så simpelt som overhodet mulig.
Et sinus-signal har den egenskapen at den er veldig enkel og har en veldig definert oppførsel gjennom veldig mange systemer og medier. Si hvis du skal sende et radio-signal er et sinus-signal ofte det beste signalet. Men hvordan skal vi overføre informasjon gjennom et sinus-signal? Igjen er det mange måter å gjøre det på men en av de er å endre litt på frekvensen til signalet, såkalt FSK (Frekvensskift-modulasjon \cite{fsk-wiki}).
For å lese av informasjonen som er modulert av FSK, må vi ha en FSK-demodulator som i \autoref{fig:problem}.
Her vil systemet ta inn et FSK-signal på inngangen $r(t)$, og utgangen $b(t)$ vil være det demodulerte signalet. Utgangen $u(t)$ vil fortelle status på om det kommer inn et FSK-signal som demoduleres til ugangen $b(t)$.
Inngangssignalet vil inneholde to frekvensen $f_0 $ og $f_1 $. Vi ønsker at $b(t) = \text{HØY}$ når $f_1 $ er på inngangen $r(t)$ og $b(t) = \text{LAV}$ når $f_0 $ er på inngangen $r(t)$.
Den ferdige demodulatoren må også ha et areal mindre enn $4\text{cm}^{2}$.
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det å lage en enkel FSK-demodulator, kan gjøres på mange måter. Det går ann å bruke digital signalprossesering og digitale filtere for å oppnå ønsket oppførsel. Men her baseres vi oss på å måle perioden på signalet som kommer.
Det er ønskelig å lage et firkantpuls-tog med samme frekvens som inngangssignalet, fordi det er mye letter å måle perioden, eller bredden, på signalet med et signal med en brå kant når det skal leses av med en mikrokontroller.
Vi trenger en komparator som kan gjøre om et sinussignal til et firkantpuls-tog med samme frekvens. En enkel komparatorkrets er som i \autoref{circ:komparator}.
\begin{figure}
\centering
\begin{circuitikz}[scale=1, every node/.style={transform shape}]
\draw
(0,0) node[op amp,yscale=-1](opamp){}
(opamp.up) node[ground] {} -- (opamp.up)
(opamp.down) ++ (0,.5) node[opampuplbl] {$5V$} -- (opamp.down)
(opamp.+) to [short, -*] ++(-2,0) coordinate(inn)
to [R, l=$R_1$] ++(0,2) coordinate(R1)
(R1) node[opampuplbl] {$5V$}
(inn) -- ++(0,-1)
to [R, l_=$R_2$] ++(0,-2) node[ground] {}
(inn) to [C, l=$C_1$, -o] ++(-2,0) node[left] {Signal inn}
(opamp.-) to [short, -*] ++(-1,0) coordinate(minus)
to [R, l=$R_4$] ++(0,-2) node[ground] {}
(minus) -- ++(0,1)
to [R, l_=$R_3$] ++(0,2) coordinate(R3)
(R3) node[opampuplbl] {$5V$}
(opamp.out) to [short, -o] ++(1,0) node[right, text width=3cm] {Firkant ut, til mikrokontroller}
;
\end{circuitikz}
\caption{Enkel komparator-krets for enkel strømforsyning. Tar inn et periodisk signal, og på utgangen er det et firkanpuls-tog med samme periode.}
\label{circ:komparator}
\end{figure}
Komparatoren har en spennings-bias på inngangene. Dette er for at den skal kunne fungere med en enkel spenningskilde. Da lager vi en virtuel jord med mostandene $R_3 $ og $R_4 $ og flytter nullpunktet til inngangen like mye. For enkelhetens skyld, pleier alle motstandene å være like store, i størrelsesorden $1k\Omega$ til $100k\Omega$ grunnet komparatoren. Kondensatoren $C_1 $ må kun være tilstrekkelig stor for å ikke endre på det orginale signalet.
Ved å ha signalet som er firkantpuls med samme periode eller frekvens som det orginale signalet kan vi bruke signalet til å trigge en interupt på en mikrokontroller og måle perioden mellom interuptsene. Vi kan da enkelt regne ut frekvensen med \eqref{eq:periodeFreq}, der perioden er $T$ og frekvensen $f$.
\begin{align}
f = \frac{1}{T} \label{eq:periodeFreq}
\end{align}
Etter å ha regnet ut frekvensen er det så enkelt som å sjekke om frekvensen som leses er enten $f_0 $ eller $f_1 $ for å så sette utgangene $b(t)$ og $u(t)$ etter kravene i \autoref{sec:innledning}.
\section{Realisering og test}
\label{sec:realisering}
\subsection{Realisering}
For å realisere kretsen vil vi bruke en Arduino Uno, med mikrokontrolleren ATmega328P \cite{atmega}. Denne finnes i to størrelser, der den ene er under $1\text{cm}^{2}$. Vi kommer også til å bruke en LF353-P \cite{opamp} operasjons-forsterker som komparator.
Som motstander bruker vi $20k\Omega$ motstander. Dette vil sette spenningsbiasen inn på komparatoren til ca $2.5$V. Kondensatoren ble valgt til $1\mu$F.
Vi velger utganene D6 og D7 på mikrokontrolleren som utganger til henholdsvis $u(t)$ og $b(t)$. Biblioteket som blir brukt til å måle frekvensen bruker pinne D8. Så inngangen $r(t)$ skal inn på D8.
Biblioteket som blir brukt heter \textit{FreqMeassure} \cite{freqMes}. Det måler frekvensen på pinne D8 på en Arduino. Frekvensen kan da taes gjennomsnitt av og deretter brukes til å bestemme hvordan $u(t)$ og $b(t)$ skal oppføre seg. Biblioteket krever også at signalet er enten logisk høy eller lav, altså et firkantpuls-tog.
Ferdig krets som i \autoref{fig:ferdigKrets}.
\begin{figure}[!htpb]
\centering
\includegraphics[width=\textwidth]{figurer/FerdigKrets.pdf}
\caption{Den ferdige kretsen med ferdig oppkoblede pinner på Arduinoen. }
\label{fig:ferdigKrets}
\end{figure}
For å finne frekvensene FSK-demodulatoren skal fungere på, så sjekker vi lydsignalet med en spektrumanalysator. Ut i fra målinger gjort i \autoref{fig:maaling}, så ser vi at frekvensene er $f_0 = 325$Hz og $f_1 = 750$Hz. Bruker dette i koden som kan leses i \autoref{sec:code}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavfrekvenser.png}
\caption{Måling av frekvenser i lydsignal. Den røde linjen er $f_0$ og den blå linjen for $f_1$.}
\label{fig:maaling}
\end{figure}
\subsection{Test}
\label{sec:test}
Etter å ha skrevet inn frekvensene i koden, så klarer Arduinoen å demodulere signalet i signalet som skal testes. Se \autoref{fig:bt}, \autoref{fig:ut} og \autoref{fig:btut}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavbt.png}
\caption{Demodulering av FSK signalet, den gule linjen er det detmodulerte signalet $b(t)$, det blå er inngangssignalet $r(t)$. De partinene med liten amplitude er $750$Hz og de med stor er $325$Hz.}
\label{fig:bt}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavut.png}
\caption{Demodulering av FSK signalet, den gule linjen er signalet $u(t)$ som sier om det er et demodulert signal, og det blå er inngangssignalet $r(t)$. De partinene med liten amplitude er $750$Hz og de med stor er $325$Hz.}
\label{fig:ut}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/maalingavbtut.png}
\caption{Demodulering av FSK signalet, den gule linjen er det detmodulerte signalet $b(t)$, det blå er $u(t)$. }
\label{fig:btut}
\end{figure}
Den realiserte kretsen ser ut som i \autoref{fig:kretsIRL}. Det totale arealet overstiger ikke $4\text{cm}^2$. Det ser kanskje ikke sånn ut, men breadboard tar veldig mye plass.
\begin{figure}[!htbp]
\centering
\includegraphics[width=\textwidth]{figurer/krets.jpg}
\caption{Realisert krets, signalet $r(t)$ går inn ved kondensatoren, $u(t)$ kommer ut på D6, $b(t)$ kommer ut på D7.}
\label{fig:kretsIRL}
\end{figure}
\section{Konklusjon}
\label{sec:konklusjon}
Kretsen gjorde det den skal gjøre, ved å måle frekvensen ved hjelp av et bibliotek til Arduino. Siden det kun er to variabler som styrer hvilke frekvenser som skal brukes i demoduleringen, er det også en veldig enkel demodulator å bruke. Den kunne vært gjort mindre ved å ikke bruke et breadboard, men klarer å fremdeles ha et totalareal på under $4\text{cm}^2$.
\clearpage
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{fsk-wiki}
Wikipedia contributors. (2019, November 10). \textit{Frequency-shift keying}. In Wikipedia, The Free Encyclopedia. Retrieved 18:13, November 19, 2019, from \url{https://en.wikipedia.org/w/index.php?title=Frequency-shift_keying&oldid=925429929}
\bibitem{atmega}
ATMEL. (2009). \textit{ATmega328P, Rev. 8025IAVR02/09}. \url{https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf}
\bibitem{opamp}
Texas Instruments. (2009). \textit{LF353 Wide-Bandwidth JFET-Input Dual Operational Amplifier}. SLOS012C MARCH 1987REVISED MARCH 2016. \url{http://www.ti.com/lit/ds/symlink/lf353.pdf}
\bibitem{freqMes}
PJRC, (Hentet 19. november 2019). \textit{FreqMeasure Library}. \url{https://www.pjrc.com/teensy/td_libs_FreqMeasure.html}
\bibitem{notat}
L. Lundheim. (05.11.2019). \textit{Teknisk Notat: Digital kommunikasjon med FSK, v.3}. NTNU, Elsys-2017-LL-1.2.
\end{thebibliography}{}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\section{Kode til arduino}
\label{sec:code}
\lstinputlisting[style=CStyle]{D9Arduino/D9Arduino.ino}
\end{document}

View File

@ -0,0 +1,103 @@
#include <TimerOne.h>
// Inngang og utgangspinner
#define r_in 2
#define u_out 6
#define b_out 7
// De to frekvensene som sjekkes som
const unsigned int f_0 = 330;
const unsigned int f_1 = 750;
// Verdier for å kompensere for at signalet ikke nødvendigvis er helt perfekt
// Nå kan signalet være +- 5%
const float lowB = 0.95;
const float highB = 1.05;
// 10000 mikrosekund mellom hver gang den regner ut frekvensen -> gir Baudrate = 100Hz
const unsigned int baudrate = 100000;
// Antal målinger som skal summes og taes gjennomsnitt av
const unsigned int meassures = 10;
// Globale variabler
unsigned long lastMess;
unsigned int periods[meassures];
// Gjør at dersom det gjøres kalkulasjoner med listen så blir den ikke endret hvis det kommer en ny interupt
bool calc = false;
void setup() {
// Setter opp en interupt på r_in pinnen, måler perioden
attachInterrupt(digitalPinToInterrupt(r_in), FreqMess, RISING);
// Setter utgangene riktig
pinMode(u_out, OUTPUT);
pinMode(b_out, OUTPUT);
// Oppsett av timer interrupt
Timer1.initialize(baudrate); // baudrate mikrosekund mellom hver gang den regner ut frekvensen
// Argumentet i "attachInterrupt" bestemmer hvilken funskjon som er interrupt handler
Timer1.attachInterrupt(calcFreq);
//Debug
Serial.begin(9600);
}
void loop() {
// Wait for interupt
delay(10);
}
// Denne regner om en liste med perioder om til en frekvens
unsigned int microPeriodToFreq() {
unsigned int period = 0;
for (int i = 0; i < meassures; ++i) {
period += periods[i];
}
Serial.println(period);
period = period / meassures;
return (1 / period) * pow(10, 6);
}
// Flytter listen med perioder nedover og lager plass til neste.
void movePeriods() {
for (int i = 0; i < meassures - 1; ++i) {
periods[i + 1] = periods[i];
}
}
// Denne måler faktisk frekvensen.
void FreqMess() {
// Dersom det regnes og leses fra listen, ikke endre på den.
if (!calc) {
movePeriods();
Serial.println("Meassure");
// Setter den nye målingen ved å finne differansen siden sist den ble målt
periods[0] = micros() - lastMess;
lastMess = micros();
}
}
// Denne trigges med baudrate hastighet, Endrer på utgangene i forhold til kravene som er satt i variablene f_0 og f_1
void calcFreq() {
calc = true;
unsigned int freq = microPeriodToFreq();
Serial.println(freq);
if (freq > f_0 * lowB || freq < f_0 * highB) {
digitalWrite(b_out, LOW);
digitalWrite(u_out, HIGH);
}
else if (freq > f_1 * lowB || freq < f_1 * highB) {
digitalWrite(b_out, HIGH);
digitalWrite(u_out, HIGH);
}
else {
digitalWrite(b_out, LOW);
digitalWrite(u_out, LOW);
}
calc = false;
}

View File

@ -0,0 +1,87 @@
/* Program to measure the frequenncy of a input, on digital pin 8
* Made by Oyvind Skaaden
*/
#include <FreqMeasure.h> // Library for measuring the frequency
#define r_in 8 // Pinnen som brukes til å lese frekvensen
// Pinner som skal skrives til
#define u_out 6
#define b_out 7
// Frekvensene som blir brukt til demodulering
const unsigned int f0 = 325;
const unsigned int f1 = 750;
// Diverse kalkulasjoner for å kompensere for at frekvensen kan leses
// eller være feil på
const float offs = 0.05;
const float lowB = 1 - offs;
const float highB = 1 + offs;
// Hvor mange målinger som skal snittes
const unsigned int maxCount = 10;
// #### Globale verdier ####
double sum = 0;
unsigned int count = 0;
// Variabel for en timeoutfunksjon
unsigned long mesTime = 0;
void setup() {
// Starter en seriel kommunikasjonsport for å kunne bruke det
// demodulerte signalet gjennom feks en data
Serial.begin(9600);
// Start opp måling av frekvenser på pinne 8
FreqMeasure.begin();
// Setter pinmode til utgangspinnene
pinMode(u_out, OUTPUT);
pinMode(b_out, OUTPUT);
}
void loop() {
// Dersom biblioteket kan lese frekvenser...
if (FreqMeasure.available()) {
// Time-out funksjonen
mesTime = millis();
// Summer sammen målinger for å snitte dem
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > maxCount) {
// Snitt målingene for å gi en bedre måling
float freq = FreqMeasure.countToFrequency(sum / count);
// Her er grensene for hva som er lav og høy bit på FSK signalet.
if (freq > f0 * lowB && freq < f0 * highB) {
digitalWrite(b_out, LOW);
digitalWrite(u_out, HIGH);
Serial.print("LOW : ");
}
else if (freq > f1 * lowB && freq < f1 * highB) {
digitalWrite(b_out, HIGH);
digitalWrite(u_out, HIGH);
Serial.print("HIGH : ");
}
else {
digitalWrite(b_out, LOW);
digitalWrite(u_out, LOW);
Serial.print("OFF : ");
}
Serial.println(freq);
sum = 0;
count = 0;
}
}
else{
// Time-out funksjonen, dersom du ikke får noe signal på 10 ms,
// sett alle utganger til LOW
if (millis() - mesTime > 10){
digitalWrite(b_out, LOW);
digitalWrite(u_out, LOW);
Serial.println("OFF");
delay(10);
}
}
}

Binary file not shown.

BIN
D9/FSK57.wav Normal file

Binary file not shown.

BIN
D9/Filer.zip Normal file

Binary file not shown.

BIN
D9/Filer/FSK1.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK10.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK11.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK12.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK13.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK14.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK15.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK16.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK17.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK18.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK19.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK2.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK20.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK21.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK22.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK23.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK24.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK25.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK26.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK27.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK28.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK29.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK3.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK30.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK31.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK32.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK33.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK34.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK35.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK36.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK37.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK38.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK39.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK4.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK40.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK41.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK42.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK43.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK44.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK45.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK46.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK47.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK48.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK49.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK5.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK50.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK51.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK52.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK53.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK54.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK55.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK56.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK57.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK58.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK59.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK6.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK60.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK61.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK62.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK63.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK64.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK65.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK66.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK67.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK68.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK69.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK7.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK70.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK71.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK72.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK73.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK74.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK75.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK76.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK77.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK78.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK79.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK8.wav Normal file

Binary file not shown.

BIN
D9/Filer/FSK9.wav Normal file

Binary file not shown.

67
D9/clangTex.tex Normal file
View File

@ -0,0 +1,67 @@
\usepackage{xcolor}
\usepackage{listings}
\usepackage{courier}
\usepackage{listingsutf8}
\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{CStyle}{
basicstyle=\ttfamily,
commentstyle=\color{mGreen},
keywordstyle=\color{magenta},
stringstyle=\color{mPurple},
frame=single,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
language=C
}
\lstdefinestyle{PyStyle}{
commentstyle=\color{mGreen},
keywordstyle=\color{magenta},
stringstyle=\color{mPurple},
basicstyle=\footnotesize,
frame=single,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
language=Python
}
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{Ã}{{\~A}}1 {ã}{{\~a}}1 {Õ}{{\~O}}1 {õ}{{\~o}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
{»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
}
%numberstyle=\tiny\color{mGray},
%numbers=left,
%backgroundcolor=\color{backgroundColour},

BIN
D9/figurer/FerdigKrets.fzz Normal file

Binary file not shown.

BIN
D9/figurer/FerdigKrets.pdf Normal file

Binary file not shown.

BIN
D9/figurer/innledning.pdf Normal file

Binary file not shown.

BIN
D9/figurer/krets.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

8001
D9/figurer/maalingavbt.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D9/figurer/maalingavbt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

8001
D9/figurer/maalingavut.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D9/figurer/maalingavut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -0,0 +1,36 @@
// Eksempel kode for oppsett av timer-interrupt for en konstant samplingsfrekvens
#include <TimerOne.h>
/* Om du ikke har innstallert dette biblioteket
gå til Sketch -> Include library -> Manage Libraries
Søk opp TimerOne og innstaller*/
// Globale variaber
volatile int sample; // Holder siste sample
bool newSample; // Støtte varibel for å sjekke om ny sample er tatt
void setup() {
// Oppsett av timer interrupt
Timer1.initialize(500); // 500 mikrosekund mellom hver sample -> gir F_s = 2kHz
// Argumentet i "attachInterrupt" bestemmer hvilken funskjon som er interrupt handler
Timer1.attachInterrupt(takeSample);
}
void loop() {
if(newSample){
// Ny sample er tatt
/*** Kjør magi her ***/
newSample = false;
}
}
// Interrupt-handler (denne kalles ved hvert interrupt)
void takeSample(void){
sample = analogRead(0); // Sampler på A0
newSample = true;
}