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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-02-27T22:55:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=883&amp;mode</id>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-27T22:55:53+01:00</updated>
<published>2012-02-27T22:55:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3667#p3667</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3667#p3667"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3667#p3667"><![CDATA[
Wyświetlacze odliczają od 999 w dół aż miło;)<br /><br />Kod licznika dla leniuchów;)<br /><br />[syntax=c]uint16_t licznik = 999;<br /><br />while(1)<br />{<br />        if(licznik &gt; 100)<br />                setki = licznik / 100 % 10;<br />        else setki = 0;<br /><br />        if(licznik &gt; 10)<br />                dziesiatki = licznik/ 10 % 10;<br />        else dziesiatki = 0;<br /><br />        jednosci = licznik % 10;<br /><br />        _delay_ms(500);<br /><br />        if(licznik == 0)<br />                licznik = 999;<br />        else licznik--;<br /><br />}[/syntax]<br /><br />Maskowanie zrobione, widzę błąd, że robiłem to kompletnie odwrotnie niż miało być. Jutro powtarzam rozdział o bitach i w końcu ruszam z termometrem:)<br /><br />Jutro wprowadzę poprawki kosmetyczne do kodu, schemat układu już mam, wrzucę do projektów sprzętowych, myślę, że będzie fajny tutorial dla amatorów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 27 lut 2012, o 22:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-27T22:00:19+01:00</updated>
<published>2012-02-27T22:00:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3663#p3663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3663#p3663"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3663#p3663"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Ale ekstra;) nie wiedziałem, że wystarczy PORTB=6; i już mam wyświetlone:)<br /><br />Zrobiłem maskowanie:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = (PORTC &amp; 0b111000) | (~licznik &amp; 0b11000111);</div><br /><br />Ale niestety wyświetlacze się nie włączają, nie potrafię tego zrozumieć:/<br /></div><br /><br />Bo troszkę za bardzo się śpieszysz i masz rację nie do końca przećwiczyłeś rozdział z teorii zarówno o przesunięciach bitowych oraz maskowaniu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ....<br /><br />najpierw maskujesz bity, które chcesz użyć w porcie - zerując je:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = ( PORTC &amp;0b11000111 ) ....</div><br /><br />widzisz to ?<br /><br />potem maskujesz licznik:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent"> ( ~licznik &amp; 0b00111000 )</div><br /><br />czyli przygotowujesz sobie grunt żeby na końcu połączyć tylko to miejsce gdzie masz swoje 3 bity<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = ( PORTC &amp;0b11000111 )  | ( ~licznik &amp; 0b00111000 );</div><br /><br />a ty próbujesz w pośpiechu zgadywać i na chybił trafił maskowania robić <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ---- musi przecież zajść operacja OR<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2012, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-27T21:36:54+01:00</updated>
<published>2012-02-27T21:36:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3656#p3656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3656#p3656"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3656#p3656"><![CDATA[
Ale ekstra;) nie wiedziałem, że wystarczy PORTB=6; i już mam wyświetlone:)<br /><br />Zrobiłem maskowanie:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = (PORTC &amp; 0b111000) | (~licznik &amp; 0b11000111);</div><br /><br />Ale niestety wyświetlacze się nie włączają, nie potrafię tego zrozumieć:/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 27 lut 2012, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-27T21:13:35+01:00</updated>
<published>2012-02-27T21:13:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3647#p3647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3647#p3647"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3647#p3647"><![CDATA[
Zaraz zaraz - bo coś za dużo pytań w jednym ale zdaje się że pisałeś iż używasz sprzętowego dekodera dla wyświetlacza 7segm tak ? jeśli tak to coś nie pokręciłeś z tymi segmentami ? przecież ty wcale nie musisz definiować znaków. Wysyłasz do 4543 liczbę 7 i taka ukazuje ci się na wyświetlaczu LED od razu .... <br /><br />Odnośnie maskowania to dobrze zacząłeś myśleć - musisz mieć maskę<br /><br />0b111000 ale dla niej przeciwstawną będzie 0b11000111 przecież<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2012, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-27T19:55:56+01:00</updated>
<published>2012-02-27T19:55:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3641#p3641</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3641#p3641"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3641#p3641"><![CDATA[
Jednak nie przejdę od razu do termometra...<br /><br />Idąc tropem listingu z książki:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#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)</div><br />Co u mnie odpowiada za podawanie sygnałów na CD4543.<br /><br />[syntax=c]uint8_t cyfry[10] PROGMEM = {<br />~(A1 | B1 | C1 | D1),//0<br />~(SEG_A),//1<br />~(B1),//2<br />~(SEG_A | SEG_B),//3<br />~(C1),//4<br />~(SEG_A | SEG_C),//5<br />~(B1 | C1),//6<br />~(A1 | B1 | C1),//7<br />~(D1),//8<br />~(A1 | D1),//9<br />};[/syntax]<br />Tu interesuje nas na razie tylko pozycja 1,3,5.<br /><br />Następnie:<br />[syntax=c]if(licznik == 8)<br />//ONE1;<br />PORTB = pgm_read_byte(&amp;cyfry[1]);<br />else if (licznik == 16)<br />//TWO1;<br />PORTB = pgm_read_byte(&amp;cyfry[3]);<br />else if (licznik == 32)<br />//THREE1;<br />PORTB = pgm_read_byte(&amp;cyfry[5]);<br />[/syntax]<br /><br />Wyświetlacze odmówiły współpracy i zgasły:/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 27 lut 2012, o 19:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-27T19:19:20+01:00</updated>
<published>2012-02-27T19:19:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3638#p3638</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3638#p3638"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3638#p3638"><![CDATA[
Jeszcze takie pytanko, posiłkując się schematem maskowania z książki w moim przypadku muszę zrobić:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = (PORTC &amp; 0x38) | (~licznik &amp; odwrotność 0x38);</div><br /><br />0x38h = 111000b więc<br />0x7h = 000111b<br /><br />Niestety taki sposób nie działa, proszę o podpowiedź co robię źle bo nigdy nie byłem dobry w operacjach na bitach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 27 lut 2012, o 19:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-27T14:42:30+01:00</updated>
<published>2012-02-27T14:42:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3617#p3617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3617#p3617"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3617#p3617"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Wieczorem biorę się za DS1820 więc pewnie tu wrócę;)<br /></div><br /><br />Powodzenia i zapraszam serdecznie ponownie - po to jest nasze forum <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 lut 2012, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-27T10:59:25+01:00</updated>
<published>2012-02-27T10:59:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3610#p3610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3610#p3610"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3610#p3610"><![CDATA[
Oczywiście dziękuję za pomoc, czasami potrzebne jest świeże spojrzenie na kod aby wyłapać błędy:)<br />Wieczorem biorę się za DS1820 więc pewnie tu wrócę;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 27 lut 2012, o 10:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T22:39:29+01:00</updated>
<published>2012-02-26T22:39:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3589#p3589</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3589#p3589"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3589#p3589"><![CDATA[
Problem nie tkwił w wygaszaniu całego wyświetlacza tylko w stanach na segmentach, makro ALL_LED_OFF wygląda tak:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define ALL_LED_OFF PORTC |= (LED1_PIN | LED2_PIN | LED3_PIN)</div><br />gdzie:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define LED1_PIN _BV(PC3) //setki<br />#define LED2_PIN _BV(PC4) //dziesiatki<br />#define LED3_PIN _BV(PC5) //jednosci<br /></div><br />Co powoduje ustawienie stanu wysokiego na bazach tranzystorów, czyli wygaszeniu wyświetlacza a nie segmentów.<br /><br />Przy każdym wejściu do przerwania uC miał ustawiony stan wysoki na pinie który włączył podczas pierwszego przerwania co spowodowało, że na każdy wyświetlacz była podawana ta sama wartość.<br /><br />I tak jak napisałem, ustawianie pinów PORTB w stan niski przy każdorazowym wejściu do przerwania zniwelowało problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 22:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-26T20:41:52+01:00</updated>
<published>2012-02-26T20:41:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3581#p3581</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3581#p3581"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3581#p3581"><![CDATA[
No po to ci dałem podpowiedź żeby pokazać że źle wyłączasz wszystkie wyświetlacze na czas dokonywania zmian na segmentach.... tym <br /><br />PORTC = (PORTC &amp; 0xF0);<br /><br />a to w zupełności wystarcza do ich wygaszenia....<br /><br />nie widzę teraz twoich makr ALL_LED_OFF - ale jeśli robisz to przez wygaszenie segmentów to źle - powinno się wygasić poprzez zdjęcie napięcia ze wspólnych anod<br /><br />potem dokonać ustawień nowego stanu na segmentach<br /><br />a na końcu odpalić kolejny wyświetlacz poprzez włączenie odpowiedniej anody<br /><br />tak czy inaczej ważne że w końcu ci coś zaskoczyło <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> cieszę się<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 lut 2012, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T20:05:19+01:00</updated>
<published>2012-02-26T20:05:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3577#p3577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3577#p3577"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3577#p3577"><![CDATA[
I tym sposobem sam sobie odpowiedziałem:)<br /><br />Problem tkwił w zerowaniu pinów uC podczas wywołania przerwania, w listingu z płyty nie ma takiego czegoś, u mnie pomogło. <br /><br />Prawidłowy kod:<br /><br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik = 8; //zmienna do przelaczania wyswietlaczy<br /><br />ALL_LED_OFF;<br />BLANK;<br /><br />if(licznik == 8)<br />//ONE1;<br />PORTB |= (A1);<br />else if (licznik == 16)<br />//TWO1;<br />PORTB |= (B1);<br />else if (licznik == 32)<br />//THREE1;<br />PORTB |= (1 &lt;&lt; PB2);<br /><br />//PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br />//PORTC = (PORTC &amp; 0x0F) | (~licznik &amp; 0xF0);<br />PORTC =~licznik;<br /><br />licznik &lt;&lt;= 1;<br />if(licznik &gt; 32)<br />licznik = 8;<br /><br /><br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 20:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T20:00:43+01:00</updated>
<published>2012-02-26T20:00:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3576#p3576</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3576#p3576"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3576#p3576"><![CDATA[
Wyłączyłem maskowanie, żeby skupić się na samym wyświetlaniu. Podałem stany bezpośrednio.<br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik = 8; //zmienna do przelaczania wyswietlaczy<br /><br />//PORTC = ~licznik;<br />//PORTC = (PORTC &amp; ~licznik);<br />//PORTC = (PORTC &amp; 0xF0);<br />ALL_LED_OFF;<br /><br />if(licznik == 8)<br />//ONE1;<br />PORTB |= (A1);<br />else if (licznik == 16)<br />//TWO1;<br />PORTB |= (B1);<br />else if (licznik == 32)<br />//THREE1;<br />                PORTB |= (1 &lt;&lt; PB2);<br /><br />//PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br />//PORTC = (PORTC &amp; 0x0F) | (~licznik &amp; 0xF0);<br />PORTC =~licznik;<br /><br />licznik &lt;&lt;= 1;<br />if(licznik &gt; 32)<br />licznik = 8;<br /><br /><br />}[/syntax]<br /><br />Teraz mam same &quot;7&quot; chociaż patrząc na plik led.h powinienem mieć &quot;4&quot;<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define C1 _BV(PB2)<br />#define FOUR1 PORTB |= (C1)</div><br /><br />Wygląda na to jakby uC włączał kolejne bity nie wyłączając poprzednich:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define SEVEN1 PORTB |= (A1 | B1 | C1)</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-26T19:42:57+01:00</updated>
<published>2012-02-26T19:42:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3573#p3573</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3573#p3573"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3573#p3573"><![CDATA[
Jeszcze nie wiem dlaczego są trójki na wyświetlaczach nie mniej jednak teraz już licznik ładnie poprawiony.<br /><br />Ale niestety nie poprawione jest maskowanie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> , które na pewno będzie bruździć w kodzie - drobna podpowiedź jeśli chcesz:<br /><br />spójrz na linię:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = (PORTC &amp; 0xF0);</div><br /><br />ona służyła do wygaszenia 4 najstarszych bitów, a u ciebie - anody jak zauważyłeś już słusznie nie są na 4 najstarszych bitach prawda ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc tu też trzeba zadziałać ... a skoro tu no to i całe maskowanie już przy zapalaniu poszczególnego wyświetlacze też jest złe.... u ciebie ta linia powyżej powinna wyglądać jak ???<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">PORTC = (PORTC &amp; 0x38);</div><br /><br />zgodzisz się ? .....<br /><br />PS jak kolejny raz będziesz dawał kod dłuższy niż 2-3 linijki to postaraj się umieszczać go w znacznikach syntax = c OK ? Masz tam na górze takie pole które pozwala wybrać nawet język C i samo wstawi znaczniki po zaznaczeniu kodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 lut 2012, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T17:41:03+01:00</updated>
<published>2012-02-26T17:41:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3563#p3563</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3563#p3563"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3563#p3563"><![CDATA[
Pisząc kod czytam po prostu książkę i z każdą stroną dopisuję co mi jest potrzebne, dopiero jak nie działa jak należy to zerkam w listingi z płyty i szukam różnic.<br />Korzystam z Eclipse, nie oglądałem jeszcze lekcji video.<br /><br />Porty poprawione, nie wiem dlaczego założyłem, że to ostatnie bity;)<br />Wygaszanie zrobione, maskowanie (co prawda po łebkach, bo kosmetyka na koniec) też.<br /><br />Na daną chwilę dalej mam same &quot;3&quot; na wyświetlaczach.<br /><br />[syntax=c]<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik = 8; //zmienna do przelaczania wyswietlaczy<br /><br />//PORTC = ~licznik;<br />//PORTC = (PORTC &amp; ~licznik);<br />//PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br />PORTC = (PORTC &amp; 0xF0);<br /><br />if(licznik == 8)<br />ONE1;<br />else if (licznik == 16)<br />TWO1;<br />else if (licznik == 32)<br />THREE1;<br /><br />//PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br />PORTC = (PORTC &amp; 0x0F) | (~licznik &amp; 0xF0);<br /><br />licznik &lt;&lt;= 1;<br />if(licznik &gt; 32)<br />licznik = 8;<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-26T17:01:31+01:00</updated>
<published>2012-02-26T17:01:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3556#p3556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3556#p3556"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3556#p3556"><![CDATA[
1. nie robisz na początku przerwania wygaszania wszystkich anod wyświetlaczy - nabawisz się duszków (szkoda że to pominąłeś)<br /><br />2. najpierw powinieneś wystawić dane na katody wyświetlaczy (po uprzednim ich zgaszeniu jak w książce) a dopiero potem zapalać po kolei anody - robisz to zmienną licznik<br /><br />3. Niestety licznik porusza się tak jak w książce po najstarszych bitach portu czyli 7,6,5 - a zwróciłeś uwagę do których pinów ty masz przypięte anody ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... to jest moja podpowiedź <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />teraz popróbuj wziąć to wszystko pod uwagę i działaj <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak coś to dalej pytaj - wszystko ci wyjdzie tylko pamiętaj o punkcie 1-szym bo ludzie go bagatelizują a potem narzekają na duszki <br /><br />aha najważniejsze - czy korzystasz z kodów na DVD ??? czy korzystasz z Eclipse ??? czy oglądałeś lekcje VIDEO ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 lut 2012, o 17:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T16:46:22+01:00</updated>
<published>2012-02-26T16:46:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3548#p3548</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3548#p3548"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3548#p3548"><![CDATA[
Zrobienie schematu na 12&quot; X61s używając tylko trackpointa było nie lada wyzwaniem:)<br /><br /><a href="http://imageshack.us/photo/my-images/804/7segmultiplex.png/"  class="postlink"><img src="http://img804.imageshack.us/img804/9365/7segmultiplex.th.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 16:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-26T15:49:34+01:00</updated>
<published>2012-02-26T15:49:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3533#p3533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3533#p3533"/>
<title type="html"><![CDATA[Re: Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3533#p3533"><![CDATA[
Już chciałem pisać z prośbą aby nie umieszczać kodów bibliotek z książki na forum - no ale kolega pozmieniał wszystko do własnych potrzeb, czyli podjął fajną próbę walki z dostosowaniem kodu do swoich potrzeb - SUPER! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to rozumiem.<br /><br />Ale teraz do rzeczy, gdybym ja miał pomóc to musiałbym zobaczyć dokładnie schemat jak kolega to sobie popodłączał - bo niestety bez schematu tylko z opisu to ciężko mi sobie zawsze to skojarzyć w głowie - dlatego prosiłbym o uzupełnienie pytania właśnie o dokładny schemat OK ? <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 lut 2012, o 15:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-02-26T15:21:10+01:00</updated>
<published>2012-02-26T15:21:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3528#p3528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3528#p3528"/>
<title type="html"><![CDATA[Nie działający tryb CTC dla TIMER2 w Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=883&amp;p=3528#p3528"><![CDATA[
Witam,<br /><br />Nazywam się Robert, postanowiłem zająć się programowaniem uC gdyż na studiach liznąłem trochę 8051 i mi się spodobało:) Poza tym pisanie w C na komputerze i wyświetlanie wyników w konsoli nie jest tak efektowne;)<br /><br />Posiadam książkę Pana Mirosława gdyż jest chyba najlepszą pozycją dla początkujących dostępną na rynku.<br />Nie mam zestawu uruchomieniowego, poszczególne projekty wykonuję na breadboardzie i płytce uniwersalnej do lutowania.<br /><br />Utknąłem na multipleksowaniu wyświetlaczy 7 segmentowych. Posiadam 3szt ze wspólną anodą, dekoder BCD-&gt;7SEG, tranzystory BC556 i Atmega8.<br />Kod do obsługi pisałem z książki, dopasowując go do tego co mam na daną chwilę zmontowane.<br /><br />Problem jest taki, że po włączeniu zasilania każdy z wyświetlaczy mignie po kolei na bardzo krótki okres czasu, po czym na wszystkich pojawia się cyfra &quot;3&quot;.<br /><br />Proszę o nakierowanie mnie gdzie popełniam błąd.<br /><br />[syntax=c]<br />//main.c<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;inttypes.h&gt;<br /><br />#include &quot;led.h&quot;<br /><br />int main(void)<br />{<br />led_init();<br />sei();<br /><br />while(1)<br />{<br /><br />}<br />}<br />[/syntax]<br /><br />[syntax=c]<br />//led.c<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;led.h&quot;<br /><br />volatile uint8_t cyfra1;<br />volatile uint8_t cyfra2;<br />volatile uint8_t cyfra3;<br /><br />void led_init(void) //funkcja inicjujaca wyswietlanie multipleksowe<br />{<br />DDRB |= (A1 | B1 | C1 | D1); //Ustawienie DDRB jako wyjscia<br />DDRC |= (LED1_PIN | LED2_PIN | LED3_PIN); // ustawienie DDRC jako wyjscia<br /><br />BLANK;//wygaszenie liczb<br />ALL_LED_OFF;//wygaszenie wyswietlaczy<br /><br />//Konfiguracja TIMER2 Atmega8<br />TCCR2 |= (1 &lt;&lt; WGM21); //ustawienie timera w tryb CTC<br />TCCR2 |= (1 &lt;&lt; CS22 )|(1 &lt;&lt; CS21); //ustawienie preskalera na 256<br />OCR2 = 208; //wypelnienie rejestru porównawczego dla uzyskania 150hz<br />//TCCR2 |=(1 &lt;&lt; CS22)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS20); //preskaler 1024<br />//OCR2 = 130; //60hz<br />TIMSK |= (1 &lt;&lt; OCIE2); //zezwolenie na przerwanie po przepelnieniu licznika<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t licznik = 1; //zmienna do przelaczania wyswietlaczy<br /><br />//PORTC = ~licznik;<br />PORTC = (PORTC &amp; ~licznik);<br />//PORTC = (PORTC &amp; 0xF0) | (~licznik &amp; 0x0F);<br /><br />if(licznik == 32)<br />ONE1;<br />else if (licznik == 64)<br />TWO1;<br />else if (licznik == 128)<br />THREE1;<br /><br />licznik &lt;&lt;= 1;<br />if(licznik &gt; 128)<br />licznik = 1;<br />}<br />[/syntax]<br /><br />[syntax=c]<br />//led.h<br /><br />#ifndef LED_H_<br />#define LED_H_<br /><br />//Definicja cyfr i pinów wyjść 4543 #1<br />#define A1 _BV(PB0)<br />#define B1 _BV(PB1)<br />#define C1 _BV(PB2)<br />#define D1 _BV(PB3)<br /><br />#define A1_ON PORTB |= A1<br />#define B1_ON PORTB |= B1<br />#define C1_ON PORTB |= C1<br />#define D1_ON PORTB |= D1<br /><br />#define A1_OFF PORTB &amp;= ~A1<br />#define B1_OFF PORTB &amp;= ~B1<br />#define C1_OFF PORTB &amp;= ~C1<br />#define D1_OFF PORTB &amp;= ~D1<br /><br />#define BLANK PORTB &amp;= ~(A1 | B1 | C1 | D1)<br />#define ONE1 PORTB |= (A1)<br />#define TWO1 PORTB |= (B1)<br />#define THREE1 PORTB |= (A1 | B1)<br />#define FOUR1 PORTB |= (C1)<br />#define FIVE1 PORTB |= (A1 | C1)<br />#define SIX1 PORTB |= (B1 | C1)<br />#define SEVEN1 PORTB |= (A1 | B1 | C1)<br />#define EIGHT1 PORTB |= (D1)<br />#define NINE1 PORTB |= (A1 | D1)<br />#define ZERO1 PORTB &amp;= ~(A1 | B1 | C1 | D1)<br /><br />//definicje portów/włączania poszczególnych wyswietlaczy<br />#define LED1_PIN _BV(PC3) //setki<br />#define LED2_PIN _BV(PC4) //dziesiatki<br />#define LED3_PIN _BV(PC5) //jednosci<br /><br />#define LED1_ON PORTC &amp;=~LED1_PIN //podanie GND na tranzystor<br />#define LED2_ON PORTC &amp;=~LED2_PIN<br />#define LED3_ON PORTC &amp;=~LED3_PIN<br /><br />#define LED1_OFF PORTC |= LED1_PIN //podanie VCC na tranzystor<br />#define LED2_OFF PORTC |= LED2_PIN<br />#define LED3_OFF PORTC |= LED3_PIN<br /><br />#define ALL_LED_OFF PORTC |= (LED1_PIN | LED2_PIN | LED3_PIN)<br /><br />void led_init(void);<br /><br />#endif /* LED_H_ */<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 26 lut 2012, o 15:21</p><hr />
]]></content>
</entry>
</feed>