<?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=Serial_hw_int_cts</id>
	<title>Serial hw int cts - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://www.htxarduino.dk/index.php?action=history&amp;feed=atom&amp;title=Serial_hw_int_cts"/>
	<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Serial_hw_int_cts&amp;action=history"/>
	<updated>2026-10-28T10:38:55Z</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=Serial_hw_int_cts&amp;diff=4564&amp;oldid=prev</id>
		<title>Bar: /* Sending og modtagelse som Pseudovariable */</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Serial_hw_int_cts&amp;diff=4564&amp;oldid=prev"/>
		<updated>2022-11-04T19:35:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sending og modtagelse som Pseudovariable&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 4. nov. 2022, 20:35&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-l98&quot;&gt;Linje 98:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linje 98:&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;br&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;br&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;ADVARSEL - programmet standser afviklingen indtil der er modtaget en byte, fordi programmet stiller sig til at vente på der kommer en byte, og den LÅSER hvis der ikke kommer en byte.&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;ADVARSEL - programmet standser afviklingen indtil der er modtaget en byte, fordi programmet stiller sig til at vente på der kommer en byte, og den LÅSER hvis der ikke kommer en byte.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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 colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;{{Logik-begreber}}&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;br&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;br&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;{{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;{{moduler}}&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=Serial_hw_int_cts&amp;diff=2198&amp;oldid=prev</id>
		<title>Bar: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Serial_hw_int_cts&amp;diff=2198&amp;oldid=prev"/>
		<updated>2022-10-22T12:13:13Z</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, 13:13&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=Serial_hw_int_cts&amp;diff=2197&amp;oldid=prev</id>
		<title>htx_&gt;Bar: /* Sending og modtagelse som Pseudovariable */</title>
		<link rel="alternate" type="text/html" href="https://www.htxarduino.dk/index.php?title=Serial_hw_int_cts&amp;diff=2197&amp;oldid=prev"/>
		<updated>2013-08-17T19:42:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sending og modtagelse som Pseudovariable&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Det grundlæggende omkring seriel kommunikation er beskrevet under [[seriel port]].&lt;br /&gt;
==serial_hw_int_cts.jal==&lt;br /&gt;
Som de fleste generelle moduler, der er med i jalpack, så bygger det på at man sætter nogle ting op inden man [[include]]r filen, og så kan man anvende de procedurer der er i modulet&lt;br /&gt;
&lt;br /&gt;
Softwaren kan noget mere end de andre moduler til seriel kommunikation, specielt fordi modulet implementerer buffere til både sending og modtagelse, og anvender [[interrupt]] til at sende og modtage med, så det fungerer mere fleksibelt i anvendelsen end de andre moduler, men det er til gengæld også lidt sværere at sætte op.&lt;br /&gt;
&lt;br /&gt;
Ud over det, så anvender modulet hardware [[handshake]] til at styre at der ikke modtages for meget, så der er mulighed for at bremse afsenderen ind til PIC&amp;#039;en, men det kræver så også at hardwaren implementeres og at afsenderen reagerer på det.&lt;br /&gt;
&lt;br /&gt;
Softwaren ligger i jalpack/lib.&lt;br /&gt;
&lt;br /&gt;
==Ting der skal sættes op inden include==&lt;br /&gt;
Her definerer man hvordan der skal kommunikeres.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
pin_b5_direction = input                -- Define input and output for RX and TX pins&lt;br /&gt;
pin_b7_direction = output&lt;br /&gt;
&lt;br /&gt;
alias serial_ctsinv is pin_B4           -- incoming data flow control&lt;br /&gt;
pin_B4_direction = output               -- data flow control pin is output&lt;br /&gt;
var bit serial_overflow_discard = false -- set up transmitter to wait, if transmitbuffer is full&lt;br /&gt;
&lt;br /&gt;
const serial_hw_baudrate = 9600&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pin definitionerne angive hvilken pin der skal modtages på, og hvilken pin der skal sendes på. Dette er processor-afhængigt, så man skal lige forbi databladet for at se hvordan man gør det. Dette eksempel er for en [[PIC16F690]].&lt;br /&gt;
&lt;br /&gt;
CTS benet kan man vælge frit, men man skal huske at sætte det rigtige ben til output.&lt;br /&gt;
&lt;br /&gt;
Overflow_discard kan man sætte til true, hvis programmet ikke må vente i rutinen der sender en byte, men så skal man sikre sig, at man enten ikke sender mere end hvad der kan være i bufferen, eller at man kan tillade sig at miste karakterer, hvis man sender for meget.&lt;br /&gt;
&lt;br /&gt;
Baud-rate (eller bits pr. sekund) kan ikke vælges helt frit. Hvis det sættes for hurtigt, så kan baud-rate registrene ikke sættes præcist nok (afhænger også af clock-hastigheden), og dermed virker modulet ikke. Det kan også blive et problem at nå at hente alle karakterer.&lt;br /&gt;
&lt;br /&gt;
===Valgfrie ting i modulet===&lt;br /&gt;
Der er også ting som modulet selv styrer, hvis man ikke sætter det op, nemlig det der styrer buffer størrelserne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
const   SERIAL_XMTBUFSIZE  = 32         -- size of transmit buffer&lt;br /&gt;
const   SERIAL_RCVBUFSIZE  = 64         -- size of receive buffer&lt;br /&gt;
const   SERIAL_DELTA       = 17         -- spare space receive buffer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De viste værdier er det der sættes op, hvis man ikke gør noget. Man kan vælge at formindske størrelserne hvis man har problemer med at man bruger for meget [[RAM]], eller man kan vælge at forøge størrelserne, hvis man skal kunne håndtere større datamængder.&lt;br /&gt;
&lt;br /&gt;
SERIAL_DELTA er den restplads man ønsker der skal være, når man melder at bufferen ikke kan modtage mere. Det giver lidt ekstra reaktionstid for sendren, så der kan sendes lidt mere, uden der går noget tabt.&lt;br /&gt;
&lt;br /&gt;
Man kan også fravælge at anvende hardware-feedback til senderen om at man ikke kan modtage yderligere. Det gøres ved at man sætter serial_ctsinv op til at være en intern bit, i stedet og at det er en udgang der melder tilbage. Den vil så også miste sin effekt, så den ikke bremser transmissionen fra senderen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
var bit serial_ctsinv          -- dummy flow control&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Anvendelse af modulet==&lt;br /&gt;
&lt;br /&gt;
Når man har sat benene op og defineret baudrate, så skrives blot&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
-- Opsæning som beskrevet i andet afsnit&lt;br /&gt;
include serial_hw_int_cts&lt;br /&gt;
&lt;br /&gt;
serial_hw_init()  -- gennemfør opsætningen af UART&amp;#039;en&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dette sætter op, så man kan sende og modtage med den korrekte hastighed.&lt;br /&gt;
&lt;br /&gt;
Herefter kan der sendes og modtages karakterer.&lt;br /&gt;
&lt;br /&gt;
==Modtagelse af karakterer==&lt;br /&gt;
I main-loopet (forever-loopet) kan man modtage karakterer som følger:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   if serial_hw_read(temp) then&lt;br /&gt;
      -- Anvend den modtagne byte temp til noget fornuftigt&lt;br /&gt;
   end if&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Her henter man en byte ud af bufferen, hvis interruptet har lagt noget i den.&lt;br /&gt;
&lt;br /&gt;
Med interruptet og bufferen er der gjort meget for ikke at miste noget i modtagelsen, hvis der kommer flere karakterer i træk. Hvis man f.x. kommunikerer med 1200 Baud vil man kunne vente bufferstørrelsen * 8 ms med at tjekke (ca. ½ sekund ved 64 byte buffer), før man  mister bytes. Man skal dog stadig kunne nå at tømme det med samme hastighed som der fyldes i.&lt;br /&gt;
&lt;br /&gt;
==Sending af karakterer==&lt;br /&gt;
Det at sende en karakter er meget simpelt, da man blot skriver&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   serial_send_byte(char)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sendingen placerer blot byten i bufferen, og returnerer. Det er så interruptet der sørger for afsendelsen, når der bliver plads til det. Hvis hele bufferen er fyldt, så afhænger det af hvad serial_overflow_discard er sat til. Er den true, så dumpes karakteren, ellers ventes der på at der bliver plads i bufferen.&lt;br /&gt;
&lt;br /&gt;
===Begrænset handshake===&lt;br /&gt;
Den [[handshake]] der er etableret i modulet laver kun handshake i den ene retning (den melder tilbage når den ikke kan modtage mere). Hvis den skulle etablere fuld handshake, så skulle den også tage højde for om den enhed der sendes til er klar til at modtage (den anden endes RTS). Det gør modulet som det er i dag ikke - det sender bare.&lt;br /&gt;
&lt;br /&gt;
==Sending og modtagelse som Pseudovariable==&lt;br /&gt;
&lt;br /&gt;
Der ligger også rutiner der implementerer sending og modtagelse, så det ligner variabler. Det anvendes på følgende måde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;jal&amp;quot;&amp;gt;&lt;br /&gt;
   serial_hw_data = Temp  -- Sender variablen Temp&lt;br /&gt;
   Temp = serial_hw_data  -- Modtager en byte og placerer den i Temp&lt;br /&gt;
   -- Gør noget fornuftigt med det modtagne&lt;br /&gt;
   Temp = serial_hw_data  -- Modtager en ny byte og placerer den i Temp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man skal være opmærksom på at det ikke er normale variabler. Hver gang man læser i variablen, så læses der faktisk en ny byte fra den serielle indgang.&lt;br /&gt;
&lt;br /&gt;
ADVARSEL - programmet standser afviklingen indtil der er modtaget en byte, fordi programmet stiller sig til at vente på der kommer en byte, og den LÅSER hvis der ikke kommer en byte.&lt;br /&gt;
&lt;br /&gt;
{{moduler}}&lt;br /&gt;
&lt;br /&gt;
[[Kategori:JAL-moduler]]&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Seriel Kommunikation]]&lt;/div&gt;</summary>
		<author><name>htx_&gt;Bar</name></author>
	</entry>
</feed>