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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-03T20:39:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9954&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-03T20:39:47+01:00</updated>
<published>2015-01-03T20:39:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=112069#p112069</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=112069#p112069"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=112069#p112069"><![CDATA[
Witam<br />Fajnie że działa.<br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />chciałem wyświetlić 2015<br /></div><br />...zacząłem się obawiać, że będziesz musiał wyświetlić <strong>2016</strong> <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 3 sty 2015, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-03T14:48:24+01:00</updated>
<published>2015-01-03T14:48:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111949#p111949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111949#p111949"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111949#p111949"><![CDATA[
Sprawdziłem te segmenty, okazało się, że na schemacie były źle napisane. Nauczka na przyszłość...<br />Zmieniłem piny w bibliotece i ruszyło:<br />[syntax=c]// definicje bitów dla poszczególnych segmentów LED<br />#define SEG_A (1&lt;&lt;PB0)<br />#define SEG_B (1&lt;&lt;PB1)<br />#define SEG_C (1&lt;&lt;PB2)<br />#define SEG_D (1&lt;&lt;PB3)<br />#define SEG_E (1&lt;&lt;PB4)<br />#define SEG_F (1&lt;&lt;PB5)<br />#define SEG_G (1&lt;&lt;PB6)<br />#define SEG_DP (1&lt;&lt;PB7)[/syntax]<br /><a href="http://forum.atnel.pl/_obrazki/o/6976/3fbdbf90b32d21d495086b92d0abf475.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/6976/3fbdbf90b32d21d495086b92d0abf475.jpg" alt="Obrazek" /></a><br /><br />Dzięki za cenne porady.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 3 sty 2015, o 14:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-03T00:04:58+01:00</updated>
<published>2015-01-03T00:04:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111884#p111884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111884#p111884"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111884#p111884"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />Z tego co analizowałem wychodzi na to, że jednak masz inaczej niż na schemacie. Segmenty przypisz odwrotnie niż pokazuje schemat - PB0 / a,  PB1 / b itd.<br /></div><br />Nie sprawdzaj, tylko zmień przypisanie segmentów.<br />...kurcze, żeby raz za razem sam siebie cytować... <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 3 sty 2015, o 00:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-02T21:43:11+01:00</updated>
<published>2015-01-02T21:43:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111862#p111862</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111862#p111862"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111862#p111862"><![CDATA[
Jutro sprawdzę poszczególne segmenty bo już dzisiaj nie mam już siły.<br />Dzięki za pomoc.<br />O efektach poinformuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 2 sty 2015, o 21:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-02T21:23:28+01:00</updated>
<published>2015-01-02T21:23:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111860#p111860</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111860#p111860"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111860#p111860"><![CDATA[
Edytowałem poprzedni wpis, to zobacz.<br />...a komentarz do tego:<br />[syntax=c]ANODY_PORT = ~licznik;  // wygaszenie wszystkich wyświetlaczy[/syntax]<br />mógłbyś wyrżnąć   <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 2 sty 2015, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-02T21:14:02+01:00</updated>
<published>2015-01-02T21:14:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111858#p111858</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111858#p111858"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111858#p111858"><![CDATA[
program main zmodyfikowałem tak aby wyświetlał na pierwszym segmencie 2:<br />[syntax=c]int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br /><br />// testowa inicjalizacja zmiennych oraz liczb mających się wyświetlać na wyrw. LED<br />//cy1=2;<br />//cy2=0;<br />//cy3=1;<br />//cy4=5;<br /><br />sei();// włączenie globalnego zezwolenia na przerwania<br /><br /><br /><br />//DDRB |= (1&lt;&lt;PB5);<br />while(1)<br />{<br />    cy1=2;<br />//cy2=0;<br />//cy3=1;<br />//cy4=5;<br />//PORTB ^= (1&lt;&lt;PB5);<br />//_delay_ms(1000);<br />}<br /><br />/*uint16_t licznik=6000;<br />uint8_t d1,d2,d3,d4;<br /><br />//**********************  pętla główna<br />while(1)<br />{<br />licznik--;<br /><br />d1=licznik/1000;<br />if(d1) cy1=d1; else cy1=NIC;<br />d2=(licznik-(d1*1000))/100;<br />if(d2) cy2=d2; else cy2=(licznik&gt;999)?0:NIC;<br />d3=(licznik-(d1*1000)-(d2*100))/10;<br />if(d3) cy3=d3; else cy3=(licznik&gt;99)?0:NIC;<br />d4=(licznik-(d1*1000)-(d2*100)-(d3*10));<br />cy4=d4;<br />_delay_ms(100);<br />//if(licznik&gt;9999) licznik=0;<br />if(!licznik) licznik=6000;<br />}*/<br />}[/syntax]<br />ciągle modyfikuje ten orginalny program z bluebooka<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...nie wiem czy dobrze zrobiłeś, jak się dobrze przyjrzysz to zauważysz że wyświetlacz wyświetlił Ci prawie to co chciałeś tylko od prawej do lewej i nie te segmenty.<br /></div><br />teraz jest tak:<br />[syntax=c]ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t licznik=8;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = ~licznik;// wygaszenie wszystkich wyświetlaczy<br /><br />if(licznik==64) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if(licznik==32) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if(licznik==16) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0b10000111) | (~licznik &amp; ~0b10000111);// maskowanie bitowe - cykliczne przełączanie kolejnej anody w każdym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalającego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesunięcie zawartości bitów licznika o 1 w lewo<br />if(licznik&gt;64) licznik = 8;// jeśli licznik większy niż 8 to ustaw na 1<br />}[/syntax]<br />i wyświetla takie bzdurki:<br /><a href="http://forum.atnel.pl/_obrazki/o/6976/761761a0d80105880e63724b9c553c21.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/6976/761761a0d80105880e63724b9c553c21.jpg" alt="Obrazek" /></a><br />o ile dobrze rozumuje to licznik==64 wtedy PD6=0; licznik==32 to PD5=0 itd...<br />Przynajmniej na I segmencie jest niepełna cyfra 2.<br />Pozdro!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 2 sty 2015, o 21:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-02T21:21:25+01:00</updated>
<published>2015-01-02T20:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111855#p111855</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111855#p111855"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111855#p111855"><![CDATA[
Sory, obydwa zapisy są poprawne tylko ja patrzyłem że uC na PORTB ma wyjście 7 bitowe.<br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />Powyżej powinno być w tych warunkach od 64 do 8, zmieniłem w międzyczasie.<br /></div><br />...nie wiem czy dobrze zrobiłeś, jak się dobrze przyjrzysz to zauważysz że wyświetlacz wyświetlił Ci prawie to co chciałeś tylko od prawej do lewej i nie te segmenty. Musisz programowo sprawdzić, czy one odpowiadają temu co masz na schemacie. Napisz mini programik, wystaw na np. PD3 zero i po kolei &quot;każ mu&quot; zapalać poszcz. segmenty.<br />Z tego co analizowałem wychodzi na to, że jednak masz inaczej niż na schemacie. Segmenty przypisz odwrotnie niż pokazuje schemat - PB0 / a,  PB1 / b itd.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 2 sty 2015, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-02T20:29:41+01:00</updated>
<published>2015-01-02T20:29:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111852#p111852</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111852#p111852"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111852#p111852"><![CDATA[
[syntax=c]A skąd wziąłeś tą nieszczęsną liczbę 87[/syntax]<br />w 4 albo 5 poście dostałem taką podpowiedz. 0x87 = 0b1000 0111<br /><br />zmieniłem na binarny ale nie pomogło:<br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0b10000111) | (~licznik &amp; ~0b10000111);[/syntax]<br />  <br />jak uczyłem się bascoma na tym zestawie, multipleksowanie działało bez zarzutu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 2 sty 2015, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-02T19:57:24+01:00</updated>
<published>2015-01-02T19:57:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111839#p111839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111839#p111839"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111839#p111839"><![CDATA[
...patrzyłem na Twój pierwszy wpis z załączoną bibl.<br />Coś masz z połączeniami, u mnie odpaliło za pierwszym razem ( oczywiście po poprawkach w rejestrach )<br />Później coś wymyślimy bo muszę skończyć fuchę  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />A skąd wziąłeś tą nieszczęsną liczbę 87 - mówiłem, że nie zapisując binarnie łatwo o pomyłkę.<br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 7) | (~licznik &amp; 0x78);                  // maskowanie bitowe[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 2 sty 2015, o 19:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-02T19:48:00+01:00</updated>
<published>2015-01-02T19:48:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111836#p111836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111836#p111836"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111836#p111836"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />zmieniłeś?<br /></div><br />Na czym ta zmiana ma polegać bo już nie rozumiem??<br />[syntax=c]// definicje bitów dla poszczególnych segmentów LED<br />#define SEG_A (1&lt;&lt;PB7)<br />#define SEG_B (1&lt;&lt;PB6)<br />#define SEG_C (1&lt;&lt;PB5)<br />#define SEG_D (1&lt;&lt;PB4)<br />#define SEG_E (1&lt;&lt;PB3)<br />#define SEG_F (1&lt;&lt;PB2)<br />#define SEG_G (1&lt;&lt;PB1)<br />#define SEG_DP (1&lt;&lt;PB0)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 2 sty 2015, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-02T19:35:02+01:00</updated>
<published>2015-01-02T19:35:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111831#p111831</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111831#p111831"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111831#p111831"><![CDATA[
A to?<br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />I jeszcze jedno: musisz zmienić PIN'y dla poszcz. segmentów<br />[syntax=c]#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />...<br />...[/syntax]<br /> na:<br />[syntax=c]#define SEG_Dp (1&lt;&lt;0)<br />#define SEG_G (1&lt;&lt;1)<br />...<br />...[/syntax]<br />w.g schematu masz inne.<br /></div><br />zmieniłeś?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 2 sty 2015, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-02T15:11:39+01:00</updated>
<published>2015-01-02T15:11:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111804#p111804</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111804#p111804"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111804#p111804"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...przepisz to multipleksowanie tak jak Ci napisałem; masz liczyć od 8 do 64 a nie 1 do 8!!!<br /></div><br />Poprawiłem<br />d_led.c<br />[syntax=c]ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t licznik=8;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = ~licznik;// wygaszenie wszystkich wyświetlaczy<br /><br />if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if(licznik==16) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if(licznik==32) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if(licznik==64) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0x87) | (~licznik &amp; ~0x87);// maskowanie bitowe - cykliczne przełączanie kolejnej anody w każdym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalającego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesunięcie zawartości bitów licznika o 1 w lewo<br />if(licznik&gt;64) licznik = 8;<br />}[/syntax]<br />Powyżej powinno być w tych warunkach od 64 do 8, zmieniłem w międzyczasie.<br />w funkcji main.c ustawiłem tak:<br />[syntax=c]cy1=2;<br />cy2=0;<br />cy3=1;<br />cy4=5;<br /><br />sei();// włączenie globalnego zezwolenia na przerwania<br /><br /><br /><br />DDRB |= (1&lt;&lt;PB5);<br />while(1)<br />{<br />PORTB ^= (1&lt;&lt;PB5);<br />_delay_ms(1000);<br />}[/syntax]<br /><br />resztę &quot;wyłączyłem&quot; jako komentarz<br />i pokazały się takie bzdury:<br /><a href="http://forum.atnel.pl/_obrazki/o/6976/a94b36d7facef73e5a5f7be670b7f0d4.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/6976/a94b36d7facef73e5a5f7be670b7f0d4.jpg" alt="Obrazek" /></a><br /><br />chciałem wyświetlić 2015, segment F &quot;pływa&quot; od W4 do W1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 2 sty 2015, o 15:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-01T23:10:24+01:00</updated>
<published>2015-01-01T23:10:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111709#p111709</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111709#p111709"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111709#p111709"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />...a zmieniłeś w przerwaniu &quot;liczenie&quot; seg. tak jak Ci napisałem?<br /></div><br />...przepisz to multipleksowanie tak jak Ci napisałem; <strong>masz liczyć od 8 do 64 a nie 1 do 8!!!</strong><br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />negowanie licznika nic nie zmieniło<br />[syntax=c]ANODY_PORT = ~licznik[/syntax]<br /></div><br />...to nie jest negowanie licznika, tylko &quot;odpalanie&quot; danego wyświetlacza ( u Ciebie dla licznik = 1 - pierwszego, 2 - drugiego, 4 - trzeciego itd; a ma być 8, 16, 32, 64 ) <br />I jeszcze jedno: musisz zmienić PIN'y dla poszcz. segmentów<br />[syntax=c]#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />...<br />...[/syntax]<br /> na:<br />[syntax=c]#define SEG_Dp (1&lt;&lt;0)<br />#define SEG_G (1&lt;&lt;1)<br />...<br />...[/syntax]<br />bo w.g schematu masz inne.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 1 sty 2015, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2015-01-01T22:30:25+01:00</updated>
<published>2015-01-01T22:30:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111699#p111699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111699#p111699"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111699#p111699"><![CDATA[
Zmieniłem ten TCCR0A na:<br /><br />[syntax=c]TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);[/syntax]<br /> i migocze jeden segment. Kilka razy na sekundę zmienia się cyfra 8 na 9. <br /><br />negowanie licznika nic nie zmieniło<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />ANODY_PORT = ~licznik<br /></div><br /><br />czyżby dalej z maskowaniem coś nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 1 sty 2015, o 22:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-31T23:37:16+01:00</updated>
<published>2014-12-31T23:37:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111547#p111547</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111547#p111547"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111547#p111547"><![CDATA[
...a zmieniłeś w przerwaniu &quot;liczenie&quot; seg. tak jak Ci napisałem?<br />Jakbyś miał czas to zajrzyj do noty kat.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Jest:<br />[syntax=c]TCCR0A |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);          // preskaler = 1024[/syntax]<br />winno być:<br />[syntax=c]TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);          // preskaler = 1024[/syntax]<br /><br />...nie było także &quot;polecenia&quot; aby z tymi anodami coś się działo - edytowałem wcześniejszy wpis dodając ANODY_PORT = ~licznik.<br /><br />Również wszystkiego najlepszego <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 31 gru 2014, o 23:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2014-12-31T21:57:15+01:00</updated>
<published>2014-12-31T21:57:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111542#p111542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111542#p111542"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111542#p111542"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Co do maskowania bitów to zasada jest następująca. Powiedzmy, że chcesz zmieniać bity 3, 4, 5, 6 w porcie czy jakiejś zmiennej. Wtedy maska powinna być = 0b10000111. Nie zostaną zmienione bity w których maska ma wartość 1, natomiast zmianie ulegną bity na pozycjach, których maska ma wartość 0.<br />A więc<br /></div><br />Teraz rozumiem, zmieniłem ale dalej segmenty nie &quot;palą&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...ale w tym kodzie wykorzystano TIMER1 a Ty używasz TIMER0 więc trzeba patrzeć na rejestry TIMER0.<br /></div><br /><br />Źle spojrzałem, już dostaje oczopląsu;)<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...a zworki J1,J2 przełożone?<br />A teraz pomyśl: na których PIN'ach w programie &quot;wędruje&quot; 0 a do których masz podpięte bazy tranzystorów kluczujących?<br /></div><br /><br />Zworki są na DISP, zero powinno wędrować na PD6..PD3.<br />[syntax=c]#define CA1 (1&lt;&lt;PD6)// CA1 oznacza bit nr.0 portu D<br />#define CA2 (1&lt;&lt;PD5)// CA2 oznacza bit nr.1 portu D<br />#define CA3 (1&lt;&lt;PD4)// CA3 oznacza bit nr.2 portu D<br />#define CA4 (1&lt;&lt;PD3)// CA4 oznacza bit nr.3 portu D[/syntax]<br /><br />Zmieniłem maskę:<br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0x87) | (~licznik &amp; ~0x87);[/syntax]<br /><br />potem ją wyłączyłem<br />[syntax=c]//ANODY_PORT = (ANODY_PORT &amp; 0x87) | (~licznik &amp; ~0x87);[/syntax]<br /><br />też nie pomogło... <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />W pliku main.c nie bardzo rozumiem: czekasz aż będzie większe od 9999 a zmienną odejmujesz ( licznik--;) - trochę namieszałeś.<br /></div><br />zmieniłem tak jak było w &quot;originale&quot; ale też brak zapalenie choćby kropeczki.<br />[syntax=c]while(1)<br />{<br />licznik--;<br /><br />d1=licznik/1000;<br />if(d1) cy1=d1; else cy1=NIC;<br />d2=(licznik-(d1*1000))/100;<br />if(d2) cy2=d2; else cy2=(licznik&gt;999)?0:NIC;<br />d3=(licznik-(d1*1000)-(d2*100))/10;<br />if(d3) cy3=d3; else cy3=(licznik&gt;99)?0:NIC;<br />d4=(licznik-(d1*1000)-(d2*100)-(d3*10));<br />cy4=d4;<br />_delay_ms(100);<br />//if(licznik&gt;9999) licznik=0;<br />if(!licznik) licznik=6000;<br />}[/syntax]<br /><br />Mam nadzieję, że w nowym roku rozwiąże ten problem;)<br />Życzę wszystkim szczęśliwego nowego roku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 31 gru 2014, o 21:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-01-01T01:36:52+01:00</updated>
<published>2014-12-31T20:00:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111531#p111531</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111531#p111531"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111531#p111531"><![CDATA[
Witam<br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />Zatem dałem wpuścić się w maliny ...<br />[syntax=c]/////////////////////////////////////////////////////////////////<br />// LedTutorial.c - plik główny tutoriala LED<br />//<br />// Autor: Ravender Kompilator: WinAVR<br />// Strona: www.wkretak.pl<br />/////////////////////////////////////////////////////////////////<br /> <br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;wyswietlacze.h&gt; //mój plik nagłówkowy<br /> <br />int main(void)<br />{<br /> <br />DDRB = 255; //cały port jako wyjściowy<br />DDRD |= (1&lt;&lt;0)|(1&lt;&lt;1); //porty PD0 i PD1 również jako wyjścia<br /> <br />TCCR1B |= (1 &lt;&lt; WGM12); // Ustawia timer1 w tryb CTC<br />OCR1A = 40000; // Ustawia wartość pożądaną na 100Hz dla preskalera 1<br />TCCR1B |= (1 &lt;&lt; CS10); // Ustawia timer z preskalerem Fcpu/1<br />TIMSK |= (1 &lt;&lt; OCIE1A); // Zezwolenie na przerwania dla CTC<br />sei(); // Zezwolenie globalne na przerwania[/syntax]<br /></div><br />...ale w tym kodzie wykorzystano TIMER1 a Ty używasz TIMER0 więc trzeba patrzeć na rejestry TIMER0.<br /><br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />nie zapala się żaden segment ani kropka, tak jakby w ogóle nie było zasilania<br /></div><br />...a zworki J1,J2 przełożone?<br />A teraz pomyśl: na których PIN'ach w programie &quot;wędruje&quot; 0 a do których masz podpięte bazy tranzystorów kluczujących?<br /><br />[syntax=c]// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH dla attiny2313<br /><br />ISR(TIMER0_COMPA_vect)<br /><br />{<br /><br />        static uint8_t licznik=8;               // zmienna do przełączania kolejno anod wyrwietlacza<br />     ANODY_PORT = ~licznik;<br /><br /> ANODY_PORT = (ANODY_PORT &amp; 0x78);       // wygaszenie wszystkich wyświetlaczy  0x78 = 111 1000<br /><br />         if(licznik==8)          LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );        // gdy zapalony wyśw.1 podaj stan zmiennej c1<br /><br />        else if(licznik==16) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );    // gdy zapalony wyśw.2 podaj stan zmiennej c2<br /><br />        else if(licznik==32) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );    // gdy zapalony wyśw.3 podaj stan zmiennej c3<br /><br />        else if(licznik==64) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );    // gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />         ANODY_PORT = (ANODY_PORT &amp; 0x78) | (~licznik &amp; 0x7);<br /><br />licznik &lt;&lt;=1;<br /><br />if (licznik&gt;64) licznik=8;[/syntax]<br />Nie robiłem nic przy maskowaniu, najlepiej najpierw odpal bez maskowania a potem je dołóż.<br />W pliku main.c nie bardzo rozumiem: czekasz aż będzie większe od 9999 a zmienną odejmujesz ( licznik--;) - trochę namieszałeś.<br /><br /><br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 31 gru 2014, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2014-12-31T19:28:41+01:00</updated>
<published>2014-12-31T19:28:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111520#p111520</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111520#p111520"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111520#p111520"><![CDATA[
Co do maskowania bitów to zasada jest następująca. Powiedzmy, że chcesz zmieniać bity 3, 4, 5, 6 w porcie czy jakiejś zmiennej. Wtedy maska powinna być = 0b10000111. Nie zostaną zmienione bity w których maska ma wartość 1, natomiast zmianie ulegną bity na pozycjach, których maska ma wartość 0.<br />A więc [syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0x87) | (~licznik &amp; ~0x87);[/syntax]<br />Tylko ten licznik powinien kolejno przyjmować stany 0b01000000, 0b00100000, 0b00010000, 0b00001000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 31 gru 2014, o 19:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2014-12-31T19:05:00+01:00</updated>
<published>2014-12-31T19:05:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111512#p111512</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111512#p111512"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111512#p111512"><![CDATA[
Dzięki za odpowiedzi!<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Po drugie po wykonaniu tej instrukcji bity portu D 7, 2, 1, 0 zostaną wyzerowane, a bity 6, 5, 4, 3 nie zmienią się, a przecież nie o to chodziło.<br /></div><br />Przyznam szczerze, że nie do końca ogarniam, maskowanie bitowe. Czytałem uważnie w książce pana Kardasia, o maskowaniu i chciałem aby zmieniały się tylko stany na końcówkach, które sterują tranzystorami. Jak zatem poprawnie zapisać maskowanie bo nie mam pomysłu na to <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...to tak jakbyś u lekarza powiedział &quot;coś mi dolega&quot;. Rozwiń proszę to pojęcie bo w ten sposób pojawi się kilka wpisów zanim wszystko będzie jasne.<br /></div><br /><br />Tzn. nie zapala się żaden segment ani kropka, tak jakby w ogóle nie było zasilania. Układ na pewno jest dobrze polutowany, mogę zapalać pojedyncze segmenty.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...ATtin2313 nie posiadają takiego rejestru, winno być:<br /></div><br /><br />Zatem dałem wpuścić się w maliny <!-- m --><a class="postlink" href="http://diycenter.acid19.linuxpl.com/readarticle.php?article_id=19" >http://diycenter.acid19.linuxpl.com/rea ... icle_id=19</a><!-- m --><br /><br />[syntax=c]/////////////////////////////////////////////////////////////////<br />// LedTutorial.c - plik główny tutoriala LED<br />//<br />// Autor: Ravender Kompilator: WinAVR<br />// Strona: www.wkretak.pl<br />/////////////////////////////////////////////////////////////////<br /><br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;wyswietlacze.h&gt; //mój plik nagłówkowy<br /><br />int main(void)<br />{<br /><br />DDRB = 255; //cały port jako wyjściowy<br />DDRD |= (1&lt;&lt;0)|(1&lt;&lt;1); //porty PD0 i PD1 również jako wyjścia<br /><br />TCCR1B |= (1 &lt;&lt; WGM12); // Ustawia timer1 w tryb CTC<br />OCR1A = 40000; // Ustawia wartość pożądaną na 100Hz dla preskalera 1<br />TCCR1B |= (1 &lt;&lt; CS10); // Ustawia timer z preskalerem Fcpu/1<br />TIMSK |= (1 &lt;&lt; OCIE1A); // Zezwolenie na przerwania dla CTC<br />sei(); // Zezwolenie globalne na przerwania<br /><br />while(1)<br />{<br /><br />}<br /><br />return 0;<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />//Obsługa przerwania<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 31 gru 2014, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-31T16:35:28+01:00</updated>
<published>2014-12-31T16:35:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111479#p111479</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111479#p111479"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111479#p111479"><![CDATA[
Witam<br /><div class="quotetitle">fazer napisał(a):</div><div class="quotecontent"><br />Niestety brak reakcji<br /></div><br />...to tak jakbyś u lekarza powiedział &quot;coś mi dolega&quot;. Rozwiń proszę to pojęcie bo w ten sposób pojawi się kilka wpisów zanim wszystko będzie jasne. Nawiasem mówiąc zapisywanie rejestrów czy innych ustawień w zapisie hex jeśli są prawidłowe to OK, ale łatwo o pomyłkę; już czytelniej jest zapisać w bin - tak jak kol.<strong>janusz17</strong> Ci to porównał. Cyfra maskująca jest oczywiście błędna, ale wygląda &quot;fachowo&quot;. <br />[syntax=c]TCCR0A |= (1&lt;&lt;WGM12);                           // tryb CTC dla Timera0[/syntax]<br />...ATtin2313 nie posiadają takiego rejestru, winno być:<br />[syntax=c]TCCR0A |= (1&lt;&lt;WGM01);                           // tryb CTC dla Timera0[/syntax]<br />...znaczy rejestr posiadają tylko inne bity konfig.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 31 gru 2014, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2014-12-31T14:31:33+01:00</updated>
<published>2014-12-31T14:31:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111450#p111450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111450#p111450"/>
<title type="html"><![CDATA[Re: Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111450#p111450"><![CDATA[
Według mnie masz źle zapisane wyrażenie sterowania anodami. Chodzi mi o ANODY_PORT. Przy takim zapisie wartość wpisywana do PORTU D zmienia się w zależności od stanu licznika na trzech ostatnich bitach a przecież anody masz podłączone do pinów 3, 4, 5, 6. Tam w obsłudze przerwania masz też na początku wygaszenie wszystkich wyświetlaczy poprzez wpisanie <br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0x78);       // wygaszenie wszystkich wyświetlaczy  0x78 = 111 1000[/syntax]<br />To jest oczywiście nieprawda. Po pierwsze 0x78 to jest 0b0111 1000 binarnie.<br />Po drugie po wykonaniu tej instrukcji bity portu D 7, 2, 1, 0 zostaną wyzerowane, a bity 6, 5, 4, 3 nie zmienią się, a przecież nie o to chodziło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 31 gru 2014, o 14:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fazer]]></name></author>
<updated>2014-12-31T13:41:09+01:00</updated>
<published>2014-12-31T13:41:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111444#p111444</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111444#p111444"/>
<title type="html"><![CDATA[Problem z multipleksowaniem na attiny2313]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9954&amp;p=111444#p111444"><![CDATA[
Witam!<br />Od kilku dni próbuje przerobić kod z bluebooka lekcja 3 Multipelksowanie LED na attiny 2313 i uruchomić to na zl11avr.<br />Niestety brak reakcji; zmieniłem oczywiście nazwy i nr portów, ustawienie dla trybu CTC, maskę bitów, przy programowaniu oczywiście ustawiłem w mkavrkalulatorze fusebity, mam wlutowany kwarc 8MHz.<br /><br />Schemat mojego zestawu:<br /><a href="http://forum.atnel.pl/_obrazki/o/6976/57bd3b1850b3912282c2530ba9d41c46.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/6976/57bd3b1850b3912282c2530ba9d41c46.jpg" alt="Obrazek" /></a><br /><br />main:<br />[syntax=c]main.c<br /> *<br /> *  Created on: 2010-03-30<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;d_led.h&quot;// dołączenie naszego pliku nagłówkowego (obsługa LED)<br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br /><br />// testowa inicjalizacja zmiennych oraz liczb mających się wyświetlać na wyrw. LED<br />cy1=1;<br />cy2=9;<br />cy3=9;<br />cy4=9;<br /><br />sei();// włączenie globalnego zezwolenia na przerwania<br /><br /><br /><br />//DDRB |= (1&lt;&lt;PB5);<br />//while(1)<br />//{<br />//PORTB ^= (1&lt;&lt;PB5);<br />//_delay_ms(1000);<br />//}<br /><br />uint16_t licznik=6000;<br />uint8_t d1,d2,d3,d4;<br /><br />//**********************  pętla główna<br />while(1)<br />{<br />licznik--;<br /><br />d1=licznik/1000;<br />if(d1) cy1=d1; else cy1=NIC;<br />d2=(licznik-(d1*1000))/100;<br />if(d2) cy2=d2; else cy2=(licznik&gt;999)?0:NIC;<br />d3=(licznik-(d1*1000)-(d2*100))/10;<br />if(d3) cy3=d3; else cy3=(licznik&gt;99)?0:NIC;<br />d4=(licznik-(d1*1000)-(d2*100)-(d3*10));<br />cy4=d4;<br />_delay_ms(100);<br />if(licznik&gt;9999) licznik=0;<br />//if(!licznik) licznik=6000;<br />}<br />}[/syntax]<br /><br />fragment bibliotek (zmodyfikowany d_led.c) :<br />[syntax=c]void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF;   // wszystkie piny portu B jako WYJŚCIA(katody)<br />LED_DATA = 0xFF;// wygaszenie wszystkich katod – stan wysoki - 0xFF = 1111 1111<br />ANODY_DIR |= CA1 | CA2 | CA3 | CA4;// 4 piny portu A jako WYJŚCIA (anody wyświetlaczy)<br />ANODY_PORT |= CA1 | CA2 | CA3  | CA4;// wygaszenie wszystkich wyświetlaczy - anody<br /><br />// ustawienie TIMER0 dla attiny2313<br />TCCR0A |= (1&lt;&lt;WGM12);// tryb CTC dla Timera0<br />TCCR0A |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR0A = 39;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE0A);// zezwolenie na przerwanie CompareMatch<br />}<br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH dla attiny2313<br />ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t licznik=1;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0x78);// wygaszenie wszystkich wyświetlaczy  0x78 = 111 1000<br /><br /><br />if(licznik==1) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if(licznik==2) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if(licznik==4) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0x78) | (~licznik &amp; 0x7);[/syntax]<br /><br />fragment pliku nagłówkowego (zmodyfikowany d_led.h) :<br />[syntax=c]// definicje portów i pinów wyświetlacza używanych dla ułatwienia w programie jako stałe preprocesora<br />#define LED_DATA PORTB// port z podłączonymi segmentami<br />#defineLED_DATA_DIR DDRB// rejestr kierunku portu katod wyświetlaczy<br />#define ANODY_PORT PORTD// port z podłączonymi anodami- 4 bity najmłodsze<br />#define ANODY_DIR DDRD// rejestr kierunku portu anod wyświetlaczy<br /><br /><br />#define CA1 (1&lt;&lt;PD6)// CA1 oznacza bit nr.0 portu D<br />#define CA2 (1&lt;&lt;PD5)// CA2 oznacza bit nr.1 portu D<br />#define CA3 (1&lt;&lt;PD4)// CA3 oznacza bit nr.2 portu D<br />#define CA4 (1&lt;&lt;PD3)// CA4 oznacza bit nr.3 portu D<br /><br />// definicje bitów dla poszczególnych segmentów LED<br />#define SEG_A (1&lt;&lt;0)<br />#define SEG_B (1&lt;&lt;1)<br />#define SEG_C (1&lt;&lt;2)<br />#define SEG_D (1&lt;&lt;3)<br />#define SEG_E (1&lt;&lt;4)<br />#define SEG_F (1&lt;&lt;5)<br />#define SEG_G (1&lt;&lt;6)<br />#define SEG_DP (1&lt;&lt;7)[/syntax]<br /><br />Kompilacja przebiega bez błędów i ostrzeżeń. Czy coś przeoczyłem w tych kodach????<br />Z góry dziękuje za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6976">fazer</a> — 31 gru 2014, o 13:41</p><hr />
]]></content>
</entry>
</feed>