<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF159%3AArduino%3A_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC</id>
		<title>LXF159:Arduino: Управляем временем - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF159%3AArduino%3A_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;action=history"/>
		<updated>2026-05-13T17:11:22Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=18047&amp;oldid=prev</id>
		<title>Olkol: /* Arduino: Ру­лим вре­ме­нем */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=18047&amp;oldid=prev"/>
				<updated>2018-09-26T11:22:49Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Arduino: Ру­лим вре­ме­нем&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 11:22, 26 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 5:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Вла­ст­вуй­те над сво­ей пла­той с по­мо­щью пре­ры­ва­ний тай­ме­ра'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''Вла­ст­вуй­те над сво­ей пла­той с по­мо­щью пре­ры­ва­ний тай­ме­ра'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=Arduino: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Ру­лим &lt;/del&gt;вре­ме­нем=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=Arduino: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Управляем &lt;/ins&gt;вре­ме­нем=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Ник Вейч при­ни­ма­ет вы­зов вре­ме­ни и ов­ла­де­ва­ет по­сто­ян­но лязгаю­щи­ми ча­са­ми, что­бы при­ду­мать нечто хит­роумное с ти­ка­ми и та­ка­ми.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Ник Вейч при­ни­ма­ет вы­зов вре­ме­ни и ов­ла­де­ва­ет по­сто­ян­но лязгаю­щи­ми ча­са­ми, что­бы при­ду­мать нечто хит­роумное с ти­ка­ми и та­ка­ми.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17988&amp;oldid=prev</id>
		<title>Olkol: /* По­раз­ряд­ная ариф­ме­ти­ка */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17988&amp;oldid=prev"/>
				<updated>2018-09-25T00:02:04Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;По­раз­ряд­ная ариф­ме­ти­ка&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 00:02, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 53:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 53:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Еще од­но важ­ное пре­ду­пре­ж­дение. Од­на из при­чин ме­нять толь­ко необ­хо­ди­мые би­ты в том, что мно­гим би­там отведена особая роль. На­при­мер, в PORTD по­следний бит – это линия, ис­поль­зуе­мая для прие­ма дан­ных. Слу­чай­но на­пра­вив ее на вы­вод, вы оп­ре­де­лен­но нарушите ра­бо­ту схе­мы. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Еще од­но важ­ное пре­ду­пре­ж­дение. Од­на из при­чин ме­нять толь­ко необ­хо­ди­мые би­ты в том, что мно­гим би­там отведена особая роль. На­при­мер, в PORTD по­следний бит – это линия, ис­поль­зуе­мая для прие­ма дан­ных. Слу­чай­но на­пра­вив ее на вы­вод, вы оп­ре­де­лен­но нарушите ра­бо­ту схе­мы. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл:LXF154.tut_arduino.bitw_opt.png‎ |left |&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;400px &lt;/del&gt;|thumb|&amp;gt; Ана­то­мия по­раз­ряд­ной опе­ра­ции с по­мо­щью мак­ро­са.]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл:LXF154.tut_arduino.bitw_opt.png‎ |left |&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;300px &lt;/ins&gt;|thumb|&amp;gt; Ана­то­мия по­раз­ряд­ной опе­ра­ции с по­мо­щью мак­ро­са.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл: LXF154.tut_arduino.bit_opt1.png‎ |right |&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;400px &lt;/del&gt;|thumb|&amp;gt; По­раз­ряд­ные опе­ра­ции со сдви­гом зна­че­ний.]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Файл: LXF154.tut_arduino.bit_opt1.png‎ |right |&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;300px &lt;/ins&gt;|thumb|&amp;gt; По­раз­ряд­ные опе­ра­ции со сдви­гом зна­че­ний.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Как ра­бо­та­ют тай­ме­ры?==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Как ра­бо­та­ют тай­ме­ры?==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17987&amp;oldid=prev</id>
		<title>Olkol: /* Ос­та­но­ви­те ча­сы */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17987&amp;oldid=prev"/>
				<updated>2018-09-25T00:01:08Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ос­та­но­ви­те ча­сы&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 00:01, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 248:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 248:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Срав­ни­те это&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;==&lt;/ins&gt;Срав­ни­те это&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;При за­пи­си зна­чения в ре­гистр сравнения, вы мог­ли за­ме­тить мно­же­ст­во ссы­лок на ре­гистр сравнения A. Де­ло в том, что есть еще и ре­гистр B, зна­чение ко­то­ро­го так­же мож­но из­ме­нять, сравнивать и вы­зы­вать пре­ры­вание – но тай­мер при этом не сбра­сы­ва­ет­ся. В этом слу­чае пре­ры­вание сгенери­ру­ет­ся в те­чение од­но­се­кунд­но­го ин­тер­ва­ла, но тай­мер про­дол­жит ра­бо­тать до дости­жения зна­чения 62 499. Это мо­жет быть удоб­но, ес­ли вы хо­ти­те генери­ро­вать со­бы­тия, на­при­мер, ка­ж­дую се­кун­ду и пол­се­кун­ды.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;При за­пи­си зна­чения в ре­гистр сравнения, вы мог­ли за­ме­тить мно­же­ст­во ссы­лок на ре­гистр сравнения A. Де­ло в том, что есть еще и ре­гистр B, зна­чение ко­то­ро­го так­же мож­но из­ме­нять, сравнивать и вы­зы­вать пре­ры­вание – но тай­мер при этом не сбра­сы­ва­ет­ся. В этом слу­чае пре­ры­вание сгенери­ру­ет­ся в те­чение од­но­се­кунд­но­го ин­тер­ва­ла, но тай­мер про­дол­жит ра­бо­тать до дости­жения зна­чения 62 499. Это мо­жет быть удоб­но, ес­ли вы хо­ти­те генери­ро­вать со­бы­тия, на­при­мер, ка­ж­дую се­кун­ду и пол­се­кун­ды.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17986&amp;oldid=prev</id>
		<title>Olkol: /* Ос­та­но­ви­те ча­сы */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17986&amp;oldid=prev"/>
				<updated>2018-09-25T00:00:09Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ос­та­но­ви­те ча­сы&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 00:00, 25 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 184:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 184:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но пре­ж­де чем за­гру­жать зна­чение в ре­гистр сравнения, по­ду­ма­ем еще кое о чем. Когда зна­чения сов­па­да­ют и вы­зы­ва­ет­ся пре­ры­вание, мы пе­ре­клю­ча­ем све­то­ди­од. Но что про­ис­хо­дит с тай­ме­ром? Он от­счи­ты­ва­ет еще 3036 так­тов до кон­ца и сбра­сы­ва­ет­ся в ноль, за­тем от­чи­ты­ва­ет оче­ред­ные 62 500 так­тов и сно­ва вы­зы­ва­ет пре­ры­вание. Вы­хо­дит, мы не из­менили пе­ри­од ми­гания, а толь­ко сдви­ну­ли мо­мент его возник­но­вения.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но пре­ж­де чем за­гру­жать зна­чение в ре­гистр сравнения, по­ду­ма­ем еще кое о чем. Когда зна­чения сов­па­да­ют и вы­зы­ва­ет­ся пре­ры­вание, мы пе­ре­клю­ча­ем све­то­ди­од. Но что про­ис­хо­дит с тай­ме­ром? Он от­счи­ты­ва­ет еще 3036 так­тов до кон­ца и сбра­сы­ва­ет­ся в ноль, за­тем от­чи­ты­ва­ет оче­ред­ные 62 500 так­тов и сно­ва вы­зы­ва­ет пре­ры­вание. Вы­хо­дит, мы не из­менили пе­ри­од ми­гания, а толь­ко сдви­ну­ли мо­мент его возник­но­вения.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок= |Ширина=40%|Содержание= &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Что все это зна­чит..&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Что все это зна­чит...&lt;/ins&gt;|Ширина=40%|Содержание=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* DDRA Data Direction Register (A,B,C,D) [ре­гистр на­прав­ления дан­ных] оп­ре­де­ля­ет, ка­кие вы­во­ды яв­ля­ют­ся вход­ны­ми (0), а ка­кие вы­ход­ны­ми (1) на че­ты­рех пор­тах&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» DDRA Data Direction Register &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;A,B,C,D&lt;/del&gt;) [&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ре­гистр на­прав­ления дан­ных&lt;/del&gt;] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;оп­ре­де­ля­ет&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ка­кие вы­во­ды яв­ля­ют­ся вход­ны­ми (0)&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;а ка­кие вы­ход­ны­ми (1) на че­ты­рех пор­тах&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* ISR&lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;век­тор&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Interrupt Service Routine &lt;/ins&gt;[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;про­це­ду­ра об­слу­жи­вания пре­ры­вания&lt;/ins&gt;]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;. Это не ад­рес&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;а мак­рос; он ком­пи­ли­ру­ет век­то­ры так&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;что­бы изо­ли­ро­ван­ная функ­ция кор­рект­но об­ра­батывала пре­ры­вания&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» ISR(век­тор) &lt;/del&gt;Interrupt &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Service Routine &lt;/del&gt;[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;про­це­ду­ра об­слу­жи­вания пре­ры­вания&lt;/del&gt;]. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Это не ад­рес, а мак­рос; он ком­пи­ли­ру­ет век­то­ры так, что­бы изо­ли­ро­ван­ная функ­ция кор­рект­но об­ра­батывала &lt;/del&gt;пре­ры­вания.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* TIMSK1 Timer &lt;/ins&gt;Interrupt &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;MaSK &lt;/ins&gt;[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;мас­ка пре­ры­ваний тай­ме­ра&lt;/ins&gt;]. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;В этом ре­ги­ст­ре вклю­ча­ют­ся и вы­клю­ча­ют­ся &lt;/ins&gt;пре­ры­вания &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;для со­бы­тий тай­ме­ра&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» TIMSK1 Timer Interrupt MaSK [мас­ка пре­ры­ваний &lt;/del&gt;тай­ме­ра&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;]&lt;/del&gt;. В &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;этом ре­ги­ст­ре вклю­ча­ют­ся и вы­клю­ча­ют­ся пре­ры­вания для со­бы­тий тай­ме­ра&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* TCNT1 16-бит­ный ре­гистр, хра­ня­щий те­ку­щее зна­чение &lt;/ins&gt;тай­ме­ра &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;– от­чет на­чи­на­ет­ся с 0 и про­дол­жа­ет­ся до 65535, за­тем счет­чик сно­ва сбра­сы­ва­ет­ся в ноль&lt;/ins&gt;. В &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;хо­де это­го про­цес­са уста­нав­ли­ва­ет­ся бит пе­ре­полнения&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» TCNT1 &lt;/del&gt;16-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;бит­ный ре­гистр&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;хра­ня­щий &lt;/del&gt;те­ку­щее зна­чение тай­ме­ра &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;– от­чет на­чи­на­ет­ся с 0 и про­дол­жа­ет­ся до 65535, за­тем счет­чик сно­ва сбра­сы­ва­ет­ся в ноль. В хо­де это­го про­цес­са уста­нав­ли­ва­ет­ся бит пе­ре­полнения&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* OCR1A/OCR1B On Compare Registers A and B [ре­ги­ст­ры сравнения A и B]. Это про­сто две ячей­ки па­мя­ти, со­дер­жа­щие &lt;/ins&gt;16-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;бит­ные зна­чения&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;с ко­то­ры­ми сравнива­ет­ся &lt;/ins&gt;те­ку­щее зна­чение тай­ме­ра &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(TCNT1)&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» OCR1A/OCR1B On Compare Registers A and B [ре­ги­ст­ры сравнения A и B]. Это про­сто две ячей­ки па­мя­ти, со­дер­жа­щие 16-бит­ные зна­чения, с ко­то­ры­ми сравнива­ет­ся те­ку­щее зна­чение тай­ме­ра (TCNT1).&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* &lt;/ins&gt;TCCR1 Timer Counter Control Register [ре­гистр управ­ления счет­чи­ком тай­ме­ра]. В этом ре­ги­ст­ре есть би­ты для управ­ления воз­мож­но­стя­ми и ре­жи­ма­ми ра­бо­ты счет­чи­ка (CTC, PWM и пред­ва­ри­тель­ный де­ли­тель так­тов).}} &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;» &lt;/del&gt;TCCR1 Timer Counter Control Register [ре­гистр управ­ления счет­чи­ком тай­ме­ра]. В этом ре­ги­ст­ре есть би­ты для управ­ления воз­мож­но­стя­ми и ре­жи­ма­ми ра­бо­ты счет­чи­ка (CTC, PWM и пред­ва­ри­тель­ный де­ли­тель так­тов).}} &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как вы, воз­мож­но, до­га­да­лись, у этой про­бле­мы есть про­стое ре­шение – CTC (Clear Timer on Compare – сброс тай­ме­ра при сравнении). В этом ре­жи­ме при сов­па­дении зна­чений тай­мер сбра­сы­ва­ет­ся в ноль, что и убира­ет на­шу ма­лень­кую трудность. При уста­нов­ке ре­жи­ма CTC ис­поль­зу­ют­ся те же би­ты ре­ги­ст­ра TCCR1, что и для функ­ций ШИМ, и по­де­ле­ны ме­ж­ду дву­мя по­ло­вин­ка­ми ре­ги­ст­ра. Что­бы вклю­чить ре­жим CTC, нуж­но сбро­сить эти би­ты в верх­ней по­ло­вин­ке ре­ги­ст­ра и один из них в нижней по­ло­вин­ке. Как вы, воз­мож­но, помните, здесь же мы за­да­ем зна­чение пред­ва­ри­тель­но­го де­ли­те­ля так­тов. Так как мы из­ме­ня­ем все би­ты, удобнее на­пи­сать:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как вы, воз­мож­но, до­га­да­лись, у этой про­бле­мы есть про­стое ре­шение – CTC (Clear Timer on Compare – сброс тай­ме­ра при сравнении). В этом ре­жи­ме при сов­па­дении зна­чений тай­мер сбра­сы­ва­ет­ся в ноль, что и убира­ет на­шу ма­лень­кую трудность. При уста­нов­ке ре­жи­ма CTC ис­поль­зу­ют­ся те же би­ты ре­ги­ст­ра TCCR1, что и для функ­ций ШИМ, и по­де­ле­ны ме­ж­ду дву­мя по­ло­вин­ка­ми ре­ги­ст­ра. Что­бы вклю­чить ре­жим CTC, нуж­но сбро­сить эти би­ты в верх­ней по­ло­вин­ке ре­ги­ст­ра и один из них в нижней по­ло­вин­ке. Как вы, воз­мож­но, помните, здесь же мы за­да­ем зна­чение пред­ва­ри­тель­но­го де­ли­те­ля так­тов. Так как мы из­ме­ня­ем все би­ты, удобнее на­пи­сать:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17985&amp;oldid=prev</id>
		<title>Olkol: /* Ос­та­но­ви­те ча­сы */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17985&amp;oldid=prev"/>
				<updated>2018-09-24T23:58:56Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ос­та­но­ви­те ча­сы&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:58, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 184:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 184:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но пре­ж­де чем за­гру­жать зна­чение в ре­гистр сравнения, по­ду­ма­ем еще кое о чем. Когда зна­чения сов­па­да­ют и вы­зы­ва­ет­ся пре­ры­вание, мы пе­ре­клю­ча­ем све­то­ди­од. Но что про­ис­хо­дит с тай­ме­ром? Он от­счи­ты­ва­ет еще 3036 так­тов до кон­ца и сбра­сы­ва­ет­ся в ноль, за­тем от­чи­ты­ва­ет оче­ред­ные 62 500 так­тов и сно­ва вы­зы­ва­ет пре­ры­вание. Вы­хо­дит, мы не из­менили пе­ри­од ми­гания, а толь­ко сдви­ну­ли мо­мент его возник­но­вения.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но пре­ж­де чем за­гру­жать зна­чение в ре­гистр сравнения, по­ду­ма­ем еще кое о чем. Когда зна­чения сов­па­да­ют и вы­зы­ва­ет­ся пре­ры­вание, мы пе­ре­клю­ча­ем све­то­ди­од. Но что про­ис­хо­дит с тай­ме­ром? Он от­счи­ты­ва­ет еще 3036 так­тов до кон­ца и сбра­сы­ва­ет­ся в ноль, за­тем от­чи­ты­ва­ет оче­ред­ные 62 500 так­тов и сно­ва вы­зы­ва­ет пре­ры­вание. Вы­хо­дит, мы не из­менили пе­ри­од ми­гания, а толь­ко сдви­ну­ли мо­мент его возник­но­вения.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Врезка|right|Заголовок= |Ширина=40%|Содержание= Что все это зна­чит...&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» DDRA Data Direction Register (A,B,C,D) [ре­гистр на­прав­ления дан­ных] оп­ре­де­ля­ет, ка­кие вы­во­ды яв­ля­ют­ся вход­ны­ми (0), а ка­кие вы­ход­ны­ми (1) на че­ты­рех пор­тах.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; 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;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» ISR(век­тор) Interrupt Service Routine [про­це­ду­ра об­слу­жи­вания пре­ры­вания]. Это не ад­рес, а мак­рос; он ком­пи­ли­ру­ет век­то­ры так, что­бы изо­ли­ро­ван­ная функ­ция кор­рект­но об­ра­батывала пре­ры­вания.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; 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;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» TIMSK1 Timer Interrupt MaSK [мас­ка пре­ры­ваний тай­ме­ра]. В этом ре­ги­ст­ре вклю­ча­ют­ся и вы­клю­ча­ют­ся пре­ры­вания для со­бы­тий тай­ме­ра.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; 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;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» TCNT1 16-бит­ный ре­гистр, хра­ня­щий те­ку­щее зна­чение тай­ме­ра – от­чет на­чи­на­ет­ся с 0 и про­дол­жа­ет­ся до 65535, за­тем счет­чик сно­ва сбра­сы­ва­ет­ся в ноль. В хо­де это­го про­цес­са уста­нав­ли­ва­ет­ся бит пе­ре­полнения.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; 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;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» OCR1A/OCR1B On Compare Registers A and B [ре­ги­ст­ры сравнения A и B]. Это про­сто две ячей­ки па­мя­ти, со­дер­жа­щие 16-бит­ные зна­чения, с ко­то­ры­ми сравнива­ет­ся те­ку­щее зна­чение тай­ме­ра (TCNT1).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; 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;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;» TCCR1 Timer Counter Control Register [ре­гистр управ­ления счет­чи­ком тай­ме­ра]. В этом ре­ги­ст­ре есть би­ты для управ­ления воз­мож­но­стя­ми и ре­жи­ма­ми ра­бо­ты счет­чи­ка (CTC, PWM и пред­ва­ри­тель­ный де­ли­тель так­тов).}} &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как вы, воз­мож­но, до­га­да­лись, у этой про­бле­мы есть про­стое ре­шение – CTC (Clear Timer on Compare – сброс тай­ме­ра при сравнении). В этом ре­жи­ме при сов­па­дении зна­чений тай­мер сбра­сы­ва­ет­ся в ноль, что и убира­ет на­шу ма­лень­кую трудность. При уста­нов­ке ре­жи­ма CTC ис­поль­зу­ют­ся те же би­ты ре­ги­ст­ра TCCR1, что и для функ­ций ШИМ, и по­де­ле­ны ме­ж­ду дву­мя по­ло­вин­ка­ми ре­ги­ст­ра. Что­бы вклю­чить ре­жим CTC, нуж­но сбро­сить эти би­ты в верх­ней по­ло­вин­ке ре­ги­ст­ра и один из них в нижней по­ло­вин­ке. Как вы, воз­мож­но, помните, здесь же мы за­да­ем зна­чение пред­ва­ри­тель­но­го де­ли­те­ля так­тов. Так как мы из­ме­ня­ем все би­ты, удобнее на­пи­сать:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как вы, воз­мож­но, до­га­да­лись, у этой про­бле­мы есть про­стое ре­шение – CTC (Clear Timer on Compare – сброс тай­ме­ра при сравнении). В этом ре­жи­ме при сов­па­дении зна­чений тай­мер сбра­сы­ва­ет­ся в ноль, что и убира­ет на­шу ма­лень­кую трудность. При уста­нов­ке ре­жи­ма CTC ис­поль­зу­ют­ся те же би­ты ре­ги­ст­ра TCCR1, что и для функ­ций ШИМ, и по­де­ле­ны ме­ж­ду дву­мя по­ло­вин­ка­ми ре­ги­ст­ра. Что­бы вклю­чить ре­жим CTC, нуж­но сбро­сить эти би­ты в верх­ней по­ло­вин­ке ре­ги­ст­ра и один из них в нижней по­ло­вин­ке. Как вы, воз­мож­но, помните, здесь же мы за­да­ем зна­чение пред­ва­ри­тель­но­го де­ли­те­ля так­тов. Так как мы из­ме­ня­ем все би­ты, удобнее на­пи­сать:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17984&amp;oldid=prev</id>
		<title>Olkol: /* Ос­та­но­ви­те ча­сы */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17984&amp;oldid=prev"/>
				<updated>2018-09-24T23:57:07Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ос­та­но­ви­те ча­сы&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:57, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 175:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 175:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ес­ли помните, со­глас­но на­шим рас­че­там пре­ры­вание возника­ет с час­то­той чуть ре­же чем раз в се­кун­ду: се­кун­да – это 62 500 так­тов, а не 65 536. У этой про­бле­мы есть два оче­вид­ных ре­шения. Пер­вое – в про­це­ду­ре об­ра­бот­ки пре­ры­вания уста­нав­ли­вать тай­мер в 3036: тогда он начнет от­счет не с ну­ля, а с это­го зна­чения, и до кон­ца ему останет­ся 62 500 так­тов. Эта идея не так уж пло­ха, но с ней свя­за­но несколь­ко про­блем. Са­ма ра­бо­та с тай­ме­ром, по­ка он за­пу­щен, при­во­дит к ошиб­кам – на запись но­во­го зна­чения уй­дет несколь­ко цик­лов, по­это­му такой спо­соб не со­всем то­чен. Это мо­жет не иг­рать осо­бой ро­ли с несколь­ки­ми мил­ли­се­кун­да­ми от се­кун­ды, но при бо­лее ко­рот­ком ин­тер­ва­ле вре­мени уже вы­зо­вет про­бле­мы. К сча­стью, есть луч­шее ре­шение. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ес­ли помните, со­глас­но на­шим рас­че­там пре­ры­вание возника­ет с час­то­той чуть ре­же чем раз в се­кун­ду: се­кун­да – это 62 500 так­тов, а не 65 536. У этой про­бле­мы есть два оче­вид­ных ре­шения. Пер­вое – в про­це­ду­ре об­ра­бот­ки пре­ры­вания уста­нав­ли­вать тай­мер в 3036: тогда он начнет от­счет не с ну­ля, а с это­го зна­чения, и до кон­ца ему останет­ся 62 500 так­тов. Эта идея не так уж пло­ха, но с ней свя­за­но несколь­ко про­блем. Са­ма ра­бо­та с тай­ме­ром, по­ка он за­пу­щен, при­во­дит к ошиб­кам – на запись но­во­го зна­чения уй­дет несколь­ко цик­лов, по­это­му такой спо­соб не со­всем то­чен. Это мо­жет не иг­рать осо­бой ро­ли с несколь­ки­ми мил­ли­се­кун­да­ми от се­кун­ды, но при бо­лее ко­рот­ком ин­тер­ва­ле вре­мени уже вы­зо­вет про­бле­мы. К сча­стью, есть луч­шее ре­шение. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок=Бой­тесь Тай­ме­ра 0! |Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;20&lt;/del&gt;%|Содержание=Со все­ми эти­ми тай­ме­ра­ми в вашем рас­по­ря­жении вы мо­же­те за­хо­теть восполь­зо­вать­ся ими для сво­их це­лей. Тай­ме­ры 1 и 2 в этом слу­чае толь­ко по­те­ря­ют воз­мож­ность управ­лять ШИМ на вы­во­дах 9 и 10 и 3 и 11 со­от­вет­ст­вен­но. Од­на­ко, ес­ли вы не знае­те, что де­лае­те, из­бе­гай­те ра­бо­ты с Тай­ме­ром 0. Пе­ре­груз­ка его на­стро­ек мо­жет при­вес­ти к непред­ска­зуе­мым ре­зуль­та­там: на­при­мер, оста­но­вить мил­ли­се­кунд­ный счет­чик, ис­поль­зуе­мый стан­дарт­ным ко­дом Arduino. И ес­ли вы не уве­ре­ны в том что де­лае­те, луч­ше оста­вить его в по­кое. }}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок=Бой­тесь Тай­ме­ра 0! |Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;40&lt;/ins&gt;%|Содержание=Со все­ми эти­ми тай­ме­ра­ми в вашем рас­по­ря­жении вы мо­же­те за­хо­теть восполь­зо­вать­ся ими для сво­их це­лей. Тай­ме­ры 1 и 2 в этом слу­чае толь­ко по­те­ря­ют воз­мож­ность управ­лять ШИМ на вы­во­дах 9 и 10 и 3 и 11 со­от­вет­ст­вен­но. Од­на­ко, ес­ли вы не знае­те, что де­лае­те, из­бе­гай­те ра­бо­ты с Тай­ме­ром 0. Пе­ре­груз­ка его на­стро­ек мо­жет при­вес­ти к непред­ска­зуе­мым ре­зуль­та­там: на­при­мер, оста­но­вить мил­ли­се­кунд­ный счет­чик, ис­поль­зуе­мый стан­дарт­ным ко­дом Arduino. И ес­ли вы не уве­ре­ны в том что де­лае­те, луч­ше оста­вить его в по­кое. }}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;У тай­ме­ра есть спе­ци­аль­ный ре­гистр сравнения. В него за­гру­жа­ет­ся зна­чение, и при ка­ж­дом из­менении зна­чения тай­ме­ра оно сравнива­ет­ся с со­дер­жи­мым ре­ги­ст­ра. Ес­ли они сов­па­да­ют и в TIMSK уста­нов­лен флаг пре­ры­вания, мож­но сгенери­ро­вать пре­ры­вание. Вот как уста­но­вить бит в ре­ги­ст­ре сравнения:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;У тай­ме­ра есть спе­ци­аль­ный ре­гистр сравнения. В него за­гру­жа­ет­ся зна­чение, и при ка­ж­дом из­менении зна­чения тай­ме­ра оно сравнива­ет­ся с со­дер­жи­мым ре­ги­ст­ра. Ес­ли они сов­па­да­ют и в TIMSK уста­нов­лен флаг пре­ры­вания, мож­но сгенери­ро­вать пре­ры­вание. Вот как уста­но­вить бит в ре­ги­ст­ре сравнения:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17983&amp;oldid=prev</id>
		<title>Olkol: /* Как ра­бо­та­ют тай­ме­ры? */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17983&amp;oldid=prev"/>
				<updated>2018-09-24T23:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Как ра­бо­та­ют тай­ме­ры?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:53, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 172:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 172:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это вы­ра­жение уста­нав­ли­ва­ет бит 5 ре­ги­ст­ра в единицу, не ме­няя дру­гие би­ты; то же са­мое де­ла­ет функ­ция pinMode(). (Мы вклю­чили эту вер­сию в Лис­тинг 2 на DVD.) Что же ка­са­ет­ся основ­но­го цик­ла – кста­ти, при же­лании ту­да мож­но вста­вить лю­бой код – для ми­гания све­то­дио­да ниче­го до­бав­лять не нуж­но, те­перь оно пол­но­стью неза­ви­си­мо от осталь­но­го ко­да, и све­то­ди­од бу­дет на се­кун­ду вклю­чать­ся и на се­кун­ду вы­клю­чать­ся, хо­тя пи­тание на него по­да­но. Или поч­ти на се­кун­ду.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Это вы­ра­жение уста­нав­ли­ва­ет бит 5 ре­ги­ст­ра в единицу, не ме­няя дру­гие би­ты; то же са­мое де­ла­ет функ­ция pinMode(). (Мы вклю­чили эту вер­сию в Лис­тинг 2 на DVD.) Что же ка­са­ет­ся основ­но­го цик­ла – кста­ти, при же­лании ту­да мож­но вста­вить лю­бой код – для ми­гания све­то­дио­да ниче­го до­бав­лять не нуж­но, те­перь оно пол­но­стью неза­ви­си­мо от осталь­но­го ко­да, и све­то­ди­од бу­дет на се­кун­ду вклю­чать­ся и на се­кун­ду вы­клю­чать­ся, хо­тя пи­тание на него по­да­но. Или поч­ти на се­кун­ду.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ос­та­но­ви­те ча­сы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;==&lt;/ins&gt;Ос­та­но­ви­те ча­сы&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ес­ли помните, со­глас­но на­шим рас­че­там пре­ры­вание возника­ет с час­то­той чуть ре­же чем раз в се­кун­ду: се­кун­да – это 62 500 так­тов, а не 65 536. У этой про­бле­мы есть два оче­вид­ных ре­шения. Пер­вое – в про­це­ду­ре об­ра­бот­ки пре­ры­вания уста­нав­ли­вать тай­мер в 3036: тогда он начнет от­счет не с ну­ля, а с это­го зна­чения, и до кон­ца ему останет­ся 62 500 так­тов. Эта идея не так уж пло­ха, но с ней свя­за­но несколь­ко про­блем. Са­ма ра­бо­та с тай­ме­ром, по­ка он за­пу­щен, при­во­дит к ошиб­кам – на запись но­во­го зна­чения уй­дет несколь­ко цик­лов, по­это­му такой спо­соб не со­всем то­чен. Это мо­жет не иг­рать осо­бой ро­ли с несколь­ки­ми мил­ли­се­кун­да­ми от се­кун­ды, но при бо­лее ко­рот­ком ин­тер­ва­ле вре­мени уже вы­зо­вет про­бле­мы. К сча­стью, есть луч­шее ре­шение. У тай­ме­ра есть спе­ци­аль­ный ре­гистр сравнения. В него за­гру­жа­ет­ся зна­чение, и при ка­ж­дом из­менении зна­чения тай­ме­ра оно сравнива­ет­ся с со­дер­жи­мым ре­ги­ст­ра. Ес­ли они сов­па­да­ют и в TIMSK уста­нов­лен флаг пре­ры­вания, мож­но сгенери­ро­вать пре­ры­вание. Вот как уста­но­вить бит в ре­ги­ст­ре сравнения:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ес­ли помните, со­глас­но на­шим рас­че­там пре­ры­вание возника­ет с час­то­той чуть ре­же чем раз в се­кун­ду: се­кун­да – это 62 500 так­тов, а не 65 536. У этой про­бле­мы есть два оче­вид­ных ре­шения. Пер­вое – в про­це­ду­ре об­ра­бот­ки пре­ры­вания уста­нав­ли­вать тай­мер в 3036: тогда он начнет от­счет не с ну­ля, а с это­го зна­чения, и до кон­ца ему останет­ся 62 500 так­тов. Эта идея не так уж пло­ха, но с ней свя­за­но несколь­ко про­блем. Са­ма ра­бо­та с тай­ме­ром, по­ка он за­пу­щен, при­во­дит к ошиб­кам – на запись но­во­го зна­чения уй­дет несколь­ко цик­лов, по­это­му такой спо­соб не со­всем то­чен. Это мо­жет не иг­рать осо­бой ро­ли с несколь­ки­ми мил­ли­се­кун­да­ми от се­кун­ды, но при бо­лее ко­рот­ком ин­тер­ва­ле вре­мени уже вы­зо­вет про­бле­мы. К сча­стью, есть луч­шее ре­шение. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;{{Врезка|right|Заголовок=Бой­тесь Тай­ме­ра 0! |Ширина=20%|Содержание=Со все­ми эти­ми тай­ме­ра­ми в вашем рас­по­ря­жении вы мо­же­те за­хо­теть восполь­зо­вать­ся ими для сво­их це­лей. Тай­ме­ры 1 и 2 в этом слу­чае толь­ко по­те­ря­ют воз­мож­ность управ­лять ШИМ на вы­во­дах 9 и 10 и 3 и 11 со­от­вет­ст­вен­но. Од­на­ко, ес­ли вы не знае­те, что де­лае­те, из­бе­гай­те ра­бо­ты с Тай­ме­ром 0. Пе­ре­груз­ка его на­стро­ек мо­жет при­вес­ти к непред­ска­зуе­мым ре­зуль­та­там: на­при­мер, оста­но­вить мил­ли­се­кунд­ный счет­чик, ис­поль­зуе­мый стан­дарт­ным ко­дом Arduino. И ес­ли вы не уве­ре­ны в том что де­лае­те, луч­ше оста­вить его в по­кое. }}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;У тай­ме­ра есть спе­ци­аль­ный ре­гистр сравнения. В него за­гру­жа­ет­ся зна­чение, и при ка­ж­дом из­менении зна­чения тай­ме­ра оно сравнива­ет­ся с со­дер­жи­мым ре­ги­ст­ра. Ес­ли они сов­па­да­ют и в TIMSK уста­нов­лен флаг пре­ры­вания, мож­но сгенери­ро­вать пре­ры­вание. Вот как уста­но­вить бит в ре­ги­ст­ре сравнения:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TIMSK1 |= _BV(OCIE1A)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;TIMSK1 |= _BV(OCIE1A)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17982&amp;oldid=prev</id>
		<title>Olkol: /* Как ра­бо­та­ют тай­ме­ры? */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17982&amp;oldid=prev"/>
				<updated>2018-09-24T23:49:46Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Как ра­бо­та­ют тай­ме­ры?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:49, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 125:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 125:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;//toggle the value&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;//toggle the value&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;{{Врезка|left|Заголовок=Скорая помощь |Ширина=10%|Содержание=Пе­ред из­ме­не­ни­ем зна­че­ний тай­ме­ра или со­от­вет­ст­вую­щих ре­ги­ст­ров, ко­то­рые мо­гут при­вес­ти к ошиб­кам, ес­ли вы­пол­не­ние ко­да пре­рвет­ся, сле­ду­ет за­пре­щать пре­ры­ва­ния вы­зо­вом cli();. Вы­зов sei(); вклю­чит их сно­ва.}} &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;value=!value;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;value=!value;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17981&amp;oldid=prev</id>
		<title>Olkol: /* Как ра­бо­та­ют тай­ме­ры? */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17981&amp;oldid=prev"/>
				<updated>2018-09-24T23:43:18Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Как ра­бо­та­ют тай­ме­ры?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:43, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 58:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 58:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ра­бо­та с тай­ме­ра­ми ка­жет­ся слож­но­ва­той, но по сути они уст­рое­ны до­воль­но про­сто. Тай­мер 1 (Timer1) – 16-бит­ный. В сво­ем са­мом про­стом ре­жи­ме он про­сто счи­та­ет цик­лы; достигнув максимума, уста­нав­ли­ва­ет бит пе­ре­полнения и на­чи­на­ет от­счет зано­ве.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ра­бо­та с тай­ме­ра­ми ка­жет­ся слож­но­ва­той, но по сути они уст­рое­ны до­воль­но про­сто. Тай­мер 1 (Timer1) – 16-бит­ный. В сво­ем са­мом про­стом ре­жи­ме он про­сто счи­та­ет цик­лы; достигнув максимума, уста­нав­ли­ва­ет бит пе­ре­полнения и на­чи­на­ет от­счет зано­ве.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок=Скорая помощь |Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;20&lt;/del&gt;%|Содержание= Код этого урока ра­бо­та­ет с Тай­ме­ром 1 (Timer1). Мож­но бы взять и Тай­ме­р 2 (Timer2), но ре­ги­ст­ры не­мно­го от­ли­ча­ют­ся, и это все­го лишь 8-бит­ный счет­чик. Вам по­мо­жет ру­ко­вод­ство http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf.}} &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|right|Заголовок=Скорая помощь |Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;10&lt;/ins&gt;%|Содержание= Код этого урока ра­бо­та­ет с Тай­ме­ром 1 (Timer1). Мож­но бы взять и Тай­ме­р 2 (Timer2), но ре­ги­ст­ры не­мно­го от­ли­ча­ют­ся, и это все­го лишь 8-бит­ный счет­чик. Вам по­мо­жет ру­ко­вод­ство http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf.}} &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Бу­ду­чи 16-бит­ным, он счи­та­ет до 65 535. Тай­мер в Arduino ра­бо­та­ет на час­то­те 16 МГц, то есть обыч­но пе­ре­полнение на­сту­па­ет око­ло 244 раз в се­кун­ду, или при­мер­но ка­ж­дые 4 милли­се­кун­ды. Это не ка­жет­ся слиш­ком удоб­ным, но мы еще не за­кон­чи­ли. До­ба­вим кое-ка­кие важ­ные де­та­ли. Флаг, уста­нав­ли­вае­мый при за­полнении тай­ме­ра, на­зы­ва­ет­ся весь­ма ло­гич­но – флаг пе­ре­полнения тай­ме­ра (Timer Overflow Flag), и для Тай­ме­ра 1 обо­зна­ча­ет­ся как TOV1. Этот флаг на­хо­дит­ся в спе­ци­аль­ном ре­ги­ст­ре (ячей­ке па­мя­ти) мик­ро­кон­трол­ле­ра, на­зы­вае­мой TIFR, со­кра­щение от “Timer Interrupt Flag Register [Ре­гистр фла­гов пре­ры­ваний тай­ме­ра]”. Про­сти­те за все эти на­звания, но их важ­но знать, по­сколь­ку они бу­дут ис­поль­зо­вать­ся в ко­де. Для уп­ро­щения чтения ко­да эти со­кра­щения оп­ре­де­ля­ют­ся в стан­дар­ных за­го­лов­ках AVR (это удобнее, так как ад­ре­са мо­гут раз­ли­чать­ся от уст­рой­ст­ва к уст­рой­ст­ву), и OCR1A вы­гля­дит по­нятнее, чем про­сто ад­рес 0x88. В кон­це этой ста­тьи есть неболь­шой сло­варь со­кра­щений, и мы бу­дем по­яс­нять их по ме­ре по­яв­ления.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Бу­ду­чи 16-бит­ным, он счи­та­ет до 65 535. Тай­мер в Arduino ра­бо­та­ет на час­то­те 16 МГц, то есть обыч­но пе­ре­полнение на­сту­па­ет око­ло 244 раз в се­кун­ду, или при­мер­но ка­ж­дые 4 милли­се­кун­ды. Это не ка­жет­ся слиш­ком удоб­ным, но мы еще не за­кон­чи­ли. До­ба­вим кое-ка­кие важ­ные де­та­ли. Флаг, уста­нав­ли­вае­мый при за­полнении тай­ме­ра, на­зы­ва­ет­ся весь­ма ло­гич­но – флаг пе­ре­полнения тай­ме­ра (Timer Overflow Flag), и для Тай­ме­ра 1 обо­зна­ча­ет­ся как TOV1. Этот флаг на­хо­дит­ся в спе­ци­аль­ном ре­ги­ст­ре (ячей­ке па­мя­ти) мик­ро­кон­трол­ле­ра, на­зы­вае­мой TIFR, со­кра­щение от “Timer Interrupt Flag Register [Ре­гистр фла­гов пре­ры­ваний тай­ме­ра]”. Про­сти­те за все эти на­звания, но их важ­но знать, по­сколь­ку они бу­дут ис­поль­зо­вать­ся в ко­де. Для уп­ро­щения чтения ко­да эти со­кра­щения оп­ре­де­ля­ют­ся в стан­дар­ных за­го­лов­ках AVR (это удобнее, так как ад­ре­са мо­гут раз­ли­чать­ся от уст­рой­ст­ва к уст­рой­ст­ву), и OCR1A вы­гля­дит по­нятнее, чем про­сто ад­рес 0x88. В кон­це этой ста­тьи есть неболь­шой сло­варь со­кра­щений, и мы бу­дем по­яс­нять их по ме­ре по­яв­ления.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17980&amp;oldid=prev</id>
		<title>Olkol: /* Как ра­бо­та­ют тай­ме­ры? */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF159:Arduino:_%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B5%D0%BC&amp;diff=17980&amp;oldid=prev"/>
				<updated>2018-09-24T23:42:54Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Как ра­бо­та­ют тай­ме­ры?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 23:42, 24 сентября 2018&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 58:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 58:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ра­бо­та с тай­ме­ра­ми ка­жет­ся слож­но­ва­той, но по сути они уст­рое­ны до­воль­но про­сто. Тай­мер 1 (Timer1) – 16-бит­ный. В сво­ем са­мом про­стом ре­жи­ме он про­сто счи­та­ет цик­лы; достигнув максимума, уста­нав­ли­ва­ет бит пе­ре­полнения и на­чи­на­ет от­счет зано­ве.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Ра­бо­та с тай­ме­ра­ми ка­жет­ся слож­но­ва­той, но по сути они уст­рое­ны до­воль­но про­сто. Тай­мер 1 (Timer1) – 16-бит­ный. В сво­ем са­мом про­стом ре­жи­ме он про­сто счи­та­ет цик­лы; достигнув максимума, уста­нав­ли­ва­ет бит пе­ре­полнения и на­чи­на­ет от­счет зано­ве.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;{{Врезка|right|Заголовок=Скорая помощь |Ширина=20%|Содержание= Код этого урока ра­бо­та­ет с Тай­ме­ром 1 (Timer1). Мож­но бы взять и Тай­ме­р 2 (Timer2), но ре­ги­ст­ры не­мно­го от­ли­ча­ют­ся, и это все­го лишь 8-бит­ный счет­чик. Вам по­мо­жет ру­ко­вод­ство http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf.}} &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Бу­ду­чи 16-бит­ным, он счи­та­ет до 65 535. Тай­мер в Arduino ра­бо­та­ет на час­то­те 16 МГц, то есть обыч­но пе­ре­полнение на­сту­па­ет око­ло 244 раз в се­кун­ду, или при­мер­но ка­ж­дые 4 милли­се­кун­ды. Это не ка­жет­ся слиш­ком удоб­ным, но мы еще не за­кон­чи­ли. До­ба­вим кое-ка­кие важ­ные де­та­ли. Флаг, уста­нав­ли­вае­мый при за­полнении тай­ме­ра, на­зы­ва­ет­ся весь­ма ло­гич­но – флаг пе­ре­полнения тай­ме­ра (Timer Overflow Flag), и для Тай­ме­ра 1 обо­зна­ча­ет­ся как TOV1. Этот флаг на­хо­дит­ся в спе­ци­аль­ном ре­ги­ст­ре (ячей­ке па­мя­ти) мик­ро­кон­трол­ле­ра, на­зы­вае­мой TIFR, со­кра­щение от “Timer Interrupt Flag Register [Ре­гистр фла­гов пре­ры­ваний тай­ме­ра]”. Про­сти­те за все эти на­звания, но их важ­но знать, по­сколь­ку они бу­дут ис­поль­зо­вать­ся в ко­де. Для уп­ро­щения чтения ко­да эти со­кра­щения оп­ре­де­ля­ют­ся в стан­дар­ных за­го­лов­ках AVR (это удобнее, так как ад­ре­са мо­гут раз­ли­чать­ся от уст­рой­ст­ва к уст­рой­ст­ву), и OCR1A вы­гля­дит по­нятнее, чем про­сто ад­рес 0x88. В кон­це этой ста­тьи есть неболь­шой сло­варь со­кра­щений, и мы бу­дем по­яс­нять их по ме­ре по­яв­ления.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Бу­ду­чи 16-бит­ным, он счи­та­ет до 65 535. Тай­мер в Arduino ра­бо­та­ет на час­то­те 16 МГц, то есть обыч­но пе­ре­полнение на­сту­па­ет око­ло 244 раз в се­кун­ду, или при­мер­но ка­ж­дые 4 милли­се­кун­ды. Это не ка­жет­ся слиш­ком удоб­ным, но мы еще не за­кон­чи­ли. До­ба­вим кое-ка­кие важ­ные де­та­ли. Флаг, уста­нав­ли­вае­мый при за­полнении тай­ме­ра, на­зы­ва­ет­ся весь­ма ло­гич­но – флаг пе­ре­полнения тай­ме­ра (Timer Overflow Flag), и для Тай­ме­ра 1 обо­зна­ча­ет­ся как TOV1. Этот флаг на­хо­дит­ся в спе­ци­аль­ном ре­ги­ст­ре (ячей­ке па­мя­ти) мик­ро­кон­трол­ле­ра, на­зы­вае­мой TIFR, со­кра­щение от “Timer Interrupt Flag Register [Ре­гистр фла­гов пре­ры­ваний тай­ме­ра]”. Про­сти­те за все эти на­звания, но их важ­но знать, по­сколь­ку они бу­дут ис­поль­зо­вать­ся в ко­де. Для уп­ро­щения чтения ко­да эти со­кра­щения оп­ре­де­ля­ют­ся в стан­дар­ных за­го­лов­ках AVR (это удобнее, так как ад­ре­са мо­гут раз­ли­чать­ся от уст­рой­ст­ва к уст­рой­ст­ву), и OCR1A вы­гля­дит по­нятнее, чем про­сто ад­рес 0x88. В кон­це этой ста­тьи есть неболь­шой сло­варь со­кра­щений, и мы бу­дем по­яс­нять их по ме­ре по­яв­ления.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Olkol</name></author>	</entry>

	</feed>