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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-10-28T19:46:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=5&amp;t=2039&amp;mode</id>
<entry>
<author><name><![CDATA[Pawelh133]]></name></author>
<updated>2013-10-28T19:46:51+01:00</updated>
<published>2013-10-28T19:46:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54621#p54621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54621#p54621"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54621#p54621"><![CDATA[
Nawiasy przy zmiennych w powyższym kodzie są zbędne.<br />Rzeczywiście. Dokładnie o taki przykład mi chodziło. Przejrzałem filmiki, przeanalizowałem przykład, skompilowałem i wszytko działa. Dziękuję za pomoc  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1938">Pawelh133</a> — 28 paź 2013, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-10-27T20:57:47+01:00</updated>
<published>2013-10-27T20:57:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54540#p54540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54540#p54540"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54540#p54540"><![CDATA[
Po pierwsze powiedz po co wstawiłeś te nawiasy klamrowe otaczające przypisanie wartości dla cy1 do cy5 ?<br /><br />to tak przy okazji ...<br /><br />z drugiej zaś strony na DVD w książce masz przykład wyświetlania licznika jakiegoś tam na tym wyświetlaczu ... czyżbyś ani razu nie zajrzał na DVD ? także do lekcji WIDEO które tam są ?<br /><br />bo w tym przykładzie ... jest właśnie dokładnie to o co pytasz <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=54">mirekk36</a> — 27 paź 2013, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pawelh133]]></name></author>
<updated>2013-10-28T14:44:37+01:00</updated>
<published>2013-10-27T20:30:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54535#p54535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54535#p54535"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=54535#p54535"><![CDATA[
Witam, jestem nowy na forum, jak i również świeżym posiadaczem niebieskiej książki wydania II. Chciałbym zadać pytanie dotyczące rozdziału 4.5 dot. Multipleksowania LED i przerwań. Przeczytałem ze zrozumieniem, zaprogramowałem i wszytko ładnie działa z tego rozdziału. Chciałbym wykorzystać taki wyświetlacz do licznika do naświetlarki UV, ale brakuje mi czysto programistycznej wiedzy jak wykorzystać funkcję, aby zamiast stałych dosłownych 1,4,9,5 wstawić zmienne typu int na przykład a,b,c,d w które będę mógł sobie dodać jakąś wartość w kodzie. Albo idąc dalej jak zrobić taki prosty licznik gdzie przykładowo będzie liczył sekundy na i oczywiście wartość przekazywał do wyświetlaczy 7 segmentowych. Z resztą sobie poradzę chciałbym jedynie, aby ktoś mnie nakierował  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" />. Na dole jest kod głównego pliku programu.. Pozdrawiam<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;led_st.h&quot;<br /><br />int main(void)<br />{<br />d_led_init();<br />{<br />cy1 = 1;<br />cy2 = 4;<br />cy3 = 9;<br />                cy4 = 5;<br />}<br />sei();<br />while(1)<br />{<br />        //TODO:: Please write your application code <br />    }[/syntax]<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Różowy J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1938">Pawelh133</a> — 27 paź 2013, o 20:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kennyg]]></name></author>
<updated>2013-03-11T11:16:17+01:00</updated>
<published>2013-03-11T11:16:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30352#p30352</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30352#p30352"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30352#p30352"><![CDATA[
Bardzo dziękuje za posta , dużo będę musiał zmienić w swoim myśleniu o programowaniu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1036">Kennyg</a> — 11 mar 2013, o 11:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-03-11T07:21:22+01:00</updated>
<published>2013-03-11T07:21:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30335#p30335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30335#p30335"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30335#p30335"><![CDATA[
Oczywiście że nie jest wykonywana. To tak jakbyś zainicjalizował zmienną globalną<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 mar 2013, o 07:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kennyg]]></name></author>
<updated>2013-03-11T01:29:17+01:00</updated>
<published>2013-03-11T01:29:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30331#p30331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30331#p30331"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30331#p30331"><![CDATA[
czyli jeśli dobrze rozumiem to przy drugim wejściu w przerwanie  ta linia nie jest wykonywana ?<br />bo zmienna została zainicjalizowana jako static ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1036">Kennyg</a> — 11 mar 2013, o 01:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kennyg]]></name></author>
<updated>2013-03-10T22:04:47+01:00</updated>
<published>2013-03-10T22:04:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30326#p30326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30326#p30326"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=30326#p30326"><![CDATA[
Witam wszystkich !<br />Na początku chciałem powiedzieć że jestem &quot;skażony&quot; prawie dziesięcioletnim pisaniem w Bascomie , pewnie stąd biorą się moje przyzwyczajenia tak odległe w od C.<br />Z przerażeniem stwierdziłem że rozwiązane problemu z punktem dziesiętnym w przykładzie z książki to prosta zmiana nazwy :<br /><br />.....<br /><br />#define SEG_DP (1&lt;&lt;7)  <br />na <br />#define SE_DP (1&lt;&lt;7)<br /><br />i mogłem dodać kropkę do swojego znaku. Przeraża mnie fakt że nie mam pojęcia dlaczego to działa. <br /><br />Ale nie o to chciałem zapytać w związku z tym projektem - <br />przy procedurze obsługi przerwania :<br /><br />ISR(TIMER0_COMP_vect)<br />........<br /><br />natrafiłem na linię <br />static uint8_t licznik=1;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />i tu moje pojęcie na temat przerwania się skończyło , bo jak możemy sprawdzać wartość <br />zmiennej licznik w bloku<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] );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if(licznik==4) LED_DATA = pgm_read_byte( &amp;cyfry[cy3] );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry[cy4] );// gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />jeśli przy każdym wejściu w procedurę przerwania ustawiamy jego wartość na 1.<br /><br />Wiem że dla was wszystkich jest to proste , ja niestety pojąć tego nie mogę ,  a układ oczywiście działa.<br /><br />Pozdrawiam<br />Kenny<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1036">Kennyg</a> — 10 mar 2013, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-28T11:27:36+01:00</updated>
<published>2013-01-28T11:27:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26032#p26032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26032#p26032"/>
<title type="html"><![CDATA[Re: Odp: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26032#p26032"><![CDATA[
Antystatyczny właśnie dlatego tak mnie to zaciekawiło. Ale skoro Mirek pisze ze tam domyślnie są dane 16 bitowe i kompilator tak je traktuje to po negacji w pozostałych 8 bitach są jedynki które kompilator musi uciąć aby pozostać w ramach 8 bitów. Teraz przynajmniej umiem to wytłumaczyć <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=750">Domanoid</a> — 28 sty 2013, o 11:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-27T23:39:53+01:00</updated>
<published>2013-01-27T23:39:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26015#p26015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26015#p26015"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26015#p26015"><![CDATA[
Super wyjaśnienie! Dzięki wielkie!<br />Myślę, że będę stosował 1. albo 4. rozwiązanie w takich przypadkach.<br />Już sobie to dodałem do moich notatek dot. &quot;spraw niejasnych&quot; <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=750">Domanoid</a> — 27 sty 2013, o 23:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-27T23:15:42+01:00</updated>
<published>2013-01-27T23:15:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26012#p26012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26012#p26012"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26012#p26012"><![CDATA[
<div class="quotetitle">Domanoid napisał(a):</div><div class="quotecontent"><br />I czemu nie pojawia się ten warning gdy w d_led.h jest segmenty są ponumerowane tak jak w oryginale czyli od (1&lt;&lt;0) do (1&lt;&lt;7)?<br /></div><br /><br />bo zdaje się że nie wykorzystuję w swoich przykładach kropki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie zauważyłeś ? i pewnie dlatego zapomniałem o tym w książce napisać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />związane jest to z kompilatorem i faktem że stałe dosłowne traktuje jako 16-bitowe a problem DOTYCZY tylko tego gdy próbujesz je w postaci zanegowanej zachować w tablicy gdzie każdy jej element jest 8-bitowy - bo tak masz niewątpliwie w kodzie prawda ?<br /><br />rozwiązania masz dwa, jeśli np masz:<br /><br />[syntax=c]#define SEG_A (1&lt;&lt;7)<br />#define SEG_B (1&lt;&lt;6)[/syntax]<br /><br />a potem tablicę<br /><br />[syntax=c]uint8_t tab[] = { ~(SEG_A|SEG_B) };[/syntax]<br /><br />to masz warninga ale możesz:<br /><br />1. albo napisać to tak:<br /><br />[syntax=c]uint8_t tab[] = { (uint8_t)~(SEG_A|SEG_B) }; [/syntax]<br /><br />czyli zrobić JAWNE rzutowanie do typu <strong><span style="color: #0040FF">uint8_t </span></strong><br /><br /><br />2. albo wpisać w opcjach kompilatora <strong><span style="color: #FF0000">-mint8</span></strong> żeby stałe dosłowne traktował nie jako 16-bitowe o 8-bitowe to warning się nie pojawi (ale tego nie polecam)<br /><br /><br />3. albo dać tablicę elementów 16-bitowych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]uint16_t tab[] = { ~(SEG_A|SEG_B) }; [/syntax]<br /><br /><br />4. albo całkiem inaczej zdefiniować sobie zapis cyfry - np binarnie o tak:<br /><br />[syntax=c]uint8_t tab[] = { 0b11000000 }; [/syntax]<br /><br />wybierz sobie sposób który ci się podoba - tylko może poza tym nr.2<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 sty 2013, o 23:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-27T22:43:58+01:00</updated>
<published>2013-01-27T22:43:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26009#p26009</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26009#p26009"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=26009#p26009"><![CDATA[
No dobrze, ale co tak właściwie się tam dzieje? Coś nie mogę tego złapać. Czytałem już wcześniej o &quot;problemie&quot; opisanym w linku. Znowu przeczytałem, kilka razy, myślę, że ze zrozumieniem... I nie wiem, naprawdę nie wiem co się dzieje z takim wyrażeniem.<br /><br />Specjalnie ściągnąłem i zainstalowałem AS6 aby w symulatorze zobaczyć co się dzieje z takim wyrażeniem. Okazuje się, że wszystkie wartości są dobre po skróceniu longa (bo tak <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" />) do uint8_t... np. dla 9 wychodzi 0001 0001 binarnie. Jak w takim razie zrobić, skoro jest niby dobrze, aby nie pojawiał się warning? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />I czemu nie pojawia się ten warning gdy w d_led.h jest segmenty są ponumerowane tak jak w oryginale czyli od (1&lt;&lt;0) do (1&lt;&lt;7)?<br /><br />Przypominam, że problematyczny kod wygląda tak:<br />[syntax=c]<br />// PLIK d_led.c<br />uint8_t cyfry[] = {<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 miejsce)<br />};<br /><br />// PLIK d_led.h<br />#define SEG_A (1&lt;&lt;7)<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;0)<br />[/syntax]<br /><br />No dosyć mnie to ciekawi <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=750">Domanoid</a> — 27 sty 2013, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-26T16:22:01+01:00</updated>
<published>2013-01-26T16:22:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25899#p25899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25899#p25899"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25899#p25899"><![CDATA[
A to masz z kolei też opisane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zaglądasz tutaj?<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/uaktualnienia-programow-do-dvd.html" >http://atnel.pl/uaktualnienia-programow-do-dvd.html</a><!-- m --><br /><br />a dokładniej mówiąc tam jest link do:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/domyslna-promocja-do-typu-int.html" >http://atnel.pl/domyslna-promocja-do-typu-int.html</a><!-- m --><br /><br />i sporo dodatkowych rzeczy ci się wyjaśni <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=54">mirekk36</a> — 26 sty 2013, o 16:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-26T15:02:00+01:00</updated>
<published>2013-01-26T15:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25884#p25884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25884#p25884"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25884#p25884"><![CDATA[
Dzisiaj też to jeszcze przećwiczyłem. Myślę że już dosyć dobrze opanowałem maskowanie portów i operacje bitowe. Jest to bardzo poręczne przy manipulacji portami <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Mam tylko jeszcze problem z tym kodem w jednym miejscu. Jak podłączę kropkę pod pin 0 któregokolwiek z portów i w pliku d_led.h zmieniam to odpowiednio, czyli np. SEG_A (1&lt;&lt;7), a SEG_DP (1&lt;&lt;0), tzn. jak daje segmentowi innemu jak kropka (1&lt;&lt;7) to mam warningi typu: &quot;../d_led.c:34:3: warning: large integer implicitly truncated to unsigned type [-Woverflow]&quot;.. w linijce &quot;~( SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G ),// 9&quot;, czyli tam gdzie próbuję pod SEG_A podłożyć (1&lt;&lt;7). Niby po przeliczeniu tego nie powinno być większej liczby od uint8_t. Czemu więc tak się dzieje?<br /><br />Na mój rozum to jest tak:<br />~( SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G ),<br />~( 1&lt;&lt;7 | 1&lt;&lt;1 | 1&lt;&lt;2 | 1&lt;&lt;3 | 1&lt;&lt;5 | 1&lt;&lt;6 )  co mi daje ~11101110 czyli po negacji 00010001 czyli DEC 17, nie jest więcej jak 255?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=750">Domanoid</a> — 26 sty 2013, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-25T16:56:15+01:00</updated>
<published>2013-01-25T16:56:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25820#p25820</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25820#p25820"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25820#p25820"><![CDATA[
Dobrze myślisz - i właśnie jak widzisz po to jest ten cały rozdział o multipleksowaniu - to jest pierwszy praktyczny rozdział w którym pokazuję w książce zastosowanie w praktyce WIELU WAŻNYCH rzeczy z języka C <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .....<br /><br />Na nieszczęście niektórzy pomijają ten rozdział - a najbardziej charakterystyczny przypadek kiedyś opisałem na forum, jak to pewien czytelnik się na mnie prawie zezłościł że nie może z mojej książki nauczyć się np obsługi timerów sprzętowych. A ja go pytam czy czytał rozdział o wyświetlaczach 7-seg i multipleksowaniu .... ? a on na to - &quot;A PO CO ???? ja nigdy takich starych wyświetlaczy nie będę stosował - mnie interesują jak już tylko kolorowe i graficzne, dlatego nawet nie zaglądałem do tego rozdziału w książce!&quot;<br /><br />A ja mu na to - ale panie czytelnik - proszę się jednak przemóc i zajrzeć, ja nie pisałem tego rozdziału żeby komuś wciskać stare rozwiązania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czy polecać takie wyświetlacze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... to są WAŻNE ćwiczenia praktyczne w C ....<br /><br />Więc po dwóch miesiącach czytelnik odpisał - &quot; bardzo pana przepraszam - przeczytałem tak jak pan zalecał najpierw raz całą książkę od dechy do dechy - i teraz wszystko staje się jasne .... a setki pytań które mi się cisnęły na usta - okazywało się że odpowiedź była tuż tuż na następnych stronach - tylko ja je pomijałem bo zwykle uznawałem że dalsze fragmenty mi się nie przydadzą&quot;<br /><br />----------------------<br /><br />Dlatego cieszę się że się wdrożyłeś w ten rozdział - i to aż na takim poziomie - bo jak widzisz to także dobre ćwiczenia na przesunięcia i operacje bitowe - teraz - to je już NA PEWNO lepiej zapamiętasz i będziesz się nimi sprawniej posługiwał - nieprawdaż ? <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=54">mirekk36</a> — 25 sty 2013, o 16:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-25T16:27:35+01:00</updated>
<published>2013-01-25T16:27:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25816#p25816</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25816#p25816"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25816#p25816"><![CDATA[
Chyba już rozumiem ideę przesunięć bitowych. CHYBA <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zacznę od kodu który teraz działa, a który jest już trochę przeze mnie zmieniony:<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 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;PC7)// CA1 oznacza bit nr.0 portu D<br />#define CA2 (1&lt;&lt;PC6)// CA2 oznacza bit nr.1 portu D<br />#define CA3 (1&lt;&lt;PC5)// CA3 oznacza bit nr.2 portu D<br />#define CA4 (1&lt;&lt;PC4)// 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 />[syntax=c]void d_led_init(void) {<br />LED_DATA_DIR = 0xFF;   // wszystkie piny portu C jako WYJŚCIA(katody)<br />LED_DATA = 0xFF;// wygaszenie wszystkich katod – stan wysoki<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<br />TCCR0 |= ( 1 &lt;&lt; WGM01 );// tryb CTC<br />TCCR0 |= ( 1 &lt;&lt; CS02 ) | ( 1 &lt;&lt; CS00 );// preskaler = 1024<br />OCR0 = 39;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= ( 1 &lt;&lt; OCIE0 );// zezwolenie na przerwanie CompareMatch<br />}<br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER0_COMP_vect) {<br />static uint8_t licznik = 128;// zmienna do przełączania kolejno anod wyswietlacza<br /><br />ANODY_PORT = ( ANODY_PORT &amp; 0x0F );  // wygaszenie wszystkich wyświetlaczy<br /><br />if ( licznik == 16 ) LED_DATA = pgm_read_byte( &amp;cyfry[cy1] );// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if ( licznik == 32 ) LED_DATA = pgm_read_byte( &amp;cyfry[cy2] );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if ( licznik == 64 ) LED_DATA = pgm_read_byte( &amp;cyfry[cy3] );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if ( licznik == 128 ) LED_DATA = pgm_read_byte( &amp;cyfry[cy4] );  // gdy zapalony wyśw.4 podaj stan zmiennej c4<br /><br />ANODY_PORT = ( ANODY_PORT &amp; 0x0F ) | ( licznik &amp; 0xF0 );// cykliczne przełączanie kolejnej anody w każdym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalającego anody w zmiennej licznik<br />licznik &gt;&gt;= 1;// przesunięcie zawartości bitów licznika o 1 w lewo<br />if ( licznik &lt; 16 ) licznik = 128;// jeśli licznik większy niż 8 to ustaw na 1<br />}[/syntax]<br /><br />I teraz tak:<br />- anody są przyporządkowane do pinów 7,6,5,4 portu C. Katody do całego portu A od 0 do 7, połączenie jest dobre.<br />- tranzystory są typu NPN czyli trzeba podać stan wysoki na nóżkę odpowiadającą za cyfrę, reszta masa.<br /><br />Jako, że anody są 4 wyższymi bajtami portu to równe są 128 dla PC7, 64 dla PC6, 32 dla PC5 i 16 dla PC4.<br />-&gt; Stąd mój licznik na początku równa się 128. <br />- Robię maskowanie portu C wygaszając wszystkie piny odpowiedzialne za anody. ANODY_PORT &amp; 0x0F tutaj mi się zgadza, maskuję to co potrzeba.<br />- Teraz zabieram się za włączenie odpowiedniego pinu, czyli PC7 (128).<br />Rozkładam na czynniki pierwsze linijkę: ( ANODY_PORT &amp; 0x0F ) | ( licznik &amp; 0xF0 )<br /><br /><br />|&gt;&gt;&gt;&gt;&gt;7654 3210<br />PORTC  0000 0000<br />&amp; 0x0F  0000 1111<br />--------------------<br />-------- 0000 0000<br /><br />licznik   1000 0000<br />&amp; 0xF0 1111 0000<br />-------------------<br />------- 1000 0000<br /><br /><br /> . 0000 0000 <br />| 1000 0000<br />  1000 0000<br /><br />przy czym 4 młodsze mogą przybierać 1 albo 0 i się nie zmienią.<br /><br />To samo mi wychodzi po przesunięciu o &gt;&gt;1   ==&gt;&gt; 0100 0000 - zapala się kolejna anoda (stan wysoki).<br /><br />Tym sposobem dochodzę do 0001 0000 i jeśli tutaj nastąpi kolejne przesunięcie o &gt;&gt;1 to licznik ustawi się z powrotem na 128 czyli PC7.<br /><br />Dobrze myślę? Czy gdzieś popełniam błąd? Operacje bitowe średnio mi zawsze wychodziły dlatego ostro się wziąłem za tą lekcję <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=750">Domanoid</a> — 25 sty 2013, o 16:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-25T12:15:15+01:00</updated>
<published>2013-01-25T12:15:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25788#p25788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25788#p25788"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25788#p25788"><![CDATA[
[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (licznik &amp; 0x0F);[/syntax]<br /><br />i tu w tej zmianie jest twój błąd <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... niestety <br /><br />jakbyś dobrze przeanalizował operacje logiczne które wychodzą przy takiej (niewinnej jak wspomniałeś zamianie linijek) to byś zobaczył - że coś jest nieteges<br /><br />inaczej - gdybyś podłączył na początek NPN'y i by ci to zadziałało - to też byś inaczej kombinował .... a tak? a tak to wydaje ci się że w kodzie z książki jest coś nie tak.....<br /><br />Spokojnie - nie traktuję tego jak napaść i też przepraszam cię - jeśli źle zrozumiałeś moją wypowiedź. Raczej chodzi mi o to - że jak coś nie wychodzi - to jednak warto najpierw zrobić dokładnie jak w książce (DVD) i te tranzystorki dać NPN .... <br /><br />spróbuj sobie rozpisać dokładnie operacje logiczne w tej linijce i zaobserwować co się dzieje ..... no chyba że zmieniałeś jeszcze coś w kodzie tego przerwania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale jeśli nie to będzie ZONK<br /><br />a jeśli zmieniałeś to pokaż te zmiany <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> żeby można było przeanalizować to co robisz .... bo sam widzisz - że to tak zwykle bwa &quot;zrobiłem wszystko jak w książce i nie działa&quot; ... a później po pytaniach okazuje się że ....&quot;no nie zrobiłem prawie jak w książce ale moje zmiany nie powinny mieć wpływu&quot; .... a jednak na końcu zwykle okazuje się że mają <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=54">mirekk36</a> — 25 sty 2013, o 12:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-25T11:25:56+01:00</updated>
<published>2013-01-25T11:25:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25784#p25784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25784#p25784"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25784#p25784"><![CDATA[
Rozdrabnianie kodu i analiza linijka po linijce - robię tak zawsze, napisałem ten post z racji późnej godziny i mojej frustracji faktem że działać nie chce a jednak wszystko wydawało się dobrze zrobione. Specjalnie kilka razy przepinałem kable połączeniowe aby wykluczyć błąd połączenia. Sprawdzałem programowo każdy segment takim kodem:<br />[syntax=c]<br />//w main:<br />uint8_t segmenty[] = { SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_F, SEG_G, SEG_DP } ; //odnosi się do d_led.h<br />uint8_t cyfryp[] = {CA1 , CA2 , CA3 , CA4};<br />//w pętli:<br />for (int var2 = 0; var2 &lt; 4; var2++) {<br />        ANODY_PORT = cyfryp[var2];<br />for (int var = 0; var &lt; 8; var++) {<br />LED_DATA = ~segmenty[var];<br />_delay_ms(300);<br />}<br />}<br />[/syntax]<br /><br />Światełko latało po wszystkich segmentach wszystkich liczb w oczekiwanej kolejności. Czyli połączenie dobre.<br /><br />Ten kod który podałem wcześniej pisałem w marcu 2012, także to moje początki jakiekolwiek z C, także mam świadomość, że tam jest dużo baboli.. ale działał co dało mi otuchę i zajmuję się tym dalej.<br /><br />Dzisiaj od rana sprawdzałem kod, nie linijka po linijce ale znak po znaku. I dopiero teraz jak już się z tym naszarpałem doszedłem do tego co jest nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Kod jest w 100% sprawny. Mogłem od razu wkleić schemat urządzenia. Wzorowałem się PRAWIE w 100% na ATB 1.04... PRAWIE bo zamiast PNP mam u siebie NPN...  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br />I wystarczyło w przerwaniu zmienić linijkę: <br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (~licznik &amp; 0x0F);[/syntax]<br />na:<br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0xF0) | (licznik &amp; 0x0F);[/syntax]<br />przed &quot;licznik&quot; wywalić negację, która odwrotnie sterowała tranzystorami...<br /><br /><em>Dzięki wielkie za odpowiedzi / podpowiedzi.</em> Błąd był tak samo &quot;śmieszny&quot; jak u forumowicza rezasurmar.<br /><br />I rzeczywiście widzę teraz, że źle zacząłem opis problemu. Na tych kodach się opieram, nie napisałem że jest zły, tylko że w moim przypadku nie działa ;P  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> Jeśli zabrzmiało to jak napaść na autora - przepraszam, na pewno tak nie miało zabrzmieć, nic nie zarzucam.<br /><br />Na koniec dam schemat mojej płytki testowej jeśli ktoś byłby zainteresowany:<br /><a href="https://dl.dropbox.com/u/412268/Elektronika/atnel_forum/testowa.png"  class="postlink">https://dl.dropbox.com/u/412268/Elektronika/atnel_forum/testowa.png</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=750">Domanoid</a> — 25 sty 2013, o 11:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-01-25T09:51:16+01:00</updated>
<published>2013-01-25T09:51:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25775#p25775</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25775#p25775"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25775#p25775"><![CDATA[
Dokładnie j/w<br />Dla mnie kody z płyty DVD, są wyrocznią, jeżeli one nie działają to szukam błędów w połączeniach, konfiguracji FUSÓW <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Ostatni przykład projektowanego <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> termostatu. Nie chciała mi działać regulacja mocy na MOC3021. W moim programie, przykład wzięty z lekcji o regulacji mocy 230V z książki Mirka. No ale oczywiście mnóstwo rzeczy przy okazji trzeba było pozamieniać, bo po pierwsze inny procesor, po drugie sporo rzeczy było wcześniej dorzuconych, jak obsługa LCD, klawiatury, pomiaru temperatury na ADC i na DS18x20. Regulację wrzucałem na końcu. No i nie działała hmmmmm. <br />Wywaliłem wszystko tj. wgrałem tylko lekcję Mirka dotyczącą regulacji mocy, oczywiście z nagłówkach .h zmieniłem tylko ustawienia portów pod które miałem podpięte moje bambetle.<br />No i się okazało, że pięknie działa.<br />By było śmieszniej, po podłączeniu oscyloskopu na moim programie sterowanie było, ale nie takie napięcia jak powinno być. Najpierw myślałem jak typowy &quot;początkujący&quot; procesor uwalony, no to bach procesor nowy prosto z sklepu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> tj. szuflady. Dalej to samo. sterowanie jest poziom napięć nie ten. Po odłączeniu diody MOC3021 jak za dotknięciem różdżki bach napięcie prawidłowe, pod obciążeniem siadało hmmmmm, ciekawostka. Na czystym przykładzie z ksiażki Mirka działa pięknie u mnie nie chce. No to po koleji.................. no i co się okazało, zapomniałem o jednym ustawieniu nogi procesora <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />DDRB |= (1&lt;&lt;PB2); // Wyjście na triak MOC302x<br />tj, było ale na PB1 ustawione <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. stracone 8godzin szukania analizy, wgrywania innego programu.<br /><br />Nie twierdzę, że Mirek jest nieomylny, bo sam się przyznaje, że jest. Zresztą są erraty kodów na jego stronie do ściągnięcia. <br />Ale na początku zawsze zaczynaj od sprawdzenia połączeń przykładem z książki tj. z płyty DVD dokładnie + ewentualna errata. Chociaż 99.99% bez erraty też będzie działać, błędy są naprawdę niewielkie.<br />Sorry za tak długi wywód, ale chciałem tylko unaocznić, że nie tylko całkowicie początkujący popełniają podstawowe błędy.<br />Dlatego zawsze w zanadrzu mam albo diodę, albo jeżeli jest LCD, program Mirka, czy to obsługa RS232, czy to nawet wrzucenie wyświetlania jakiejś zmiennej obok moich komunikatów.<p>Statystyki: Napisane przez Gość — 25 sty 2013, o 09:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-25T09:39:44+01:00</updated>
<published>2013-01-25T09:39:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25773#p25773</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25773#p25773"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25773#p25773"><![CDATA[
Domanoid --&gt; ja proponuję skup się na jednym i spróbuj się nauczyć (jak piszę w książce) szukać problemów poprzez rozbieranie kodu na mniejsze kawałki. Przykro mi ale kod z książki (szczególnie ten z poprawek) nie ma prawa nie działać .... <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... więc albo coś podłączyłeś źle albo jak kolega wyżej źle ustawiłeś fusebity.<br /><br />Poza tym jak coś w kodzie nie wychodzi warto go analizować po kawałku od początku stosując &quot;debuger na jednej diodzie LED&quot; ... ot chociażby po to aby sprawdzić czy np prawidłowo ci przerwanie multipleksowania działa ... a to ci powie czy masz np poprawnie ustawione Fusebity.<br /><br />Innym krokiem jest próba statycznego zapalania w kodzie po kolei każdego segmentu żeby np sprawdzić czy połączenia są poprawne ... itd itd<br /><br />Takie podejście że &quot;złożyłem wszystko i nie działa - więc chyba kod z książki jest do niczego&quot; ..... raczej nie pomoże ci w nauce programowania ... Ja bym się np zastanowił tak - jeśli rzeczywiście kod miałby być zły - to pewnie w internecie będzie pełno informacji na ten temat - tymczasem pokaż mi chociaż jeden wątek z tego forum, z którego wynikałby ten fakt. A zatem jeśli wszystkim działa a mnie nie - to znaczy że ja coś jeszcze źle robię - więc hmm muszę szukać .... <br /><br />dlatego , reasumując - wróć do tego kodu z DVD (a jeśli książkę masz od niedawana to na pewno na DVD jest kod poprawiony) .... i po kolei jak pisałem wyżej zacznij sprawdzać - i ew wtedy zadawaj pytania, jeśli czegoś nie rozumiesz po drodze w kodzie.<br /><br />Nawiasem mówiąc wykonywanie skoków do innych funkcji z poziomu przerwania, u ciebie<br /><br />SevenSegment(digits[i], 0);<br /><br />to niezbyt szczęśliwy pomysł tym bardziej, że jak widzisz w kodzie z książki - można to załatwić kilkoma linijkami dosłownie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 sty 2013, o 09:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-25T01:55:35+01:00</updated>
<published>2013-01-25T01:55:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25767#p25767</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25767#p25767"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25767#p25767"><![CDATA[
Też mam problem z tym przykładem z książki. A nawet z płytki (oraz ściągniętym ulepszonym kodem ze strony z erratami).<br />Otóż połączenie mam dokładnie takie samo jak na płytce testowej atnela. Specjalnie jeszcze do tych samych portów na procesorze podłączyłem aby zupełnie nic nie zmieniać w kodzie. Jedyne co to ustawiłem odpowiedni procesor i taktowanie w ustawieniach eclipse (mega16, 8mhz).<br /><br />Kod z książki prawie zupełnie nie działa, cyfry są nieczytelne. Jeśli się dobrze przyjrzeć to jednak odlicza, tylko, że inne segmenty też są aktywne ale troszkę ciemniejsze przez co przyglądając się jednak widać odliczanie.<br /><br />Aby wyeliminować błąd na płytce czy w połączeniu wgrałem swój kod, którym dawno temu się bawiłem, tylko przestawiłem na odpowiednie porty. Z moim kodem działa elegancko.<br /><br />Mój kod:<br />[syntax=c]<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay_basic.h&gt;<br /><br />#define SEVEN_SEGMENT_PORT PORTC<br />#define SEVEN_SEGMENT_DDR  DDRC<br /><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 /><br />volatile uint8_t digits[3];<br /><br />void SevenSegment(uint8_t n, uint8_t dp) {<br />if (n &lt; 10) {<br />switch (n) {<br /><br />case 0:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F);<br />break;<br /><br />case 1:<br />SEVEN_SEGMENT_PORT = ~(SEG_B | SEG_C);<br />break;<br /><br />case 2:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_D | SEG_E | SEG_G);<br />break;<br /><br />case 3:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_G);<br />break;<br /><br />case 4:<br />SEVEN_SEGMENT_PORT = ~(SEG_B | SEG_C | SEG_F | SEG_G);<br />break;<br /><br />case 5:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_C | SEG_D | SEG_F | SEG_G);<br />break;<br /><br />case 6:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);<br />break;<br /><br />case 7:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_C | SEG_F);<br />break;<br /><br />case 8:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G);<br />break;<br /><br />case 9:<br />SEVEN_SEGMENT_PORT = ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G);<br />break;<br />}<br />if (dp) {<br />SEVEN_SEGMENT_PORT |= ~(SEG_DP);<br />}<br />} else {<br />//This symbol on display tells that n was greater than 9<br />//so display can't handle it<br /><br />SEVEN_SEGMENT_PORT = 0b11111101;<br />}<br />}<br /><br />void Wait() {<br />uint8_t i;<br />for (i = 0; i &lt; 10; i++) {<br />_delay_loop_2(0);<br />}<br />}<br /><br />void Print(uint16_t num) {<br />uint8_t i = 0;<br />uint8_t j;<br /><br />if (num &gt; 9999)<br />return;<br /><br />while (num) {<br />digits[i] = num % 10;<br />i++;<br /><br />num = num / 10;<br />}<br />for (j = i; j &lt; 4; j++)<br />digits[j] = 0;<br />}<br /><br />int main(void) {<br />uint16_t i;<br /><br />// Prescaler = FCPU/1024<br />TCCR0 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS02);<br />TCCR0 |= (1 &lt;&lt; WGM01);<br /><br />//Initialize Counter<br />OCR0 = 39;<br /><br />//Enable Overflow Interrupt Enable<br />TIMSK |= (1 &lt;&lt; OCIE0);<br /><br />//Port B[3,2,1,0] as out put<br />DDRD |= 0b00001111;<br /><br />PORTD = 0b00000001;<br /><br />//Port D<br />SEVEN_SEGMENT_DDR = 0XFF;<br /><br />//Turn off all segments<br />SEVEN_SEGMENT_PORT = 0X00;<br /><br />//Enable Global Interrupts<br />sei();<br /><br />//Infinite loop<br />//Print a number from 1 to 9999<br />while (1) {<br />for (i = 0; i &lt; 10000; i++) {<br />Print(i);<br />Wait();<br />}<br /><br />}<br />}<br /><br />ISR(TIMER0_COMP_vect) {<br />// UPDATE THE DISPLAY<br />static uint8_t i = 0;<br /><br />if (i == 3) {<br />//LAST? GO BACK TO FIRST<br />i = 0;<br />} else {<br />//NEXT DISP<br />i++;<br />}<br /><br />//Activate a display<br />PORTD &amp;= (0b11110000);<br />PORTD |= (1 &lt;&lt; i);<br /><br />//Write the digit[i] in the ith display.<br />SevenSegment(digits[i], 0);<br />}<br />[/syntax]<br /><br />Filmik pokazujący co się dzieje na wyświetlaczu z kodem z płytki:<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br />Chwile później przestawiłem OCR0 na 240 aby było widać migotanie (wtedy na filmiku można się dopatrzeć źle zapalających się segmentów).<br /><br />A tutaj filmik pokazujący, że mój kod działa (wgrywam go chwile po uruchomieniu nagrywania):<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />Gdzie szukać błędu? Wertuję ten kod w te i we wte.. Proszę o wskazówki <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=750">Domanoid</a> — 25 sty 2013, o 01:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-20T23:26:47+01:00</updated>
<published>2013-01-20T23:26:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25373#p25373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25373#p25373"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25373#p25373"><![CDATA[
Jasne - zawsze można je zużyć do końca - przecież nie będziemy wyrzucać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc albo użyj Timer2<br /><br />albo Timer0 ale wtedy użyj go w trybie NORMAL, czyli będzie trzeba za każdym razem w przerwaniu przeładowywać programowo jego wartość aby odliczał wyliczoną przez ciebie ilość tyknięć<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 sty 2013, o 23:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2013-01-20T21:33:25+01:00</updated>
<published>2013-01-20T21:33:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25358#p25358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25358#p25358"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25358#p25358"><![CDATA[
Niestety Atmegi 8 kupiłem jeszcze za nim trafiłem na to forum i filmiki Mirka :/ Także zostały mi takie 3 sztuki do nauki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 20 sty 2013, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-20T21:00:21+01:00</updated>
<published>2013-01-20T21:00:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25351#p25351</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25351#p25351"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25351#p25351"><![CDATA[
Można też użyć Timer2 - bo Timera1 szkoda przecież jest 16-bitowy. A na przyszłość już kolega wie żeby nie kupować ATmegi8, która ma TAK biedny Timer0 , tylko np ATmega88 - która już ma wypasiony ten Timer0 <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=54">mirekk36</a> — 20 sty 2013, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[filipo96]]></name></author>
<updated>2013-01-20T19:39:29+01:00</updated>
<published>2013-01-20T19:39:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25347#p25347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25347#p25347"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25347#p25347"><![CDATA[
Zmiana inicjalizacji timera, inna wartość do ładowania timera, inny wektor obsługi i co przerwanie ładowanie pewną wartością timera.<br />Tryb NORMAL.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=99">filipo96</a> — 20 sty 2013, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2013-01-20T19:36:28+01:00</updated>
<published>2013-01-20T19:36:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25346#p25346</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25346#p25346"/>
<title type="html"><![CDATA[Re: Przykład z książki z wyświetlaczem 7 segmentowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2039&amp;p=25346#p25346"><![CDATA[
Rozumiem że muszę przerobić, ale przeróbka sprowadzi się tylko do zmiany TCCR, OCR no i innej procedury przerwań ISR<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 20 sty 2013, o 19:36</p><hr />
]]></content>
</entry>
</feed>