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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-22T16:31:06+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=3&amp;t=1821&amp;mode</id>
<entry>
<author><name><![CDATA[step_m]]></name></author>
<updated>2014-07-22T16:31:06+01:00</updated>
<published>2014-07-22T16:31:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88483#p88483</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88483#p88483"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88483#p88483"><![CDATA[
Problem rozwiązany. Maskowanie bitów w przerwaniu + zmiana wartości zmiennej licznik.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1282">step_m</a> — 22 lip 2014, o 16:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[step_m]]></name></author>
<updated>2014-07-22T14:46:26+01:00</updated>
<published>2014-07-22T14:46:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88474#p88474</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88474#p88474"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=88474#p88474"><![CDATA[
Witam,<br /><br />Próbuję skonfigurować multipleksowanie na ATmega16. Anody chcę podłączyć pod port C, konkretnie piny PC2, PC3, PC4, PC5 lub PC4, PC5, PC6, PC7. Używam taśmy ATNEL więc muszę mieć te anody podłączone tylko do jednego portu i po kolei jeżeli chodzi o piny. Stąd dwie powyższe konfiguracje. Na PC1 i PC2 używam I2C więc odpadają. Do portu B mam podłączone katody, natomiast do portu A wyświetlacz LCD. Na porcie D używam UART. Nie wiem, czy jeżeli używam przerwania CTC Timer0 w bibliotece Pana Mirka do multipleksowania to pozostałe piny portu D też może odpadają. W każdym razie podłączając anody do  portu C jak wyżej w dwóch konfiguracjach nie świecą prawidłowo wszystkie wyświetlacze. Jeżeli podłączę anody do PC7, Pc6, PC5, PC4, to żaden nie świeci. Jeżeli podłączę do PC2, PC3, PC4, PC5 to świecą tylko dwa. Sprawdziłem w nocie, że na porcie C jest JTAG. Jednak jest on wyłączony w moim uC - sprawdziłem w MkAVR kalkulatorze. Dla sprawdzenia poprawności kodu podłączyłem anody do portu D - piny PD0, PD1, PD2, PD3, wyłączając wcześniej UART. Świecą wszystkie wyświetlacze. O co chodzi z tymi pinami na porcie C?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1282">step_m</a> — 22 lip 2014, o 14:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Patryk55]]></name></author>
<updated>2012-11-22T15:40:57+01:00</updated>
<published>2012-11-22T15:40:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19327#p19327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19327#p19327"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19327#p19327"><![CDATA[
Acha, rozumiem. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Dzięki za pomoc, problem rozwiązany. <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=158">Patryk55</a> — 22 lis 2012, o 15:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-21T22:01:52+01:00</updated>
<published>2012-11-21T22:01:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19306#p19306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19306#p19306"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19306#p19306"><![CDATA[
<div class="quotetitle">Patryk55 napisał(a):</div><div class="quotecontent"><br />Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?<br /></div><br /><br />dlaczego akurat 60s i to w dół ?<br /><br />ot po prostu no wyobraź sobie - chciałem żeby jakiś byle koci licznik się kręcił na wszystkich cyfrach wyświetlacza<br /><br />dlatego jest wyświetlana liczba zwiększająca się od 0 do 5999, przy czym jak widzisz z kodu, zera nieznaczące są wygaszane - tzn nie zapala się NIC<br /><br />więc chodzi o to aby po kolei na wyświetlaczu pokazać cyfry np<br /><br />5 9 9 8 itd<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2012, o 22:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Patryk55]]></name></author>
<updated>2012-11-21T18:04:43+01:00</updated>
<published>2012-11-21T18:04:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19301#p19301</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19301#p19301"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19301#p19301"><![CDATA[
Dzięki, za zauważenie błedu. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=158">Patryk55</a> — 21 lis 2012, o 18:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-11-20T18:42:33+01:00</updated>
<published>2012-11-20T18:42:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19197#p19197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19197#p19197"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19197#p19197"><![CDATA[
<div class="quotetitle">Patryk55 napisał(a):</div><div class="quotecontent"><br />[syntax=c]<br />//******procedura obsługi przerwania-COMPARE MATCH******<br />ISR(TIMER0_COMPA_vect)<br />{<br />//...<br />if(licznik&gt;&gt;8) licznik=1; // jeśli licznik większy niz 8 to ustaw na 1<br />}<br />[/syntax]<br /></div><br />Masz &gt;&gt; zamiast &gt;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 lis 2012, o 18:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Patryk55]]></name></author>
<updated>2012-11-20T17:57:19+01:00</updated>
<published>2012-11-20T17:57:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19193#p19193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19193#p19193"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19193#p19193"><![CDATA[
Ok, obrazek już działa. A co do dwóch obrazków, to po prostu był jeden tylko zbugowany. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Błędy sprawdzilem i znalazłem jeszcze jeden w pliku .h tam gdzie bity portu c( też poprawiłem).<br />Lecz dalej gdy wgram program i nacisnę reset migną 4 cyfry i nic więcej się nie dzieje.<br />Nie wiem co robię nie tak i to mnie nurtuje, albo czegoś nie widze co razi w oczy <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=158">Patryk55</a> — 20 lis 2012, o 17:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-20T12:42:21+01:00</updated>
<published>2012-11-20T12:42:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19181#p19181</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19181#p19181"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19181#p19181"><![CDATA[
<div class="quotetitle">Patryk55 napisał(a):</div><div class="quotecontent"><br />A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą &quot;działać&quot;( poprostu nie chcą się otworzyć).<br /></div><br /><br />to zmień przeglądarkę internetową na jakąś porządną np Chrome albo Firefox i wszystko będzie ci się otwierać. Ale ok zajrzyj do tego linku jeszcze raz - wgrałem te obrazki jeszcze inaczej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />a poza tym to o jakich ty dwóch obrazkach mówisz - w tym wątku z linku jest tylko jeden obrazek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 lis 2012, o 12:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Patryk55]]></name></author>
<updated>2012-11-20T12:31:12+01:00</updated>
<published>2012-11-20T12:31:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19180#p19180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19180#p19180"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19180#p19180"><![CDATA[
To mi wystarczy co do zasady działania tego fragmentu kodu. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /><br />A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą &quot;działać&quot;( poprostu nie chcą się otworzyć).<br /><br />Przepraszam, że nie będę do wieczora odpisywał, ale mam autobus za 5 min. <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=158">Patryk55</a> — 20 lis 2012, o 12:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-11-20T12:27:36+01:00</updated>
<published>2012-11-20T12:27:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19179#p19179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19179#p19179"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19179#p19179"><![CDATA[
Tak na szybko wypatrzyłem dwa błędy:<br />1. plik 2. d_led.c - linia 37 powinno  być:<br />ANODY_PORT <span style="color: #FF0000"><strong>|</strong></span>= ca1 | ca2 | ca3 | ca4; // wygaszenie wszystkich wyświetlaczy(anody)<br /><br />2. Program 1. main.c<br />Program wykonuje non stop tą pętlę <br />        while(1)<br />        {<br />                PORTC ^= (1&lt;&lt;PC4);<br />                _delay_ms(1000);<br />        }<br /><br />i nie przechodzi dalej. Musisz to wywalić (zakomentuj na razie cały ten blok.)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 20 lis 2012, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-20T12:19:24+01:00</updated>
<published>2012-11-20T12:19:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19177#p19177</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19177#p19177"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19177#p19177"><![CDATA[
A ja bym polecał jednak przejrzeć czasem forum <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo mowa o tym była już nie raz <br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post38.html?hilit=multipleksowanie%20led#p38" >post38.html?hilit=multipleksowanie%20led#p38</a><!-- l --><br /><br />co do programu o którego działanie pytasz - to po prostu wyświetlanie licznika, robijanie liczby na poszczególne cyfry i wyświetlanie ich na takim multipleksowanym wyświetlaczu. Napisz dokładniej czego w tym kodzie nie rozumiesz - to łatwiej będzie wytłumaczyć ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 lis 2012, o 12:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Patryk55]]></name></author>
<updated>2012-11-20T12:12:32+01:00</updated>
<published>2012-11-20T12:12:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19176#p19176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19176#p19176"/>
<title type="html"><![CDATA[Multipleksowanie LED- kilka wątpliwości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1821&amp;p=19176#p19176"><![CDATA[
Witam,<br /><br />Chciałbym się o coś zapytać. Otóż jako, że program na multi LED jest bodajże na ATmega 32, a ja mam ATmega644p, zoptymalizowałem go na ten właśnie drugi procek, lecz nie wiem czy poprawine.<br />Dlatego zamieszczam program, abyście mogli sprawdzić czy wszystko jest ok. Po wganiu programu, jest coś nie tak, czyli jak wgrywam program i naciskam RESET(wspomnę, że korzystam z wewnętrznego programatora z układu uruchomieniowego, eclipse i procek jest taktowany na 16Mhz) to przy kliknięciu raz migną dwie środkowe cyfry i nic więcej się nie dzieje.<br /><br />Przerwanie chyba działa, bo dioda LED miga. Jak dobrzę myślę to ta część kodu odpowiada za sprawdzenie czy przerwanie działa? Jeśli nie to poprawcie mnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />:<br /><br />[syntax=c]<br /><br />DDRC |= (1&lt;&lt;PC4);<br />while(1)<br />{<br />PORTC ^= (1&lt;&lt;PC4);<br />_delay_ms(1000);<br />}<br />[/syntax]<br /><br />Sprawdziłem kilka razy program, lecz nie widzę w nim nic niepokojącego( może ktoś inny spojrzy na to innym kątem) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Próbowałem też pozamieniać połączenia anod  wyświetlacza z pinami portu C( w moim przypadku ), tak jak Pan Mirek pisał w podobnych postach, lecz bez skutku.<br /><br />Oraz chciałbym poprosić o wytłumaczenie fragmentu kodu programu, którego nie do końca rozumiem( jeśli nie byłby to oczywiście problem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />):<br /><br />[syntax=c]<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(10);<br />    if(licznik&gt;9999) licznik=0;<br />if(!licznik) licznik=6000;<br /><br />}<br />[/syntax]<br /><br />Tak jak obiecałem zamieszczam program:<br /><br />1. main.c<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt; // dołączamy główny systemowy plik nagłówkowy<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;d_led.h&quot; // dołączamy nasz plik nagłówkowy(obsługa LED)<br /><br />int main(void)<br />{<br />//****inicjalizacja****<br />d_led_init(); // inicjalizacja wyświetlacza multipleksowanego<br />// testowa inicjalizacja zmiennych oraz liczb mających sie wyświetlać na wyś. LED<br />cy1=NIC;<br />cy2=4;<br />cy3=1;<br />cy4=NIC;<br /><br />sei(); // wł. globalnego zezwolenia na przerwanie<br /><br />DDRC |= (1&lt;&lt;PC4);<br />while(1)<br />{<br />PORTC ^= (1&lt;&lt;PC4);<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(10);<br />    if(licznik&gt;9999) licznik=0;<br />if(!licznik) licznik=6000;<br /><br />}<br /><br /><br /><br />}<br /><br /><br />[/syntax]<br /><br />2. d_led.c<br /><br />[syntax=c]<br />#include &lt;avr/io.h&gt; // dołączamy główny systemowy plik nagłówkowy<br />#include &lt;avr/interrupt.h&gt; // dołączamy plik nagłówkowy potrzebny do obsługi przerwań<br />#include &lt;avr/pgmspace.h&gt; // dołączamy plik nagłówkowy potrzebny do odczytu danych(cyfr) zawartych w pamięci FLASH<br />#include &quot;d_led.h&quot; // dołączamy plik nagłłówkowy- znajdują się w nim potrzebne m. in. definicje preprocerora<br /><br />// definicje zmiennych globalnych przechowujących cyfry do wyświetlania<br />// volatile- poniewaz będą wykorzystywane zarówno do odczytu i zapisu, w przerwaniu i programie głównym<br />// trzeba więc wyłączyć optymalizację dostępu do nich(zmienne ulotne)<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br />volatile uint8_t cy4;<br /><br />// definicja tablicy, która zawiera definicje bitowe cyfr( do wyświetlania)<br />uint8_t cyfry[15] PROGMEM =<br />{<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),// 0<br />~(SEG_B|SEG_C),// 1<br />~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G),// 2<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_G),// 3<br />~(SEG_B|SEG_C|SEG_F|SEG_G),// 4<br />~(SEG_A|SEG_C|SEG_D|SEG_F|SEG_G),// 5<br />~(SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),// 6<br />~(SEG_A|SEG_B|SEG_C|SEG_F),// 7<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),// 8<br />~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G),// 9<br />0xFF// NIC(puste)<br />};<br /><br />// definicja funkcji inicjalizującej pracę z wyświetlaczem multipleksowanym<br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF; // wszystkie piny portu A jako wyj.(katody)<br />LED_DATA = 0xFF; // wygaszenie wszystkich katod(stan wysoki)<br />ANODY_DIR |= ca1 | ca2 | ca3 | ca4; // 4 piny portu C jako wyj.(anody wyświetlaczy)<br />ANODY_PORT = ca1 | ca2 | ca3 | ca4; // wygaszenie wszystkich wyświetlaczy(anody)<br /><br />// ustawienie TIMER0A<br />TCCR0A |= (1&lt;&lt;WGM01);    // tryb CTC<br />TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); // preskaler = 1024<br />OCR0A = 39; // dodatkowy podział przez 39 (rejest przepełnienia)<br />TIMSK0 |= (1&lt;&lt;OCIE0A); // zezwolenie na przerwanie CompareMatch<br /><br /><br />}<br /><br />//******procedura obsługi przerwania-COMPARE MATCH******<br />ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t licznik=1; // zmienna do przełączania kolejno anod wyświetlacza<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0); // wygaszenie wszystkich wyświetlaczy<br /><br />if(licznik==1) LED_DATA = pgm_read_byte(&amp;cyfry[cy1]); // gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if(licznik==2) LED_DATA = pgm_read_byte(&amp;cyfry[cy2]);<br />else if(licznik==4) LED_DATA = pgm_read_byte(&amp;cyfry[cy3]);<br />else if(licznik==8) LED_DATA = pgm_read_byte(&amp;cyfry[cy4]);<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (~licznik &amp; 0x0F); // cykliczne przełączanie każdej 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;&gt;8) licznik=1; // jeśli licznik większy niz 8 to ustaw na 1<br />}<br /><br />[/syntax]<br /><br />3. d_led.h<br /><br />[syntax=c]<br />#ifndef _d_led_h_  // dyrektywy zabezpieczające przed wielokrotnym dołączaniem<br />#define _d_led_h   // tego samego pliku nagłówkowego jeśli będzie dołączany<br />   // w wielu różnych plikach programu<br /><br />// definicje portów i pinów wyświetlacza używanych dla ułatwienia w programie(jako stałe preprocesora)<br />#define LED_DATA PORTA// port z podłączonymi segmentami<br />#defineLED_DATA_DIR DDRA// rejestr kierunku portu katod wyświetlaczy<br />#define ANODY_PORT PORTC// port z podłączonymi anodami- 4 bity najmłodsze<br />#define ANODY_DIR DDRC// rejestr kierunku portu anod wyświetlaczy<br /><br /><br />#define ca1 (1&lt;&lt;PD0)// CA1 oznacza bit nr.0 portu D<br />#define ca2 (1&lt;&lt;PD1)// CA2 oznacza bit nr.1 portu D<br />#define ca3 (1&lt;&lt;PD2)// 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)<br />#define NIC 10<br /><br />// same DEKLARACJE zmiennych globalnych na potrzeby wykorzystania ich w innych plikach projektu<br />// przydomek externpowoduje, iż te zmienne będą dostępne we wszystkich modułach, które dołączą plik<br />// d_led.h za pomocą dyrektywy #include<br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br />extern volatile uint8_t cy4;<br /><br /><br /><br />void d_led_init(void);<br /><br /><br />#endif /* D_LED_H_ */<br /><br />[/syntax]<br /><br />Pozdrawiam,<br />Patryk <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /><br />P.S. Jeśli czegoś nie napisałem co by mogło się przydać to piście.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=158">Patryk55</a> — 20 lis 2012, o 12:12</p><hr />
]]></content>
</entry>
</feed>