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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-05-02T12:40:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=6945&amp;mode</id>
<entry>
<author><name><![CDATA[qutrit]]></name></author>
<updated>2014-05-02T12:40:13+01:00</updated>
<published>2014-05-02T12:40:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79836#p79836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79836#p79836"/>
<title type="html"><![CDATA[Re: sterowanie kropkami na wyświetlaczu LED z multipl. avr c]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79836#p79836"><![CDATA[
Tylko że podany sposób zmienia mi pozostałe bity na PORTB które są wykorzystywane do innych celów. <br />Tak czy inaczej oboje uzyskujemy 'zero' na piątym bicie.<br /><br />Ehhh. jak zwykle diabeł tkwi w szczegółach..........<br />Wystarczyło w instrukcji wyboru CASE 1 i CASE 2 przenieść instrukcje PORTB |=... (odpowiedzialne za wył. kropek) na koniec. Prawidłowy kod wygląda następująco:<br />[syntax=c]stan początkowy kropki wyłączone<br />dip1=dip2=13;<br />switch(wysw)<br />{<br /><br />case 0:<br />PORTA |= (1&lt;&lt;0);<br />PORTA &amp;=~(1&lt;&lt;1);<br />PORTD  = cyfra(2);<br /><br />PORTB &amp;=~cyfra(dip2); //on  1&lt;&lt;5<br /><br />PORTB |= cyfra(dip1); // off <br />wysw++;<br />break;<br /><br />case 1:<br />PORTA |= (1&lt;&lt;1);<br />PORTA &amp;=~(1&lt;&lt;0);<br />PORTD  = cyfra(c); <br /><br />PORTB &amp;=~cyfra(dip1); // on 13<br /><br />PORTB |= cyfra(dip2); //off <br />wysw=0;<br />break;<br /><br />}[/syntax]<br />Funkcja zmien:<br />[syntax=c]void zmien(void)<br />{<br />if(++c&gt;2)<br /> {<br /> c=0;<br /> }<br /><br />if(c==0)<br />{<br />dip2=14;<br />//dip1=13;<br />}<br /><br />if(c==1)<br />{<br />dip2=13;<br />dip1=14;<br />}<br /><br />if(c==2)<br />{<br />//dip2=13;<br />dip1=13;<br />}<br />}[/syntax]<br />Póki co działa prawidłowo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Zamieszczam może komuś się przyda.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=766">qutrit</a> — 2 maja 2014, o 12:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-05-02T09:49:37+01:00</updated>
<published>2014-05-02T09:49:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79827#p79827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79827#p79827"/>
<title type="html"><![CDATA[Re: sterowanie kropkami na wyświetlaczu LED z multipl. avr c]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79827#p79827"><![CDATA[
Tak na szybko w linii 6<br /><br />(0&lt;&lt;5) - przesuwając zero o pięć pozycji nic nie zmieniasz (0b00000000 &lt;&lt; 5).<br />~(1&lt;&lt;5) - przesuwając jeden na piątą pozycję (0b00100000) i negując (0b11011111) uzyskasz zero w tym bicie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 2 maja 2014, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[qutrit]]></name></author>
<updated>2014-05-02T08:27:49+01:00</updated>
<published>2014-05-02T08:27:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79819#p79819</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79819#p79819"/>
<title type="html"><![CDATA[sterowanie kropkami na wyświetlaczu LED z multipl. avr c]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6945&amp;p=79819#p79819"><![CDATA[
Witam,<br />Mam wyświetlacz LED którego schemat zamieszczam poniżej:<br /><a href="http://forum.atnel.pl/_obrazki/o/766/21ed88bb759acf7f1f194d963598f779.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/766/21ed88bb759acf7f1f194d963598f779.jpg" alt="Obrazek" /></a><br /><br />Sterowania multipleksowe wyświetlacza :<br />[syntax=c]void LED (void) <br />{<br />switch(wysw)<br />{<br />case 0:<br />PORTA |= (1&lt;&lt;0);  //sterowanie wyswietlaczy<br />PORTA &amp;=~(1&lt;&lt;1);<br />PORTD  = cyfra(2); //sterowanie segmentami wyswietlacza<br /><br />PORTB &amp;=~cyfra(dip2); // wł dip2 poz 13 w tablicy znakow<br />PORTB |= cyfra(dip1);  //wył dip1 poz 14 w tablicy znaków<br />wysw++;<br />break;<br /><br />case 1:<br />PORTA |= (1&lt;&lt;1);<br />PORTA &amp;=~(1&lt;&lt;0);<br />PORTD  = cyfra(c); //wartość 'c' ta sama co w if-ach poniżej zmienia się prawidłowo<br /><br /> PORTB |= cyfra(dip2);  //wył dip2<br /> PORTB &amp;=~cyfra(dip1); // wł dip1 poz 13 w tablicy znakow<br /><br />wysw=0;<br />break;<br />}<br />}[/syntax]<br />Teraz przełączanie kropek chciałbym zrealizować według schematu. Każde wywołanie funkcji &quot;zmiana&quot; powoduje odpowiednie przejście:<br />DIP1-ON, DIP2-OFF -&gt; DIP1-OFF, DIP2-ON -&gt; DIP1-OFF, DIP2-OFF -&gt; i od nowa DIP1-ON, DIP2-OFF.................<br />Do tego służy mi funkcja:<br />[syntax=c]void zmiana(void)<br />{<br /> if(++c&gt;2) {c=0;}<br /><br />if(c==0)<br />{<br />dip2=14;  //wył dip2<br />dip1=13; //wł dip1<br />}<br /><br />if(c==1)<br />{<br />dip1=14;<br />dip2=13;<br />}<br /><br />if(c==2)<br />{<br />        dip1=14; //wył<br />dip2=14; //wył<br />}<br />}[/syntax]<br />Gdzie wartości 13 i 14 oznaczają 13-ty i 14-sty element zadeklarowanej następująco tablicy:<br />[syntax=c]prog_uint8_t cyfry&#91;15&#93; PROGMEM = {<br />...<br />//definicje cyfr<br />...,<br />(1&lt;&lt;5), // poz 13 tablicy  DIP ON DLA PORTB (PB5)<br />(0&lt;&lt;5) // poz 14 tablicy   DIP OFF DLA PORTB (PB5)<br />};[/syntax]<br />Warunki if(c==0) i if(c==1) działają poprawnie. Problem polega na tym, że gdy chcę wyłączyć kropki (przechodzę do warunku if(c==2) to obie kropki rzeczywiście się wyłączają albo obie świecą. Czyli przypadkowy stan. Domyślam się, że powodem tego jest podanie identycznych wartości (dip1=dip2=14) do sterowania PB5 w case 0: i case 1. Nie wiem jednak jak to ominąć.<br />Jak sterować kropkami tego wyświetlacza ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=766">qutrit</a> — 2 maja 2014, o 08:27</p><hr />
]]></content>
</entry>
</feed>