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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-11-23T17:30:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21602&amp;mode</id>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2018-11-23T17:30:59+01:00</updated>
<published>2018-11-23T17:30:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213975#p213975</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213975#p213975"/>
<title type="html"><![CDATA[Re: Przejście z Timera 8 bitowego na timer 16 bitowy, atmega]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213975#p213975"><![CDATA[
<div class="quotetitle">mako067 napisał(a):</div><div class="quotecontent"><br />Już mi się coś rozjaśnia. Żeby ustawić tryb CTC należy jedynke ustawić na WGM12, to znaczy, że trybu CTC nie można uzyskać na timer1A? Zaraz to sprawdzę, czy działa z B, nie pomyślałem o tym.<br /></div><br />Kolego nie ma czegoś takiego jak timer1A i timer1B. Jest to po prostu timer1 ale 16-bitowy więc jego rejestr TCCR został podzielony na dwa rejestry 8-bitowe czyli TCCR1A i TCCR1B. A dlaczego? bo procesor jest 8-bitowy.<br />Akurat dla trybu CTC wszystkie bity do ustawienia mamy w TCCR1B ale już dla trybu PWM może być kombinacja, że część bitów ustawiasz w TCCR1A a część w TCCR1B.<br />Pamiętaj zawsze sprawdzaj w nocie co gdzie jest a sam dla siebie porób ćwiczenia z ustawianiem różnych konfiguracji.<br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 23 lis 2018, o 17:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2018-11-22T19:33:23+01:00</updated>
<published>2018-11-22T19:33:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213946#p213946</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213946#p213946"/>
<title type="html"><![CDATA[Re: Przejście z Timera 8 bitowego na timer 16 bitowy, atmega]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213946#p213946"><![CDATA[
Już mi się coś rozjaśnia. Żeby ustawić tryb CTC należy jedynke ustawić na WGM12, to znaczy, że trybu CTC nie można uzyskać na timer1A? Zaraz to sprawdzę, czy działa z B, nie pomyślałem o tym.<br /><br /><br />Super! Udało się, już wszystko hula. Dzięki serdeczne za nakierowanie. <br /><br />Poprawiony kod, gdyby ktoś był ciekaw:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />volatile uint8_t czasowstrzymywacz=0;                   //wiem wiem - długa nazwa - początkujący proszę zmienić nazwę na timeup : )<br />int main(void){<br />//////////////////////////////////// Inicjalizacje /////////////////////////<br />    DDRC = 0xFF;                            //PORT D jako WYJscie<br />    PORTC = 0xFF;                           //ustawienie na całym PORCIE D jedynek - zgaszenie diod<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 = 255;                                                     // dodatkowy podział przez 255 (rej. przepełnienia)<br />   // TIMSK |= (1&lt;&lt;OCIE0);                            // zezwolenie na przerwanie CompareMatch<br />    TCCR1B |= (1&lt;&lt;WGM12);// tryb CTC<br />    TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);// preskaler = 1024<br />    OCR1A = 500;// dodatkowy podział przez 39 (rej. przepełnienia)<br />    TIMSK|= (1&lt;&lt;OCIE1A);<br />    sei();                                                          // włączenie globalnego zezwolenia na przerwania<br />    volatile uint8_t i=0;                           // licznik pętli w lewo<br />    volatile uint8_t j=7;                           // licznik pętli w prawo<br /><br />    uint8_t dir=0;  // kierunek biegania światełek:<br /><br />                                            //   dir=0 -&gt; w lewo<br />                                            //   dir=1 -&gt; w prawo<br /><br />    //////////////////////////////  PĘTLA NIESKOŃCZONA  ////////////////////////////////////<br />    while(1){<br />        if( czasowstrzymywacz&gt;3 ) { // Pierwsza poprawka, a co jak nam gdzieś się zapętli coś i zmienna przekroczy 4? wtedy dupa, całość stoi... : )<br />            czasowstrzymywacz=0;<br />            if( dir ) // tutaj sprawdzimy sobie kierunek &quot;mrygania&quot;<br />                PORTC = ~(1&lt;&lt;i);<br />            else<br />                PORTC = ~(1&lt;&lt;(7-i)); // małosprytna sztuczka z odwróceniem licznika.<br />            // i tutaj tyle... : )<br />            ++i; // a wiecie, że i++ zajmuje dłużej? ale tylko przy słabej optymalizacji kodu ... ; )<br />            if( i&gt;7) { // porównanie większe lub równe jest wolniejsze od większe... tak tak : )<br />                i=0;<br />                dir = !dir;<br />            }<br />        }<br />    }<br />}<br /><br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH ==========//<br />////////////////////// TUTAJ ATmega IDZIE NA CHWILKĘ NA KAWĘ /////////////////<br />ISR(TIMER1_COMPA_vect)<br />{<br />    czasowstrzymywacz++;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 22 lis 2018, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2018-11-22T19:29:44+01:00</updated>
<published>2018-11-22T19:29:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213945#p213945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213945#p213945"/>
<title type="html"><![CDATA[Re: Przejście z Timera 8 bitowego na timer 16 bitowy, atmega]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213945#p213945"><![CDATA[
bit WGM12 masz w rejestrze TCCR1B<br />to samo z bitami CS12 i CS10<br />zobacz notę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 22 lis 2018, o 19:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mako067]]></name></author>
<updated>2018-11-22T19:19:42+01:00</updated>
<published>2018-11-22T19:19:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213944#p213944</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213944#p213944"/>
<title type="html"><![CDATA[Przejście z Timera 8 bitowego na timer 16 bitowy, atmega 32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21602&amp;p=213944#p213944"><![CDATA[
Witam wszystkich, <br /><br />Chciałem zaszaleć i ustawić sobie timer 16 bitowy zamiast 8 bitowego na atmedze 32. Postępowałem zgodnie z bb dla ćwiczenia z 7 segmentowymi wyświetlaczami LED i dla 8 bit było okej, wszystko działało. Niestety po zmianie na 16, już nie działa, tzn. wyświetlacz umarł, nie jest wyświetlone nic.<br /><br />Timer 16 jest mi potrzebny, aby ustawić przełączanie cyfr w częstotliwości 1Hz, a nie jak to było w założeniach po 50 na jeden wyświetlacz. A więc po odczycie z noty katalogowej ustawiłem u siebie coś takiego:<br /><br />[syntax=c]// ustawienie TIMER0<br />TCCR1A |= (1&lt;&lt;WGM12);// tryb CTC<br />TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);// preskaler = 1024<br />OCR1A = 7812;// dodatkowy podział (rej. przepełnienia)<br />//OCF1A = 7812;<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;<br />itd....[/syntax]<br /><br />biorąc do działania TIMER1A. Niestety nic z tego. <br /><br />Próbowałem podobną sztuczkę zrobić z diodami led:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />volatile uint8_t czasowstrzymywacz=0;                   //wiem wiem - długa nazwa - początkujący proszę zmienić nazwę na timeup : )<br />int main(void){<br />//////////////////////////////////// Inicjalizacje /////////////////////////<br />    DDRC = 0xFF;                            //PORT D jako WYJscie<br />    PORTC = 0xFF;                           //ustawienie na całym PORCIE D jedynek - zgaszenie diod<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 = 255;                                                     // dodatkowy podział przez 255 (rej. przepełnienia)<br />   // TIMSK |= (1&lt;&lt;OCIE0);                            // zezwolenie na przerwanie CompareMatch<br />    TCCR1A |= (1&lt;&lt;WGM12);// tryb CTC<br />    TCCR1A |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);// preskaler = 1024<br />    OCR1A = 7812;// dodatkowy podział przez 39 (rej. przepełnienia)<br />    TIMSK|= (1&lt;&lt;OCIE1A);<br />    sei();                                                          // włączenie globalnego zezwolenia na przerwania<br />    volatile uint8_t i=0;                           // licznik pętli w lewo<br />    volatile uint8_t j=7;                           // licznik pętli w prawo<br /><br />    uint8_t dir=0;  // kierunek biegania światełek:<br /><br />                                            //   dir=0 -&gt; w lewo<br />                                            //   dir=1 -&gt; w prawo<br /><br />    //////////////////////////////  PĘTLA NIESKOŃCZONA  ////////////////////////////////////<br />    while(1){<br />        if( czasowstrzymywacz&gt;3 ) { // Pierwsza poprawka, a co jak nam gdzieś się zapętli coś i zmienna przekroczy 4? wtedy dupa, całość stoi... : )<br />            czasowstrzymywacz=0;<br />            if( dir ) // tutaj sprawdzimy sobie kierunek &quot;mrygania&quot;<br />                PORTC = ~(1&lt;&lt;i);<br />            else<br />                PORTC = ~(1&lt;&lt;(7-i)); // małosprytna sztuczka z odwróceniem licznika.<br />            // i tutaj tyle... : )<br />            ++i; // a wiecie, że i++ zajmuje dłużej? ale tylko przy słabej optymalizacji kodu ... ; )<br />            if( i&gt;7) { // porównanie większe lub równe jest wolniejsze od większe... tak tak : )<br />                i=0;<br />                dir = !dir;<br />            }<br />        }<br />    }<br />}<br /><br /><br /><br />// ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH ==========//<br />////////////////////// TUTAJ ATmega IDZIE NA CHWILKĘ NA KAWĘ /////////////////<br />ISR(TIMER1_COMPA_vect)<br />{<br />    czasowstrzymywacz++;<br />}[/syntax]<br /><br />KOD OD KOLEGI <strong>NIEBO!</strong><br /><br /><br />Lecz efekt podobny, ciemno. <br /><br />Czy ma ktoś pomysł co zrobiłem źle?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=256">mako067</a> — 22 lis 2018, o 19:19</p><hr />
]]></content>
</entry>
</feed>