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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2011-10-26T21:50:08+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=35&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2011-10-26T21:50:08+01:00</updated>
<published>2011-10-26T21:50:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=35&amp;p=149#p149</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=35&amp;p=149#p149"/>
<title type="html"><![CDATA[Re: Multipleksowanie LED na Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=35&amp;p=149#p149"><![CDATA[
Po pierwsze to zastanawia mnie bardzo dlaczego postanowił Pan w procku<br />ATmega8  &quot;zmarnować&quot; na taki cel aż 16-bitowy timer sprzętowy (Timer1)<br />????  Szkoda  bo  8-bitowy  wystarczyłby w zupełności. No ale jeśli to<br />tylko dla testów to rozumiem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Generalnie  zabiera  Pan  się  za  przesiadkę na inny procek i na inny<br />timer  tymczasem,  pierwsza  linia  w prezentowanym kodzie, nadesłanym<br />przez Pana to:<br /><br />[syntax=cpp]// ustawienie TIMER0[/syntax]<br /><br />a  zwracałem  w książce uwagę, że prawidłowe komentarze w programie są<br />nie  mniej  ważne  niż sam kod, a szczególnie gdy pracujemy w zespole.<br />Wprawdzie  tu  nie pracuje Pan w zespole - jednak .... podsyła Pan kod<br />komuś  innemu  do  sprawdzenia (mowa tutaj o mnie) .... czyli poniekąd<br />tworzymy  mini zespół. No i co ja widzę? komentarz, że jednak dokonuje<br />Pan ustawień dla Timer0 a nie Timer1.<br /><br />hmmm  to  że  chodziło Panu o Timer1 wywnioskowałem na szybko (ale być<br />może błędnie chociażby z nazwy wektora przerwania jakiego Pan użył)<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ISR(TIMER1_COMPA_vect)</div><br /><br />Niestety  w  inicjalizacji jest już totalny &quot;MISZ-MASZ&quot; jeśli chodzi o<br />próbę dotarcia co Pan miał na myśli, bo:<br /><br />wprawdzie  ustawia  Pan  tryb  CTC  dla Timera1 (patrząc na nazwę bitu<br /><strong>WGM12</strong>) ale czy spojrzał Pan w jakim rejestrze Pan ten bit ustawia ????<br />dlaczego  w <strong>TCCR0 </strong>???? przecież nawet nie zaglądając do noty PDF widać<br />że to rejestr konfiguracyjny Timer0 a nie Timer1<br /><br />Zatem  po takiej linijce to ja już do końca nie wiem czy chodziło Panu<br />o Timer0 czy Timer1.<br /><br />Patrząc  jednak  na  koleją  linie - jeszcze bardziej się upewniam, że<br />może  chodziło  Panu  o Timer0 gdyż preksaler bity <strong>CS02 </strong>i <strong>CS00 </strong>ustawia<br />Pan  w  rejerze  TCCR0  znowu  od Timera0 i to jeszcze nazwy bitów też<br />pochodzą z Timera0. Bo dla Timera1 miałyby one nazwy <strong>CS12 </strong>i <strong>CS10</strong><br /><br />Widzi Pan różnicę ???<br /><br />Jeśli  nie  to  bardzo  jednak  proszę  otworzyć sobie notę PDF procka<br />ATmega8 (ja właśnie to zrobiłem) i zajrzeć w jakich rejestrach są bity<br />konfiguracyjne  dotyczące  Timer1  i  jakie  tam  są nazwy tych bitów.<br />Niestety  bez noty daleko nie zajedziemy - musi ona być wciąż pod ręką<br />o czym wciąż piszę w książce <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Co  ciekawe  w  kolejnej linii już Pan sprawdził że rejestr porównania<br />dla  Timera1  to <strong>OCR1A </strong>a nie <strong>OCR0 </strong>;) więc tu chyba zajrzał Pan do noty<br />PDF ???<br /><br />Dobrze  to na razie tyle moich podpowiedzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie chcę od razu podawać<br />gotowego rozwiązania a jedynie naprowadzić Pana.<br /><br />Jednak  jeśli dalej się nie uda to proszę śmiało pisać podpowiem dalej<br />OK?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 paź 2011, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymwoj]]></name></author>
<updated>2011-10-26T20:19:51+01:00</updated>
<published>2011-10-26T20:19:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=35&amp;p=147#p147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=35&amp;p=147#p147"/>
<title type="html"><![CDATA[Multipleksowanie LED na Atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=35&amp;p=147#p147"><![CDATA[
Chciałbym zaadoptować kod programu z książki, dotyczący multipleksowania, na Atmega 8.<br />Po przeczytaniu (tzn. dokładnym przejrzeniu- nie znam j. angielskiego)noty PDF, przerobiłem kod książkowy i nie działa<br /> mi timer w trybie CTC.Co zrobiłem źle? <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><br /><br />[syntax=cpp]// ustawienie TIMER0<br />TCCR0 |= (1&lt;&lt;WGM12);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR1A = 39;// dodatkowy podział przez 39 (rej. przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE1A);// zezwolenie na przerwanie CompareMatch<br />}<br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH<br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint8_t licznik=1;// zmienna do przełączania kolejno anod wyrwietlacza<br /><br />LED_ANODY = (LED_ANODY &amp; 0xF8);<br /><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] );<br />//else if(licznik==16) LED_DATA = pgm_read_byte( &amp;cyfry[cy5] );<br />//else if(licznik==32) LED_DATA = pgm_read_byte( &amp;cyfry[cy6] );<br /><br />LED_ANODY = (LED_ANODY &amp; 0xF8) | (~licznik &amp; 0x7);// 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;4) licznik = 1;// jeśli licznik większy niż 8 to ustaw na 1<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=86">szymwoj</a> — 26 paź 2011, o 20:19</p><hr />
]]></content>
</entry>
</feed>