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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-24T11:12:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8244&amp;mode</id>
<entry>
<author><name><![CDATA[ps19]]></name></author>
<updated>2014-08-24T11:12:17+01:00</updated>
<published>2014-08-24T11:12:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92675#p92675</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92675#p92675"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92675#p92675"><![CDATA[
Mała poprawka do kodu kolegi QuadMan:<br /><br />// Nie moze byc *100, jesli nie chcesz przekroczyc zakresu uint16_t<br /><br />Może być *255 (nawet *256 wystarczy dodać if`a aby nie przekroczyć wartości) -zakres uint16_t to 0-65 535<br /><br /><!-- m --><a class="postlink" href="http://pl.wikipedia.org/wiki/Liczba_ca%C5%82kowita_%28typ_danych%29" >http://pl.wikipedia.org/wiki/Liczba_ca% ... _danych%29</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=230">ps19</a> — 24 sie 2014, o 11:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ALEKS]]></name></author>
<updated>2014-08-24T09:40:03+01:00</updated>
<published>2014-08-24T09:40:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92664#p92664</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92664#p92664"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92664#p92664"><![CDATA[
Serdecznie dziękuje wszystkim,<br /><br />Po wprowadzeniu zmian QuadMan-a i krish-a wszstko płynnie śmiga aczkolwiek przy potencjometrze ustawionym na krańcową wartość, program się zacinał(nie reagował na zmiane polozenia potencjometru).<br />Teraz wiem jaka jest przyczyna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Wystarczy dodać odpowiednio dużą wartość w rejestrze OCR1A w obsłudze przerwania od ADC:<br /><br />OCR1A = ADCW*9+35;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3226">ALEKS</a> — 24 sie 2014, o 09:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2014-08-23T22:45:28+01:00</updated>
<published>2014-08-23T22:45:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92643#p92643</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92643#p92643"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92643#p92643"><![CDATA[
Witam,<br /><br /><div class="quotetitle">ALEKS napisał(a):</div><div class="quotecontent"><br />.....Może ktoś wie jak to rozwiązać programowo?<br /></div><br /><br />mówisz i masz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />:[syntax=c]/*<br />     * main.c<br />     *<br />     *  Created on: 21-08-2014<br />     *      Author: ALEX<br />     */<br /><br /><br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br /><br /><br />    #define LED_PIN (1&lt;&lt;PC7)                                //diodA<br />    #define LED_TOG PORTC ^= LED_PIN                //zmiana stanu diody<br />    #define LED_ON PORTC |= LED_PIN         //zmiana stanu diody<br />    #define LED_OFF PORTC &amp;= ~LED_PIN               //zmiana stanu diody<br /><br />    #define DIR_PIN (1&lt;&lt;PC6)                                //kierunek obrotow silnika<br />    #define DIR_TOG PORTC ^= DIR_PIN                //zmiana kierunku obrotow<br />    #define DIR_PIN_R PORTC |= DIR_PIN;<br />    #define DIR_PIN_L PORTC &amp;= ~DIR_PIN;<br /><br /><br />    #define EN_PIN (1&lt;&lt;PC5)                         //zezwolenie na prace silnika<br />    #define EN_PIN_OFF PORTC |= EN_PIN;<br />    #define EN_PIN_ON PORTC &amp;= ~EN_PIN;     //Niepodłączone oznacza zezwolenie pracy dla sterownika.<br />    #define EN_TOG PORTC ^= EN_PIN          //zmiana stanu pinu zezwolenia<br /><br />    volatile uint16_t wynik;<br />    int main(void){<br /><br /><br />            EN_PIN_ON;<br />            DDRC |= LED_PIN;<br />            DDRC |= EN_PIN;<br />            EN_PIN_ON;<br />            ///////////////Timer od przepełnienia///////////////////////<br />                    TCCR1B |= (1&lt;&lt;WGM12);                           //tryb ctc<br />                    //TCCR1A |= (1&lt;&lt;COM1A0);<br />                    TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);          //preskaler 64<br />                    OCR1A = 40;                                             //przerwanie co 5Hz co 200ms<br />                    TIMSK |= (1&lt;&lt;OCIE1A);                           //enable timer interrupts<br /><br />                    //////////////////free running mode////////////////////////////////////////<br />                    ADCSRA |= (1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS2);             //preskaler 128<br />                    ADMUX |= (1&lt;&lt;REFS0);                                                    //vcc jako zrodlo odniesienia<br />                    ADCSRA |= 1&lt;&lt;ADIE;                                                              //wlacznie przerwanod adc<br />                    ADCSRA |= 1&lt;&lt;ADEN;                                                              //wlaczenie adc<br />                    ADMUX = (ADMUX &amp; 0xF8) | 6;                                             //pomiar na porcie PA6<br /><br />                    sei();<br /><br />                    ADCSRA |= 1&lt;&lt;ADSC;                                                              //start pomiaru<br /><br /><br />            while (1) {<br /><br /><br /><br />            }<br />    }<br /><br /><br />    ISR(TIMER1_COMPA_vect){<br /><br />            LED_TOG;<br />            ADCSRA |= 1&lt;&lt;ADSC;                     //start pomiaru<br /><br />    }<br /><br /><br />    ISR(ADC_vect)<br />    {<br /><br />    wynik=ADCW;<br />    OCR1A=wynik*50;// Nie moze byc *100, jesli nie chcesz przekroczyc zakresu uint16_t<br /><br />    }[/syntax]<br /><br />Priorytety przerwań w AVR-ach: umówmy się że ich nie ma <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />. Zresztą, ja w tego typu operacjach zawsze stosuję jakieś uzależnienia czasowe i ciągi zdarzeń typu -&gt; pomiar, interpretacja... coś tam. Tu zastosowałem najprostsze z możliwych rozwiązań: Kolejny pomiar ADC na pewno wykona się szybciej, niż nastąpi następne przerwanie od Compare MatchTimera 1. Z przepełnieniem zakresu już Ci kolega powyżej napisał.<br /><br />Pozdrawiam serdecznie, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 23 sie 2014, o 22:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-08-23T22:44:17+01:00</updated>
<published>2014-08-23T22:44:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92642#p92642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92642#p92642"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92642#p92642"><![CDATA[
Witam<br /><div class="quotetitle">ALEKS napisał(a):</div><div class="quotecontent"><br />Czy są jakieś inne sposoby generowania częstotliwości w zależności od pomiaru napięcia?<br /></div><br />Można np.: porównywać w Timerze programowym ADC do jakiegoś &quot;m&quot;<br />[syntax=c]{<br />m++;<br />if (m&gt;ADC) <br />{LED_TOG; m=0;}<br />}[/syntax]<br />...napisałem tak poglądowo, tak jak ja bym się za to zabierał.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 23 sie 2014, o 22:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2014-08-23T22:05:03+01:00</updated>
<published>2014-08-23T22:05:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92641#p92641</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92641#p92641"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92641#p92641"><![CDATA[
Rejestr OCR1A jest 16-bitowy.<br />Wykonując operację:<br />   OCR1A=wynik*100;<br />przepełniasz ten rejestr dla pewnych wartości zmiennej &quot;wynik&quot; ( możesz to sobie obliczyć).<br />W ADCW będzie maksymalnie liczba 1023 ( rozdzielczość 10 bitowa ADC)<br />czyli 1023*100=1 023 000<br />a rejestr OCR1A mieści tylko liczbę 65 535.<br />jeżeli chcesz wykorzystać &quot;cały rejestr&quot; to można zmienną &quot;wynik&quot; pomnożyć maksymalnie przez:<br />np.<br /> maksymalny wynik z ADC rozpisany binarnie: <br /> 0000 0011 1111 1111 &lt;&lt; 6 <br /> co wyniesie: <br /> 1111 1111 1100 0000=0xFFC0<br /><br />Wniosek- wypróbuj operację:<br />OCR1A=wynik&lt;&lt;6;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 23 sie 2014, o 22:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ALEKS]]></name></author>
<updated>2014-08-23T20:29:44+01:00</updated>
<published>2014-08-23T20:29:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92633#p92633</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92633#p92633"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92633#p92633"><![CDATA[
Taki przetwornik jest to jakaś opcja ale w moim przypadku wprowadza spore ograniczenia.<br /><br />Może ktoś wie jak to rozwiązać programowo?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3226">ALEKS</a> — 23 sie 2014, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-23T20:16:28+01:00</updated>
<published>2014-08-23T20:16:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92631#p92631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92631#p92631"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92631#p92631"><![CDATA[
W pełni sprzętowo:<br /><!-- m --><a class="postlink" href="http://www.tme.eu/pl/katalog/#id_category=100579&amp;s_field=niski_prog&amp;s_order=ASC&amp;visible_params=2%2C367%2C35%2C10%2C98%2C96%2C365%2C144%2C36&amp;used_params=367%3A56861%3B&amp;page=1&amp;products_with_stock=1" >http://www.tme.eu/pl/katalog/#id_catego ... th_stock=1</a><!-- m --><br /><!-- m --><a class="postlink" href="https://www.google.pl/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=7&amp;ved=0CFQQFjAG&amp;url=http%3A%2F%2Felportal.pl%2Fpdf%2Fk04%2F61_087.pdf&amp;ei=oeb4U4KOD6mh0QWttYGACA&amp;usg=AFQjCNGJWZkqiTaXbMXCRcpG33Jj7UdttQ&amp;sig2=FViOLudDqAF3ZiIU0kKVSQ&amp;bvm=bv.73612305,d.d2k&amp;cad=rja" >https://www.google.pl/url?sa=t&amp;rct=j&amp;q= ... 2k&amp;cad=rja</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 23 sie 2014, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ALEKS]]></name></author>
<updated>2014-08-23T19:55:10+01:00</updated>
<published>2014-08-23T19:55:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92627#p92627</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92627#p92627"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92627#p92627"><![CDATA[
Dziękuje za odpowiedź, ale niestety nic się nie poprawiło <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Czy są jakieś inne sposoby generowania częstotliwości w zależności od pomiaru napięcia?<br />Docelowo program ma obsługiwać sterownik silnika krokowego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3226">ALEKS</a> — 23 sie 2014, o 19:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-23T18:27:59+01:00</updated>
<published>2014-08-23T18:27:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92602#p92602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92602#p92602"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92602#p92602"><![CDATA[
Może powodowane jest to brakiem atomowości dostępu do zmiennej &quot;wynik&quot;. Można ten problem obejść za pomocą makra &quot;ATOMIC_BLOCK&quot;, albo w poniższy sposób, usuwając całą zawartość pętli głównej &quot;while&quot; i zamieniając ciało funkcji obsługi przerwania na:<br /><br />[syntax=c]ISR(ADC_vect)<br />{<br />OCR1A = 100 * ADCW;<br />ADCSRA |= 1&lt;&lt;ADSC;//start pomiaru<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 23 sie 2014, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ps19]]></name></author>
<updated>2014-08-23T18:14:50+01:00</updated>
<published>2014-08-23T18:14:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92598#p92598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92598#p92598"/>
<title type="html"><![CDATA[Re: ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92598#p92598"><![CDATA[
1. Wynik mnóż x256 wtedy będziesz miał pełny zakres timera<br />2. Dodaj w pętli if(OCR1A &gt;= 65536) OCR1A = 65535;<br />3. W pętli wyłącz diodę a w przerwaniu ją włączaj - przez LED_TOG mogą dziać się te cyrki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=230">ps19</a> — 23 sie 2014, o 18:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ALEKS]]></name></author>
<updated>2014-08-23T17:46:20+01:00</updated>
<published>2014-08-23T17:46:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92594#p92594</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92594#p92594"/>
<title type="html"><![CDATA[ADC free runinng--&gt;dziwne zachowanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8244&amp;p=92594#p92594"><![CDATA[
Witam,<br /><br />Napisałem program, który zmienia częstotliwość mrugania diody w zależności od położenia potencjometru.<br />Program polega na tym, że dioda nieregularnie gaśnie co jakiś czas(wygląda jakby procek się zacinał).<br /><br />Wydawało mi się że wiąże się to z priorytetami przerwań ale ADC ma mniejszy priorytet niż TIMER1.<br /><br /><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 21-08-2014<br /> *      Author: ALEX<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />#define LED_PIN (1&lt;&lt;PC7)//diodA<br />#define LED_TOG PORTC ^= LED_PIN//zmiana stanu diody<br />#define LED_ON PORTC |= LED_PIN//zmiana stanu diody<br />#define LED_OFF PORTC &amp;= ~LED_PIN//zmiana stanu diody<br /><br />#define DIR_PIN (1&lt;&lt;PC6)//kierunek obrotow silnika<br />#define DIR_TOG PORTC ^= DIR_PIN//zmiana kierunku obrotow<br />#define DIR_PIN_R PORTC |= DIR_PIN;<br />#define DIR_PIN_L PORTC &amp;= ~DIR_PIN;<br /><br /><br />#define EN_PIN (1&lt;&lt;PC5)//zezwolenie na prace silnika<br />#define EN_PIN_OFF PORTC |= EN_PIN;<br />#define EN_PIN_ON PORTC &amp;= ~EN_PIN;//Niepodłączone oznacza zezwolenie pracy dla sterownika.<br />#define EN_TOG PORTC ^= EN_PIN//zmiana stanu pinu zezwolenia<br /><br />volatile uint16_t wynik;<br />int main(void){<br /><br /><br />EN_PIN_ON;<br />DDRC |= LED_PIN;<br />DDRC |= EN_PIN;<br />EN_PIN_ON;<br />///////////////Timer od przepełnienia///////////////////////<br />TCCR1B |= (1&lt;&lt;WGM12);//tryb ctc<br />//TCCR1A |= (1&lt;&lt;COM1A0);<br />TCCR1B |= (1&lt;&lt;CS11)|(1&lt;&lt;CS10);//preskaler 64<br />OCR1A = 40;//przerwanie co 5Hz co 200ms<br />TIMSK |= (1&lt;&lt;OCIE1A);//enable timer interrupts<br /><br />//////////////////free running mode////////////////////////////////////////<br />ADCSRA |= (1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0)|(1&lt;&lt;ADPS2);//preskaler 128<br />ADMUX |= (1&lt;&lt;REFS0);//vcc jako zrodlo odniesienia<br />ADCSRA |= 1&lt;&lt;ADIE;//wlacznie przerwanod adc<br />ADCSRA |= 1&lt;&lt;ADEN;//wlaczenie adc<br />ADMUX = (ADMUX &amp; 0xF8) | 6;//pomiar na porcie PA6<br /><br />sei();<br /><br />ADCSRA |= 1&lt;&lt;ADSC;//start pomiaru<br /><br /><br />while (1) {<br /><br /><br /><br /><br />OCR1A=wynik*100;<br /><br /><br /><br />}<br />}<br /><br /><br />ISR(TIMER1_COMPA_vect){<br /><br />LED_TOG;<br /><br />}<br /><br /><br />ISR(ADC_vect)<br />{<br /><br />wynik=ADCW;<br /><br /> ADCSRA |= 1&lt;&lt;ADSC;//start pomiaru<br />}[/syntax]<br /><br />Filmik przedstawiający działanie powyższego kodu:<br />[youtube]rxUeT1Y8rnI&amp;feature=youtu.be[/youtube]<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=rxUeT1Y8rnI&amp;feature=youtu.be" >https://www.youtube.com/watch?v=rxUeT1Y ... e=youtu.be</a><!-- m --><br /><br />Dodam, że działam na Atmega32 i taktowanie 16MHz.<br />Proszę o pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3226">ALEKS</a> — 23 sie 2014, o 17:46</p><hr />
]]></content>
</entry>
</feed>