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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-13T21:07:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13542&amp;mode</id>
<entry>
<author><name><![CDATA[asik_0393]]></name></author>
<updated>2015-11-13T21:07:23+01:00</updated>
<published>2015-11-13T21:07:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145309#p145309</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145309#p145309"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145309#p145309"><![CDATA[
OK, teraz już w tym temacie wszystko jest jasne  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> dziękuję za pomoc i pozdrawiam  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11339">asik_0393</a> — 13 lis 2015, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T21:05:48+01:00</updated>
<published>2015-11-13T21:05:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145308#p145308</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145308#p145308"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145308#p145308"><![CDATA[
Dobrze wiedzieć ze się myliłem, człowiek do końca życia się uczy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-13T20:44:04+01:00</updated>
<published>2015-11-13T20:44:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145302#p145302</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145302#p145302"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145302#p145302"><![CDATA[
<div class="quotetitle">RedStar napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent">Mam jednak pytanie dotyczące elektroniki, dlaczego w tym przypadku, rezystory na wspólnych katodach nie wystarczą?<br /></div><br /> Z tego com ja wiem ( nie jestem pewien tego co pisze <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />) To zabezpieczają porty mikrokontrolera.</div><br />No niestety to nie to <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />A kolega autor niech sobie spróbuje przyjrzeć się jasności świecenia gdy zmieniają się cyfry - na pewno się ta jasność zmienia i jest mega paskudny efekt dla oka niestety <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> hmm dlaczego ? ... a może by tak przypomnieć sobie czy zajrzeć do prawa Ohma ? <br /><br />Spróbuj sobie policzyć jakie występują spadki napięć i prądy gdy świecą np dwa segmenty a gdy świecą 4 albo i 8 ... wtedy wszystko stanie się jasne, że TAK się nie robi. <br /><br />KAŻDY segment musi mieć własny rezystor ograniczający jego prąd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 lis 2015, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RedStar]]></name></author>
<updated>2015-11-13T20:29:44+01:00</updated>
<published>2015-11-13T20:29:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145300#p145300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145300#p145300"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145300#p145300"><![CDATA[
<div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent"><br />Mam jednak pytanie dotyczące elektroniki, dlaczego w tym przypadku, rezystory na wspólnych katodach nie wystarczą?<br /></div><br /> Z tego com ja wiem ( nie jestem pewien tego co pisze <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />) To zabezpieczają porty mikrokontrolera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9014">RedStar</a> — 13 lis 2015, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asik_0393]]></name></author>
<updated>2015-11-13T21:02:40+01:00</updated>
<published>2015-11-13T19:38:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145294#p145294</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145294#p145294"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145294#p145294"><![CDATA[
Udało mi się rozwiązać problem bez zmian w schemacie połączeń. Poprzednio wykorzystywałem timer 16-bitowy (sam nie wiem po co :p ) i prawdopodobnie w ustawieniach timera miałem błędy. Tym razem, analizując krok po kroku instrukcje z bluebook'a, skorzystałem z 8-bitowego timera (TIMER0). Program działa poprawnie: czyli na wyświetlaczach ukazują się odpowiednie cyfry. <br /><br />d__led.h<br />[syntax=c]#ifndef D__LED_H_// dyrektywy zabezpieczajace<br />#define D__LED_H_// przed wielokrotnym dolaczaniem<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#define LED_DATA_DIR DDRD// ustawienie rejestru jako WYJSCIA<br />#define LED_DATA PORTD  // port z podlaczonymi !!!SEGMENTAMI!!!<br />#define KATODY_PORT PORTC// port z podlaczonymi !!! WSPOLNYMI KATODAMI !!!<br />#define KATODY_DIR DDRC// ustawienie rejestru jako WYJSCIA<br /><br />#define CA1 (1&lt;&lt;PC3)<br />#define CA2 (1&lt;&lt;PC4)<br />#define CA3 (1&lt;&lt;PC5)<br /><br />#define MASKA_KATODY (CA1|CA2|CA3)<br /><br />#define SEG_A (1&lt;&lt;PD4)<br />#define SEG_B (1&lt;&lt;PD3)<br />#define SEG_C (1&lt;&lt;PD1)<br />#define SEG_D (1&lt;&lt;PD0)<br />#define SEG_E (1&lt;&lt;PD2)<br />#define SEG_F (1&lt;&lt;PD5)<br />#define SEG_G (1&lt;&lt;PD6)<br /><br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br /><br />// obszar deklaracji funkcji udostepnionych dla innych modulow<br />void d_led_init(void);<br /><br />#endif /* koniec D__LED_H_ *[/syntax]/<br /><br />d__led.c<br />[syntax=c]#include &lt;avr/io.h&gt;// dolaczenie glownego systemowego pliku naglowkowego<br />#include &lt;avr/interrupt.h&gt;// dolaczenie pliku naglowkowego do obslugi przerwan<br />#include &quot;d__led.h&quot;// dolaczenie naszego pliku naglowkowego w nim znajduja sie potrzebne tutaj m.in definicje preprocesora<br /><br />// definicje zmiennych globalnych przechowjacych cyfry do wyswietlania<br />// volatile - poniewaz beda wykorzystywane do odczytu i zapisu zarowno w przerwaniu, jak i w programie glownym<br />// trzeba wiec wylaczyc optymalizacje dostepu do nich ( zmienne ulotne )<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br /><br />const uint8_t cyfry&#91;15&#93; 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 />};<br /><br />// ********** definicja funkcji inicjalizujacej prace z wyswietlaczami multipleksowanym **********<br /><br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF;// wszystkie piny portu D jako WYJSCIA, segmenty!<br />LED_DATA = 0xFF;// wygaszanie wszystkich segmentow - stan wysoki----|<br />KATODY_DIR |= CA1 | CA2 | CA3;// 3 piny portu C jako WYJSCIA (katody)             |--&gt; wygaszenie na starcie<br />KATODY_PORT |= CA1 | CA2 | CA3;// 3 piny portu C ustawione na 1 (katody)-----------|<br />//KATODY_PORT &amp;= ~((CA1) | (CA2) | (CA3));        // wszystkie segmenty na wyswietlaczach zapalone<br /><br />// ustawienie TIMER0<br />TCCR0A |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0B |= (1&lt;&lt;CS02) | (1&lt;&lt;CS00);// preskaler = 1024<br />OCR0A = 8;// dodatkowy podzial przez 9 - rejestr przepelniania<br />TIMSK0 |= (1&lt;&lt;OCIE0A);// zezwolenie na przerwanie Compare Match<br />}<br /><br />//============================= PROCEDURA OBSLUGI PRZERWANIA - COMPARE MATCH =============================<br />ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t licznik = 8;// zmienna do przelaczania kolejno katod wyswietlacza<br /><br />KATODY_PORT = ( KATODY_PORT &amp; 0b11000111 ) | (~licznik &amp; 0b00111000);// // cykliczne przełączanie kolejnej katody w każdym przerwaniu<br /><br />if(licznik == 8 ) LED_DATA = pgm_read_byte ( &amp;cyfry&#91;5&#93;);  // gdy zapalony wysw. 1, podaj stan zmiennej cy3<br />if(licznik == 16 ) LED_DATA = pgm_read_byte ( &amp;cyfry&#91;9&#93;);// gdy zapalony wysw. 2, podaj stan zmiennej cy2<br />if(licznik == 32 ) LED_DATA = pgm_read_byte ( &amp;cyfry&#91;2&#93;);// gdy zapalony wysw. 3, podaj stan zmiennej cy1<br /><br />licznik &lt;&lt;= 1;// przesuniecie zawartosci bitow licznika o 1 w lewo<br />if(licznik&gt;32) licznik = 8;// jesli licznik wiekszy niz 32, to ustaw 8<br /><br />}[/syntax]<br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;// dolaczenie glownego systemowego pliku naglowkowego<br />#include &lt;avr/interrupt.h&gt;// dolaczenie pliku naglowkowego do obslugi przerwan<br />#include &quot;d__led.h&quot;// dolaczenie naszego pliku naglowkowego ( obslua LED )<br /><br />int main(void)<br />{<br />// ********* inicjalizacja *********<br /><br />d_led_init();// inicjalizacja wyswietlacza multipleksowanego<br /><br />// testowa inicjalizacja zmiennych oraz liczb, majacych sie wyswietlac na wysw. LED<br /><br />cy1 = 1;<br />cy2 = 4;<br />cy3 = 9;<br /><br />sei (); // wlaczenie globalnego zezwolenia na przerwania<br /><br />// ********* petla glowna programu *********<br /><br /><br />while(1)<br />{}<br />}[/syntax]<br /><br /><br />Mam jednak pytanie dotyczące elektroniki, dlaczego w tym przypadku, rezystory na wspólnych katodach nie wystarczą?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11339">asik_0393</a> — 13 lis 2015, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-11T19:46:23+01:00</updated>
<published>2015-11-11T19:46:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145111#p145111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145111#p145111"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145111#p145111"><![CDATA[
<div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent"><br />i zabieram się do ponownego przerobienia rozdziału<br /></div><br />Dokładnie i jak tylko napotkasz problem, czegoś nie będziesz rozumiał w opisie w kodzie z książki to wal śmiało od razu z pytaniem tutaj<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 lis 2015, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asik_0393]]></name></author>
<updated>2015-11-11T19:17:02+01:00</updated>
<published>2015-11-11T19:17:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145109#p145109</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145109#p145109"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145109#p145109"><![CDATA[
No właśnie moim problem jest to że wydawało mi się że zrozumiałem treści związane z przerwaniami, dziękuje za wskazówki i zabieram się do ponownego przerobienia rozdziału <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=11339">asik_0393</a> — 11 lis 2015, o 19:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-11T19:02:17+01:00</updated>
<published>2015-11-11T19:02:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145102#p145102</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145102#p145102"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145102#p145102"><![CDATA[
<div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent"><br />Proszę, oto schemat<br /></div><br /><div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent"><br />Początkujący prosi o pomoc, chcę iść dalej w głąb bluebook'a ale niestety ten problem mi na to nie pozwala ;P<br /></div><br />Pomijając już sam fakt, że schemat niestety jest tragiczny no tragiczny pod względem połączeń elektronicznych, braku pojedynczych rezystorów dla każdego segmentu a tylko po jednym rezystorze dla całego wyświetlacza ....<br /><br />To bierzesz układ CAAAAAŁKOWICIE inny niż ten zaprezentowany w książce i bez (niestety) CIENIA ZASTANOWIENIA próbujesz odpalić kod z książki i dziwisz się, że to nie działa ? A z zadanego pytania widać, że kolega nawet chyba nie próbował wniknąć w szczegóły tego o czym piszę w tym rozdziale - jak wyjaśniam krok po kroku co od czego zależy - gdy weźmiemy wyświetlacze ze wspólną anodą sterowane jeszcze przez tranzystory PNP .....<br /><br />Toż od strony elektronicznej JASNO wynika, że każda zmiana tego układu - a ty masz CAŁKOWICIE odwrotnie - będzie wymagała zmian w kodzie, u ciebie wręcz przebudowy większości kodu ....<br /><br />No to jak ty sobie wyobrażasz takie podejście ? Co wg ciebie trzeba zmienić ? jakie próby poczyniłeś żeby dostosować to do swojego schematu ? czego ew nie zrozumiałeś z książki z tego rozdziału ? Dlaczego nie pytasz tutaj - jeśli czegoś nie zrozumiałeś ?<br /><br /><br />Tylko zakładasz wątek - pokazujesz kod z książki nawet nie przedstawiając swojego schematu i dziwisz się, że nie działa ?<br /><br />Nie piszę tego z jakimiś nerwami czy ironią .... Piszę z ogromnym zdziwieniem jak można tak podchodzić do rozwiązywania problemów ?<br /><br />Jeszcze raz mówię - napisz tutaj jasno CZEGO NIE ROZUMIESZ z tego rozdziału z książki - jak to zrozumiesz to zobaczysz, że wtedy sam zaczniesz zmieniać fajnie sobie kod (ew pomożemy co nieco) .... A dzięki temu zrozumiesz jeszcze kupę innych zagadnień związanych z programowaniem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 lis 2015, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asik_0393]]></name></author>
<updated>2015-11-11T18:53:12+01:00</updated>
<published>2015-11-11T18:53:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145099#p145099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145099#p145099"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145099#p145099"><![CDATA[
<a href="https://obrazkiforum.atnel.pl/11339/6436a03a3d654edc21dfb3bf51848923.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/11339/6436a03a3d654edc21dfb3bf51848923.png" alt="Obrazek" /></a><br /><br />Proszę, oto schemat  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11339">asik_0393</a> — 11 lis 2015, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-11T15:21:31+01:00</updated>
<published>2015-11-11T15:21:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145079#p145079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145079#p145079"/>
<title type="html"><![CDATA[Re: multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145079#p145079"><![CDATA[
Witam<br /><div class="quotetitle">asik_0393 napisał(a):</div><div class="quotecontent"><br />problemem na pewno jest to że na katodach jest dodatnie napięcie (4.30 V)<br /></div><br />Może by schemacik  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 lis 2015, o 15:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[asik_0393]]></name></author>
<updated>2015-11-11T14:27:32+01:00</updated>
<published>2015-11-11T14:27:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145070#p145070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145070#p145070"/>
<title type="html"><![CDATA[multipleksowanie atmega 88PA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13542&amp;p=145070#p145070"><![CDATA[
Witam wszystkich forumowiczów <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Podczas przerabiania zadań praktycznych z bluebook'a natknąłem się na problem z multipleksowaniem, mianowicie wyświetlacze segmentowe nie dają znaku życia i są wygaszone...<br /><br />Całość jest podłączona na płytce stykowej, procek to atmega 88PA, natomiast wyświetlacz segmentowe są z wspólną katodą (LSD056ASR-102), problemem na pewno jest to że na katodach jest dodatnie napięcie (4.30 V).<br /><br />d__led.h<br /><br />[syntax=c]#ifndef D__LED_H_// dyrektywy zabezpieczajace<br />#define D__LED_H_// przed wielokrotnym dolaczaniem<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#define LED_DATA_DIR DDRD// ustawienie rejestru jako WYJSCIA<br />#define LED_DATA PORTD  // port z podlaczonymi !!!SEGMENTAMI!!!<br />#define KATODY_PORT PORTC// port z podlaczonymi !!! WSPOLNYMI KATODAMI !!!<br />#define KATODY_DIR DDRC// ustawienie rejestru jako WYJSCIA<br /><br />#define CA1 (1&lt;&lt;PC3)<br />#define CA2 (1&lt;&lt;PC4)<br />#define CA3 (1&lt;&lt;PC5)<br /><br />#define MASKA_KATODY (CA1|CA2|CA3)<br /><br />#define SEG_A (1&lt;&lt;PD4)<br />#define SEG_B (1&lt;&lt;PD3)<br />#define SEG_C (1&lt;&lt;PD1)<br />#define SEG_D (1&lt;&lt;PD0)<br />#define SEG_E (1&lt;&lt;PD2)<br />#define SEG_F (1&lt;&lt;PD5)<br />#define SEG_G (1&lt;&lt;PD6)<br /><br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br /><br />// obszar deklaracji funkcji udostepnionych dla innych modulow<br />void d_led_init(void);<br /><br />#endif /* koniec D__LED_H_ */[/syntax]<br /><br />d__led.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;// dolaczenie glownego systemowego pliku naglowkowego<br />#include &lt;avr/interrupt.h&gt;// dolaczenie pliku naglowkowego do obslugi przerwan<br />#include &quot;d__led.h&quot;// dolaczenie naszego pliku naglowkowego w nim znajduja sie potrzebne tutaj m.in definicje preprocesora<br /><br />// definicje zmiennych globalnych przechowjacych cyfry do wyswietlania<br />// volatile - poniewaz beda wykorzystywane do odczytu i zapisu zarowno w przerwaniu, jak i w programie glownym<br />// trzeba wiec wylaczyc optymalizacje dostepu do nich ( zmienne ulotne )<br /><br />volatile uint8_t cy1;<br />volatile uint8_t cy2;<br />volatile uint8_t cy3;<br /><br />const uint8_t cyfry&#91;15&#93; 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),<br />};<br /><br />// ********** definicja funkcji inicjalizujacej prace z wyswietlaczami multipleksowanym **********<br /><br />void d_led_init(void)<br />{<br />LED_DATA_DIR = 0xFF;// wszystkie piny portu D jako WYJSCIA, segmenty!<br />LED_DATA = 0xFF;// wygaszanie wszystkich segmentow - stan wysoki<br />KATODY_DIR |= CA1 | CA2 | CA3;// 3 piny portu C jako WYJSCIA (katody)          <br />KATODY_PORT |= CA1 | CA2 | CA3;// 3 piny portu C ustawione na 1 (katody)<br />//KATODY_PORT &amp;= ~((CA1) | (CA2) | (CA3));// wszystkie segmenty na wyswietlaczach zapalone<br /><br />// ustawienie TIMER1<br />TCCR1B |= (1&lt;&lt;WGM12);// tryb CTC<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);// preskaler = 1024<br />OCR1A = 38;// dodatkowy podzial przez 39 - rejestr przepelniania<br />TIMSK1 |= (1&lt;&lt;OCIE1A);// zezwolenie na przerwanie Compare Match<br />}<br /><br />//============================= PROCEDURA OBSLUGI PRZERWANIA - COMPARE MATCH =============================<br />ISR(TIMER1_COMPB_vect)<br />{<br />static uint8_t licznik = 8;// zmienna do przelaczania kolejno anod wyswietlacza<br /><br />KATODY_PORT = (KATODY_PORT | MASKA_KATODY);// wygaszenie wszystkich wyswietlaczy<br /><br />// gdy zapalony wysw 1, podaj stan zmiennej cy1<br />if(licznik == 8) LED_DATA = pgm_read_byte(&amp;cyfry&#91;cy1&#93;);<br /><br />// gdy zapalony wysw 2, podaj stan zmiennej cy2<br />else if (licznik == 16) LED_DATA = pgm_read_byte(&amp;cyfry&#91;cy2&#93;);<br /><br />// gdy zapalony wysw3, podaj stan zmiennej cy3<br />else if (licznik == 32 ) LED_DATA = pgm_read_byte(&amp;cyfry&#91;cy3&#93;);<br /><br />KATODY_PORT = ((KATODY_PORT &amp; 0x0F) | (~licznik &amp; 0xF0)); // cykliczne przelaczanie kolejnej katody w przerwaniu<br /><br />// operacja cyklicznego przesuwania bitu zapalajacego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesuniecie zawartosci bitow licznika o 1 w lewo<br />if(licznik&gt;32) licznik = 8;<br /><br />}[/syntax]<br /><br />main.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;// dolaczenie glownego systemowego pliku naglowkowego<br />#include &lt;avr/interrupt.h&gt;// dolaczenie pliku naglowkowego do obslugi przerwan<br />#include &quot;d__led.h&quot;// dolaczenie naszego pliku naglowkowego ( obslua LED )<br /><br />int main(void)<br /><br />{<br />// ********* inicjalizacja *********<br /><br />d_led_init();// inicjalizacja wyswietlacza multipleksowanego<br /><br />// testowa inicjalizacja zmiennych oraz liczb, majacych sie wyswietlac na wysw. LED<br /><br />cy1 = 1;<br />cy2 = 4;<br />cy3 = 9;<br /><br />sei (); // wlaczenie globalnego zezwolenia na przerwania<br /><br />// ********* petla glowna programu *********<br /><br />//uint8_t licznik = 8;<br /><br />while(1)<br />{<br />// to dzialalo mi poprawnie<br />//licznik &lt;&lt;= 1;<br />//if(licznik&gt;32) licznik = 8;<br />//KATODY_PORT = ~licznik;<br />//_delay_ms (1000);<br /><br />}<br />}[/syntax]<br /><br />Początkujący prosi o pomoc, chcę iść dalej w głąb bluebook'a ale niestety ten problem mi na to nie pozwala ;P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11339">asik_0393</a> — 11 lis 2015, o 14:27</p><hr />
]]></content>
</entry>
</feed>