<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=RF-link</id>
	<title>RF-link - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=RF-link"/>
	<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=RF-link&amp;action=history"/>
	<updated>2026-06-13T11:25:27Z</updated>
	<subtitle>Versionshistorie for denne side i HTX Arduino</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2517&amp;oldid=prev</id>
		<title>Bar: /* Referencer */</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2517&amp;oldid=prev"/>
		<updated>2022-10-22T16:11:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Referencer&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 22. okt. 2022, 18:11&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l589&quot;&gt;Linje 589:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linje 589:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Referencer ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Referencer ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori:JAL-moduler]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori:JAL-moduler]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori:Flere digitale signaler]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategori:Flere digitale signaler]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2392&amp;oldid=prev</id>
		<title>Bar: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2392&amp;oldid=prev"/>
		<updated>2022-10-22T14:16:07Z</updated>

		<summary type="html">&lt;p&gt;1 version importeret&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 22. okt. 2022, 16:16&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;da&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Ingen forskel)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2391&amp;oldid=prev</id>
		<title>htx_&gt;Ande5803: /* Specifikationer for RF-link */</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=RF-link&amp;diff=2391&amp;oldid=prev"/>
		<updated>2014-03-18T07:26:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Specifikationer for RF-link&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[fil:RF-link-tx.jpg|thumb|200px|right|Modul til sending af 433 MHz radiosignal]]&lt;br /&gt;
&lt;br /&gt;
[[fil:RF-link-rx.jpg|thumb|200px|right|Modul til modtagelse af 433 MHz radiosignal]]&lt;br /&gt;
&lt;br /&gt;
RF-link modulet er baseret på to billige moduler der kan købes sammen i Kina f.x. ved denne nethandel&amp;lt;ref&amp;gt;[http://www.miniinthebox.com/433m-superregeneration-wireless-transmitter-module-burglar-alarm-and-receiver-module_p391009.html Kinesisk netshop med dansksproget visning]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modulet er udviklet uden at kigge på databladet, men blot ved at gætte sig frem omkring de betegnelser der er på printet, hvor man kan se hvor den skal have stel og +5V, og hvor data skal ind/ud.&lt;br /&gt;
&lt;br /&gt;
Det er ikke så let at finde egentlige data på enhederne, men der ligger lidt på &lt;br /&gt;
sendermodulet &amp;lt;ref name=&amp;quot;sender&amp;quot;&amp;gt;[http://www.ananiahelectronics.com/FS100A.htm Side der beskriver FS1000A]&amp;lt;/ref&amp;gt;, godt nok i en 315 MHz version, men der er ikke den store forskel.&lt;br /&gt;
&lt;br /&gt;
Modtagermodulet er fundet på en lidt sjov side &amp;lt;ref name=&amp;quot;modtager&amp;quot;&amp;gt;[http://www.dientu4u.com/product/9054/Module-thu-XD-RF-5V.html En hjemmeside af uforståelig sproglig herkomst, men med noget indhold der kan tydes som modulet - og dets data]&amp;lt;/ref&amp;gt;, men man kan læse hvilke data den burde overholde.&lt;br /&gt;
&lt;br /&gt;
Er man interesseret i kommunikationen til [[Arduino]], så er der et eksempel på den her&amp;lt;ref&amp;gt;[http://zygzax.com/2013/03/15/comunicacion-entre-arduinos-por-medio-de-radiofrecuencia/?lang=en Side med eksempel på anvendelse af sender og modtager]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Teori for RF-link modulet ==&lt;br /&gt;
&lt;br /&gt;
Der er ikke så meget teori for RF-link modulet, da det princip der udnyttes blot er at transmittermodulet kan styres til at lave en frekvens på 433 MHz som den sender, eller der kan slukkes for den, så den ikke sender noget. Modtagermodulet giver så et højt signal ud når den modtager 433 MHz og et lavt når den ikke modtager noget.&lt;br /&gt;
&lt;br /&gt;
For at teste om der er &amp;quot;hul igennem&amp;quot; på det helt simple plan, så er der lavet et lille program, der ligger i [[media:rf-link-jal.zip|send1.jal]], og som består af følgende kode&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
forever loop&lt;br /&gt;
   tx = ! tx&lt;br /&gt;
   if kontakt then&lt;br /&gt;
      delay_10us(10) -- giver en puls/pauselængde på ca. 127 us&lt;br /&gt;
   else&lt;br /&gt;
      delay_10us(2)  -- giver en puls/pauselængde på ca. 47 us&lt;br /&gt;
   end if&lt;br /&gt;
end loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ved at sætte forsyning på modtageren kan man måle med et [[oscilloscop]] hvordan modtageren reagerer.&lt;br /&gt;
&lt;br /&gt;
Med et en frekvens på ca. 10 kHz (47 us puls og 47 us pause) vil det svare til en bitrate på 20.000 bit/sekund, her kan man se at puls og pause ikke modtages ens, som vist her:&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-send1.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Måling med 47 us puls-tid og 47 us pausetid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Denne forskel kan blive problematisk, hvis man ønsker at kommunikere så hurtigt. I den videre udvikling nedsættes hastigheden for at lette transmissionen.&lt;br /&gt;
&lt;br /&gt;
Hvis man i stedet sender med 127 us puls og pause, så bliver det modtagne signal noget tættere på en 50% [[duty-cycle]], som det kan ses her:&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-send2.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Måling med 127 us puls-tid og 127 us pausetid&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Princip for RF-link ==&lt;br /&gt;
&lt;br /&gt;
Opbygningen af RF-link består af to hardware-moduler: et sendermodul med en tilhørende software og et modtagermodul med en tilhørende software. De to moduler skal være indstillet til samme frekvens, hvor de viste moduler arbejder på 433 MHz.&lt;br /&gt;
&lt;br /&gt;
=== Sender-modul ===&lt;br /&gt;
Opbygningen af sendermodulet er en færdig opbygget oscillator, der arbejder på 433 MHz, hvor man ved hjælp af en transistor styrer om oscillatoren skal være tændt eller slukket ved hjælp af en transistor på modulet. Styringen sker ved hjælp af databenet, hvor det skal have 5V for at sende og 0V for at være slukket.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Ben!!Navn!!Betydning!!PIC-ben&lt;br /&gt;
|-&lt;br /&gt;
|1||GND||Stel||10&lt;br /&gt;
|-&lt;br /&gt;
|2||Vcc||+5V forsyning||9&lt;br /&gt;
|-&lt;br /&gt;
|3||Data||Sende signal - når den er høj, sendes 433 MHz||Valgfrit 1-8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Modtager-modul ===&lt;br /&gt;
Modtagermodulet består af en diskret opbygget modtager omkring to transistorer og en svingningskreds hvor der indgår en trimmekondensator som er afstemt til den ønskede frekvens. Herefter bliver signalet ensrettet og sammenlignet med et niveau, så modulet giver høj ud når det modtager noget på den ønskede frekvens, og det giver lavt niveau ud når der ikke modtages noget.&lt;br /&gt;
&lt;br /&gt;
Sammenligningen foretages med en LM358 comperator inde i modulet.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Ben!!Navn!!Betydning!!PIC-ben&lt;br /&gt;
|-&lt;br /&gt;
|1||GND||Stel||10&lt;br /&gt;
|-&lt;br /&gt;
|2||Data||Det modtagne signal - høj, når der modtages 433 MHz||Valgfrit 1-8 kant-interrupt&lt;br /&gt;
|-&lt;br /&gt;
|3||Data||Samme signal||Valgfrit 1-8 kant-interrupt&lt;br /&gt;
|-&lt;br /&gt;
|4||Vcc||+5V forsyning||9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Specifikationer for RF-link ===&lt;br /&gt;
Specifikationerne er sakset fra de hjemmesider det har været muligt at finde, som dokumenterer funktionen.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Sender modul&amp;lt;ref name=&amp;quot;sender&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter!!Data&lt;br /&gt;
|-&lt;br /&gt;
|Forsynings spænding||2.5V - 12V DC (nom. 5V)&lt;br /&gt;
|-&lt;br /&gt;
|Krævet forsynings-strøm||4mA @ 5V, 15mA @ 9V&lt;br /&gt;
|-&lt;br /&gt;
|Hvile-strømforbrug||10 uA&lt;br /&gt;
|-&lt;br /&gt;
|Modulationsform||ASK&lt;br /&gt;
|-&lt;br /&gt;
|Temperatur område||-10 til 60 grader C&lt;br /&gt;
|-&lt;br /&gt;
|Maks datarate||9600 k Baud&lt;br /&gt;
|-&lt;br /&gt;
|Data input||TTL niveau (0/5V)&lt;br /&gt;
|-&lt;br /&gt;
|Output effekt||20 mW @ 5V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Modtager modul&amp;lt;ref name=&amp;quot;modtager&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Parameter!!Data&lt;br /&gt;
|-&lt;br /&gt;
|Forsynings spænding||3V - 8V DC (nom. 5V)&lt;br /&gt;
|-&lt;br /&gt;
|Krævet forsynings-strøm|| &amp;lt; 3mA @ 5V&lt;br /&gt;
|-&lt;br /&gt;
|Modtage frekvens||315 / 433 MHz (433 MHz i vores version)&lt;br /&gt;
|-&lt;br /&gt;
|Frekvens område||260 - 440 MHz justerbart (undlad dette)&lt;br /&gt;
|-&lt;br /&gt;
|Modulationsform||ASK / OOK&lt;br /&gt;
|-&lt;br /&gt;
|RF følsomhed||-105 dBm (50 Ω)&lt;br /&gt;
|-&lt;br /&gt;
|Data rate||&amp;lt; 5 kbps (315 MHz, -95 dBm)&lt;br /&gt;
|-&lt;br /&gt;
|Temperatur område||-20 til 70 grader C&lt;br /&gt;
|-&lt;br /&gt;
|Data output||TTL niveau (0/5V)&lt;br /&gt;
|-&lt;br /&gt;
|Antenne længde||24 cm (315 MHz), 18 cm (433,92 MHz)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Målinger på RF-link sending ===&lt;br /&gt;
&lt;br /&gt;
For at udvikle en transmission, der kan overføre en byte korrekt, så opbygges der en datapakke ud fra følgende principper:&lt;br /&gt;
*Pakken starter med en marker på 1 ms sending og en kort pause.&lt;br /&gt;
*Der sendes en adresse, for at kunne sende til flere modtagere&lt;br /&gt;
*Efter adressen sendes det inverterede, for sikre at pakken går godt&lt;br /&gt;
*Den ønskede byte sendes&lt;br /&gt;
*Der sendes det inverterede, igen for at sikre at data kommer korrekt over&lt;br /&gt;
*Der sendes med mindst betydende bit først&lt;br /&gt;
*En lav bit (0) sendes som 120 us lavt efterfulgt af 70 us højt&lt;br /&gt;
*En høj bit (1) sendes som 120 us lavt efterfulgt af 170 us højt&lt;br /&gt;
&lt;br /&gt;
Sendingen efter disse principper, som også går igen i den endelige version er implementeret i [[media:rf-link-jal.zip|send2.jal]] og en samlet sending ser ud som følger:&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-send3.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Sending af en samlet pakke med marker og 4 bytes&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Pakken tager totalt ca. 9 ms at sende som vist.&lt;br /&gt;
&lt;br /&gt;
De 4 bytes består af byte med en adresse efterfulgt af den inverterede for at sikre at det modtages korrekt, derefter en byte med data og igen den inverterede for sikkerhed i modtagelsen.&lt;br /&gt;
&lt;br /&gt;
Adressen sendes for at kunne identificere hvilken enhed man sender til, og data er for at kunne sende noget konkret indhold – de to bytes kan ikke forveksles, da de altid kommer i den rækkefølge efter en marker på 1 ms.&lt;br /&gt;
&lt;br /&gt;
Byten sendes med mindstbetydende bit først, og et 0 er kodet som ca. 120 us lav og 70 us høj, mens et 1 er kodet som ca. 120 us lav og 170 us høj, så det er let at se forskel på dem i modtagelsen. Ved at der først sendes en byte og derefter den inverterede vil der altid sendes 8 lav og 8 høj, så pakketiden er konstant.&lt;br /&gt;
&lt;br /&gt;
Herunder ses en måling hvor man kan se slutningen af markeren efterfulgt af 9 bit. Første bit er høj, de næste 4 bit er lave, næste igen er høj og de to sidste bit der hører til byten er lave, og da mindst betydende bit sendes først, så er adressen udtrykt binært 0010_0001, hvilket svarer til 33, som det også kan ses i send2.jal.&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-send4.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Slutningen af marker og den første byte (adressen)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Målinger på RF-link modtagelse ===&lt;br /&gt;
&lt;br /&gt;
For at teste modtagelsen er der opbygget en relativ simpel modtagelse [[media:rf-link-jal.zip|modtag1.jal]], hvor man venter aktivt på at modtage de enkelte bit.&lt;br /&gt;
&lt;br /&gt;
På modtagersiden ser det ud som følger, hvor man kan se at de lave pauser er noget kortere end målingerne på sendersiden (selvom det er en anden timebase det er målt i) :&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-modt1.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Modtagelse af den første del af en pakke.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Her kan man se at den første byte består af en lang, fire korte en lang og to korte, hvilket svarer til det binære tal 0010_0001 (laveste bit kommer først), så tallet er 33, som er den faste sendeadresse i send2.jal&lt;br /&gt;
&lt;br /&gt;
Den røde kurve er bare et signal for at scopet kan trigge ved modtagelse.&lt;br /&gt;
&lt;br /&gt;
=== Praktiske problemer ved transmission ===&lt;br /&gt;
&lt;br /&gt;
Ved modtagelsen er man nødt til at tage højde for at der kan være en del støj ved modtageren. Det viste sig ved test at det hjalp en hel del at anvende ekstern forsyning, for at fjerne noget af støjen.&lt;br /&gt;
&lt;br /&gt;
Hvis man ikke opbygger softwaren robust, så kan man kan miste enkelte pakker, fordi man misforstår noget af støjen som en del af en pakke.&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-modt2.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Måling på modtager-siden mellem pakkerne, der viser støjpulser&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For at teste robustheden af softwaren er en del af testen foretaget ved at bruge forsyning via PICkit 2, hvor man så får væsentligt mere støj.&lt;br /&gt;
&lt;br /&gt;
I den endelige version er modtagelsen er alligevel så robust at over halvdelen af pakkerne kommer uskadt igennem.&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-modt3.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Måling på modtagersiden mellem pakkerne, når man bruger PICkit 2 som forsyning&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Simpel test af rækkevidde ===&lt;br /&gt;
&lt;br /&gt;
For at teste hvordan rækkevidden er, så er senderen blevet placeret to etager over modtageren, så der skal transmitteres gennem to etageadskillelser, hvilket normalt ville dæmpe signalerne væsentligt. For at optimere er der monteret ca 18 cm antenne på både sender og modtager. Både sender og modtager forsynes med ekstern forsyning, for ikke at bidrage med ekstra støj.&lt;br /&gt;
&lt;br /&gt;
I denne konfiguration gik alle pakker igennem ved en test over 256 pakker.&lt;br /&gt;
&lt;br /&gt;
Hvis det kun er senderen der har monteret antenne, så går ca. 220 ud af 256 pakker igennem.&lt;br /&gt;
&lt;br /&gt;
Hvis modtageren forsynes med PICkit 2, så reduceres antallet af pakker der kommer igennem til ca. 6 ud af 256 uden antenne på modtageren, og dette kan igen forbedres ved hjælpe af en antenne på modtageren, så der kommer ca. 16 igennem ud af 256.&lt;br /&gt;
&lt;br /&gt;
=== Andre versioner af RF-link ===&lt;br /&gt;
&lt;br /&gt;
Man kunne bygge sit eget modul, men det er normalt ikke tilrådeligt, da det kan være svært at sikre sig at man ikke sender noget på uønskede frekvenser, hvilket kan forstyrre anden kommunikation, som kan være kritisk (f.x. flykommunikation).&lt;br /&gt;
&lt;br /&gt;
== Simpel anvendelse af RF-link ==&lt;br /&gt;
&lt;br /&gt;
For at kunne foretage en transmission med forskellige værdier kan man opbygge et sender-program med f.x 3 taster, hvor man lader den sende de 3 funktioner afhængigt af tasterne. Det kunne gøres med følgende kode,laver ud fra send2.jal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
forever loop&lt;br /&gt;
   if kontakt1 then&lt;br /&gt;
      send(33, 1)&lt;br /&gt;
      delay_1ms(500)&lt;br /&gt;
   end if&lt;br /&gt;
   if kontakt2 then&lt;br /&gt;
      send(33, 2)&lt;br /&gt;
      delay_1ms(500)&lt;br /&gt;
   end if&lt;br /&gt;
   if kontakt3 then&lt;br /&gt;
      send(33, 3)&lt;br /&gt;
      delay_1ms(500)&lt;br /&gt;
   end if&lt;br /&gt;
   delay_1ms(10)&lt;br /&gt;
end loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Koden er lavet så den fanger tasten, og sender pakken en gang, og det skal modtageren så opfange for at det kan bruges som tænd/sluk af 3 udgange.&lt;br /&gt;
&lt;br /&gt;
For at modtage dette kan der laves en modificeret version af modtag2.jal, hvor der reageres på det der modtages:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
var byte modtaget&lt;br /&gt;
forever loop&lt;br /&gt;
   if rf_get_byte(modtaget) then&lt;br /&gt;
      if modtaget == 1 then&lt;br /&gt;
         udgang1 = ! udgang1&lt;br /&gt;
      end if&lt;br /&gt;
      if modtaget == 2 then&lt;br /&gt;
         udgang2 = ! udgang2&lt;br /&gt;
      end if&lt;br /&gt;
      if modtaget == 3 then&lt;br /&gt;
         udgang3 = ! udgang3&lt;br /&gt;
      end if&lt;br /&gt;
   end if&lt;br /&gt;
end loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette forudsætter at alle pakker modtages korrekt, hvilket det ikke kan garanteres at de gør, men dette er blot et simpelt eksempel på en anvendelse, hvor man godt kunne leve med at man evt. skulle trykke på knappen igen.&lt;br /&gt;
&lt;br /&gt;
Softwaren med send2.jal og modtag2.jal kan hentes i [[media:rf-link-jal.zip|denne ZIP-fil]].&lt;br /&gt;
&lt;br /&gt;
== Software modulet RF-link.jal==&lt;br /&gt;
&lt;br /&gt;
Modulet indeholder både sender-software og modtager-software, hvilket man vælger ud fra to bit-constanter, som kan gøres som følger inden man includer RF-link modulet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const bit receiver = false&lt;br /&gt;
const bit transmitter = true&lt;br /&gt;
include RF-link&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interface-fil til RF-link===&lt;br /&gt;
&lt;br /&gt;
I interface-filen ligger definitioner til både sende-modulet og modtager-modulet. Begge dele skal ligge der for at modulet kan fungere, men det er kun den ene del der oversættes, afhængigt af hvilken del man vælger.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const byte rf_my_address = 33&lt;br /&gt;
&lt;br /&gt;
const byte rf_bytes_send = 4&lt;br /&gt;
&lt;br /&gt;
alias rf_rx      is pin_a2&lt;br /&gt;
alias rf_rx_dir  is pin_a2_direction&lt;br /&gt;
&lt;br /&gt;
alias rf_tx      is pin_a2&lt;br /&gt;
alias rf_tx_dir  is pin_a2_direction&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der er defineret hvilken adresse modulet har, og det skal være den samme for sending og modtagelse.&lt;br /&gt;
&lt;br /&gt;
Antallet af bytes der sendes er defineret som det totale antal der reelt sendes, selvom det kun er en byte der reelt kan anvendes, så sendes der 4 byte. Dette kan lette en udvidelse til at sende flere bytes, hvis man har det behov.&lt;br /&gt;
&lt;br /&gt;
Der skal selvfølgelig også defineres et ben til sende-bittet og et til modtage-bittet. Der er her valgt samme ben, hvilket ikke betyder noget, da det alligevel skal fungere i hvert sit program.&lt;br /&gt;
&lt;br /&gt;
Der er også definitioner som går på interruptet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
if target_chip == PIC_16F690 then&lt;br /&gt;
alias     rf_rx_int              is IOCA_IOCA2   -- Skal rettes med pin_a2&lt;br /&gt;
alias     rf_intcon_ie           is intcon_rabie&lt;br /&gt;
alias     rf_intcon_if           is intcon_rabif&lt;br /&gt;
elsif target_chip == PIC_16F684 then&lt;br /&gt;
alias     rf_rx_int              is IOCA_IOCA2   -- Skal rettes med pin_a2&lt;br /&gt;
alias     rf_intcon_ie           is intcon_raie&lt;br /&gt;
alias     rf_intcon_if           is intcon_raif&lt;br /&gt;
end if&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der anvendes et kanttrigget interrupt, som er navngivet forskelligt på de forskellige procesorer. Derfor oversættes interruptets navn til samme alias, så man kan aktivere interruptet i softwaren og man kan arbejde med interrupt-flaget inde i intrerruptrutinen.&lt;br /&gt;
&lt;br /&gt;
Enedelig skal interruptet for det aktuelle ben slås til ved at man aktiverer det, derfor skal der defineres hvilket interruptben det er man anvender.&lt;br /&gt;
&lt;br /&gt;
=== Demo-eksempler til RF-link ===&lt;br /&gt;
&lt;br /&gt;
Der er lavet 2 demo-eksempler som illustrerer hvordan modulet RF-link.jal fungerer. Der er koderne [[media:rf-link-jal.zip|send_demo.jal og modt_demo.jal]], der kan det samme som send2.jal og modtag2.jal, men med den forskel, at de anvender modulet RF-link.jal&lt;br /&gt;
&lt;br /&gt;
Koden i send_demo.jal ser ud som følger:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const bit receiver = false&lt;br /&gt;
const bit transmitter = true&lt;br /&gt;
include RF-link&lt;br /&gt;
&lt;br /&gt;
var byte tael = 1&lt;br /&gt;
&lt;br /&gt;
forever loop&lt;br /&gt;
   rf_send(33, tael)&lt;br /&gt;
   delay_100ms(10)&lt;br /&gt;
   tael = tael + 1&lt;br /&gt;
end loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
koden i modt_demo.jal ser ud som følger:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const bit receiver = true&lt;br /&gt;
const bit transmitter = false&lt;br /&gt;
include RF-link&lt;br /&gt;
&lt;br /&gt;
var byte modtaget&lt;br /&gt;
forever loop&lt;br /&gt;
   if rf_get_byte(modtaget) then&lt;br /&gt;
     ALCD_cursor_position(0,0) -- start of first line&lt;br /&gt;
     -- Skriv det aflæste direkte&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_arr[0])&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_arr[1])&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_arr[2])&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_arr[3])&lt;br /&gt;
     ALCD_cursor_position(1,0)&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(modtaget)&lt;br /&gt;
   else&lt;br /&gt;
     ALCD_cursor_position(1,4)&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_error)&lt;br /&gt;
     ALCD_write_char(&amp;quot; &amp;quot;)&lt;br /&gt;
     ALCD_Dec_3(rf_rx_tid)&lt;br /&gt;
   end if&lt;br /&gt;
&lt;br /&gt;
   delay_1ms(10)&lt;br /&gt;
end loop&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modtage-demoen fungerer ved at den forsøger at modtage en pakke, og hvis det lykkes, så skrives der i første linje de 4 bytes der er modtaget, og i starten af anden linje skrives den byte som funktionen returnerer i parameteren. Hvis pakken ikke modtages korrekt bliver der i næste linje udskrevet to interne variabler, der indeholder en fejlstatus og en den tæller der anvendes til at bestemme tiderne på det modtagne.&lt;br /&gt;
&lt;br /&gt;
Modtage-demoen viser følgende skærmbillede:&lt;br /&gt;
&lt;br /&gt;
[[fil:rf-modt-screen.jpg|600px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Skærmvisning af modtagelse&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Opbygningen af sendingen ===&lt;br /&gt;
&lt;br /&gt;
Princippet i at sende en byte er relativt simpelt, da det er baseret på aktivt venten i koden, så de 9 ms det tager at sende en marker og de 4 byte sker aktivt i sende-rutinen, og der returneres ikke før hele byten er sendt.&lt;br /&gt;
&lt;br /&gt;
Sendingen er opbygget ud fra følgende [[pseudokode]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Send en marker&lt;br /&gt;
Send adressen&lt;br /&gt;
Send det inverterede af adressen&lt;br /&gt;
Send data&lt;br /&gt;
Send det inverterede af data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette er implementeret ved hjælp af følgende kode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
Procedure rf_send(byte in adr, byte in data) is&lt;br /&gt;
   rf_tx = high&lt;br /&gt;
   delay_10us(100)   -- 1 ms marker til start&lt;br /&gt;
   rf_tx = low&lt;br /&gt;
   delay_10us(10)&lt;br /&gt;
   rf_send_byte(adr)    -- send adresse&lt;br /&gt;
   rf_send_byte(! adr)  -- inverteret adresse for sikkerhed&lt;br /&gt;
   rf_send_byte(data)   -- send data&lt;br /&gt;
   rf_send_byte(! data) -- inverteret data for sikkerhed&lt;br /&gt;
end procedure&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det at sende en byte er implementeret ved hjælp af følgende pseudokode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Løb gennem alle 8 bit&lt;br /&gt;
   send lav i 100 us&lt;br /&gt;
   hvis aktuel bit er 0&lt;br /&gt;
      send høj i 50 us&lt;br /&gt;
   ellers&lt;br /&gt;
      send høj i 150 us&lt;br /&gt;
   skift til næste bit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette er implementeret ved hjælp af følgende kode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
Procedure rf_send_byte(byte in data) is&lt;br /&gt;
   for 8 loop&lt;br /&gt;
      delay_10us(10)&lt;br /&gt;
      rf_tx = high&lt;br /&gt;
      if (data &amp;amp; 1) == 0 then&lt;br /&gt;
         delay_10us(5)&lt;br /&gt;
      else&lt;br /&gt;
         delay_10us(15)&lt;br /&gt;
      end if&lt;br /&gt;
      rf_tx= low&lt;br /&gt;
      data = data / 2&lt;br /&gt;
   end loop&lt;br /&gt;
end procedure&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opbygningen af modtagelsen ===&lt;br /&gt;
&lt;br /&gt;
Hele modtagedelen er opbygget omkring et [[interrupt]], hvor man anvender det kanttriggede interrupt af port A hvis det er [[PIC16F684]] eller hvis det er [[PIC16F690]], så kan det være både port A og port B. Desuden anvendes timer 0 og interruptet til den, ved håndtering af fejl.&lt;br /&gt;
&lt;br /&gt;
Selve det at modtage pakken og få den godkendt sker i en servicefunktion, der kan beskrives ud fra følgende [[pseudokode]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hvis der er en pakke klar&lt;br /&gt;
   Hvis der ikke er opstået en fejltilstand&lt;br /&gt;
      Hvis adressen er til mig og der ikke er fejl i adressen&lt;br /&gt;
         Hvis der ikke er fejl i data&lt;br /&gt;
            Returner data&lt;br /&gt;
   Registrer at pakker en modtaget&lt;br /&gt;
ellers&lt;br /&gt;
   Returner fejl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette er implementeret ved hjælp af følgende kode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
function rf_get_byte (byte out data) return bit is&lt;br /&gt;
   var bit retval = true&lt;br /&gt;
   if rf_data_ready then&lt;br /&gt;
      if rf_rx_error == 0 then&lt;br /&gt;
         if rf_rx_arr[0] != (! rf_rx_arr[1]) then&lt;br /&gt;
            retval = false&lt;br /&gt;
         elsif rf_rx_arr[2] != (! rf_rx_arr[3]) then&lt;br /&gt;
            retval = false&lt;br /&gt;
         elsif rf_rx_arr[0] != rf_my_address then&lt;br /&gt;
            retval = false&lt;br /&gt;
         else&lt;br /&gt;
            data = rf_rx_arr[2]&lt;br /&gt;
         end if&lt;br /&gt;
      end if&lt;br /&gt;
      rf_data_ready = false&lt;br /&gt;
   else&lt;br /&gt;
      retval = false&lt;br /&gt;
   end if&lt;br /&gt;
   return retval&lt;br /&gt;
end function&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Selve tidsregistreringen sker i interruptet, men ikke ved hjælp af timer-interruptet, men derimod at timer 0&amp;#039;s register (TMR0) sættes til at tælle med en takt på 8 us, så man kan måle tiden ved at se på indholdet af registeret TMR0.&lt;br /&gt;
&lt;br /&gt;
Kommunikationen er indrettet så det udelukkende er de høje pulser der er interessante tidsmæssigt, så hvis man beskriver interruptet der kommer på alle kanter, så kan det gøres ud fra følgende pseudokode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hvis input et højt så&lt;br /&gt;
   nulstil TMR0 (tiden i den lave periode måles ikke)&lt;br /&gt;
ellers&lt;br /&gt;
   husk TMR0&lt;br /&gt;
   hvis der er modtagelse i gang&lt;br /&gt;
      aflæs en bit&lt;br /&gt;
   ellers&lt;br /&gt;
      hvis tiden er ca. 1 ms og sidste pakke er aflæst&lt;br /&gt;
         sæt op til modtagelse af en ny pakke&lt;br /&gt;
         nulstil fejltilstand&lt;br /&gt;
marker at kant-interruptet er afviklet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette er implementeret med følgende kode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   if rf_intcon_if then&lt;br /&gt;
      if rf_rx then&lt;br /&gt;
         TMR0 = 0&lt;br /&gt;
      else&lt;br /&gt;
         rf_rx_tid = TMR0&lt;br /&gt;
         if rf_receiving then&lt;br /&gt;
            -- Aflæs en bit&lt;br /&gt;
            --&lt;br /&gt;
         else&lt;br /&gt;
            if (rf_rx_tid &amp;gt; 124) &amp;amp; (rf_rx_tid &amp;lt; 132) &amp;amp; (! rf_data_ready) then&lt;br /&gt;
               rf_receiving = true&lt;br /&gt;
               rf_rx_error = 0&lt;br /&gt;
               rf_rx_ptr = 0&lt;br /&gt;
               rf_rx_bit_nr = 0&lt;br /&gt;
            end if&lt;br /&gt;
         end if&lt;br /&gt;
      end if&lt;br /&gt;
      rf_intcon_if = false&lt;br /&gt;
   end if&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Selve det at aflæse en bit tester på mange forskellige ting, og der kan komme forskellige fejl-tilstande ud af det, da dette gerne skulle ske mens vi er i gang med at modtage en pakke, men man kan have misforstået en marker, eller man kan have mistet nogle bits i en pakke, eller der kan komme støj inde i pakken som kan forstyrre modtagelsen.&lt;br /&gt;
&lt;br /&gt;
Alle disse ting skal der tages højde for i modtagelsen af bits, og hvis ellers alt går godt, så skal der modtages 32 bit, der lagres i 4 byte. Dette kan illustrares med følgende pseudokode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hvis der modtages i pakken så&lt;br /&gt;
   skift bit&lt;br /&gt;
   hvis tiden for høj &amp;lt; 48 us så&lt;br /&gt;
      Marker fejl 1 (for kort en høj puls)&lt;br /&gt;
   hvis tiden for høj &amp;lt; 144 us så&lt;br /&gt;
      Modtag 0-bit&lt;br /&gt;
   hvis tiden for høj &amp;lt; 240 us så&lt;br /&gt;
      Modtag 1-bit&lt;br /&gt;
   ellers &lt;br /&gt;
      Marker fejl 2 (for lang en høj puls)&lt;br /&gt;
   gå til næste bit&lt;br /&gt;
   hvis antallet af bit = 8 så&lt;br /&gt;
      Gem modtaget byte&lt;br /&gt;
      Gå til næste byte&lt;br /&gt;
      hvis antallet af bytes = 4 så&lt;br /&gt;
         Afslut modtagelse og marker at der er en pakke klar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Denne del er implementeret inde i den foregående kode som:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   if rf_rx_ptr &amp;lt; rf_bytes_send then&lt;br /&gt;
      rf_rx_byte = rf_rx_byte / 2&lt;br /&gt;
      if rf_rx_tid &amp;lt; 6 then&lt;br /&gt;
         rf_rx_error = 1&lt;br /&gt;
         rf_receiving = false&lt;br /&gt;
      elsif rf_rx_tid &amp;lt; 18 then&lt;br /&gt;
      elsif rf_rx_tid &amp;lt; 30 then&lt;br /&gt;
         rf_rx_byte = rf_rx_byte + 128&lt;br /&gt;
      else&lt;br /&gt;
         rf_rx_error = 2&lt;br /&gt;
         rf_receiving = false&lt;br /&gt;
      end if&lt;br /&gt;
      rf_rx_bit_nr = rf_rx_bit_nr + 1&lt;br /&gt;
      if rf_rx_bit_nr == 8 then&lt;br /&gt;
         rf_rx_bit_nr = 0&lt;br /&gt;
         rf_rx_arr[rf_rx_ptr] = rf_rx_byte&lt;br /&gt;
         rf_rx_ptr = rf_rx_ptr + 1&lt;br /&gt;
         if rf_rx_ptr == rf_bytes_send then&lt;br /&gt;
            rf_data_ready = true&lt;br /&gt;
            rf_receiving = false&lt;br /&gt;
         end if&lt;br /&gt;
      end if&lt;br /&gt;
   end if&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Som nævnt er det TMR0 registeret der håndterer tids-målingen. Til dette register er der et interrupt tilknyttet når den tæller over fra 255 til 0 (svarende til godt 2 ms). Da der i en gyldig pakke ikke kan være hverken høje eller lave impulser der er mere end 1 ms, så vil det enten være mellem to pakker, eller en fejl i modtagelsen, hvis den stadig er i gang med at modtage en pakke når timer 0 interrupter (den nulstiller altid i starten af en lav puls).&lt;br /&gt;
&lt;br /&gt;
Timer 0 interruptet kan udtrykkes med følgende pseudokode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   afstil timer 0 interruptet&lt;br /&gt;
   hvis der modtages så&lt;br /&gt;
      Marker fejl 3 (mere end 2 ms pause i modtagelse)&lt;br /&gt;
      Sæt modtagelsen passiv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette er implementeret ved følgende kode:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   if intcon_tmr0if then&lt;br /&gt;
      intcon_tmr0if = False&lt;br /&gt;
      if rf_receiving then&lt;br /&gt;
         rf_rx_error = 3&lt;br /&gt;
         rf_receiving = false&lt;br /&gt;
      end if&lt;br /&gt;
   end if&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anvendelse af RF-link ===&lt;br /&gt;
Man skal include modulet som vist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const bit receiver = false&lt;br /&gt;
const bit transmitter = true&lt;br /&gt;
include RF-link&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Herefter kan den valgte af de to funktioner rf_send eller rf_get_byte anvendes som vist.&lt;br /&gt;
&lt;br /&gt;
Alle kodeeksempler ligger samlet i en [[media:rf-link-jal.zip|ZIP-fil]]&lt;br /&gt;
&lt;br /&gt;
{{moduler}}&lt;br /&gt;
&lt;br /&gt;
{{keyes-moduler}}&lt;br /&gt;
&lt;br /&gt;
== Referencer ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategori:JAL-moduler]]&lt;br /&gt;
[[Kategori:Flere digitale signaler]]&lt;/div&gt;</summary>
		<author><name>htx_&gt;Ande5803</name></author>
	</entry>
</feed>