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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-04-12T18:34:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=14801&amp;mode</id>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-04-12T18:34:17+01:00</updated>
<published>2016-04-12T18:34:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=158373#p158373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=158373#p158373"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=158373#p158373"><![CDATA[
Musiałem przerwać prace nad moim projektem, ale wracam do niego, jak myślicie czy można mierzyć odległości za pomocą 3 czujników HC-SR04 poprzec ICP1?<br /><br />- wejścia czujników Trig podpinam pod wyjścia procesora,<br />- wyjścia czujników Echo czujników podpinam przez diody do wejścia procesora ICP1,<br />- podaję impuls na wejście Trig pierwszego czujnika i odczytuję długość impulsu z pierwszego czujnika<br />- itd z pozostałych czujników<br />- czy moja koncepcja jest słuszna?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 12 kwi 2016, o 18:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-12T08:07:57+01:00</updated>
<published>2016-03-12T08:07:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156006#p156006</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156006#p156006"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156006#p156006"><![CDATA[
Witam<br /><div class="quotetitle">Hannibal9 napisał(a):</div><div class="quotecontent"><br />jeżeli przesuniesz wynik 0 8 bitów w lewo<br /></div><br />...to tak jakbyś pomnożył przez 256 - czyli w sumie Twój zapis jest OK - taki zbieg okoliczności  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .<br />W kodzie jest <br />[syntax=c]buf_t0 ++;[/syntax]<br />czyli co jedno przerwanie ( 256 tyknięć ) jest zwiększane o jeden. Jeśli wystąpiło kilka przerwań to wynikiem sumarycznym tyknięć jest te <strong>klika * 256</strong> co jest jednoznaczne z <strong>kilka&lt;&lt;8</strong><br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 12 mar 2016, o 08:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-12T07:25:17+01:00</updated>
<published>2016-03-12T07:25:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156005#p156005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156005#p156005"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=156005#p156005"><![CDATA[
<div class="quotetitle">APAP75 napisał(a):</div><div class="quotecontent"><br />Jeśli impuls może być podany na inny port niż INT0, a chcesz bardzo dokładnie zmierzyć jego długość, proponuję wykorzystać mechanizm input capture dla timera.<br /><br />W przerwaniu musiałbyś zmienić bit ICES.<br /></div><br />Taki sposób już przerobiłem, chodzi bardzo dobrze.<br /><br />Do czego służy bit TOV1?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 34 minutach ]</span></strong><br /><br />[syntax=c]( buf_t0&lt;&lt;8)[/syntax], a ten zapis?<br />rozumiem że przerwania wykonywane są z częstotliwością 8000000/64/256, jeżeli przesuniesz wynik 0 8 bitów w lewo to pozbywasz się tego dzielnika 256 - tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 12 mar 2016, o 07:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-11T16:02:57+01:00</updated>
<published>2016-03-11T16:02:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155966#p155966</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155966#p155966"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155966#p155966"><![CDATA[
Witam<br /><div class="quotetitle">Hannibal9 napisał(a):</div><div class="quotecontent"><br />Ten warunek if to do sprawdzenia z jakim zboczem powodującym przerwanie mamy do czynienia?<br /></div><br />Dokładnie; dla uproszczenia zapisu jest tam<br />[syntax=c]#define INT0_pin (1&lt;&lt;PD2)<br />#define INT0_down !(PIND &amp; INT0_pin)    // L na INT0[/syntax]<br />a wiesz, że jest to makro sprawdzające czy na danym PIN'ie jest stan niski - tak samo jak dla klawiszy bo to bez różnicy.<br />Cała robota  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  wykonywana jest w zależności od tego jaki stan wywołał przerwanie - a któryś musiał bo ono wystąpiło.<br />Po wejściu w przerwanie jest sprawdzany poziom logiczny wejścia (bo można to robić - a z uporem maniaka odsyłam...) i jeśli jest stan niski &quot;włazi&quot; do:<br />[syntax=c]if(INT0_down){<br /> <br />                timer0_stop;<br />                dziesiatki = TCNT0;<br />                flaga =1;<br />                }[/syntax]<br />zatrzymywany jest TIMER0 który liczył nam tyknięcia TCNT0, odczytana jest wartość TCNT0 i ustawiona flaga. Jeśli poziom jest inny ( czyli wysoki ) następuje:<br />[syntax=c]else {<br />TCNT0 = 0;<br />                buf_t0 =0;<br />                timer0_start;}[/syntax]<br />wyzerowanie, wyzerowanie i wio  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Użycie flagi jak i buf_t0 jest chyba jasne.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 mar 2016, o 16:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[APAP75]]></name></author>
<updated>2016-03-11T12:25:40+01:00</updated>
<published>2016-03-11T12:25:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155949#p155949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155949#p155949"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155949#p155949"><![CDATA[
Jeśli impuls może być podany na inny port niż INT0, a chcesz bardzo dokładnie zmierzyć jego długość, proponuję wykorzystać mechanizm input capture dla timera.<br /><br />W przerwaniu musiałbyś zmienić bit ICES.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6195">APAP75</a> — 11 mar 2016, o 12:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-11T12:12:40+01:00</updated>
<published>2016-03-11T12:12:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155947#p155947</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155947#p155947"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155947#p155947"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />Witam<br />Tak szczerze mówiąc to nie wiem jak byś to miał robić za pomocą ADC - ale nie znam tematu; być może tak się robi tylko zastanawia mnie sposób pomiaru bo jego częstotliwość jest ograniczona. Jeśli jeszcze nic nie robiłeś na tych czujnikach to może<a href="http://www.jarzebski.pl/arduino/czujniki-i-sensory/ultradzwiekowy-czujnik-odleglosci-hc-sr04.html"  class="postlink">T U T A J</a> coś się dowiesz. Co prawda kod &quot;nie po naszemu&quot; ale dobrze komentowany wię można podejrzeć. Tak nawiasem mówiąc na naszym forum często jest jak w kryminale - na samym końcu dowiadujemy się kto jest głównym winowajcą  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  - może trzeba było zacząć od nakreślenia celu, a nie od luźnego zagadnienia &quot;Pomiar czasu trwania impulsu&quot;. <br />Pięć czujników - ( jak wspominałem nie znam tematu ) tutaj chyba trzeba wykorzystać PCINT - więc jednak odsyłam do (najlepiej od początku ) do cz.III przerwań.<br /><br />Pozdr.<br /></div><br /><br />Za pomocą ADC, można to zrobić ale za pomocą innych czujników które na wyjściu dają napięcie proporcjonalne do odległości, są sporo droższe niestety.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 11 minutach ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />ISR(INT0_vect){<br />        if(INT0_down)<br /></div><br /><br />Ten warunek if to do sprawdzenia z jakim zboczem powodującym przerwanie mamy do czynienia? <br /><br />Twój kod jest bardzo prosty, a przez to bardzo skomplikowany <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />, aby go pojąć trzeba myśleć jak sam procesor a to jeszcze nie mój poziom <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 11 mar 2016, o 12:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-11T11:41:14+01:00</updated>
<published>2016-03-11T11:41:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155943#p155943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155943#p155943"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155943#p155943"><![CDATA[
Witam<br />Tak szczerze mówiąc to nie wiem jak byś to miał robić za pomocą ADC - ale nie znam tematu; być może tak się robi tylko zastanawia mnie sposób pomiaru bo jego częstotliwość jest ograniczona. Jeśli jeszcze nic nie robiłeś na tych czujnikach to może<a href="http://www.jarzebski.pl/arduino/czujniki-i-sensory/ultradzwiekowy-czujnik-odleglosci-hc-sr04.html"  class="postlink">T U T A J</a> coś się dowiesz. Co prawda kod &quot;nie po naszemu&quot; ale dobrze komentowany wię można podejrzeć. Tak nawiasem mówiąc na naszym forum często jest jak w kryminale - na samym końcu dowiadujemy się kto jest głównym winowajcą  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  - może trzeba było zacząć od nakreślenia celu, a nie od luźnego zagadnienia &quot;Pomiar czasu trwania impulsu&quot;. <br />Pięć czujników - ( jak wspominałem nie znam tematu ) tutaj chyba trzeba wykorzystać PCINT - więc jednak odsyłam do (najlepiej od początku ) do cz.III przerwań.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 mar 2016, o 11:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-11T11:05:44+01:00</updated>
<published>2016-03-11T11:05:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155938#p155938</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155938#p155938"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155938#p155938"><![CDATA[
Panowie, Koledzy dziękuję za pomoc, moje &quot;wypociny&quot; są związane z pewnym małym projekcikiem, w którym mam zamiar użyć 5 czujników odległości HC-SR04. jestem początkujący w uC i w C,  tak się zastanawiam czy nie łatwiej było by zakupią 5 czujników analogowych ( są sporo droższe) i obsłużyć je przez ADC, czy próbować z tymi HC.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 11 mar 2016, o 11:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-11T00:58:12+01:00</updated>
<published>2016-03-11T00:58:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155909#p155909</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155909#p155909"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155909#p155909"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />To było do kolegi Hannibal9...<br /></div><br />Wiem, ja tylko uzupełniłem to co napisałeś o &quot;moim&quot; programie.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 11 mar 2016, o 00:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-10T23:38:24+01:00</updated>
<published>2016-03-10T23:38:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155901#p155901</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155901#p155901"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155901#p155901"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...a te _delay'e w kodzie są testowe - po wyrżnięciu i podłączeniu &quot;normalnego&quot; przebiegu liczy dość-dość<br /></div><br />To było do kolegi Hannibal9 i jego uwag co do wyników. Bo te jego testy w takiej wersji kodu, były jak gonienie własnego ogona przez kota <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 10 mar 2016, o 23:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-10T23:24:56+01:00</updated>
<published>2016-03-10T23:24:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155897#p155897</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155897#p155897"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155897#p155897"><![CDATA[
Witam<br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />że przerwania następują co 256 * zadana rozdzielczość<br /></div><br /> ...a te _delay'e w kodzie są testowe - po wyrżnięciu i podłączeniu &quot;normalnego&quot; przebiegu liczy dość-dość. Dodatkowo grzebiąc przy początkowym TCNT0 można uzyskać dowolne ( w rozsądnych granicach  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ) minimalne długości mierzonych czasów i w rozsądnej rozdzielczości.<br />A no właśnie, nie wiem czy mi umknęło - jaka rozdzielczość Cię interesuje, bo jak startujesz z us a sprawdzasz sek....<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 10 mar 2016, o 23:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-10T23:09:37+01:00</updated>
<published>2016-03-10T23:09:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155896#p155896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155896#p155896"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155896#p155896"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />teraz przy _delay_us(50); pokazuje mi wynik 7 po pomnożeniu przez 10 daje 70 us<br />a przy _delay_ms(2); pokazuje mi wynik 274 po pomnożeniu przez 10 daje 2740 us<br /></div><br />Nie możesz zmierzyć czasu delaya, bo nie wiesz ile on trwa. Pętla robiona przez kompilator ma trwać przez zadany czas. Ale ty robiąc przerwania co 10us zaburzasz ten czas, bo delay jest wstrzymywany na czas przerwania. Czyli delay trwa zadany czas plus czas wszystkich przerwań w tym czasie.<br /><br />Sposób podany przez kicajka jest o tyle lepszy, że przerwania następują co 256 * zadana rozdzielczość, czyli robiąc to samo masz 256 razy mniej przerwań <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 10 mar 2016, o 23:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-10T18:33:13+01:00</updated>
<published>2016-03-10T18:33:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155857#p155857</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155857#p155857"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155857#p155857"><![CDATA[
Witam<br /><div class="quotetitle">Hannibal9 napisał(a):</div><div class="quotecontent"><br />Mirek nakręcił tyle poradników<br /></div><br />Wiem - szczerze mówiąc to ja też nie mogę tego ogarnąć  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  - może by Mu jakieś badania antydopingowe... - ale co jo godom, co jo godom; wnet pójdę na emeryturę, słuchawki na uszy, okulary na oczy... tylko czy będę pamiętał na czym skończyłem?  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 10 mar 2016, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-10T18:16:26+01:00</updated>
<published>2016-03-10T18:16:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155855#p155855</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155855#p155855"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155855#p155855"><![CDATA[
[syntax=xml]tam byś to znalazł - ale po co? ;)[/syntax]<br /><br />Mirek nakręcił tyle poradników a niemalże w każdym oprócz głównego tematu porusza jeszcze tyle ciekawych pobocznych rzeczy, że trudno wiedzieć co jest we wszystkich, dzięki za kod pokombinuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 10 mar 2016, o 18:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-10T17:32:15+01:00</updated>
<published>2016-03-10T17:32:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155850#p155850</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155850#p155850"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155850#p155850"><![CDATA[
Witam<br />Jeśli chcesz, to pobaw się w inny sposób pomiaru tego czasu - niech ilość cykli odmierza sam uC bez wyciskania ostatnich soków z TIMER'a0.<br />Tu masz taki mały, poglądowy kod jak można to wykonać; wszystko jest raczej zawarte w komentarzach, ale jak by coś to ( jak to mówią dwie pluskwy ) jesteśmy w kontakcie  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include  &quot;LCD/lcd44780.h&quot;<br /><br /><br />#define timer0_start  TCCR0 |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00)       // preskaler 64 - przerw co 8us<br />#define timer0_stop   TCCR0 &amp;= ~((1&lt;&lt;CS01)|(1&lt;&lt;CS00))<br /><br />#define INT0_pin (1&lt;&lt;PD2)// makrodefinicja pinu INT0<br />#define INT0_down !(PIND &amp; INT0_pin)// L na INT0<br /><br />#define time_PIN    (1&lt;&lt;PD0)               // wyjście do testowania INT0<br />#define OUT_H        PORTD |=   (time_PIN) // stan wysoki<br />#define OUT_L        PORTD &amp;= ~ (time_PIN) // stan niski<br /><br />#define led_PIN     (1&lt;&lt;PD7)<br />#define led_on        PORTD |=   (led_PIN)<br />#define led_off       PORTD &amp;=  ~ (led_PIN)<br /><br />volatile uint8_t flaga;<br />volatile uint32_t buf_t0 ;  // licznik przepełnień TIMER0<br />volatile uint16_t dziesiatki;<br /><br />uint32_t  wynik;<br /><br />void t0_init(void);<br />void INT0_init(void);<br />void LCD_display(uint32_t wynik);<br /><br /><br /><br />int main(void){<br /><br />    DDRD |= time_PIN | led_PIN;<br /><br />   t0_init();<br />   INT0_init();<br />   lcd_init();  // inicjalizacja  LCD<br />   <br />   lcd_locate(0,1);<br />   lcd_str(&quot; CRAZY TIME  &quot;);<br />   _delay_ms(1500);<br /><br />       sei();<br /><br />        while(1){<br /><br />         OUT_H;<br />         _delay_ms(250); // mierzony czas trwania stanu wysokiego<br /><br />         OUT_L;<br />         _delay_ms(5);  // tu dałem tyle, może być cokolwiek - nie ma wpływu na pomiar<br /><br />       if(flaga){<br />               flaga =0;<br />               wynik =   ((( buf_t0&lt;&lt;8) + dziesiatki)/125) ;<br />      }  // END flaga<br /><br />        LCD_display(wynik);<br /><br /><br />}   // END while<br /><br />}      // END main<br /><br /><br />void t0_init(void){<br /><br />timer0_start ;<br /> TIMSK |= (1&lt;&lt;TOIE0);      // przerwanie od przepełnienia<br />}<br /><br /><br />void INT0_init(void){<br /><br />MCUCR |= (1&lt;&lt;ISC00); // reakcja na zmianę stanu<br />GICR  |= (1&lt;&lt;INT0);<br /><br />}<br /><br /><br />void LCD_display(uint32_t wynik){<br /> lcd_locate(0,0);<br /> lcd_str(&quot;  ms: &quot;);<br /> lcd_int (wynik);<br /> lcd_str(&quot;        &quot;);<br /><br />}<br /><br /><br />ISR(TIMER0_OVF_vect){<br /><br />         buf_t0++;<br />}<br /><br />ISR(INT0_vect){<br />if(INT0_down){<br /><br />timer0_stop;<br />dziesiatki = TCNT0;<br />flaga =1;<br />}<br /><br />else{<br />TCNT0 = 0;<br />buf_t0 =0;<br />timer0_start;<br />}<br />}<br /><br /><br />/*    I    T O    B Y    B Y Ł O     N A     T Y L E   */[/syntax]<br /><br />...a - pisane pod ATm8 - 8MHz<br />Tutaj wynik podawany jest w ilość=ms czyli w &quot;ms&quot;  <br /> [syntax=c]wynik =   ((( buf_t0&lt;&lt;8) + dziesiatki)/125)[/syntax]<br />  to trzeba policzyć dla danego presc. oraz taktowania.<br /><br /><div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br />Posłuchaj/pooglądaj to:http://mirekk36.blogspot.com/2013/12/przerwania-dla-poczatkujacych-czesc-03.html<br /></div> <br />tam byś to znalazł - ale po co? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<br /><br />edit: te wszystkie zmienne mają takie deklarowane rozmiary ( uint8, 16, 32 ) bo &quot;rozprułem&quot; inny mój kod i tam takie potrzebowałem - oczywiście u siebie możesz dać inne, tylko żeby mieściły się w zakresie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 10 mar 2016, o 17:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-10T07:06:11+01:00</updated>
<published>2016-03-10T07:06:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155805#p155805</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155805#p155805"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155805#p155805"><![CDATA[
Zmieniłem<br />[syntax=c]OCR2 = 16;[/syntax]<br /><br />na <br />[syntax=c]OCR2 = 160;[/syntax]<br /><br />przerwanie TIMER-a co 10us<br /><br />teraz przy _delay_us(50); pokazuje mi wynik 7 po pomnożeniu przez 10 daje 70 us<br />a przy _delay_ms(2); pokazuje mi wynik 274 po pomnożeniu przez 10 daje 2740 us<br />a wiec źle,<br /><br />poprzednia wersja jeżeli wynik podzieli się przez 8  działa idealnie tylko dlaczego wyniki są 8 razy większe coś z TIMER-em chyba źle ustawiam<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 16 minutach ]</span></strong><br /><br />Napisałem że działa idealnie ale w zakresie od 46 us do 16 ms, powyżej 16 ms daje kosmiczne wyniki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 10 mar 2016, o 07:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-09T21:56:02+01:00</updated>
<published>2016-03-09T21:56:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155765#p155765</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155765#p155765"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155765#p155765"><![CDATA[
Powalczę z tym jutro<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 9 mar 2016, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-09T21:38:45+01:00</updated>
<published>2016-03-09T21:38:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155759#p155759</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155759#p155759"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155759#p155759"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Przepraszam - jako że ze wzrokiem nie za bardzo, to zasugerowałem się &quot;pismem obrazkowym&quot; na którym zamaziane było &quot;opadające&quot;.<br /></div>Jakiś dziwny pdf dla ATmega32 otworzył mi się z internetu. Miał on zaszarzony fragment w tabeli <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> TO chyba taka zmyłka przygotowana przez jego twórców <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />czyli np wpisac do OCR2 160?<br /></div>Tak. Choć z tego co pamiętam, to powinno być 159 a nie 160, ale to nie ma większego znacznie (we wzorze do wyliczania wartości dla licznika CTC było zawsze jeszcze -1).<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 9 mar 2016, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-09T21:24:33+01:00</updated>
<published>2016-03-09T21:24:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155756#p155756</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155756#p155756"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155756#p155756"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />A zmieniałeś częstotliwość generowania przerwań? Ustaw tak by timer liczył 10 razy wolniej (w dziesiątkach us) i zobacz czy się nie poprawi. Bo jak Ci wcześniej pisałem, obsługa przerwania zajmuje za dużo czasu. Tak wygląda napisana przez Ciebie procedura po skompilowaniu:<br />[syntax=asm]00000b80 &lt;__vector_4&gt;:<br /> b80:1f 92       pushr1<br /> b82:0f 92       pushr0<br /> b84:0f b6       inr0, 0x3f; 63<br /> b86:0f 92       pushr0<br /> b88:11 24       eorr1, r1<br /> b8a:8f 93       pushr24<br /> b8c:9f 93       pushr25<br /> b8e:80 91 70 00 ldsr24, 0x0070<br /> b92:90 91 71 00 ldsr25, 0x0071<br /> b96:01 96       adiwr24, 0x01; 1<br /> b98:90 93 71 00 sts0x0071, r25<br /> b9c:80 93 70 00 sts0x0070, r24<br /> ba0:9f 91       popr25<br /> ba2:8f 91       popr24<br /> ba4:0f 90       popr0<br /> ba6:0f be       out0x3f, r0; 63<br /> ba8:0f 90       popr0<br /> baa:1f 90       popr1<br /> bac:18 95       reti[/syntax]<br /><br />A masz na jej wykonanie tylko 16 cykli zegara ...<br /><br />-- <br />Pozdrawiam,<br />Robert<br /></div><br /> czyli np wpisac do OCR2 160?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 9 mar 2016, o 21:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-09T20:59:20+01:00</updated>
<published>2016-03-09T20:59:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155754#p155754</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155754#p155754"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155754#p155754"><![CDATA[
Witam<br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />Druga pozycja to &quot;Any logical change on INT0 generates an interrupt request.&quot;<br /></div><br />Przepraszam - jako że ze wzrokiem nie za bardzo, to zasugerowałem się &quot;pismem obrazkowym&quot; na którym zamaziane było &quot;opadające&quot;.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 9 mar 2016, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-09T20:54:08+01:00</updated>
<published>2016-03-09T20:54:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155753#p155753</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155753#p155753"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155753#p155753"><![CDATA[
A zmieniałeś częstotliwość generowania przerwań? Ustaw tak by timer liczył 10 razy wolniej (w dziesiątkach us) i zobacz czy się nie poprawi. Bo jak Ci wcześniej pisałem, obsługa przerwania zajmuje za dużo czasu. Tak wygląda napisana przez Ciebie procedura po skompilowaniu:<br />[syntax=asm]00000b80 &lt;__vector_4&gt;:<br /> b80:1f 92       pushr1<br /> b82:0f 92       pushr0<br /> b84:0f b6       inr0, 0x3f; 63<br /> b86:0f 92       pushr0<br /> b88:11 24       eorr1, r1<br /> b8a:8f 93       pushr24<br /> b8c:9f 93       pushr25<br /> b8e:80 91 70 00 ldsr24, 0x0070<br /> b92:90 91 71 00 ldsr25, 0x0071<br /> b96:01 96       adiwr24, 0x01; 1<br /> b98:90 93 71 00 sts0x0071, r25<br /> b9c:80 93 70 00 sts0x0070, r24<br /> ba0:9f 91       popr25<br /> ba2:8f 91       popr24<br /> ba4:0f 90       popr0<br /> ba6:0f be       out0x3f, r0; 63<br /> ba8:0f 90       popr0<br /> baa:1f 90       popr1<br /> bac:18 95       reti[/syntax]<br /><br />A masz na jej wykonanie tylko 16 cykli zegara ...<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 9 mar 2016, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Hannibal9]]></name></author>
<updated>2016-03-09T19:48:42+01:00</updated>
<published>2016-03-09T19:48:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155747#p155747</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155747#p155747"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155747#p155747"><![CDATA[
[quote=&quot;rskup&quot;<br />2. wyłącz przerwania INT0 i przenieś cały kod dotyczący timera do pętli głównej i zobacz czy Ci działa. Jak tak, to dopiero zacznij robić testy to na przerwaniu.<br /><br />&quot;[/quote]<br />tak właśnie zrobiłem, przeniosłem włączanie i wyłączanie timera do pętli głównej, a mimo to przy dealy np 100 us pokazuje 800, a przy dealy np 2 ms pokazuje 1600, 8 razy więcej niż w rzeczywistości<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />Zmieniłem obsługę przerwania INT 0 na reakcje na oba zbocza, kod o wiele krótszy<br />[syntax=c]ISR(INT0_vect) {<br /><br />if (flaga == 0) {<br />TIMSK |= (1 &lt;&lt; OCIE2);// wlaczenie TIMER2<br />flaga = 1;// zmiana flagi<br />} else if (flaga == 1) {<br />TIMSK &amp;= ~(1 &lt;&lt; OCIE2);// wyłączenie TIMER2<br />czas = licznik;<br />licznik = 0;<br />flaga = 0;<br /><br />}<br />//LED1_TOG;<br /><br />}[/syntax]<br /><br />dalej jednak mam 8 - krotnie zawyżone odczyty<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7324">Hannibal9</a> — 9 mar 2016, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-09T18:42:25+01:00</updated>
<published>2016-03-09T18:42:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155740#p155740</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155740#p155740"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155740#p155740"><![CDATA[
Licznik włączasz na początku programu. Liczy sobie i generuje co odpowiedni okres czasu znacznik przerwania. Gdy uznajesz, że chcesz liczyć czas, to włączasz przerwania, ale nie zerujesz flagi w TIFR a ta na pewno jest już ustawiana, więc od razu dostajesz na dzień dobry jedno przerwanie gratis <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />1. Przestaw na początek przerwanie timera na rzadsze, bo teraz masz przerwanie co 16 taktów zegara.<br />2. wyłącz przerwania INT0 i przenieś cały kod dotyczący timera do pętli głównej i zobacz czy Ci działa. Jak tak, to dopiero zacznij robić testy to na przerwaniu.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />...chyba &quot;na opadające&quot;<br /></div><br />Druga pozycja to &quot;<em><span style="color: #4080FF">Any logical change on INT0 generates an interrupt request.</span></em>&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 9 mar 2016, o 18:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-03-09T21:00:49+01:00</updated>
<published>2016-03-09T18:36:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155738#p155738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155738#p155738"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155738#p155738"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />A co znaczy druga pozycja?<br /></div><br />...chyba &quot;na opadające&quot; (<span style="font-size: 85%; line-height: normal"><em>błędny wpis - wyjaśnienie dalej</em></span>)<br />Posłuchaj/pooglądaj to:<a href="http://mirekk36.blogspot.com/2013/12/przerwania-dla-poczatkujacych-czesc-03.html"  class="postlink">http://mirekk36.blogspot.com/2013/12/przerwania-dla-poczatkujacych-czesc-03.html</a> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 9 mar 2016, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-03-09T18:23:12+01:00</updated>
<published>2016-03-09T18:23:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155734#p155734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155734#p155734"/>
<title type="html"><![CDATA[Re: Pomiar czasu trwania impulsu ATMega 32 16MHz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14801&amp;p=155734#p155734"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />procesor i taktowanie w tytule postu ATMega 32 taktowanie 16MHz, wydaje mi się , że nie ma możliwości ustawienia INT 0 na reakcję na oba zbocza naraz<br /></div>A co znaczy druga pozycja?<br /><img src="https://obrazkiforum.atnel.pl/3427/246b527c188a2920d9c2aa3d5781d4d1.png" alt="Obrazek" /><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 9 mar 2016, o 18:23</p><hr />
]]></content>
</entry>
</feed>