<?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=7970&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-01T22:20:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7970&amp;mode</id>
<entry>
<author><name><![CDATA[hoolgarez182]]></name></author>
<updated>2014-08-01T22:20:16+01:00</updated>
<published>2014-08-01T22:20:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89809#p89809</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89809#p89809"/>
<title type="html"><![CDATA[Re: Buzzer, diody LED oraz switche na jednym porcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89809#p89809"><![CDATA[
Dziękuję za pomoc:) Nie mogłem sobie wyobrazić jak się &quot;zachowują&quot; kolejne bity. Dzięki podpowiedzi dopracowałem kod i teraz buzzer, switche oraz diody LED podpięte pod ten sam port działają tak jak chciałem, czyli  'ala' jak pasek VOLUME. <br /><br />Co do 'PS' - to by wyjaśniło czemu wyskakują warningi.<br /><br />Poprawka kodu:<br /><br />[syntax=c]if (!(PIND &amp; PRAWY))<br />  {<br />          if((PIND &amp; 0b11111000) == 0b11111000)<br />          {<br />                  BUZZ(10);<br />          }<br />          else<br />          {<br />                  if (!(PIND &amp; PRAWY))<br />                  {<br />                          _delay_ms(20);<br />                          PORTD = ((PORTD &amp; 0x07) | ((PORTD &lt;&lt;= 1) &amp; 0b11111000));<br />                          PORTD |= 0b00001000;<br />                          while (!(PIND &amp; PRAWY)) {}<br />                          _delay_ms(20);<br />                  }<br />          }<br />  }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5239">hoolgarez182</a> — 1 sie 2014, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-08-01T19:37:05+01:00</updated>
<published>2014-08-01T19:37:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89788#p89788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89788#p89788"/>
<title type="html"><![CDATA[Re: Buzzer, diody LED oraz switche na jednym porcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89788#p89788"><![CDATA[
Jeśli dobrze zrozumiałem opis to masz złą jedną skrają pozycję. Drugi błąd to ustawianie PD7, a w kolejnej linii zerowanie tego bitu przesunięciem w złą stronę. Tak bym to zrobił:<br />[syntax=c]if (!(PIND &amp; PRAWY)) {<br />if((PIND &amp; 0b11111000) == 0b11111000) {<br />BUZZ(10);<br />} else {<br />if (!(PIND &amp; PRAWY)) {<br />_delay_ms(20);<br />PORTD = ((PORTD &amp; 0x07) | ((PORTD &gt;&gt;= 1) &amp; 0b11111000));<br />PORTD |= 0b10000000;<br />while (!(PIND &amp; PRAWY)) {<br />}<br />_delay_ms(20);<br />}<br />}<br />}[/syntax]<br /><br />PS. <br />[syntax=c]volatile uint8_t beep_time;[/syntax]<br />jest niepotrzebne<br /><br />[syntax=c]void BUZZ(int beep_time)[/syntax]<br />Pobierasz int, a porównujesz w funkcji z uint8_t co dla beep_time &gt; 255 spowoduje zapętlenie się programu.<br /><br />Buzerowi wystarczy:<br />[syntax=c]#define BUZZ_TG PORTD ^= (1&lt;&lt;PD2)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 1 sie 2014, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[hoolgarez182]]></name></author>
<updated>2014-08-01T09:33:47+01:00</updated>
<published>2014-08-01T09:33:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89686#p89686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89686#p89686"/>
<title type="html"><![CDATA[Buzzer, diody LED oraz switche na jednym porcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7970&amp;p=89686#p89686"><![CDATA[
Cześć,<br />Mam zestaw ATB 1.04  Chciałem potrenować na nim wykorzystywanie jednego portu do wielu operacji. Na początku BUZZER miałem podłączony do portu B, co by było łatwiej, a 5 diod LED oraz dwa przyciski podłączone do portu D.  Diody podpięte w odwrotnej kolejności czyli: PD7 - dioda skrajna po prawej oraz PD3 - dioda nr 5 licząc od prawej. <br /><br />Naciskając lewy przycisk zapalają się kolejne diody LED jadąc w prawo, a gdy zapali się ostatni (PD3) wtedy krótki sygnał dźwiękowy. Przycisk prawy - kolejne gaszenie i dźwięk na końcu.<br /><br />Zrobiłem maskowanie, żeby przesunięcie bitowe nie miało wpływu na przyciski i na odwrót. Wszystko elegancko chodziło. Nadeszła kolej na dołączenie jeszcze BUZZERA do portu D, a konkretnie PD2. I tu pojawił się problem. Wydaje mi się, że dobrze napisałem maskowania, a prawidłowo działa jedynie buzzer wydając pisk na skrajnych pozycjach. Diody natomiast mają teraz trochę inne te skrajne pozycje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Byłbym wdzięczny, gdyby ktoś wyjaśnił co zrobiłem źle.<br /><br />Pozdrawiam.<br /><br />main.h<br />[syntax=c]/************** KEYs *******************************/<br />#define LEWY (1&lt;&lt;PD1)<br />#define PRAWY (1&lt;&lt;PD0)<br /><br />/************* BUZZER ***********************/<br />#define BUZZ_TG PORTD = ((PORTD &amp; 0b11111000) | ((PORTD ^= (1&lt;&lt;PD2)) &amp; 0b00000100 ))[/syntax]<br /><br />init.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />void init(void)<br />{<br /><br />/******************************** DIODY LED , KEYe , BUZZER *********************************************/<br />DDRD = 0b11111100;  //5 diod / buzzer / 2 przyciski<br />PORTD = 0b11111011;// wygaszenie diod / wylaczenie buzzera / podciagniecie przyciskow do VCC<br /><br /><br />}[/syntax]<br /><br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;main.h&quot;<br /><br />volatile uint8_t beep_time;<br /><br /><br />int main(void)<br />{<br />init();<br /><br /><br />  while(1)<br />  {<br />  if(!(PIND &amp; LEWY))<br />  {<br />  if(!(PIND &amp; 0b11111000))<br />  {<br />  BUZZ(10);<br />  }<br />  else<br />  {<br />  if(!(PIND &amp; LEWY))<br />  {<br />  _delay_ms(20);<br />  PORTD = ((PORTD &amp; 0x07) | ((PORTD &gt;&gt;= 1) &amp; 0b11111000));<br />  while(!(PIND &amp; LEWY)) {}<br />  _delay_ms(20);<br />  }<br />  }<br />  }<br /><br /><br />  if(!(PIND &amp; PRAWY))<br />  {<br />  if(PIND &amp; 0b10000000)<br />    {<br />    BUZZ(10);<br />    }<br />  else<br />    {<br />    if(!(PIND &amp; PRAWY))<br />    {<br />    _delay_ms(20);<br />    PORTD |= 0b10000000;<br />    PORTD = ((PORTD &amp; 0x07) | ((PORTD &lt;&lt;= 1) &amp; 0b11111000));<br />    while(!(PIND &amp; PRAWY)) {}<br />    _delay_ms(20);<br />    }<br />    }<br />  }<br />  }<br /><br /><br />}<br /><br />void BUZZ(int beep_time)<br />{<br /><br /><br />for(uint8_t iterator = 0 ; iterator &lt; beep_time ; iterator++)<br />{<br />_delay_ms(20);<br />BUZZ_TG;<br />_delay_ms(20);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5239">hoolgarez182</a> — 1 sie 2014, o 09:33</p><hr />
]]></content>
</entry>
</feed>