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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-23T20:45:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9819&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-23T20:45:55+01:00</updated>
<published>2014-12-23T20:45:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110180#p110180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110180#p110180"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110180#p110180"><![CDATA[
Sory  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />W związku z tym, że masz ich osiem a nie cztery to musisz ustawić na całym PORTB stan wysoki:<br />[syntax=c]ANODY_PORT = 0xFFFF;[/syntax]<br /></div><br />...za karę zjem kawałek koszulki termokurczliwej  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> .<br />Dobrze myślałem tylko tych F'ów natrzaskałem ....<br /><br />Dzięki za życzenia ja również życzę zdrowych wesołych świąt.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 gru 2014, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gw40]]></name></author>
<updated>2014-12-23T20:16:21+01:00</updated>
<published>2014-12-23T20:16:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110173#p110173</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110173#p110173"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110173#p110173"><![CDATA[
<div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />sprubuj wstawić<br />ANODY_PORT = 0xFF;<br /></div><br /><br /><br />A to się zgadza. Tamten zapis ANODY_PORT = (ANODY_PORT &amp; 0xFF); miał ewentualnie maskować bity których bym nie używał a ponieważ wykorzystuje cały port to masz rację. Dzięki. Ale i tak ten pierwszy licznik nie chce działać prawidłowo. To co podpowiedział  kicajek to działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7400">gw40</a> — 23 gru 2014, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-12-23T20:05:47+01:00</updated>
<published>2014-12-23T20:05:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110168#p110168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110168#p110168"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110168#p110168"><![CDATA[
sprubuj wstawić<br />ANODY_PORT = 0xFF;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 23 gru 2014, o 20:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gw40]]></name></author>
<updated>2014-12-23T19:24:26+01:00</updated>
<published>2014-12-23T19:24:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110158#p110158</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110158#p110158"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110158#p110158"><![CDATA[
Kolego kicajek bardzo Ci dziękować za twój pomysł. Wszystko śmiga tak jak powinno. Niby prosty licznik a cieszy:) Też trochę myślałem o tym 'modulo' bo jak liczyłem już nawet na piechotę ten licznik to coś mi się zaczynało nie zgadzać, zaczynały mi wychodzić miliony i dalej z resztą po przecinku ja dopiero pomalutku stawiam pierwsze kroki.<br />Pozdrawiam serdecznie i życzę WESOŁYCH ŚWIĄT.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />Trochę nie bardzo rozumiem <br />ANODY_PORT = 0xFFFF; Bo przecież jest osiem wyświetlaczy i osiem anod a nie 16? I jak zmieniam to kompilator zgłasza błąd.<br />W każdym razie Twój poprzedni sposób działa:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7400">gw40</a> — 23 gru 2014, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-23T19:09:43+01:00</updated>
<published>2014-12-23T19:09:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110156#p110156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110156#p110156"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110156#p110156"><![CDATA[
Mając osiem wyświetlaczy ten zapis jest błędny:<br />[syntax=c]ANODY_PORT = (ANODY_PORT &amp; 0xFF);       // wygaszenie wszystkich wyświetlaczy[/syntax]<br />W związku z tym, że masz ich osiem a nie cztery to musisz ustawić na całym PORTB stan wysoki:<br />[syntax=c]ANODY_PORT = 0xFFFF;[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 gru 2014, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gw40]]></name></author>
<updated>2014-12-23T18:48:43+01:00</updated>
<published>2014-12-23T18:48:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110151#p110151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110151#p110151"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110151#p110151"><![CDATA[
Jestem Bardzo początkujący robię ćwiczenia z książki Mirka i właściwie na dowolny wyświetlacz z ośmiu mogę wyrzucić dowolny znak czy cyfrę multipleksowanie działa bo mogę jednocześnie na każdej z cyfr coś sobie wyświetlić tylko ten licznik mi jakoś nie działa. Ten na cztery cyfry czyli 9999 działa w górę i w dół (na dowolnej czwórce cyfr 2345,4567 itp.) a już na pięć i wyżej działa dziwnie. Spróbuje jeszcze tego co podpowiadasz. <br /><br /><br /><br />[syntax=c]// ****** definicja funkcji inicjalizującej pracę z wyświetlaczem multipleksowanym<br />void d_led_init(void)<br />{<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 |= B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 ;// 8 piny portu A jako WYJŚCIA (anody wyświetlaczy)<br />ANODY_PORT |= B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8;// wygaszenie wszystkich wyświetlaczy - anody<br /><br />// ustawienie TIMER2<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 18;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br />}<br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint16_t licznik=1;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />ANODY_PORT = (ANODY_PORT &amp; 0xFF);// wygaszenie wszystkich wyświetlaczy<br /><br /><br />if(licznik==1) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy1&#93; );// gdy zapalony wyśw.1 podaj stan zmiennej c1<br />else if(licznik==2) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy2&#93; );// gdy zapalony wyśw.2 podaj stan zmiennej c2<br />else if(licznik==4) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy3&#93; );// gdy zapalony wyśw.3 podaj stan zmiennej c3<br />else if(licznik==8) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy4&#93; );// gdy zapalony wyśw.4 podaj stan zmiennej c4<br />else if(licznik==16) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy5&#93; );// gdy zapalony wyśw.5 podaj stan zmiennej c5<br />        else if(licznik==32) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy6&#93; );// gdy zapalony wyśw.6 podaj stan zmiennej c6<br />else if(licznik==64) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy7&#93; );// gdy zapalony wyśw.7 podaj stan zmiennej c7<br />else if(licznik==128) LED_DATA = pgm_read_byte( &amp;cyfry&#91;cy8&#93; );<br />ANODY_PORT= ~licznik;// cykliczne przełączanie kolejnej anody w każdym przerwaniu<br /><br />// operacje cyklicznego przesuwania bitu zapalającego anody w zmiennej licznik<br />licznik &lt;&lt;= 1;// przesunięcie zawartości bitów licznika o 1 w lewo<br />if(licznik&gt;128) licznik = 1;// jeśli licznik większy niż 128 to ustaw na 1<br />}[/syntax]<br /><br /><br /><br />Wrzucę jeszcze ten licznik na cztery.<br /><br />[syntax=c]uint16_t licznik=9999;<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(50);<br />//if(licznik&gt;9999) licznik=0;<br />if(!licznik) licznik=9999;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7400">gw40</a> — 23 gru 2014, o 18:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-23T17:28:14+01:00</updated>
<published>2014-12-23T17:28:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110136#p110136</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110136#p110136"/>
<title type="html"><![CDATA[Re: multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110136#p110136"><![CDATA[
Witam<br />A może spróbuj  tak liczyć:<br />[syntax=c]cy1 =  licznik%10;<br />(licznik&gt;10)?  (cy2 = (licznik/10)%10) :(cy2=NIC);  //dziesątki<br />(licznik&gt;100)? (cy3 = (licznik/100)%10):(cy3=NIC);//setki<br />...                                                               //itd.<br />...[/syntax]<br />Pokaż w jaki sposób robisz multipleksowanie.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 gru 2014, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gw40]]></name></author>
<updated>2014-12-23T14:22:17+01:00</updated>
<published>2014-12-23T14:22:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110121#p110121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110121#p110121"/>
<title type="html"><![CDATA[multi_led licznik 8 cyfr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9819&amp;p=110121#p110121"><![CDATA[
Witam.<br />To mój pierwszy post więc proszę o wyrozumiałość. Zacząłem się trochę bawić w ćwiczenia z niebieskiej książki multi_led.<br />Zmodyfikowałem kod programu pod atmegę 8 tylko podłączyłem sobie ośmiocyfrowy wyświetlacz led i chciałbym mieć taki licznik do czy od 0-99999999. Siedzę już drugi dzień i nie potrafię sobie wytłumaczyć dlaczego nie chce mi to działać. to znaczy działa multipleksowanie, cyfry inicjalizujące się poprawnie wyświetlają a sam licznik działa tylko wyświetla jakieś głupoty na pierwszych dwóch cyfrach a po 45000 znowu głupoty na trzeciej i czwartej cyfrze gdy wrócę do wersji na cztery cyfry jest ok. O co tu chodzi?<br />zamieszczam kod nie wiem czy mi się uda poprawnie to wstawić:) <br /><br />[syntax=c]#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />#include &quot;diody.h&quot;<br />#include &quot;d_led.h&quot;// dołączenie naszego pliku nagłówkowego (obsługa LED)<br /><br />int main(void)<br />{<br /><br />// ****** inicjalizacja *********<br />d_led_init();   // inicjalizacja wyświetlacza multipleksowanego<br /><br /><br />    DDRB=0xFF;<br />// testowa inicjalizacja zmiennych oraz liczb mających się wyświetlać na wyrw. LED<br />//cy1=0;<br />//cy2=9;<br />//cy3=8;<br />//cy4=1;<br />//cy5=6;<br />//cy6=5;<br />//cy7=4;<br />//cy8=2;<br /><br /><br />sei();// włączenie globalnego zezwolenia na przerwania<br /><br /><br /><br />//DDRA |= (1&lt;&lt;PA5);<br />//while(1)<br />//{<br />//PORTA ^= (1&lt;&lt;PA5);<br />//_delay_ms(1000);<br />//} m<br /><br />uint32_t licznik = 99999999;<br />uint8_t d1,d2,d3,d4,d5,d6,d7,d8;<br /><br /><br />//**********************  pętla główna<br /><br /><br />         while(1)<br /><br />         {<br />licznik--;<br /><br />d1=licznik/10000000;<br />cy1=d1;<br />if(d1) cy1=d1; else cy1=NIC;<br />d2=(licznik-(d1*10000000))/1000000;<br />cy2=d2;<br />if(d2) cy2=d2; else cy2=(licznik&gt;9999999 )?0:NIC;<br />d3=(licznik-(d1*10000000)-(d2*1000000))/100000;<br />cy3=d3;<br />if(d3) cy3=d3; else cy3=(licznik&gt;999999)?0:NIC;<br />d4=(licznik-(d1*10000000)-(d2*1000000)-(d3*100000))/10000;<br />cy4=d4;<br />if(d4) cy4=d4; else cy4=(licznik&gt;99999)?0:NIC;<br />d5=(licznik-(d1*10000000)-(d2*1000000)-(d3*100000)-(d4*10000))/1000;<br />cy5=d5;<br />if(d5) cy5=d5; else cy5=(licznik&gt;9999)?0:NIC;<br />d6=(licznik-(d1*10000000)-(d2*1000000)-(d3*100000)-(d4*10000)-(d5*1000))/100;<br />cy6=d6;<br />if(d6) cy6=d6; else cy6=(licznik&gt;999)?0:NIC;<br />d7=(licznik-(d1*10000000)-(d2*1000000)-(d3*100000)-(d4*10000)-(d5*1000)-(d6*100)/10);<br />cy7=d7;<br />if(d7) cy7=d7; else cy7=(licznik&gt;99)?0:NIC;<br />d8=(licznik-(d1*10000000)-(d2*1000000)-(d3*100000)-(d4*10000)-(d5*1000)-(d6*100)-(d7*10));<br />cy8=d8;<br /><br />_delay_ms(10);<br />//if(licznik&gt;99999999) licznik=0;<br /><br />if(!licznik) licznik=99999999;<br /><br /><br />         }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7400">gw40</a> — 23 gru 2014, o 14:22</p><hr />
]]></content>
</entry>
</feed>