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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-04-03T18:50:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2058&amp;mode</id>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-03T18:50:07+01:00</updated>
<published>2013-04-03T18:50:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32991#p32991</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32991#p32991"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32991#p32991"><![CDATA[
Ten kod już przerobiony. Tylko testowo tak było <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Teraz muszę se poradzić z czujnikiem temp i regulacją mocy 230V.<br /> Ale to mam w 2 poście zaczęty temat więc tu nie będę powielał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 3 kwi 2013, o 18:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-03T16:47:27+01:00</updated>
<published>2013-04-03T16:47:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32959#p32959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32959#p32959"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32959#p32959"><![CDATA[
Ja tu widzę niezłe czekanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ponad 8 sekund przestoju ma procesor, ciekawe czy elektrony mają co w tym czasie robić <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />Proponuje zrobić pwm bez &quot;delajów&quot; zastosuj timery zamiast nich, oraz zamiast for daj &quot;ify&quot;<br />np:<br />[syntax=c]if( !timerProgramowy )<br />{<br /><br />  if(h)<br />  {<br />     OCR0++;<br />     if(OCR0 == 255) h=0;<br />  }<br /> <br />  if(!h)  <br />  {<br />    OCR0--;<br />    if(OCR0 == 0) h=1;<br />  }<br /><br />  if(OCR0&gt;50) timerProgramowy = 10; // ustawiamy opóźnienie do następnej zmiany wartości<br />   else timerProgramowy = 20;<br />}[/syntax]Nie dodałem tutaj deklaracji zmiennych. Ogólnie pisane na szybko jako przykład do rozwinięcia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 3 kwi 2013, o 16:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-03T14:44:58+01:00</updated>
<published>2013-04-03T14:44:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32942#p32942</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32942#p32942"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32942#p32942"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/atomic.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;lcd.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br />// Atmega16 1MHz<br /><br />void timer_init(void);<br />int przeliczObroty (void);<br /><br />volatile uint8_t isOK;<br />volatile uint16_t time;<br />volatile uint8_t flag_1;<br />volatile uint8_t flag_2;<br /><br />// definicje zmiennych do sterowania 6 kanałami programowych PWM<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br /><br />char str&#91;6&#93;;<br /><br />int main(void)<br />{<br />//***** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) *******<br />// ustawienie końcówki OC0 (PB3) sprzętowy PWM jako WYJŚCIE<br />DDRB |= (1&lt;&lt;PB3);<br />// ustawienia TIMER2 w Fast PWM<br />TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);// tryb Fast PWM<br />TCCR0 |= (1&lt;&lt;COM01);// clear at TOP<br />TCCR0 |= (1&lt;&lt;CS00);// preskaler = 1<br />OCR0=255;// wygaszenie diody w kanale PWM<br /><br /><br /><br />//--------------------Ustawienia timera zegara<br />        ASSR |=(1&lt;&lt;AS2);//async<br />        TCNT2 = 0x00;<br />        TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS20);//128<br />        TIMSK |=(1&lt;&lt;TOIE2);<br />//--------------------Ustawienia timera zegara - KONIEC<br />//DDRD &amp;= ~(1&lt;&lt;PD6);<br />//PORTD &amp;= ~(1&lt;&lt;PD6);<br />/* funkcje do inicjalizacji  wyświetlacza*/<br />  lcd_init();<br />  timer_init();<br /><br />  sei();<br />uint8_t i;<br />  while(1)<br />  {<br /><br /><br />  for(i=0;i&lt;255;i++)<br />  {<br />  OCR0=i;// ta dioda będzie ulegała ściemnianiu w tej pętli<br /><br /><br />  // W związku z dużą nieliniowością zależności prądu diod LED<br />  // i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />  // przy wartościach bliskich zera aby zminimalizować ten efekt<br />  if(i&gt;50) _delay_ms(10);<br />  else _delay_ms(20);<br />  }<br />  // całkowite rozjaśnienie diody LED przez 100ms<br />  OCR0=255;<br />  // rozświetlenie na maksimum przez 100ms<br /><br />  _delay_ms(2000);<br /><br />  // pętla stopniowo ściemniająca 6 diod LED<br />  for(i=255;i;i--)<br />  {<br />  OCR0=i;// ta dioda będzie ulegała rozjaśnianiu w tej pętli<br /><br /><br />  // W związku z dużą nieliniowością zależności prądu diod LED<br />  // i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />  // przy wartościach bliskich zera aby zminimalizować ten efekt<br />  if(i&gt;50) _delay_ms(10);<br />  else _delay_ms(20);<br />  }<br />  // całkowite rozjaśnienie diody LED przez 100ms<br />  OCR0=0;<br />  // całkowite wygaszenie diod LED przez 100ms<br />  _delay_ms(2000);<br /><br />  if(flag_1){<br />  lcd_locate(0,1);<br />  lcd_str(&quot;     &quot;);<br />     lcd_locate(0,1);<br />     lcd_str(itoa(przeliczObroty(),str,10)); //wywołanie funkcji obliczającej obr/min w funkcji konwersji int do string<br />  flag_1=0;<br />  }<br />}<br />}<br /><br />ISR(TIMER1_CAPT_vect)<br />{<br />  if(TCCR1B &amp; (1&lt;&lt;ICES1))<br />  {<br />        TCNT1 = 0;<br />        TCCR1B &amp;= ~(1&lt;&lt;ICES1); // następne zdarzenie na zboczu opadającym<br /><br />        time = ICR1;                    // przepisanie zawartości licznika do zmiennej<br />        isOK=255;                               // odczytano poprawnie<br />  }<br />   else<br />   {<br />     TCCR1B |= (1&lt;&lt;ICES1); // następne zdarzenie na zboczu narastającym<br />   }<br />}<br /><br />ISR(TIMER1_OVF_vect)<br />{<br />  isOK=0; // Błą przepełnienia licznika<br />}<br /><br />void timer_init(void)<br />{<br />  TCCR1B |= (1&lt;&lt;ICNC1)  | (1&lt;&lt;ICES1);   // włąćz filtrowanie ICP, zdarzeie na zboczu narastającym<br />  TCCR1B |= (1&lt;&lt;CS11)   | (1&lt;&lt;CS10);    // Preskaler 64, gtryb normalny<br />  TIMSK  |= (1&lt;&lt;TICIE1) | (1&lt;&lt;TOIE1);   // Przerwania ICP i overflow<br />}<br /><br />int przeliczObroty (void)<br />{<br />  uint16_t pr, rpm;<br />  uint8_t ok;<br /><br />  ATOMIC_BLOCK(ATOMIC_FORCEON) // przepisanie zmiennych bez przerwań aby nie były pomieszane wyniki<br />  {<br />    ok = isOK;<br />    pr = time;<br />  }<br /><br />  if(!ok) // jezeli błąd<br />  {<br />    time = 0;<br />  }<br /><br />  if(pr) // jezeli różne od zera<br />  {<br />    rpm = F_CPU/64/pr*30; // przeliczanie czasu na obroty taktowanie/prescaler/czas<br />    // trzeba sprawdzić czy na pewno prawidłowo przelicza na obroty<br />  }<br />  else<br />  {<br />    rpm = 0;<br />  }<br /><br />  return rpm;<br />}<br /><br />//--------------------Przerwanie zegara<br />    ISR(TIMER2_OVF_vect) {<br />    flag_1=1;<br />    flag_2=1;}<br />//--------------------Przerwanie zegara - KONIEC[/syntax]<br /><br />Tu jeszcze wstawiłem zmianę obrotów silnika przez PWM<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 3 kwi 2013, o 14:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-03T14:37:32+01:00</updated>
<published>2013-04-03T14:37:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32937#p32937</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32937#p32937"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32937#p32937"><![CDATA[
Wstaw kod który wgrywasz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 3 kwi 2013, o 14:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-03T13:06:40+01:00</updated>
<published>2013-04-03T13:06:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32922#p32922</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32922#p32922"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32922#p32922"><![CDATA[
Już go podzieliłem przez 2 i na dal takie ma obroty <br />No może jest szybki bo dość głośny jest na maksa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 3 kwi 2013, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-03T12:59:48+01:00</updated>
<published>2013-04-03T12:59:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32920#p32920</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32920#p32920"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32920#p32920"><![CDATA[
A jaki miałeś wynik tego wentylatora na wyświetlaczu 7-seg ?<br />Może masz więcej impulsów na 1 obr np 2 a program do jednego jest ustawiony. Albo po prostu masz taki szybki wiatrak <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=746">tom1988p</a> — 3 kwi 2013, o 12:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-02T19:12:33+01:00</updated>
<published>2013-04-02T19:12:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32827#p32827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32827#p32827"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32827#p32827"><![CDATA[
Nie a ma być między PD6 a Vcc ?<br />A programowo jakoś też go ustawić ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Po podaniu rezystora 2k2 to działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Tylko czy wentylator może osiągać 4800RPM?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 2 kwi 2013, o 19:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-02T19:09:27+01:00</updated>
<published>2013-04-02T19:09:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32825#p32825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32825#p32825"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32825#p32825"><![CDATA[
Rezystor podciągający jest? Jakiś zewnętrzny np. 2k2 może po prostu czyta bzdury ;P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 2 kwi 2013, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-02T18:41:37+01:00</updated>
<published>2013-04-02T18:41:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32821#p32821</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32821#p32821"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32821#p32821"><![CDATA[
To dla prób mogę wykorzystać np _delay_ms() jak pomoże dopiero w tedy jakimś timerem się zająć.<br /><br />I coś takiego zrobiłem :<br />[syntax=c]lcd_locate(0,1);<br />     lcd_str(&quot;     &quot;);<br />     _delay_ms(1);<br />     lcd_locate(0,1);<br />     lcd_str(itoa(przeliczObroty(),str,10)); //wywołanie funkcji obliczającej obr/min w funkcji konwersji int do string<br />     _delay_ms(200);[/syntax]<br /><br />I teraz Czytelniejsze są wyniki co prawda czasem mrugnie coś ale widać. <br />Tylko że cały czas pojawiają się dziwne wartości <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Większość czasu jest 0 ale co jakiś czas na na chwilę pojawi się 60, 2880 3300 <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Jakieś zakłócenia czy co? <br />Czy może trzeba by było nadać portowi jakąś konkretną pozycje Bo w tym kodzie nie jest zapisane czy jest to wyjście czy wejście i jakieś napięcia na tym porcie szaleją ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 2 kwi 2013, o 18:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-02T18:33:28+01:00</updated>
<published>2013-04-02T18:33:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32819#p32819</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32819#p32819"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32819#p32819"><![CDATA[
Dobrze. Teraz tylko wsadź to w jakiś timer i niech co np. 50-200ms wyświetla zmienną, jak na razie to widocznie za szybko nadpisuje nowy znak.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 2 kwi 2013, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-02T17:32:42+01:00</updated>
<published>2013-04-02T17:32:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32808#p32808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32808#p32808"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32808#p32808"><![CDATA[
Czy masz na myśli coś takiego:<br />[syntax=c]lcd_locate(0,1);<br />     lcd_str(&quot;     &quot;);<br />     lcd_locate(0,1);<br />     lcd_str(itoa(przeliczObroty(),str,10)); //wywołanie funkcji obliczającej obr/min w funkcji konwersji int do string[/syntax]<br />Nie podłączałem nic pod pin ICP i mam teraz lekko widoczne zero a czasem jakieś wartości 2000 coś 3000 coś które też są lekko widoczne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 2 kwi 2013, o 17:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-04-02T17:21:38+01:00</updated>
<published>2013-04-02T17:21:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32804#p32804</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32804#p32804"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32804#p32804"><![CDATA[
Hej.<br />Może błąd bardzo prosty, nie wina działania obrotka tylko wyświetlacza, może nie kasujesz wcześniejszych znaków i zostają &quot;duchy&quot;. Wpisz przed liczbą obr, cztery spacje następnie ponownie ustaw kursor i wpisz wynik<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 2 kwi 2013, o 17:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-04-01T22:43:48+01:00</updated>
<published>2013-04-01T22:43:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32714#p32714</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32714#p32714"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=32714#p32714"><![CDATA[
Witam ponownie. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Jestem zmuszony kolejny raz skorzystać z kodu kolegi @tom1988p. Tylko mam pytanko. Ponieważ wcześniej korzystałem z tego kodu ale dla 4x 7-segmentowy wyświetlacz led i wszystko ładnie grało. Pokazywał obroty od ok 100 do ponad 3000. Teraz mam LCD i po wgraniu programu na LCD gdy nie kręci się wentylator mam wartość 2940 przy zwiększaniu obrotów to przy około 1500 widać jakiś wynik po czym dalej jest tak nie stabilnie i nie ładnie to wygląda na LCD. W porównaniu do 7-segment led to strasznie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Da się coś z tym zrobić by osiągnąć taki sam efekt jak na 7-segmentowych ledach ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 1 kwi 2013, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-01-06T23:07:16+01:00</updated>
<published>2013-01-06T23:07:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23730#p23730</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23730#p23730"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23730#p23730"><![CDATA[
No tak, nie pomyślałem o tym w ten sposób. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 6 sty 2013, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-01-06T19:48:28+01:00</updated>
<published>2013-01-06T19:48:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23676#p23676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23676#p23676"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23676#p23676"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />rpm = (F_CPU/64/pr*60)/2;<br /></div><br />Dlaczego przedłużać kod? Przecież: rpm = F_CPU/64/pr*30; da ten sam wynik.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 6 sty 2013, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-01-06T16:09:07+01:00</updated>
<published>2013-01-06T16:09:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23649#p23649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23649#p23649"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23649#p23649"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Wiadomo, każdy zrobi tak dokładnie, na ile potrzebuje.<br /></div><br />Lub na ile umie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ja kolegi @tom1988p  wykorzystałem kod jednocześnie do pomiaru obrotów wentylatora komputerowego jak i do transoptora. Gdy podłączam wentylator to podłączam żółty kabelek bezpośrednio do portu ICP i dziele przez 2 bo mój wentylator daje 2 impulsy na obrót. rpm = (F_CPU/64/pr*60)/2; A jak przez transoptor to bez dzielenia. rpm = F_CPU/64/pr*60;<br />I gdy mierze przez żółty kabelek czy przez transoptor (ten sam wentylator) to wynik jest zbliżony ok 2900obr.min przy 12V<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 6 sty 2013, o 16:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-01-05T22:43:07+01:00</updated>
<published>2013-01-05T22:43:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23540#p23540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23540#p23540"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23540#p23540"><![CDATA[
Ja próbowałem coś zrozumieć ale nie wyszło mi. Twój program działa świetnie. <br />I dla wentylatorka komputerowego jak i dla miernika obrotów bezdotykowego:)<br />Na pewno go jeszcze gdzieś wykorzystam. Tylko msze dokładnie każdą linie kodu zrozumieć co i jak się dzieje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=493">Jeżyk-1</a> — 5 sty 2013, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-01-05T22:27:06+01:00</updated>
<published>2013-01-05T22:27:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23533#p23533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23533#p23533"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23533#p23533"><![CDATA[
Tak. Masz rację gdzie ściągałem... Ale to na podstawie miernika częstotliwości tam opisanego oraz informacje z internetu do przeliczenia na obroty. Jakoś w coś posklejałem.<br />Tam się nauczyłem &quot;atomować&quot; w ten sposób.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 5 sty 2013, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jeżyk-1]]></name></author>
<updated>2013-01-05T21:35:52+01:00</updated>
<published>2013-01-05T21:35:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23518#p23518</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23518#p23518"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23518#p23518"><![CDATA[
Chcę osiągnąć pomiar obrotów np z silnika wentylatora komputerowego.<br />Do tej pory wykorzystałem kod Mirka do zliczania impulsów i wyświetlania go na wyświetlaczu 4x 7segment.<br />Nie umiem jeszcze sam niczego sklepać więc opieram się na gotowych rozwiązaniach jak mi się uda je zrozumieć. <br />Cel jest taki by na tym wyświetlaczu pojawiały się obr/min. Początkowo chciałem to wykorzystać na 2 timerach.<br />Ale doradzili że można to zrobić na jednym. I zacząłem szukać i znalazłem ten post.<br />Ale teraz wynika z tego że ten kod wymaga też 2 timerów.<br />Trochę poczytałem na temat ICP i tak nie do końca wiem jak się za to zabrać. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Kolega tom1988p widzę ciekawy kod udostępnił który zaraz zacznę analizować i spróbuję go dopasować do mojego. <br />Widzę że ten kod jest przerobiony z książki Tomasza Francuza? Też na niego patrzyłem ale moja wiedza tak daleko nie sięga bym mógł se z nim poradzić. <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=493">Jeżyk-1</a> — 5 sty 2013, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-05T20:19:34+01:00</updated>
<published>2013-01-05T20:19:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23499#p23499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23499#p23499"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23499#p23499"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Ok, od tej pory będzie makro <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Przyznaję szczerze, że chyba tylko raz musiałem na moment wyłączyć przerwania. Zwykle nie jest mi to do niczego potrzebne, bo staram się, by wszystko cykało jak w szwajcarskim <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />No ale czasem to bywa że i przy najzwyklejszej inkrementacji czy dekrementacji jakiejś zmiennej 16-bitowej, która również używana jest w przerwaniach - trzeba z tego skorzystać, bo wiadomo że operacja na 16-bitach nie zajdzie atomowo na procku 8-bitowym. Oczywiście rzadko kiedy w sumie zdarzają się takie potrzeby ale zawsze trzeba mieć to na uwadze, bo inaczej można sobie czasem kwiatków narobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2013, o 20:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-05T19:58:09+01:00</updated>
<published>2013-01-05T19:58:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23495#p23495</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23495#p23495"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23495#p23495"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />A ja sobie wyobrażałem nie wiadomo co <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /></div><br /><br />No i tak sobie właśnie czasem narzucamy bariery <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ja przyznam że przez to że wcześniej wciąż pisałem te choinkowe linijki to teraz jeszcze one u mnie pokutują zamiast dać makro i już <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> — 5 sty 2013, o 19:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-05T19:47:15+01:00</updated>
<published>2013-01-05T19:47:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23490#p23490</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23490#p23490"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23490#p23490"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Po prostu interesuje mnie kiedy używać ATOMIC_BLOCK, a kiedy takiego czegoś co ja prezentuję<br /></div><br /><br />Jak ci się kiedyś odechce w kółko pisać tych kilka linijek to w końcu zaczniesz używać tych makr <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> — 5 sty 2013, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-01-05T22:29:39+01:00</updated>
<published>2013-01-05T19:31:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23480#p23480</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23480#p23480"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23480#p23480"><![CDATA[
Ja swojego czasu coś takiego na skrobałem:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/atomic.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;hd44780.h&quot;<br /><br />// Atmega16 1MHz<br /><br />void timer_init(void);<br />int przeliczObroty (void);<br /><br />volatile uint8_t isOK;<br />volatile uint16_t time;<br /><br />char str[6];<br /><br />int main(void)<br />{<br />/* funkcje do inicjalizacji  wyświetlacza*/<br />  LCD_init();<br />  timer_init();<br />  <br />  sei();<br /><br />  while(1)<br />  {<br />     // można by zrobić w pętli czasowej bo wyniki szybko się zmieniają<br />     LCD_locate(0,1);<br />     LCD_string(itoa(przeliczObroty(),str,10)); //wywołanie funkcji obliczającej obr/min w funkcji konwersji int do string<br />  }<br />}<br /><br />ISR(TIMER1_CAPT_vect)<br />{<br />  if(TCCR1B &amp; (1&lt;&lt;ICES1))<br />  {<br />TCNT1 = 0;<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1); // następne zdarzenie na zboczu opadającym<br /><br />time = ICR1; // przepisanie zawartości licznika do zmiennej<br />isOK=255;// odczytano poprawnie<br />  }<br />   else<br />   {<br />     TCCR1B |= (1&lt;&lt;ICES1); // następne zdarzenie na zboczu narastającym<br />   }<br />}<br /><br />ISR(TIMER1_OVF_vect)<br />{<br />  isOK=0; // Błą przepełnienia licznika<br />}<br /><br />void timer_init(void)<br />{<br />  TCCR1B |= (1&lt;&lt;ICNC1)  | (1&lt;&lt;ICES1); // włąćz filtrowanie ICP, zdarzeie na zboczu narastającym<br />  TCCR1B |= (1&lt;&lt;CS11)   | (1&lt;&lt;CS10); // Preskaler 64, gtryb normalny<br />  TIMSK  |= (1&lt;&lt;TICIE1) | (1&lt;&lt;TOIE1); // Przerwania ICP i overflow <br />}<br /><br />int przeliczObroty (void)<br />{<br />  uint16_t pr, rpm;<br />  uint8_t ok;<br />  <br />  ATOMIC_BLOCK(ATOMIC_FORCEON) // przepisanie zmiennych bez przerwań aby nie były pomieszane wyniki <br />  {<br />    ok = isOK;<br />    pr = time;<br />  }<br /> <br />  if(!ok) // jezeli błąd<br />  {<br />    time = 0;<br />  }<br /><br />  if(pr) // jezeli różne od zera<br />  {<br />    rpm = F_CPU/64/pr*60; // przeliczanie czasu na obroty taktowanie/prescaler/czas<br />    // trzeba sprawdzić czy na pewno prawidłowo przelicza na obroty<br />  }<br />  else<br />  {<br />    rpm = 0;<br />  }<br />  <br />  return rpm;<br />}<br />[/syntax]<br /><br />Przyznam się ze ostatnio prawie rok temu tego używałem i nie pamiętam czy jest skalibrowany do jednego impulsu na obrót.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 5 sty 2013, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Domanoid]]></name></author>
<updated>2013-01-05T16:58:31+01:00</updated>
<published>2013-01-05T16:58:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23466#p23466</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23466#p23466"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23466#p23466"><![CDATA[
Może zacznijmy od tego co chcesz właściwie zrobić? Przystosować podany w przytoczonym poście kod do swojego kodu? Czyli wykorzystać gotowe wstawki czy po prostu zrobić wszystko od nowa na podanym kodzie?<br /><br />Łatwiej by było gdyby inni mogli zobaczyć Twój kod. Wtedy by były wychwycone błędy. A jeśli chodzi tylko o to czemu tam jest przerwanie z timer0 a nie jest on włączany to dobrze się dopatrzyłeś, tam jest błąd. Timer0 musi być załączony, połączenie kodu 1 i 2 z tamtego tematu działa ładnie.<br /><br />Dokładnie o takie połączenie mi chodzi:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 05-01-2013<br /> *      Author: Jarek<br /> */<br /><br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />    #include &quot;common.h&quot;<br />//    #include &quot;KS0066U.h&quot;<br /><br /><br />    volatile uint8_t sec, timer0_flag;<br />    volatile uint16_t rpm, time;<br /><br />    void hard_init(void);<br />    void irq_init(void);<br />    void timer0_event(void);<br />    void check_rpm(void);<br /><br />    int main(void)<br />    {<br />            hard_init();<br />            irq_init();<br />//            LCD_init();<br />//            LCD_string(&quot;  Obrotomierz&quot;);<br />            sei();<br /><br />            while(1)<br />            {<br />                    timer0_event();<br />                    check_rpm();<br />            }<br />    }<br />    void hard_init(void)<br />    {<br />//            DDRD  |= (KAT|COM);     //output<br />//            PORTD &amp;= ~KAT;          //transoptor led on<br />//            PORTD |= COM;           //5V on common pin<br />    DDRD  |= (1&lt;&lt;LED);<br />    PORTD |= (1&lt;&lt;LED);<br />    }<br />    void irq_init(void)  {<br />            TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);//F_CPU/1024<br />            TCCR1B |= (1&lt;&lt;ICES1);//rising edge of ICP<br />            TIMSK |= (1&lt;&lt;TICIE1);//irq from ICP<br /><br /><br />//// USTAWIENIE TIMER0<br />            TCCR0 |= (1&lt;&lt;WGM01);//ctc<br />            TCCR0 |= (1&lt;&lt;CS02);//F_CPU/256<br />            TIMSK |= (1&lt;&lt;OCIE0);<br />            OCR0 = 0;<br />            MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00);//rising edge of int0<br />            GICR |= (1&lt;&lt;INT0);<br />    }<br /><br /><br />    void timer0_event(void)<br />    {<br /><br />            static uint16_t counter = 0;<br />            if(timer0_flag)<br />            {<br /><br />                    timer0_flag = 0;<br />                    counter++;<br />                            if (counter == 31249)  /// dla 8mhz prawie 1 sekunda .... PRAWIE<br />                            {<br />                                    counter = 0;<br />                                    sec++;<br />                                    PORTD ^= (1&lt;&lt;LED);<br />                            }<br /><br />            }<br />    }<br />    void check_rpm(void)<br />    {<br />//            if(sec)<br />//            {<br />//                    sec = 0;<br />//                    rpm = time*64*60/1000000UL;<br />//                    LCD_locate(0,1);<br />//                    LCD_int(rpm);<br />//                    rpm = 0;<br />//                    LCD_string(&quot;RPM    &quot;);<br />//<br />//            }<br />    }<br /><br />    ISR(TIMER0_COMP_vect)<br />    {<br />            timer0_flag = 1;<br />    }<br /><br />    ISR(TIMER1_CAPT_vect)<br />    {<br />            static uint16_t prev_val = 0, act_val = 0;<br />            act_val = ICR1;<br />            time = act_val - prev_val;<br />            prev_val = act_val;<br />            TCNT1 = 0;<br />    }<br />[/syntax]<br /><br />I jak można zauważyć ten kod służy mi do migania ledem, wyłączyłem wszystko z obsługą LCD, ale całkiem możliwe że te kilka linijek kodu obsługi lcd tak wpływa na czas, że powstaje dokładnie 1 sekunda.<br /><br />Jeśli miałbym oceniać to <span style="color: #FF0000">[...<strong>cenzura</strong>... mirekk36 - BARDZO uprzejmie proszę, na tym forum tak nie dyskutujemy OK? A ten kolega o którym tu wspomniałeś mógłby być WZOREM na naszym forum i nie tylko - jak należy podchodzić do nauki języka C!]</span> się tutaj nie popisał <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Pan Mirek zawsze powtarza: &quot;Pisz kod tak jakbyś pisał dla grupy programistów&quot;. A tutaj nie ma wcale komentarzy, nie wiadomo na jakiej częstotliwości pracuje procesor itp itd <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br />Zresztą już nie raz próbowałem w ten sposób uzyskać jedną sekundę... O wiele prościej jest wykorzystać kwarc zegarkowy 32khz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br /><span style="font-size: 85%; line-height: normal">Odnośnie cenzury:<br />Ok, przepraszam. Tylko chciałem zaznaczyć, że brakuje komentarzy które pomogłyby czytającym kod...<br />Też Pana KtóregoNickaNieWolnoWymieniać podziwiam, jest dla mnie wzorem... <br />Pozdrawiam</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=750">Domanoid</a> — 5 sty 2013, o 16:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom1988p]]></name></author>
<updated>2013-01-05T16:28:15+01:00</updated>
<published>2013-01-05T16:28:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23460#p23460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23460#p23460"/>
<title type="html"><![CDATA[Re: Obrotomierz]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2058&amp;p=23460#p23460"><![CDATA[
Zacznijmy od podstaw. W tym kodzie używa innego wyświetlacza niż HD44780.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=746">tom1988p</a> — 5 sty 2013, o 16:28</p><hr />
]]></content>
</entry>
</feed>