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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-03-26T16:55:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23676&amp;mode</id>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-26T16:55:37+01:00</updated>
<published>2021-03-26T16:55:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231671#p231671</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231671#p231671"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231671#p231671"><![CDATA[
A no widzisz, to masz super rozwiązane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ja nie buduję skomplikowanych urządzeń. Od czasu do czasu coś wymyślę i jakoś sobie radzę z moim poziomem wiedzy, ale nieraz są małe przeszkody. Po prostu nie ma systematyczności i to się mści. &quot;Męczę&quot; jak na razie te zwykłe lcd-ki monochromatyczne i do tego obecne materiały mi starczają. Aczkolwiek chodzi po głowie spróbować jakiegoś wyświetlacza dotykowago kolorowego. W Mirka książkach trochę tego jest i na początek jakiś rozruch pewnie by się udał, ale myślę, na jaki wyświetlacz się zdecydować. Jak największy, ale żeby na atmedze jakoś to pracowało. Pozdrawiam.<br />Temat paska ogarnąłem. Może nie tak, jak chciałem, ale jest dobrze podczas pracy. Zastosowałem uśrednianie. Nie używając timera prędkość reguluję ilością pomiarów.<br />Przy 100Hz jest poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 26 mar 2021, o 16:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-26T11:52:54+01:00</updated>
<published>2021-03-26T11:52:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231665#p231665</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231665#p231665"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231665#p231665"><![CDATA[
Nie analizowałem Mirkowego buforowania, bo ja poszedłem trochę inną drogą, a częścią wspólną obu rozwiązań jest tylko bufor, na którym robi się wszelkie operacje wyświetlania. Natomiast zupełnie inne jest odświeżanie tego bufora i przepisanie go z procka do LCD. U Mirka cały bufor idzie hurtem w momencie wywołania odświeżania co zajmuje trochę czasu, a u mnie wywołanie odświeżania to wysyłka TYLKO jednego znaku z całego wyświetlacza pod koniec pętli głównej, czyli żeby pokazać pełną zawartość ekranu 16x2 odświeżanie musi być wywołane 32 razy + 1 czy 2 kody potwierdzające (nie pamiętam już). Oczywiście zmusza to do pisania programu w pełni nieblokującego (co mi nie przeszkadza <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ) bez żadnych pauz w środku, w przeciwnym wypadku wyświetlanie by się zatrzymało. Dzięki takiemu rozwiązaniu pętla wykonuje się jak pisałem około 30x szybciej niż z tradycyjną obsługą LCD. Moje rozwiązanie ma też zaletę w postaci automatycznego czyszczenia zbędnych miejsc czyli jeśli, np. licznik odlicza 10..9..8 to nie muszę na końcu umieszczać spacji &quot; &quot; aby mi zero z dziesiątki zmazać - ono się po prostu nie wyświetli, bo mój bufor oprócz standardowego zapełniania, ma opcję natychmiastowego kasowania tego co właśnie wysłał do LCD. Jest to ogromna zaleta i bardzo upraszcza pisanie programów z dużą ilością wyświetlanych danych, które się często zmieniają. Oczywiście na zawołanie mogę też natychmiast przesłać kompletny bufor - rzadko korzystam, ale przydaje się czasem gdy trzeba wyskoczyć z pętli głównej do jakiejś nietypowej funkcji pisanej dla zwykłej obsługi LCD.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 26 mar 2021, o 11:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-25T21:00:06+01:00</updated>
<published>2021-03-25T21:00:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231658#p231658</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231658#p231658"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231658#p231658"><![CDATA[
Witaj Sylwku.<br />Dziękuję za szczere chęci i poświęcony czas. Na razie pozostałem przy uśrednianiu i podoba mi się, ale spróbuję jeszcze do tego wrócić. Może jakoś inaczej....<br />W wolnej chwili podrzucę filmik, ale też mam spore problemy z czasem. Buforowanie zaczerpnąłem i &quot;wyłuskałem&quot; z książki Mirka i projektu L19_HD44780_LCD.<br />Używam tak od dłuższego czasu. W zasadzie zaprzestałem korzystania ze standardowej obsługi lcd. Tylko że w tym projekcie podstawa czasu jest 100Hz i 10ms.<br />Jak przestawiłem na 1000Hz i 1ms, to było lepiej, ale chyba rozsypało się trochę buforowanie Mirkowego kodu i były nietypowe zauważalne migotania obrazu. Na szybko za bardzo nie wiedziałem, jak to poprawić przystosować do podstawy czasu 1ms i odpuściłem. Podstawowa funkcja nie kompletna z wiadomych względów:<br /><br />[syntax=c]void buf_refresh(void)<br />{<br />if( !(ms10_cnt%(LCD_REFRESH_MS/10)) )<br />{<br />for(y=0;y&lt;ROWS;y++)<br />{ // wykona sie tyle razy, ile jest linii-ROWS<br />lcd_locate(y,0);<br />for(x=0;x&lt;COLS;....) lcd_char( .....buf&#91;AT(.....)&#93; );// wykona sie tyle razy, ile jest kolumn-COLS<br />}<br />}<br />lms10 = ms10_cnt;<br />}[/syntax]<br /><br />Jak by to dostosować do szybszej podstawy czasu 1ms? Musze to ogarnąć. Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 25 mar 2021, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-25T12:40:53+01:00</updated>
<published>2021-03-25T12:40:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231642#p231642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231642#p231642"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231642#p231642"><![CDATA[
Niestety nie mam dobrych wieści. Tak jak myślałem i sugerowałem wcześniej obciążenie pętli głównej okazało się przyczyną.<br />Uruchomiłem swój program na 100Hz i standardowej obsłudze LCD bez żadnych opóźnień i efekt marny. Następnie podmieniłem na moją obsługę LCD buforowanego i zwiększyłem przerwania do 1000Hz (dla dokładniejszej regulacji) i efekt jak na filmie.<br />Podsumowując, nie ma szans z normalną obsługą LCD zrobić sensownie tego o co Ci chodzi. Odświeżanie ekranu jest bardzo czasochłonne. W moim rozwiązaniu wszystko się dzieje około 30x szybciej.<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 25 mar 2021, o 12:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-23T10:12:10+01:00</updated>
<published>2021-03-23T10:12:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231613#p231613</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231613#p231613"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231613#p231613"><![CDATA[
Mogę oczywiście zastosować filtr cyfrowy, uśrednić pomiar z którego jest brana zmienna do paska i wówczas powiedzmy, że jest ok, ale to znowu wpływa na czas narastania, który w małym stopniu jest ok i może nawet pożądany, ale zbyt wielkie uśrednienie powoduje nie nadążanie za innymi wskazaniami.... Można by &quot;wziąć&quot; nazwijmy to zwykłą zmienną do wyświetlania, a uśrednioną do opadania, ale wówczas zaczyna się, jak to Mirek zawsze mawia tworzenie kocich kodów o niekończącej się długości i zajętości do prostego zadania. To &quot;będzie działać&quot;, ale pewnie można jakoś prościej....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 23 mar 2021, o 10:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-22T17:29:56+01:00</updated>
<published>2021-03-22T17:29:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231602#p231602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231602#p231602"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231602#p231602"><![CDATA[
OK. Dziękuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 22 mar 2021, o 17:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-22T15:38:09+01:00</updated>
<published>2021-03-22T15:38:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231600#p231600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231600#p231600"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231600#p231600"><![CDATA[
Teraz jestem w pracy. Jak będę miał chwilę jutro to po swojemu zrobię ten program, bo coś mi tu nie pasi... <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=1922">SylwekK</a> — 22 mar 2021, o 15:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-22T15:19:01+01:00</updated>
<published>2021-03-22T15:19:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231599#p231599</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231599#p231599"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231599#p231599"><![CDATA[
A więc zrobiłem tak.<br />Zrobiłem drugi testowy projekt. W pętli while(1) nie ma nic, poza rysowaniem paska i zmiana stanu dwóch diod LED. na lcd. W sumie są trzy Timery programowe.<br />Jeden przełącza diodę nr1 co sekundę (^=) dla sprawdzenia, czy Timer jest ok. Drugi Timer steruje &quot;spowalniaczem&quot; i przełącza diodę nr2 z nim powiązaną. Trzeci <br />Timer czyści lcd co jakiś czas.  Obsługa pomiaru adc typowa, bez byków, jak w książce:<br /><br />[syntax=c]uint16_t pomiar(uint8_t kanal)<br />{<br />.................<br />}[/syntax]<br /><br />Obsługa lcd &quot;zwykła bez buforowania&quot;.<br /><br />Timery działają prawidłowo. Zmniejszyłem podstawę czasu do 1ms. Wówczas dioda mruga równo co 1s przy Timer1=1000;<br /><br />Działanie się nie zmieniło. Czy to na &quot;tamtej&quot; wersji, czy na tej. Poza tym, że działa lepiej (podstawa 1ms). Na 10ms jest identycznie. Myślę, ze nic nie blokuje.<br /><br />Ale zauważyłem jeden mankament. Jeśli w funkcji rysowania<br /><br />[syntax=c]lcd_locate(1, 0);<br />        register uint8_t XP1 = adc_0_peak / 55,XP2 = adc_0_peak % 55;<br />uint8_t a=0;while(a++&lt;XP1)<br />lcd_char('\x84');[/syntax]<br /><br />/55 zamienię na np.5 lub 1, to wówczas wszystko jest oka. Prędkości opadania, jakie sobie życzę. Niestety rysowanie paska nie nadaje się do programu, gdyż tą<br />wartością reguluję sobie jego długość i tu modyfikacji nie mogę zrobić. Wydaje mi się, że klapa i nic tu za bardzo nie wymyślę.<br /><br />Najprościej mógłbym ładować kondensatorek elektrolityczny (odpowiednia dobrana R C) na wejściu pinu adc i osiągnąłbym cel, ale chciałem to robić z poziomu programu.<br /><br />Co by tu jeszcze wykombinować ???<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 22 mar 2021, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-22T08:59:39+01:00</updated>
<published>2021-03-22T08:59:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231593#p231593</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231593#p231593"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231593#p231593"><![CDATA[
A masz jeszcze coś innego w pętli co może zabierać czas? Wyświetlanie jest dość czasochłonne, a nie wiem jak u Ciebie działa to buforowanie. Wstaw tę migającą diodę zaraz po Timer2=1;  i zwróć uwagę czy widoczne jest miganie. Przy tej wartości nie powinno być widać zmian (100Hz/2  jak się nie mylę). Jeśli jednak będziesz widział wyraźne miganie tzn. że timer już dawno sobie odliczył i czeka, a opóźnienie wynika z innej przyczyny.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />Jeszcze być może odczyt ADC masz jakiś czasochłonny. Nie wiem , gdybam <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=1922">SylwekK</a> — 22 mar 2021, o 08:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-22T07:51:52+01:00</updated>
<published>2021-03-22T07:51:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231592#p231592</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231592#p231592"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231592#p231592"><![CDATA[
<div class="quotetitle">Robert_1967 napisał(a):</div><div class="quotecontent"><br />A więc Sylwku poprawność działania samych funkcji jest 100% ok.<br /><br />Natomiast przy ustawieniu Timer2=1; pasek wolno schodzi i wolniej się nie da (Timer2=1:)<br /><br />Tak mam przerwania. Stosuję wyświetlanie z bufora.<br /><br />[syntax=c]void Buf_lcd_init(void)<br />{<br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />//OCR0 = (F_CPU/1024UL)/100UL;// 10ms - 100Hz<br />OCR0 = 179;  // 179; 17==1ms<br />TIMSK |= (1&lt;&lt;OCIE0);// przerwanie Compare Match<br /><br />lcd_init();// inicjalizacja LCD<br />buf_cls();<br />}<br /><br /><br />//**************** procedura obsługi przerwania<br />ISR( TIMER0_COMP_vect )<br />{<br />if(++ms10_cnt&gt;99)<br />{<br />ms10_cnt=0;<br />if(++s1_cnt&gt;59)<br />s1_cnt=0;<br /><br />}<br /><br />uint8_t a;<br /><br />a = Timer1;// 100Hz Timer1<br />if (a) Timer1 = --a;<br /><br />a = Timer2;// 100Hz Timer2<br />if (a) Timer2 = --a;<br />}[/syntax]<br /><br />Kwarc 18xxxxx  I zawsze robię miganie diodą, co sekundę, a żeby sprawdzić, czy nie mam byka z przerwaniem i kwarcem.<br /></div><br /><br />Oczywiście w tej kwestii &quot;Natomiast przy ustawieniu Timer2=1; pasek wolno schodzi i wolniej się nie da (Timer2=1:)&quot; miało być &quot;Natomiast przy ustawieniu Timer2=1; pasek wolno schodzi i SZYBCIEJ się nie da (Timer2=1:)&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 22 mar 2021, o 07:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-21T22:38:10+01:00</updated>
<published>2021-03-21T22:38:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231591#p231591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231591#p231591"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231591#p231591"><![CDATA[
Dzięki Sylwku.<br />Jutro sprawdzę. Muszę wstać o 5-j, ale wrzucam jeden ze sposobów rysowania paska. Używam również Twojego z negatywem spacji, ale akurat w tym programie zastosowałem ten:<br />Może to coś wyjaśni. Chciałem wrzucić filmik, jak to wygląda, ale trochę mam z tym kłopot.<br /><br />[syntax=c]buf_locate(1, 2);<br />        register uint8_t XP1 = adc_0_peak / 65,XP2 = adc_0_peak % 65;<br />uint8_t a=0;while(a++&lt;XP1)<br />buf_char(hd_buf, '\x84');<br />if ((XP2 &gt; 0) &amp;&amp; (XP2 &lt; 14))buf_char(hd_buf, '\x80');<br />        else if ((XP2 &gt;= 13) &amp;&amp; (XP2 &lt; 26))buf_char(hd_buf, '\x81');<br />        else if ((XP2 &gt;= 26) &amp;&amp; (XP2 &lt; 38))buf_char(hd_buf, '\x82');<br />        else if ((XP2 &gt;= 38) &amp;&amp; (XP2 &lt; 51))buf_char(hd_buf, '\x83');<br />        else if ((XP2 &gt;= 51) &amp;&amp; (XP2 &lt; 65))buf_char(hd_buf, '\x84');[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 21 mar 2021, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-21T22:28:11+01:00</updated>
<published>2021-03-21T22:28:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231590#p231590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231590#p231590"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231590#p231590"><![CDATA[
A spróbuj tego paska (#10 post) zamiast swojego. Może tam jest problem.<br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/topic18208.html" >topic18208.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 21 mar 2021, o 22:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-21T21:54:32+01:00</updated>
<published>2021-03-21T21:54:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231589#p231589</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231589#p231589"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231589#p231589"><![CDATA[
A więc Sylwku poprawność działania samych funkcji jest 100% ok.<br /><br />Natomiast przy ustawieniu Timer2=1; pasek wolno schodzi i wolniej się nie da (Timer2=1:)<br /><br />Tak mam przerwania. Stosuję wyświetlanie z bufora.<br /><br />[syntax=c]void Buf_lcd_init(void)<br />{<br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />//OCR0 = (F_CPU/1024UL)/100UL;// 10ms - 100Hz<br />OCR0 = 179;  // 179; 17==1ms<br />TIMSK |= (1&lt;&lt;OCIE0);// przerwanie Compare Match<br /><br />lcd_init();// inicjalizacja LCD<br />buf_cls();<br />}<br /><br /><br />//**************** procedura obsługi przerwania<br />ISR( TIMER0_COMP_vect )<br />{<br />if(++ms10_cnt&gt;99)<br />{<br />ms10_cnt=0;<br />if(++s1_cnt&gt;59)<br />s1_cnt=0;<br /><br />}<br /><br />uint8_t a;<br /><br />a = Timer1;// 100Hz Timer1<br />if (a) Timer1 = --a;<br /><br />a = Timer2;// 100Hz Timer2<br />if (a) Timer2 = --a;<br />}[/syntax]<br /><br />Kwarc 18xxxxx  I zawsze robię miganie diodą, co sekundę, a żeby sprawdzić, czy nie mam byka z przerwaniem i kwarcem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 21 mar 2021, o 21:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-21T21:38:30+01:00</updated>
<published>2021-03-21T21:38:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231588#p231588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231588#p231588"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231588#p231588"><![CDATA[
To przy okazji pokaż jak masz zrobione przerwania (w szczególności chodzi o timer programowy)/ Przy podstawie 10ms to ten słupek powinien znikać prawie natychmiast.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 21 mar 2021, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-21T20:59:04+01:00</updated>
<published>2021-03-21T20:59:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231587#p231587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231587#p231587"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231587#p231587"><![CDATA[
Dzięki Sylwku.<br />Jeszcze nie sprawdziłem, ponieważ szykowałem się właśnie do napisania posta. Sprawdzałem takie coś:<br /><br />[syntax=c]if(zmienna_pomiar_adc &gt;= zmienna_peak_adc)<br />{<br />zmienna_peak_adc = zmienna_pomiar_adc;<br />}<br /><br />if(!Timer2)<br />{<br />Timer2=1;<br />zmienna_peak_adc--;<br />}[/syntax]<br /><br />W tym przypadku opadanie jest z kolei zbyt powolne, nawet przy Timer2=1;  W linijce paska, kolejny pojedynczy słupek w kolumnie pojawia się co wartość ADC 13, czyli kolejny przy 26-7 itd... Biorąc pod uwagę te 10ms podstawy i odejmowanie --1 mam tak, a nie inaczej. Nie mniej jednak zaraz sprawdzę, co mi podpowiedziałeś. pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 21 mar 2021, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-21T20:51:44+01:00</updated>
<published>2021-03-21T20:51:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231586#p231586</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231586#p231586"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231586#p231586"><![CDATA[
Tak to widzę:<br /><br />[syntax=c]if(zmienna_pomiar_adc &gt;= zmienna_peak_adc)<br />  {<br />    zmienna_peak_adc = zmienna_pomiar_adc;<br />    Timer2 = 10;<br />  }<br />if(!Timer2)<br />  {<br />    Timer2=10;<br />    if(zmienna_peak_adc &gt; 0) zmienna_peak_adc --;<br />  }<br />pasek(zmienna_peak_adc);[/syntax]<br /><br />I to w zasadzie wszystko <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=1922">SylwekK</a> — 21 mar 2021, o 20:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-21T20:01:24+01:00</updated>
<published>2021-03-21T20:01:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231584#p231584</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231584#p231584"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231584#p231584"><![CDATA[
Witaj Sylwku po długim czasie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Tylko pierwszy &quot;if&quot; wystarczy czyli ten uzupełniający zmienną jeśli jest większa niż to co opadło. W momencie przepisania zmiennej ustaw też timer spowalniacza.<br /></div><br /><br />Rozumiem, że o tym piszesz:<br /><br />[syntax=c]if(zmienna_pomiar_adc &gt;= zmienna_peak_adc)<br />{<br />zmienna_peak_adc = zmienna_pomiar_adc;<br />Timer2 = 10;<br />}[/syntax]<br /><br />Ale dalszej kwestii  nie rozumiem:<br /><br /><div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Opadanie natomiast zrób permanentne (bez żadnych warunków, sprawdzisz tylko czy zero osiągnęło) z prędkością jaka Ci pasuje.<br /></div><br /><br />Nie mogę zaskoczyć. Im dłużej nad tym siedzę.......<br /><br />Ten zapis zmienna_peak_adc--; wymusza jakby stałą prędkość odejmowania o 1 zależną od podstawy czasu i kombinacje z Timerem mi nie wychodzą.<br />Gdybym mógł odejmować o np. --10, --15, itd... , ale tak się nie da. Kombinowałem różnie. Ja wiem, że to proste i podstawy podstaw, ale ja coś robię od przypadku i nieraz mam długie przerwy. Może jakoś inaczej spróbuj mi wytłumaczyć, łopatologicznie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 21 mar 2021, o 20:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2021-03-21T13:35:51+01:00</updated>
<published>2021-03-21T13:35:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231570#p231570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231570#p231570"/>
<title type="html"><![CDATA[Re: Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231570#p231570"><![CDATA[
Tylko pierwszy &quot;if&quot; wystarczy czyli ten uzupełniający zmienną jeśli jest większa niż to co opadło. W momencie przepisania zmiennej ustaw też timer spowalniacza. Opadanie natomiast zrób permanentne (bez żadnych warunków, sprawdzisz tylko czy zero osiągnęło) z prędkością jaka Ci pasuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 21 mar 2021, o 13:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert_1967]]></name></author>
<updated>2021-03-21T11:25:15+01:00</updated>
<published>2021-03-21T11:25:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231568#p231568</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231568#p231568"/>
<title type="html"><![CDATA[Rysowanie paska (bar) na wyświetlaczu lcd 2x16]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23676&amp;p=231568#p231568"><![CDATA[
Witam forumowiczów. <br />Chciałem prosić o pomoc w rozwiązaniu wydawałoby się prostej kwestii, ale jakoś stanąłem w miejscu i ni jak do przodu. Dawno nic nie robiłem.  Rysuję linię składającą się z pionowych pasków. 0 adc równa się nic do wyświetlenia. 1023 równa się wyświetlenie całego paska w linii. Rozdzielczość wyświetlania co jeden słupek w kolumnie, czyli 16x5=80.<br />Wszystko działa zgodnie z założeniami, ale chciałem wprowadzić pewną modyfikację polegającą na spowolnieniu &quot;opadania&quot; paska. Powiedzmy, że napięcie adc maleje gwałtownie, ale bar cofa się płynnie, ale trochę wolniej (jak np. wskaźnik wychyłowy w sprzęcie audio). Narasta szybko, a spada wolniej.<br /><br />Powołałem zmienne: zmienna_pomiar_adc i zmienna_peak_adc<br /><br />Napisałem prosty kod z myślą, że to wystarczy:<br /><br />[syntax=c]if(zmienna_pomiar_adc &gt;= zmienna_peak_adc)<br />{<br />zmienna_peak_adc = zmienna_pomiar_adc;<br />Timer2 = 1;<br />}<br /><br />else if(zmienna_peak_adc &gt; zmienna_pomiar_adc &amp;&amp; !Timer2)<br />{<br />zmienna_peak_adc--;<br />}<br /><br />Albo tak:<br /><br />if(zmienna_pomiar_adc &gt;= zmienna_peak_adc)<br />{<br />zmienna_peak_adc = zmienna_pomiar_adc;<br />Timer2 = 1;<br />}<br /><br />else if(!Timer2)<br />{<br />if(zmienna_peak_adc &gt; zmienna_pomiar_adc)<br />{<br />zmienna_peak_adc--;<br />}<br />}[/syntax]<br /><br />Podstawa czasu jest 10ms (100Hz) i jeśli dobrze rozumiem, co natworzyłem, to co 10ms przy każdym obiegu pętli (jeśli zmienna_peak_adc &gt; zmienna_pomiar_adc) następuje odejmowanie o 1. Występuje zauważalne lekkie spowolnienie opadania, ale to zbyt mało. zmiana wartości Timer2 na np. 10, czy 100 nic nie wnosi do prędkości opadania paska. Jedynie po gwałtownym cofnięciu pr-ka w zestawie atb pasek &quot;czeka&quot; ten okres (np 1s) i opadanie zaczyna się po tym czasie, ale prędkość jest nie zmienna (trochę wolniejsza ze względu na &quot;zmienna_peak_adc--;&quot;<br />Jak by to zmodyfikować, a żeby uzyskać inny efekt. Gdyby można za pomocą określonej zmiennej móc dowolnie zmieniać szybkość opadania paska. Nie proszę o 100% kodu, ale o pomoc, jak to ugryźć.<br />Myślę, że wystarczająco dokładnie opisałem, o co mi chodzi. Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10257">Robert_1967</a> — 21 mar 2021, o 11:25</p><hr />
]]></content>
</entry>
</feed>