<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=8700&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-02T22:37:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8700&amp;mode</id>
<entry>
<author><name><![CDATA[Fartek]]></name></author>
<updated>2014-10-02T22:36:01+01:00</updated>
<published>2014-10-02T22:36:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97473#p97473</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97473#p97473"/>
<title type="html"><![CDATA[Re: [Atmega16] przyciski, usart i zepsuty kod]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97473#p97473"><![CDATA[
No jasne, dlatego wszystko działało dla pinów zerowych. <br />Durnota, ale obawiam się, że jeszcze by mi zajęło kapkee czasu znalezienie błędu <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Dzięki bardzo za pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2335">Fartek</a> — 2 paź 2014, o 22:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-10-02T22:37:53+01:00</updated>
<published>2014-10-02T22:26:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97472#p97472</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97472#p97472"/>
<title type="html"><![CDATA[Re: [Atmega16] przyciski, usart i zepsuty kod]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97472#p97472"><![CDATA[
Zapewne chodzi o błędny w tym wypadku operator iloczynu bitowego, zamiast logicznego.<br />W linii 17 i 22 zamień znak &quot;&amp;&quot; na &quot;&amp;&amp;&quot;. Głównie dla wyrażenia warunkowego w linii 22 jest to tak istotne, ponieważ obliczana wartość pierwszej części wyrażenia będzie równa 0 lub 2 (sic!)...<br /><br />Można też użyć podwójnie operatora negacji logicznej dla pierwszej części tego wyrażenia &quot;!!(PINA &amp; (1&lt;&lt;PA1))&quot;, celem uzyskania pożądanej wartości logicznej. Sposobów jest całe mnóstwo, bo jest cała paleta operatorów logicznych, jak również operator warunkowy, jednak nie polecam takich metod ponieważ jest to tylko sposób na obejście problemu, a tak naprawdę zamazuje tylko sens całego wyrażenia.<br /><br />[syntax=c]...<br />} else if ( ( PINA &amp; (1&lt;&lt;PA1)) &amp;&amp; (state_change1 == 1)) {<br />...[/syntax]<br />Oczywiście pozostawiając jedynie fragment testujący pin &quot;PA1&quot;, działanie będzie poprawne, ponieważ dowolna wartość różna od 0 (niezależnie 1, 2 czy cokolwiek innego) będzie interpretowana jako &quot;TRUE&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 2 paź 2014, o 22:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Fartek]]></name></author>
<updated>2014-10-02T22:18:07+01:00</updated>
<published>2014-10-02T22:18:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97470#p97470</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97470#p97470"/>
<title type="html"><![CDATA[[Atmega16] przyciski, usart i zepsuty kod]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8700&amp;p=97470#p97470"><![CDATA[
Dobry wieczór,<br />napotkałem na swojej drodze pewien problem, z którym chyba nie jestem w stanie sobie poradzić.<br /><br />Zacznę od początku:<br />Chciałem stworzyć takie sobie fikuśne urządzenie, które po naciśnięciu danego przełącznika podłączonego do pinu mikrokontrolera, prześle poprzez FT232 na port COM, jakiś pożądany przeze mnie ciąg znaków. Okej, nawet to się udało. Po zmarnowaniu jakiegoś 1m^2 laminatu powstał w końcu prototyp. O dziwo, w przeciwieństwie do innych prototypów ten działał. Tzn. tak mi się wydawało. Ale do sedna. <br /><br />Do PIN'u podpina przycisk. Przycisk zwiera do masy. Pin podciągam do Vcc. Chcę, aby po zmianie stanu na pinie, kontroler wysyłał dany ciąg znaków ale tylko raz przez okres wciśnięcia przełącznika. Użyłem do tego celu pomocniczej zmiennej zwanej w dalszej części &quot;state_change1&quot;. Ma ona na celu ograniczenie transmisji do jednokrotnego przesyłu. Oto kod:<br /><br />[syntax=c]int main ( void ) {<br /><br />uint8_t state_change1 = 0;<br /><br />usart_init( 115200 );<br /><br />_delay_ms(1000);<br /><br />usart_puts(&quot;Device: READY\n&quot;);<br /><br />DDRA &amp;= ~(1&lt;&lt;PA1);<br />PORTA |= (1&lt;&lt;PA1);<br /><br /><br />while( 1 ) {<br /><br />if( !( PINA &amp; (1&lt;&lt;PA1)) &amp; (state_change1 == 0) ) {<br />usart_puts(&quot;Y0110\n&quot;);<br />state_change1 = 1;<br />_delay_ms(20);<br /><br />} else if ( ( PINA &amp; (1&lt;&lt;PA1)) &amp; (state_change1 == 1)) {<br />usart_puts(&quot;Y0100\n&quot;);<br />state_change1 = 0;<br />_delay_ms(20);<br />}<br /><br />}<br />}[/syntax]<br /><br />Okej, w czym tkwi sekret szczęścia ? Otóż, popełniony przeze mnie kod działa, ale tylko dla pinów o numerze 0. Tzn PA0, PB0 etc. Kiedy chce zmienić pin na inny (np. zaprezentowany PA1) to całość się sypie, następuje tylko transmisja pierwszej części gdy przycisk jest wciśnięty (zero na pinie) ale tylko raz. Dalsze wciskanie nie przynosi żadnego rezultatu. <br />Ponadto po usunięciu dodatkowego warunku tj. &quot;(state_change1 == 1/0)&quot; program zachowuje się tak jak tego oczekuję. <br /><br />Może to jakaś drobna głupota, ale to samo dzieje się na dwóch różnych, niezależnych Atmegach16. <br /><br />USART działa bez problemu. <br />Jakiekolwiek wskazówki mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2335">Fartek</a> — 2 paź 2014, o 22:18</p><hr />
]]></content>
</entry>
</feed>