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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21524&amp;mode</id>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-12T17:37:10+01:00</updated>
<published>2018-11-12T17:37:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213653#p213653</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213653#p213653"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213653#p213653"><![CDATA[
nie nie...<br />ze stosem nie przejdzie, bo w końcu się przepełni. Lepiej do lochów i natrzeć. <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=11549">Daro69</a> — 12 lis 2018, o 17:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-12T17:25:00+01:00</updated>
<published>2018-11-12T17:25:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213652#p213652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213652#p213652"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213652#p213652"><![CDATA[
do lochów, albo na stos i spalić <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=14082">wojciechgorzolka</a> — 12 lis 2018, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-12T17:06:54+01:00</updated>
<published>2018-11-12T17:06:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213651#p213651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213651#p213651"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213651#p213651"><![CDATA[
Wojtka trzeba złapać w pułapki lochowe i natrzeć mu uszu. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Kiedy już napisze działający kod, to rozsiewa w nim jakieś straszydła-(dla ulepszenia).  <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" /> <br />Trzeba od początku sprawdzać linijkę po linijce.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br /><br /><div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />i trochę z poradników AVR Kwiat.<br /></div> to poradnik z chyba 2009r.  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 12 lis 2018, o 17:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-12T17:29:49+01:00</updated>
<published>2018-11-12T16:59:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213650#p213650</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213650#p213650"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213650#p213650"><![CDATA[
Dziękuję za podpowiedź. Nie zauważyłem ,że wrzuciłem tą funkcję w maina. Tyle godzin szukania błędu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . A uczę się z różnych źródeł. Głównie z Pana książek i poradników. Zresztą mój BB wygląda już jak wyjęty z paszczy diabła tasmańskiego, ale moja żona mówi,że takie poniszczone książki mają duszę;). Uczę się też z książki JĘZYK C SZKOŁA PROGRAMOWANIA S. Prata i  trochę z poradników AVR Kwiat. Nie byłem świadomy tego,że  SIGNAL , to jakieś przestarzałe nazewnictwo. Wszystkie uwagi biorę do siebie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Dodam jeszcze,że ogrom wiedzy przekazuje mi Daro69. TO jest dopiero pomocny gość na forum. Powinien dostać atnelowskiego nobla forumowego <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=14082">wojciechgorzolka</a> — 12 lis 2018, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-11-12T16:23:33+01:00</updated>
<published>2018-11-12T16:23:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213649#p213649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213649#p213649"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213649#p213649"><![CDATA[
<div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />SIGNAL(USART_RXC_vect)<br /></div><br />Przysięgam, naprawdę nie piszę tego złośliwie - no ale nazwy procedur przerwań &quot;SIGNAL&quot; nie stosuje się już praktycznie od 2010 roku a dzisiaj mamy 2018 rok<br /><br />W żadnej książce którą kolega posiada nie ma i być nie może przykładu z użyciem &quot;SIGNAL&quot; ... wręcz odwrotnie z nazwą jaką się należy używać &quot;ISR&quot;. Ja rozumiem, gdy ktoś rozpoczynał naukę AVR GCC przed 2010 rokiem to może mieć jakieś naleciałości i wciąż jeszcze omyłkowo używać &quot;SIGNAL&quot; No ale kolega przecież (z tego co wiem) dopiero od niedawna rozpoczął przygodę z językiem C .....<br /><br />moje pytanie - skąd kolega czepie zatem wiedzę ?, że w swoich kodach używa &quot;SIGNAL&quot; .... tym bardziej, że to wręcz proszenie się o błędy w kodzie że aż strach. Jeśli z jakichś kocich kursów internetowych? to może warto je odstawić ?<br /><br />...ooo ale teraz po tych fragmentach<br /><br />[syntax=c]loop_until_bit_is_set(UCSRA,TXC);[/syntax]<br /><br />widzę, że kolega jednak &quot;jedzie&quot; na mega kocim kursie C .... no cóż - będzie bolało troszkę, dłużej będzie schodziło czasu - no ale co tam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> też się w końcu da coś i z tym zrobić<br /><br />A na koniec:<br /><br /><div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />Następnie za mainem napisałem ciało funkcji wysyłania :<br /></div><br />Nie, mi się wydaje, że umieściłeś tę swoją funkcję wewnątrz funkcji main() a nie poza jej ciałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 lis 2018, o 16:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-12T16:04:52+01:00</updated>
<published>2018-11-12T16:04:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213648#p213648</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213648#p213648"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213648#p213648"><![CDATA[
najprościej to sprawdzić wstawiając wywołanie funkcji print_char(coś); w innym miejscu kodu.<br />będziesz wiedział czy wysyła czy nie,<br />bo może problemem są warunki w których jest umiejscowiona ta funkcja, a może sam sposób odczytu tego co dotarło. ?<br />trzeba się pobawić debugger'em.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 12 lis 2018, o 16:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-12T15:14:18+01:00</updated>
<published>2018-11-12T15:14:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213647#p213647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213647#p213647"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213647#p213647"><![CDATA[
Dlaczego funkcja print_char() nie chce przesłać znaku? czym to może być spowodowane. Bo jak analizuję zwój kod, ta funkcja powinna wysyłać ciągle znak.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 12 lis 2018, o 15:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-12T12:09:30+01:00</updated>
<published>2018-11-12T12:09:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213646#p213646</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213646#p213646"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213646#p213646"><![CDATA[
hej. Kolejny etap przede mną .<br />Dopisałem kilka linijek kodu do funkcjonalności enkodera z wyświetlaczem.<br /><a href="https://obrazkiforum.atnel.pl/14082/7e9879b14018cbf4d33c2e34f0bb45f1.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/14082/7e9879b14018cbf4d33c2e34f0bb45f1.jpg" alt="Obrazek" /></a><br />Pokręcając enkoderem przesuwam zaokrąklony pasek w dół i w górę i dodatkowo klikając na przycisk enkodera potrafię włączać i wyłączać kropki na wyświetlaczu, dodatkowo każda kropka odpowiada jednej diodzie na zestawie atb. Działa ta opcja bardzo dobrze. Ale widzę,że termometr mi przekłamuje temperaturę. Wyświetla na wyświetlaczu 29 stopni, a w pokoju mam około 25 stopni celcjusza. Wiecie może z czego to może wynikać? <br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 13 maj 2018<br /> *      Author: amaru1<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;util/delay_basic.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br />#include &quot;MK_ST7565_COG/mk_st7565_cog.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />//#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />//------od wifi-----------------------<br />#define LED (1&lt;&lt;PB1)<br />#define LED_ON PORTB &amp;= ~LED<br />#define LED_OFF PORTB |= LED<br />#define KEY2 (1&lt;&lt;PC1)<br /><br />uint8_t key_lock3;<br />uint8_t zmienna=0;<br />uint8_t toglowanie_wifi=1;<br /><br />void print_char(char znak); //FUNKCJA WYSYŁĄNIA I ODBIERANIA DANYCH<br />//--------koniec wifi------------------------<br /><br />#define KLAW_ENCODERA (1&lt;&lt;PC0)<br />//------------------------------<br />#define LED_1 (1&lt;&lt;PB7)<br />#define LED_1_TOG PORTB ^= LED_1<br />#define LED_1_ON PORTB |= LED_1   // TEN LED MIGA !!!!!!!!<br />#define LED_1_OFF PORTB &amp;=~ LED_1<br /><br />#define LED_2 (1&lt;&lt;PB6)<br />#define LED_2_TOG PORTB ^= LED_2<br />#define LED_2_ON PORTB |= LED_2<br />#define LED_2_OFF PORTB &amp;=~ LED_2<br /><br />#define LED_3 (1&lt;&lt;PB5)<br />#define LED_3_TOG PORTB ^= LED_3<br />#define LED_3_ON PORTB |= LED_3<br />#define LED_3_OFF PORTB &amp;=~ LED_3<br /><br />#define LED_4 (1&lt;&lt;PB4)<br />#define LED_4_TOG PORTB ^= LED_4<br />#define LED_4_ON PORTB |= LED_4<br />#define LED_4_OFF PORTB &amp;=~ LED_4<br /><br />#define LED_5 (1&lt;&lt;PB3)<br />#define LED_5_TOG PORTB ^= LED_5<br />#define LED_5_ON PORTB |= LED_5<br />#define LED_5_OFF PORTB &amp;=~ LED_5<br /><br />#define LED_6 (1&lt;&lt;PB2)<br />#define LED_6_TOG PORTB ^= LED_6<br />#define LED_6_ON PORTB |= LED_6<br />#define LED_6_OFF PORTB &amp;=~ LED_6<br />//------------------------------<br />uint8_t tmr1;<br />uint8_t sek; /* licznik sekund 0-2 */<br />char tab&#91;20&#93;;<br />//---------------------------temperatura------------------------------<br />uint8_t czujniki_cnt; /* ilość czujników na magistrali */<br />volatile uint8_t s1_flag; /* flaga tyknięcia timera co 1 sekundę */<br />uint8_t sek; /* licznik sekund 0-2 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />//-------------------------------------------------------------------------<br />//----funkcje wyświetlają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_1(void);<br />void pasek_enkodera_2(void);<br />void pasek_enkodera_3(void);<br />void pasek_enkodera_4(void);<br />void pasek_enkodera_5(void);<br />//----funkcje wyświetlają zakrywają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_10(void);<br />void pasek_enkodera_20(void);<br />void pasek_enkodera_30(void);<br />void pasek_enkodera_40(void);<br />void pasek_enkodera_50(void);<br />//----funkcje wyświetlające cztery kropki przy pozycji meny<br />void kropka_0(void);//kropka wskazująca jeden<br />void kropka_1(void);//kropka wskazująca jeden<br />void kropka_2(void);//kropka wskazująca jeden<br />void kropka_3(void);//kropka wskazująca jeden<br />void kropka_4(void);//kropka wskazująca jeden<br /><br />void kropka_0_wygaszona(void);//kropka wskazująca wygaszona<br />void kropka_1_wygaszona(void);//kropka wskazująca wygaszona<br />void kropka_2_wygaszona(void);//kropka wskazująca wygaszona<br />void kropka_3_wygaszona(void);//kropka wskazująca wygaszona<br />void kropka_4_wygaszona(void);//kropka wskazująca wygaszona<br /><br /><br />void linia_nad_temp(void); //linia wyświetlana nad temperaturą lodóki<br /><br />//#define KLAWISZ_1 (1&lt;&lt;PD0)<br />//volatile uint8_t znak;<br />#define co_ile 2<br />#define dlugosc_tablicy 20<br />volatile uint8_t index_tablicy = 0;<br />volatile uint8_t poprzedni = 0;<br />volatile uint8_t aktualny = 0;<br />inline void enkoderek(void); //funkcja do odbsługi enkodera<br />inline void klawisz_encodera(void);//funkcja do włączania i wyłączania urządzeń<br /><br />//int koszyk&#91;10&#93;;<br />// uint8_t aktualny;<br />// uint8_t poprzedni;<br />uint8_t enkoder = 0;<br />volatile uint8_t text;<br />// uint8_t tab1&#91;&#93; = {2,0,3,1};<br />uint8_t tablica&#91;dlugosc_tablicy + 1&#93;;<br />//uint8_t TAB&#91;11&#93;;<br />uint8_t i;<br />uint8_t l;<br />uint8_t pre;<br />uint8_t key_lock;<br />uint8_t toglowanie_0 = 0;<br />uint8_t toglowanie_1 = 0;<br />uint8_t toglowanie_2 = 0;<br />uint8_t toglowanie_3 = 0;<br />uint8_t toglowanie_4 = 0;<br />void wyswietl_dane(void);<br /><br />uint8_t zmienna_paska; //wartosc zmiennej wskazuje,w której lini<br />//menu zostanie wyświetlony pasek (lewa strona ekranu)<br /><br />volatile uint16_t Timer1; /* timery programowe 100Hz */<br />volatile uint16_t Timer2; /* timery programowe 100Hz */<br /><br />int main(void) {<br />//--------------miejsce na iniclalizację wifi--------------------------------------<br /><br />DDRC &amp;= ~KEY2;<br />PORTC |= KEY2;<br />DDRB |= LED;<br />//----------------------------------<br />UBRRL = 5;<br />//UCSRB |= (1&lt;&lt;RXEN); //WŁĄCZENI ODBIORNIKA  RX<br />UCSRB |= (1&lt;&lt;TXEN);// NADAJNIK TX<br />UCSRB |= (1&lt;&lt;RXCIE); //ODBLOKOWANIE PREZERWANIA ZAKOŃCZENIA ODBIORU<br />UCSRC |= (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);//|(3&lt;&lt;UCSZ0); //USTAWIENIE FORMATU RAMKI,8 BITÓW DANYCH,1 BIT STOPU.<br />   //USTAWIAMY URSEL NA JEDEN, PONIEWAŻ REJESTR UCSRC JEST POWIĄZANY<br /> //Z INNYM REJESTREM.<br /><br />//-----------------------------------------------------<br /><br />DDRB |= (1&lt;&lt;PB7)|(1&lt;&lt;PB6)|(1&lt;&lt;PB5)|(1&lt;&lt;PB4)|(1&lt;&lt;PB3)|(1&lt;&lt;PB2);<br />PORTB |= (1&lt;&lt;PB7)|(1&lt;&lt;PB6)|(1&lt;&lt;PB5)|(1&lt;&lt;PB4)|(1&lt;&lt;PB3)|(1&lt;&lt;PB2); //podanie stanu wysokiego na PORTB - wygaszenie wszystkich diod<br /><br />PORTC |= KLAW_ENCODERA;<br />DDRC &amp;= ~KLAW_ENCODERA;<br /><br />        PORTA |= (1&lt;&lt;PA0);//pin A encodera<br />        PORTA |= (1&lt;&lt;PA1);//pin B encodera<br /><br /><br />        //DDRB = 0xFF;    // wejscie-wyjście - ustaw jako wyjście<br />        //<br />        DDRD = 0xFF;<br /><br />        /* Timer2 – inicjalizacja przerwania co 10ms */<br />        TCCR2 |= (1 &lt;&lt; WGM21);                  // tryb pracy CTC<br />        TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20); // preskaler = 1024<br />        OCR2 = 107;                         // przerwanie porównania co 10ms (100Hz)<br />        TIMSK |= (1 &lt;&lt; OCIE2);               // Odblokowanie przerwania CompareMatch<br /><br />//      /* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />//      TCCR0 |= (1&lt;&lt;WGM01);                            /* tryb CTC */<br />//      TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);           /* preskaler = 1024 */<br />//      OCR0 = 107;                                                     /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />//      TIMSK |= (1&lt;&lt;OCIE0);                            /* zezwolenie na przerwanie CompareMatch */<br />        /* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />        /* do naszych celów nie musi być to bardzo dokładne 10ms */<br />        /* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />        czujniki_cnt = search_sensors();<br />        /* wysyłamy rozkaz wykonania pomiaru temperatury<br />         * do wszystkich czujników na magistrali 1Wire<br />         * zakładając, że zasilane są w trybie NORMAL,<br />         * gdyby był to tryb Parasite, należałoby użyć<br />         * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />        /* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br /><br />        st7565_init(20);<br />        st7565_cls();<br />        st7565_puts_P(25, 00, PSTR(&quot;Lampa szczelinowa&quot;), 1, 1, 0);//<br />        st7565_puts_P(25, 10, PSTR(&quot;Autorefraktometr&quot;), 1, 1, 0); //<br />        st7565_puts_P(25, 20, PSTR(&quot;Rzutnik/Foropter&quot;), 1, 1, 0); //tekst wyświetlany na ekranie<br />        st7565_puts_P(25, 30, PSTR(&quot;Fiksator&quot;), 1, 1, 0);         //<br />        st7565_puts_P(25, 40, PSTR(&quot;Oświetlenie 100%&quot;), 1, 1, 0); //<br />        st7565_puts_P(5, 56, PSTR(&quot;Temp.lodówki&quot;), 1, 1, 0);      //<br />        linia_nad_temp();         //linia nad temperaturą<br /><br />        st7565_display();<br />        sei();<br />        /* włączamy globalne przerwania */<br />        _delay_ms(500);<br />        while (1) {<br /><br /><br />//                zmienna_paska = enkoderek();//zmienna paska odpowiada za przesuwanie się paska z lewej strony ekranu<br />                //PORTB = ~text; //wynik z enkodera przypisuję do portu B - zapalają się kontrolnie diody<br /><br />//----------funkcje odpowiadające za przesuwanie się paska po lewej stronie ekranu----------------<br />//-------------------MENU-------------------------------------------------------------------------<br />                if (text == 0) { //jeśli zmienna równa zero, to pasek na pierwszej pozycji na ekranie<br />                        pasek_enkodera_1();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_30();<br />                        pasek_enkodera_40();<br />                        pasek_enkodera_50();<br />                } else if (text == 1) { //jeśłi zmienna równa 1, to pasek na drugirej pozycji na ekranie<br />                        pasek_enkodera_2();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_30();<br />                        pasek_enkodera_40();<br />                        pasek_enkodera_50();<br />                } else if (text == 2) { //jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />                        pasek_enkodera_3();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_40();<br />                        pasek_enkodera_50();<br />                } else if (text == 3) { //jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />                        pasek_enkodera_4();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_30();<br />                        pasek_enkodera_50();<br />                } else if (text == 4) { //jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />pasek_enkodera_5();<br />pasek_enkodera_10();<br />pasek_enkodera_20();<br />pasek_enkodera_30();<br />pasek_enkodera_40();<br />                }<br /><br />                wyswietl_dane();<br /><br />                st7565_display();<br /><br /><br />//------TUTAJ WRZUCIŁEM TO CO MIAŁEM W PRZERWANIU--------------------<br />                if (!Timer1) {<br /><br />                        Timer1 = 1000;<br />                        if (sek &lt; 2)<br />                                sek++;<br />                        else<br />                                sek = 0;<br /><br />                        if (sek == 0)<br />                                czujniki_cnt = search_sensors();         //szukanie czujnika<br /><br />                        if (sek == 1) {<br />                                DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />                                LED_1_TOG;<br />                        }<br /><br />                        if (sek == 2) {<br /><br />                                if ( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />                                                                &amp;cel_fract_bits)) {<br />                                        //wyświetlanie danych<br />                                }<br />                        }<br />                }<br />        }<br />   //-------funkcja wi fi -------------------------------------------<br /><br />        //CIAŁO FUNKCJI WYSYŁAINA DANYCH:<br />        void print_char(char znak){    //WYSYŁAMY ZNAK &quot;Z&quot;<br />        if (bit_is_set(UCSRA,UDRE)){ //JEŚLI BIT JEST USTAWIONY NA JEDEN<br />        UDR=znak; //WYŚLIJ ZNAK<br />        loop_until_bit_is_set(UCSRA,TXC);// CZEKAMY.WYKONUJE SIĘ PĘTLĘ loop,<br />         //AŻ SŁOWO ZOSTANIE WYSŁANE.<br />         //WTEDY FLAGA MA WARTOŚC ZERO<br />        }<br />        }<br /><br />  //------------------------------------------------------------------<br /><br />}<br /><br />void wyswietl_dane(void) {<br />        int8_t ac = cel;<br />        if (subzero)<br />                ac *= -1;<br />        sprintf(tab, &quot;%d.%d&quot; &quot;\xfe&quot; &quot;C&quot;, ac, cel_fract_bits); //gdy czujnik podłączony<br />        st7565_puts(92, 56, tab, 1, 1, 0); // cel_fract_bits &lt;- to są dziesiętne celcjusza<br />        st7565_puts_P(85, 56, PSTR(&quot;\x01&quot;), 1, 1, 0); //ac &lt;- to są stopnie celcjusza<br />}<br /><br />void pasek_enkodera_1(void) {<br />        st7565_fillCircle(0, 3, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 3, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 3, 3, 1);//pasek enkodera<br />}<br />void pasek_enkodera_2(void) {<br />        st7565_fillCircle(0, 13, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 13, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 13, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_3(void) {<br />        st7565_fillCircle(0, 23, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 23, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 23, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_4(void) {<br />        st7565_fillCircle(0, 33, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 33, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 33, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_5(void) {<br />        st7565_fillCircle(0, 43, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 43, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 43, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_10(void) {<br />        st7565_fillCircle(0, 3, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 3, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 3, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_20(void) {<br />        st7565_fillCircle(0, 13, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 13, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 13, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_30(void) {<br />        st7565_fillCircle(0, 23, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 23, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 23, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_40(void) {<br />        st7565_fillCircle(0, 33, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 33, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 33, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_50(void) {<br />        st7565_fillCircle(0, 43, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 43, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 43, 3, 0);         //pasek enkodera<br />}<br />void kropka_0(void) {<br />        st7565_fillCircle(17, 3, 3, 1);         // pierwsza kropka wskazująca<br />}<br />void kropka_1(void) {<br />        st7565_fillCircle(17, 13, 3, 1);         // druga kropka wskazująca<br />}<br />void kropka_2(void) {<br />        st7565_fillCircle(17, 23, 3, 1);         // trzecia kropka wskazująca<br />}<br />void kropka_3(void) {<br />        st7565_fillCircle(17, 33, 3, 1);         // czwarta kropka wskazująca<br />}<br />void kropka_4(void) {<br />        st7565_fillCircle(17, 43, 3, 1);         // piąta kropka wskazująca<br />}<br /><br />void kropka_0_wygaszona(void) {<br />        st7565_fillCircle(17, 3, 3, 0);         // pierwsza kropka wygaszona<br />}<br />void kropka_1_wygaszona(void) {<br />        st7565_fillCircle(17, 13, 3, 0);         // druga kropka wygaszona<br />}<br />void kropka_2_wygaszona(void) {<br />        st7565_fillCircle(17, 23, 3, 0);         // trzecia kropka wygaszona<br />}<br />void kropka_3_wygaszona(void) {<br />        st7565_fillCircle(17, 33, 3, 0);         // czwarta kropka wygaszona<br />}<br />void kropka_4_wygaszona(void) {<br />        st7565_fillCircle(17, 43, 3, 0);         // piąta kropka wygaszona<br />}<br /><br />void linia_nad_temp(void) {<br />        st7565_drawLine(145, 50, 0, 50, 1);         //linia nad temperaturą<br />        st7565_drawLine(146, 51, 0, 51, 1);         //linia nad tempereturą<br />}<br /><br />inline void klawisz_encodera(void){<br />//---linia pierwsza------<br />if(text == 0){<br />if(toglowanie_0==1){<br />kropka_0();<br />LED_2_OFF;<br />}<br />else if(toglowanie_0==0){<br />kropka_0_wygaszona();<br />LED_2_ON;<br />}<br /><br />if( !key_lock &amp;&amp; !(PINC &amp; KLAW_ENCODERA) )//KLAWISZ enkodera<br />{<br /> key_lock=1;<br />   toglowanie_0 ^=1;<br />}<br /> else if( key_lock &amp;&amp; (PINC &amp; KLAW_ENCODERA) )<br />key_lock++;<br /><br />}<br />//---linia druga--------<br />if(text == 1){<br />if(toglowanie_1==1){<br />kropka_1();<br />LED_3_OFF;<br />}<br />else if(toglowanie_1==0){<br />kropka_1_wygaszona();<br />LED_3_ON;<br />}<br /><br />if( !key_lock &amp;&amp; !(PINC &amp; KLAW_ENCODERA) )//KLAWISZ enkodera<br />{<br /> key_lock=1;<br />   toglowanie_1 ^=1;<br />}<br /> else if( key_lock &amp;&amp; (PINC &amp; KLAW_ENCODERA) )<br />key_lock++;<br /><br />}<br />//---linia trzecia-------<br />if(text == 2){<br />if(toglowanie_2==1){<br />kropka_2();<br />LED_4_OFF;<br />}<br />else if(toglowanie_2==0){<br />kropka_2_wygaszona();<br />LED_4_ON;<br />}<br /><br />if( !key_lock &amp;&amp; !(PINC &amp; KLAW_ENCODERA) )//KLAWISZ enkodera<br />{<br /> key_lock=1;<br />   toglowanie_2 ^=1;<br />}<br /> else if( key_lock &amp;&amp; (PINC &amp; KLAW_ENCODERA) )<br />key_lock++;<br /><br />}<br />//---linia czwarta-------<br />if(text == 3){<br />if(toglowanie_3==1){<br />kropka_3();<br />LED_5_OFF;<br />}<br />else if(toglowanie_3==0){<br />kropka_3_wygaszona();<br />LED_5_ON;<br />}<br /><br />if( !key_lock &amp;&amp; !(PINC &amp; KLAW_ENCODERA) )//KLAWISZ enkodera<br />{<br /> key_lock=1;<br />   toglowanie_3 ^=1;<br />}<br /> else if( key_lock &amp;&amp; (PINC &amp; KLAW_ENCODERA) )<br />key_lock++;<br /><br />}<br />//---linia piąta-------<br />if(text == 4){<br />if(toglowanie_4==1){<br />kropka_4();<br />LED_6_OFF;<br />}<br />else if(toglowanie_4==0){<br />kropka_4_wygaszona();<br />LED_6_ON;<br />}<br /><br />if( !key_lock &amp;&amp; !(PINC &amp; KLAW_ENCODERA) )//KLAWISZ enkodera<br />{<br /> key_lock=1;<br />   toglowanie_4 ^=1;<br />}<br /> else if( key_lock &amp;&amp; (PINC &amp; KLAW_ENCODERA) )<br />key_lock++;<br /><br />}<br />}<br /><br />inline void enkoderek(void) {<br /><br />// &lt;------------------------------------------------------------------<br /><br />        const uint8_t tab1&#91;&#93; = { 2, 0, 3, 1 };<br /><br />        aktualny = PINA &amp; 3; //do zmiennej &quot;aktualny&quot; przypisuję aktualną pozycję blaszki enkodera<br /><br />        if (aktualny != poprzedni) { //jeśli altuala pozycja enkodera nie równa się poprzedniej<br />                if (tab1&#91;aktualny&#93; == poprzedni) { //do tablicy wrzucam aktualną pozycję jednej blaszki enkodera<br />                        enkoder++;<br />                        if (!(enkoder % 8))<br /><br />                                if (text &lt; 4)<br />                                        text++;<br /><br />                } else {<br />                        enkoder--;<br />                        if (!(enkoder % 8))<br /><br />                                if (text)<br />                                        text--;<br />                }<br />                poprzedni = aktualny; //przylisuję w zmienną &quot;poprzednmi&quot; nową, aktualną wartośc<br /><br />                if (!(enkoder % 4)) {<br /><br />                        tablica&#91;index_tablicy&#93; = text;<br /><br />                        if (index_tablicy &lt; dlugosc_tablicy)<br />                                index_tablicy++;<br />                }<br />        }<br />}<br /><br /><br /><br />///* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />///* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />//ISR(TIMER0_COMP_vect){<br />//      static uint8_t cnt=0;   /* statyczna zmienna cnt do odliczania setnych ms */<br />//      if(++cnt&gt;99)    /* gdy licznik ms &gt; 99 (minęła 1 sekunda) */<br />//      {       s1_flag=1;      /* ustaw flagę tyknięcia sekundy */<br />//              sekundy++;      /* zwiększ licznik sekund */<br />//              if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />//              cnt=0;  /* wyzeru licznik setnych ms */<br />//      }<br />//}<br />//   ***TIMERY PROGRAMOWE***<br /><br />ISR(TIMER2_COMP_vect) {<br />        uint16_t n;<br /><br />        n = Timer1; /* 100Hz Timer1 */<br />        if (n)<br />        Timer1 = --n;<br />        n = Timer2;             /* 100Hz Timer2 */<br />        if (n) Timer2 = --n;<br /><br />        enkoderek(); // &lt;-- funkcja enkoderek wykonuje się w przerwaniu 100 razy nasekundę---------------<br />        klawisz_encodera();// &lt;-- funkcja wykonuje się w przerwaniu 100 razy nasekundę---------------<br /><br />        //-------wi fi------------------------------------------------------------<br /><br />            if(toglowanie_wifi==1){<br />            print_char('z');<br />            }<br />            if(toglowanie_wifi==0){<br />            print_char('d');<br />            }<br />            //----------------------------------------<br />                    if( !key_lock3 &amp;&amp; !(PINC &amp; KEY2) )//KLAWISZ PIERWSZY<br />                    {<br />                     key_lock3=1;<br />                       toglowanie_wifi ^=1;<br />                    }<br />                         else if( key_lock3 &amp;&amp; (PINC &amp; KEY2) )<br />                        key_lock3++;<br /><br />        //---------------------------------------------------------------------------------------<br />}<br /><br />//-----------przerwanie  od wifi ---------------------------------<br /><br />//----------------------------PRZERWANIE------------------------<br />SIGNAL(USART_RXC_vect)<br />{<br />if(UDR=='z'){<br />LED_ON;<br />}<br />else {<br />LED_OFF;<br />}<br />}<br /><br />//-----------------------------------------------------------[/syntax]<br /><br />Druga kwestia jest taka,że dodałem do mojego kodu obsługę atnel wifi, oraz wysyłanie znaków (RS232), w zależności jak togluję zmienną. Raz wysyłam literę &quot;d&quot;, a raz literę &quot;z&quot;.<br />dodałem poniższy kod. Jeśłi wgram go do dwóch zestawów ATB, to działa prawidłowo.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay_basic.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br />#define LED (1&lt;&lt;PB1)<br />#define LED_ON PORTB &amp;= ~LED<br />#define LED_OFF PORTB |= LED<br />#define KEY2 (1&lt;&lt;PC1)<br /><br />uint8_t key_lock3;<br />uint8_t zmienna=0;<br />uint8_t toglowanie_wifi=1;<br /><br />void print_char(char znak); //FUNKCJA WYSYŁĄNIA I ODBIERANIA DANYCH<br /><br />int main(void)<br />{<br /> DDRC &amp;= ~KEY2;<br />    PORTC |= KEY2;<br />    DDRB |= LED;<br />//----------------------------------<br />UBRRL = 5;<br />//UCSRB |= (1&lt;&lt;RXEN); //WŁĄCZENI ODBIORNIKA  RX<br />UCSRB |= (1&lt;&lt;TXEN);// NADAJNIK TX<br />UCSRB |= (1&lt;&lt;RXCIE); //ODBLOKOWANIE PREZERWANIA ZAKOŃCZENIA ODBIORU<br />UCSRC |= (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);//|(3&lt;&lt;UCSZ0); //USTAWIENIE FORMATU RAMKI,8 BITÓW DANYCH,1 BIT STOPU.<br />   //USTAWIAMY URSEL NA JEDEN, PONIEWAŻ REJESTR UCSRC JEST POWIĄZANY<br /> //Z INNYM REJESTREM.<br />_delay_ms(5000);<br />sei(); // włącz globalną obsługę przerwań<br /><br />while(1)<br />{<br />if(toglowanie_wifi==1){<br />print_char('z');<br />}<br />if(toglowanie_wifi==0){<br />print_char('d');<br />}<br />//----------------------------------------<br />        if( !key_lock3 &amp;&amp; !(PINC &amp; KEY2) )//KLAWISZ PIERWSZY<br />        {<br />         key_lock3=1;<br />           toglowanie_wifi ^=1;<br />        }<br />             else if( key_lock3 &amp;&amp; (PINC &amp; KEY2) )<br />            key_lock3++;<br />}<br /><br />}<br /><br />//CIAŁO FUNKCJI WYSYŁAINA DANYCH:<br />void print_char(char znak){    //WYSYŁAMY ZNAK &quot;Z&quot;<br />if (bit_is_set(UCSRA,UDRE)){ //JEŚLI BIT JEST USTAWIONY NA JEDEN<br />UDR=znak; //WYŚLIJ ZNAK<br />loop_until_bit_is_set(UCSRA,TXC);// CZEKAMY.WYKONUJE SIĘ PĘTLĘ loop,<br /> //AŻ SŁOWO ZOSTANIE WYSŁANE.<br /> //WTEDY FLAGA MA WARTOŚC ZERO<br />}<br />}<br />//----------------------------PRZERWANIE------------------------<br />SIGNAL(USART_RXC_vect)<br />{<br />if(UDR=='z'){<br />LED_ON;<br />}<br />else {<br />LED_OFF;<br />}<br />}[/syntax] <br />Po połączeniu tych dwóch kodów, niestety mój zestaw ATB z wyświetlaczem COG nic nie wysyła. A sprawdzam to w taki sposób, że pierwszy moduł wifi mam ustawiony jako STA i mam go wpięty do zestawy ATB z COGiem, drugi moduł Atnel WIfi (jako AP) mam wpięty do przejściówki RS232 Atnel. i nie widzę aby dioda na przjściówce migała podczas otrzymywania danych z ATB (dioda Tx).<br /><br />A w taki sposób wpisałem kod z wysyłania danych RS232, to kodu Z enkoderem i cogiem:<br /><br />Tą część kodu  wpisałem przed funkcją main:<br />[syntax=c]#define LED (1&lt;&lt;PB1)<br />#define LED_ON PORTB &amp;= ~LED<br />#define LED_OFF PORTB |= LED<br />#define KEY2 (1&lt;&lt;PC1)<br /><br />uint8_t key_lock3;<br />uint8_t zmienna=0;<br />uint8_t toglowanie_wifi=1;<br /><br />void print_char(char znak); //FUNKCJA WYSYŁĄNIA I ODBIERANIA DANYCH[/syntax]<br /><br />Tą część wpisałem w funkcję main():<br />[syntax=c]DDRC &amp;= ~KEY2;<br />    PORTC |= KEY2;<br />    DDRB |= LED;<br />//----------------------------------<br />UBRRL = 5;<br />//UCSRB |= (1&lt;&lt;RXEN); //WŁĄCZENI ODBIORNIKA  RX<br />UCSRB |= (1&lt;&lt;TXEN);// NADAJNIK TX<br />UCSRB |= (1&lt;&lt;RXCIE); //ODBLOKOWANIE PREZERWANIA ZAKOŃCZENIA ODBIORU<br />UCSRC |= (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);//|(3&lt;&lt;UCSZ0); //USTAWIENIE FORMATU RAMKI,8 BITÓW DANYCH,1 BIT STOPU.<br />   //USTAWIAMY URSEL NA JEDEN, PONIEWAŻ REJESTR UCSRC JEST POWIĄZANY<br /> //Z INNYM REJESTREM.<br />_delay_ms(500);<br />sei(); // włącz globalną obsługę przerwań[/syntax]<br /><br />tą część wpisałem w pętlę główną while(1):<br />[syntax=c]if(toglowanie_wifi==1){<br />print_char('z');<br />}<br />if(toglowanie_wifi==0){<br />print_char('d');<br />}<br />//----------------------------------------<br />        if( !key_lock3 &amp;&amp; !(PINC &amp; KEY2) )//KLAWISZ PIERWSZY<br />        {<br />         key_lock3=1;<br />           toglowanie_wifi ^=1;<br />        }<br />             else if( key_lock3 &amp;&amp; (PINC &amp; KEY2) )<br />            key_lock3++;[/syntax]<br /><br />Następnie za mainem napisałem ciało funkcji wysyłania :<br />[syntax=c]//CIAŁO FUNKCJI WYSYŁAINA DANYCH:<br />void print_char(char znak){    //WYSYŁAMY ZNAK &quot;Z&quot;<br />if (bit_is_set(UCSRA,UDRE)){ //JEŚLI BIT JEST USTAWIONY NA JEDEN<br />UDR=znak; //WYŚLIJ ZNAK<br />loop_until_bit_is_set(UCSRA,TXC);// CZEKAMY.WYKONUJE SIĘ PĘTLĘ loop,<br /> //AŻ SŁOWO ZOSTANIE WYSŁANE.<br /> //WTEDY FLAGA MA WARTOŚC ZERO<br />}[/syntax]<br /><br />Oraz na samym końcu programu dopisałem przerwanie:<br />[syntax=c]//----------------------------PRZERWANIE------------------------<br />SIGNAL(USART_RXC_vect)<br />{<br />if(UDR=='z'){<br />LED_ON;<br />}<br />else {<br />LED_OFF;<br />}<br />}[/syntax]<br />NO i niestety dane nie chcą się wysłać <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=14082">wojciechgorzolka</a> — 12 lis 2018, o 12:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-07T22:31:06+01:00</updated>
<published>2018-11-07T22:31:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213536#p213536</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213536#p213536"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213536#p213536"><![CDATA[
Spoko, Wojtek. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Rozumiem radochę z działającego kodu, ale do optymalizacji i poprawek jeszcze sporo by się znalazło. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Przede wszystkim usunęliśmy zdublowane wykonywanie funkcji i wielokrotne kopiowanie wartości z jednej zmiennej do drugiej. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Ale fajnie że to Cię cieszy, że nie znichecasz się do analizowania kodu i wyciągania wniosków. <br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 7 lis 2018, o 22:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-07T22:14:30+01:00</updated>
<published>2018-11-07T22:14:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213534#p213534</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213534#p213534"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213534#p213534"><![CDATA[
hej koledzy. Kodzik opanowany i poprawiony przez Daro69. Czyli chodziło o optymalizację kodu. Po szczegółowych konsultacjach z Darkiem , kod działa idealnie. nic się nie blokuje, nic się nie psuje. A ja już zabierałem się za zamianę wyświetlacza z COGa na lcd 4x20. Na szczęście Darek uchronił mnie od tej decyzji. za co jestem mu bardzo wdzięczny. A oto poprawiony kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br /><br />#include &quot;MK_ST7565_COG/mk_st7565_cog.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />#define LED_1_PIN (1&lt;&lt;PD0)<br />#define LED_1_TOG PORTD ^= LED_1_PIN<br />uint8_t tmr1;<br />uint8_t sek; /* licznik sekund 0-2 */<br />char tab&#91;20&#93;;<br />//---------------------------temperatura------------------------------<br />uint8_t czujniki_cnt; /* ilość czujników na magistrali */<br />volatile uint8_t s1_flag; /* flaga tyknięcia timera co 1 sekundę */<br />uint8_t sek; /* licznik sekund 0-2 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />//-------------------------------------------------------------------------<br />//----funkcje wyświetlają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_1(void);<br />void pasek_enkodera_2(void);<br />void pasek_enkodera_3(void);<br />void pasek_enkodera_4(void);<br />//----funkcje wyświetlają zakrywają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_10(void);<br />void pasek_enkodera_20(void);<br />void pasek_enkodera_30(void);<br />void pasek_enkodera_40(void);<br />//----funkcje wyświetlające cztery kropki przy pozycji meny<br />void kropka_1(void);<br />void kropka_2(void);<br />void kropka_3(void);<br />void kropka_4(void);<br /><br />void linia_nad_temp(void); //linia wyświetlana nad temperaturą lodóki<br /><br />//#define KLAWISZ_1 (1&lt;&lt;PD0)<br /><br />#define co_ile 2<br />#define dlugosc_tablicy 20<br />volatile uint8_t index_tablicy = 0;<br />volatile uint8_t poprzedni = 0;<br />volatile uint8_t aktualny = 0;<br />inline void enkoderek(void); //funkcja do odbsługi enkodera<br /><br />//int koszyk&#91;10&#93;;<br />// uint8_t aktualny;<br />// uint8_t poprzedni;<br />uint8_t enkoder = 0;<br />volatile uint8_t text;<br />// uint8_t tab1&#91;&#93; = {2,0,3,1};<br />uint8_t tablica&#91;dlugosc_tablicy + 1&#93;;<br />//uint8_t TAB&#91;11&#93;;<br />uint8_t i;<br />uint8_t l;<br />uint8_t pre;<br />void wyswietl_dane(void);<br /><br />uint8_t zmienna_paska; //wartosc zmiennej wskazuje,w której lini<br />//menu zostanie wyświetlony pasek (lewa strona ekranu)<br /><br />volatile uint16_t Timer1; /* timery programowe 100Hz */<br /><br />int main(void) {<br />        PORTA |= (1 &lt;&lt; PA0);                                        //pin A encodera<br />        PORTA |= (1 &lt;&lt; PA1);                                        //pin B encodera<br /><br />        DDRB = 0xFF;    // wejscie-wyjście - ustaw jako wyjście<br />        PORTB = 0xFF; //podanie stanu wysokiego na PORTB - wygaszenie wszystkich diod<br />        DDRD = 0xFF;<br /><br />        /* Timer2 – inicjalizacja przerwania co 10ms */<br />        TCCR2 |= (1 &lt;&lt; WGM21);                  // tryb pracy CTC<br />        TCCR2 |= (1 &lt;&lt; CS22) | (1 &lt;&lt; CS20); // preskaler = 1024<br />        OCR2 = 107;                         // przerwanie porównania co 10ms (100Hz)<br />        TIMSK |= (1 &lt;&lt; OCIE2);               // Odblokowanie przerwania CompareMatch<br /><br />//      /* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />//      TCCR0 |= (1&lt;&lt;WGM01);                            /* tryb CTC */<br />//      TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);           /* preskaler = 1024 */<br />//      OCR0 = 107;                                                     /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />//      TIMSK |= (1&lt;&lt;OCIE0);                            /* zezwolenie na przerwanie CompareMatch */<br />        /* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />        /* do naszych celów nie musi być to bardzo dokładne 10ms */<br />        /* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />        czujniki_cnt = search_sensors();<br />        /* wysyłamy rozkaz wykonania pomiaru temperatury<br />         * do wszystkich czujników na magistrali 1Wire<br />         * zakładając, że zasilane są w trybie NORMAL,<br />         * gdyby był to tryb Parasite, należałoby użyć<br />         * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />        /* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br /><br />        st7565_init(20);<br />        st7565_cls();<br />        st7565_puts_P(25, 00, PSTR(&quot;Lampa szczelinowa&quot;), 1, 1, 0);                //<br />        st7565_puts_P(25, 10, PSTR(&quot;Autorefraktometr&quot;), 1, 1, 0); //<br />        st7565_puts_P(25, 20, PSTR(&quot;Rzutnik&quot;), 1, 1, 0); //tekst wyświetlany na ekranie<br />        st7565_puts_P(25, 30, PSTR(&quot;Fiksator&quot;), 1, 1, 0);                     //<br />        st7565_puts_P(16, 40, PSTR(&quot;Oświetlenie 100%&quot;), 1, 1, 0);    //<br />        st7565_puts_P(5, 56, PSTR(&quot;Temp.lodówki&quot;), 1, 1, 0);         //<br />        kropka_1();         // pierwsza kropka wskazująca<br />        kropka_2();         // druga kropka wskazująca<br />        kropka_3();         // trzecia kropka wskazująca<br />        kropka_4();         // czwarta kropka wskazująca<br />        linia_nad_temp();         //linia nad temperaturą<br /><br />        st7565_display();<br />        sei();<br />        /* włączamy globalne przerwania */<br />        _delay_ms(70);<br />        while (1) {<br />                // &lt;---------------------------------------------------------------------------------------<br />//                zmienna_paska = enkoderek();//zmienna paska odpowiada za przesuwanie się paska z lewej strony ekranu<br />                PORTB = ~text; //wynik z enkodera przypisuję do portu B - zapalają się kontrolnie diody<br /><br />//----------funkcje odpowiadające za przesuwanie się paska po lewej stronie ekranu----------------<br />//-------------------MENU-------------------------------------------------------------------------<br />                if (text == 0) { //jeśli zmienna równa zero, to pasek na pierwszej pozycji na ekranie<br />                        pasek_enkodera_1();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_30();<br />                        pasek_enkodera_40();<br />                } else if (text == 1) { //jeśłi zmienna równa 1, to pasek na drugirej pozycji na ekranie<br />                        pasek_enkodera_2();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_30();<br />                        pasek_enkodera_40();<br />                } else if (text == 2) { //jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />                        pasek_enkodera_3();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_40();<br />                } else if (text == 3) { //jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />                        pasek_enkodera_4();<br />                        pasek_enkodera_10();<br />                        pasek_enkodera_20();<br />                        pasek_enkodera_30();<br />                }<br /><br />                wyswietl_dane();<br /><br />                st7565_display();<br /><br />//------TUTAJ WRZUCIŁEM TO CO MIAŁEM W PRZERWANIU--------------------<br />                if (!Timer1) {<br /><br />                        Timer1 = 1000;<br />                        if (sek &lt; 2)<br />                                sek++;<br />                        else<br />                                sek = 0;<br /><br />                        if (sek == 0)<br />                                czujniki_cnt = search_sensors();         //szukanie czujnika<br /><br />                        if (sek == 1) {<br />                                DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />                                LED_1_TOG;<br />                        }<br /><br />                        if (sek == 2) {<br /><br />                                if ( DS18X20_OK<br />                                                == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />                                                                &amp;cel_fract_bits)) {<br />                                        //wyświetlanie danych<br />                                }<br />                        }<br />                }<br />        }<br />}<br /><br />void wyswietl_dane(void) {<br />        int8_t ac = cel;<br />        if (subzero)<br />                ac *= -1;<br />        sprintf(tab, &quot;%d.%d&quot; &quot;\xfe&quot; &quot;C&quot;, ac, cel_fract_bits); //gdy czujnik podłączony<br />        st7565_puts(92, 56, tab, 1, 1, 0); // cel_fract_bits &lt;- to są dziesiętne celcjusza<br />        st7565_puts_P(85, 56, PSTR(&quot;\x01&quot;), 1, 1, 0); //ac &lt;- to są stopnie celcjusza<br />}<br /><br />void pasek_enkodera_1(void) {<br />        st7565_fillCircle(0, 3, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 3, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 3, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_2(void) {<br />        st7565_fillCircle(0, 13, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 13, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 13, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_3(void) {<br />        st7565_fillCircle(0, 23, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 23, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 23, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_4(void) {<br />        st7565_fillCircle(0, 33, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(3, 33, 3, 1);         //pasek enkodera<br />        st7565_fillCircle(6, 33, 3, 1);         //pasek enkodera<br />}<br />void pasek_enkodera_10(void) {<br />        st7565_fillCircle(0, 3, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 3, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 3, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_20(void) {<br />        st7565_fillCircle(0, 13, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 13, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 13, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_30(void) {<br />        st7565_fillCircle(0, 23, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 23, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 23, 3, 0);         //pasek enkodera<br />}<br />void pasek_enkodera_40(void) {<br />        st7565_fillCircle(0, 33, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(3, 33, 3, 0);         //pasek enkodera<br />        st7565_fillCircle(6, 33, 3, 0);         //pasek enkodera<br />}<br />void kropka_1(void) {<br />        st7565_fillCircle(17, 3, 3, 1);         // pierwsza kropka wskazująca<br />}<br />void kropka_2(void) {<br />        st7565_fillCircle(17, 13, 3, 1);         // druga kropka wskazująca<br />}<br />void kropka_3(void) {<br />        st7565_fillCircle(17, 23, 3, 1);         // trzecia kropka wskazująca<br />}<br />void kropka_4(void) {<br />        st7565_fillCircle(17, 33, 3, 1);         // czwarta kropka wskazująca<br />}<br />void linia_nad_temp(void) {<br />        st7565_drawLine(145, 50, 0, 50, 1);         //linia nad temperaturą<br />        st7565_drawLine(146, 51, 0, 51, 1);         //linia nad tempereturą<br />}<br /><br />inline void enkoderek(void) { // &lt;------------------------------------------------------------------<br /><br />        const uint8_t tab1&#91;&#93; = { 2, 0, 3, 1 };<br /><br />        aktualny = PINA &amp; 3; //do zmiennej &quot;aktualny&quot; przypisuję aktualną pozycję blaszki enkodera<br /><br />        if (aktualny != poprzedni) { //jeśli altuala pozycja enkodera nie równa się poprzedniej<br />                if (tab1&#91;aktualny&#93; == poprzedni) { //do tablicy wrzucam aktualną pozycję jednej blaszki enkodera<br />                        enkoder++;<br />                        if (!(enkoder % 4))<br /><br />                                if (text &lt; 3)<br />                                        text++;<br /><br />                } else {<br />                        enkoder--;<br />                        if (!(enkoder % 4))<br /><br />                                if (text)<br />                                        text--;<br />                }<br />                poprzedni = aktualny; //przylisuję w zmienną &quot;poprzednmi&quot; nową, aktualną wartośc<br /><br />                if (!(enkoder % 4)) {<br /><br />                        tablica&#91;index_tablicy&#93; = text;<br /><br />                        if (index_tablicy &lt; dlugosc_tablicy)<br />                                index_tablicy++;<br />                }<br />        }<br />}<br /><br />///* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />///* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />//ISR(TIMER0_COMP_vect){<br />//      static uint8_t cnt=0;   /* statyczna zmienna cnt do odliczania setnych ms */<br />//      if(++cnt&gt;99)    /* gdy licznik ms &gt; 99 (minęła 1 sekunda) */<br />//      {       s1_flag=1;      /* ustaw flagę tyknięcia sekundy */<br />//              sekundy++;      /* zwiększ licznik sekund */<br />//              if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />//              cnt=0;  /* wyzeru licznik setnych ms */<br />//      }<br />//}<br />//   ***TIMERY PROGRAMOWE***<br /><br />ISR(TIMER2_COMP_vect) {<br />        uint16_t n;<br /><br />        n = Timer1; /* 100Hz Timer1 */<br />        if (n)<br />                Timer1 = --n;<br /><br />        enkoderek(); // &lt;-- funkcja enkoderek wykonuje się w przerwaniu 100 razy nasekundę---------------<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 7 lis 2018, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-06T18:27:01+01:00</updated>
<published>2018-11-06T18:27:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213472#p213472</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213472#p213472"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213472#p213472"><![CDATA[
dzięki Darku za podpowiedź. Faktycznie zrobiłem błąd i ciągle zerowałem zmienną, zamiast ją zwiększać. Teraz temperatura się wyświetla i działa prawidłowo. Została jeszcze kwestia kręceniem enkoderem, ale zaraz się za to zabieram, może znajdę błąd <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 42 minutach ]</span></strong><br /><br />Znalazłem błąd w programie. Chodzi  o ustawienie pinów enkodera jako wejścia mam podłączone piny do portu A PA0, PA1, a w kodzie mam ustawiony tylko jeden pin enkodera jako wejście. <br />Teraz działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />))))))))))))))))))))))))))) No i teraz mogę pójść spokojnie zrobić sobie kolację <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=14082">wojciechgorzolka</a> — 6 lis 2018, o 18:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-06T10:13:16+01:00</updated>
<published>2018-11-06T10:13:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213460#p213460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213460#p213460"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213460#p213460"><![CDATA[
widzę jeszcze,<br />[syntax=c]zmienną paska = enkoder();<br />PORTB = ~enkoder();<br />// po co wywoływać tu dwa razy funkcję, skoro jej rezultat już mamy w 'zmiennapaska'?[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 6 lis 2018, o 10:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-06T08:42:56+01:00</updated>
<published>2018-11-06T08:42:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213457#p213457</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213457#p213457"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213457#p213457"><![CDATA[
Może źle widzę w tapatalku. :/<br />W ifie !timer1, widzę:<br />ciągle sek =O oraz sek++.<br />Ciagle pozostawia 1. :/<br /><br />Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 6 lis 2018, o 08:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-05T23:06:18+01:00</updated>
<published>2018-11-05T23:06:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213450#p213450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213450#p213450"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213450#p213450"><![CDATA[
Cześć koledzy. Walczę dzisiaj od 19stej z moim kodem. I wyrzuciłem przerwanie z programu. Przerwania zastąpiłem Timerem programowym. Po zmianie przerwań na Timer programowy wyświetla mi ciągle temperaturę 0.0 stopni Celcjusza, enkoder już się nie blokuje i działa płynnie, jednaj niezależnie jak go pokręcę, to zlicza zmienną tylko w jedną stronę, czyli tylko ją dodaje ( nie wiem czemu nie odejmuje- kręcąc w przeciwnym kierunku)<br />Timer programowy działa i togluje mi diodę co jedną sekundę. <br />A poza tym nie poddaję się  w walce z tym programem, jednak mózg mi się już dzisiaj lasuje i muszę wyjść z psem na spacer, aby odetchnąć. Przeczytałem też cały rozdział z multipleksowaniem w BB ( tam jest o przerwaniach).<br />Na dzisiaj nie mam już pomysłu, co z tym kodem jest nie tak. Może poratujecie mnie jakąś małą podpowiedzią?<br />Czy w ogóle w tym kodzie mogę zrezygnować z przerwań?<br /><br />Tutaj mam inicjalizację Timera:<br /><br />[syntax=c]/* Timer2 – inicjalizacja przerwania co 10ms */<br />    TCCR2   |= (1&lt;&lt;WGM21);                  // tryb pracy CTC<br />    TCCR2   |= (1&lt;&lt;CS22)|(1&lt;&lt;CS20); // preskaler = 1024<br />    OCR2    = 107;                                  // przerwanie porównania co 10ms (100Hz)<br />    TIMSK   |= (1&lt;&lt;OCIE2);                  // Odblokowanie przerwania CompareMatch[/syntax]<br /><br /><br />Tutaj jest timer programowy:<br />[syntax=c]//   ***TIMERY PROGRAMOWE***<br /><br />ISR(TIMER2_COMP_vect){<br />    uint16_t n;<br /><br />    n = Timer1;             /* 100Hz Timer1 */<br />    if (n) Timer1 = --n;<br /><br />}[/syntax]<br /><br />A tak wygląda timer wraz z kodem,który znajduje się w Timer1:<br />[syntax=c]//------TUTAJ WRZUCIŁEM TO CO MIAŁEM W PRZERWANIU--------------------<br />if(  !Timer1 ){<br />Timer1 = 1000;<br />        sek = 0;<br />        sek++;<br />        enkoderek();<br /><br />if( sek==1   ){<br />DS18X20_start_meas ( DS18X20_POWER_EXTERN, NULL );<br />LED_1_TOG;<br />}<br />if( sek==0  ) czujniki_cnt = search_sensors();//szukanie czujnika<br /><br />if( sek==2  ){<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />{<br />wyswietl_dane();//wyświetlanie danych<br />}<br />sek = 0;<br />}<br /><br />}[/syntax]<br /><br /><br />A tutaj jest kod w całości:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br /><br />#include &quot;MK_ST7565_COG/mk_st7565_cog.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />#define LED_1_PIN (1&lt;&lt;PD0)<br />#define LED_1_TOG PORTD ^= LED_1_PIN<br />uint8_t tmr1;<br />uint8_t sek;/* licznik sekund 0-2 */<br />char tab&#91;20&#93;;<br />//---------------------------temperatura------------------------------<br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br /> uint8_t sek;/* licznik sekund 0-2 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />//-------------------------------------------------------------------------<br />//----funkcje wyświetlają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_1(void);<br />void pasek_enkodera_2(void);<br />void pasek_enkodera_3(void);<br />void pasek_enkodera_4(void);<br />//----funkcje wyświetlają zakrywają pasek wskazujący pozycję w menu-------------------<br />void pasek_enkodera_10(void);<br />void pasek_enkodera_20(void);<br />void pasek_enkodera_30(void);<br />void pasek_enkodera_40(void);<br />//----funkcje wyświetlające cztery kropki przy pozycji meny<br />void kropka_1(void);<br />void kropka_2(void);<br />void kropka_3(void);<br />void kropka_4(void);<br /><br />void linia_nad_temp(void);//linia wyświetlana nad temperaturą lodóki<br /><br />//#define KLAWISZ_1 (1&lt;&lt;PD0)<br /><br />#define co_ile 2<br />#define dlugosc_tablicy 20<br />uint8_t enkoderek();//funkcja do odbsługi enkodera<br /><br />//int koszyk&#91;10&#93;;<br /> uint8_t aktualny;<br /> uint8_t poprzedni;<br /> uint8_t enkoder=0;<br /> uint8_t text;<br /> uint8_t tab1&#91;&#93; = {2,0,3,1};<br /> uint8_t tablica&#91;dlugosc_tablicy+1&#93;;<br /> //uint8_t TAB&#91;11&#93;;<br /> uint8_t i;<br /> uint8_t l;<br /> uint8_t pre;<br />void wyswietl_dane(void);<br /><br /> uint8_t zmienna_paska;//wartosc zmiennej wskazuje,w której lini<br />        //menu zostanie wyświetlony pasek (lewa strona ekranu)<br /><br /> volatile uint16_t Timer1 ;       /* timery programowe 100Hz */<br /><br />int main(void)<br />{<br />    PORTA |= (1&lt;&lt;PA0);//pin A encodera<br />    PORTA |= (1&lt;&lt;PA1);//pin B encodera<br />DDRB = 0xFF;// wejscie-wyjście - ustaw jako wyjście<br />PORTB = 0xFF;//podanie stanu wysokiego na PORTB - wygaszenie wszystkich diod<br />DDRD = 0xFF;<br /><br />    /* Timer2 – inicjalizacja przerwania co 10ms */<br />    TCCR2   |= (1&lt;&lt;WGM21);                  // tryb pracy CTC<br />    TCCR2   |= (1&lt;&lt;CS22)|(1&lt;&lt;CS20); // preskaler = 1024<br />    OCR2    = 107;                                  // przerwanie porównania co 10ms (100Hz)<br />    TIMSK   |= (1&lt;&lt;OCIE2);                  // Odblokowanie przerwania CompareMatch<br /><br /><br />///* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />//TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />//TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />//OCR0 = 107;/* dodatkowy podział przez 108 (rej. przepełnienia) */<br />//TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 10ms */<br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br />/* wysyłamy rozkaz wykonania pomiaru temperatury<br /> * do wszystkich czujników na magistrali 1Wire<br /> * zakładając, że zasilane są w trybie NORMAL,<br /> * gdyby był to tryb Parasite, należałoby użyć<br /> * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />/* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br /><br /><br /><br /><br /><br />DDRA |= (1&lt;&lt;PA1);<br />LED_OFF;<br /><br />st7565_init(20);<br />st7565_cls();<br />st7565_puts_P( 25, 00, PSTR(&quot;Lampa szczelinowa&quot;),1 , 1, 0 );//<br />st7565_puts_P( 25, 10, PSTR(&quot;Autorefraktometr&quot;),1 , 1, 0 ); //<br />st7565_puts_P( 25, 20, PSTR(&quot;Rzutnik&quot;),1, 1, 0 );//tekst wyświetlany na ekranie<br />st7565_puts_P( 25, 30, PSTR(&quot;Fiksator&quot;), 1, 1, 0 );//<br />st7565_puts_P( 16, 40, PSTR(&quot;Oświetlenie 100%&quot;), 1, 1, 0 );//<br />st7565_puts_P( 5, 56, PSTR(&quot;Temp.lodówki&quot;), 1, 1, 0 );//<br />kropka_1();// pierwsza kropka wskazująca<br />kropka_2();// druga kropka wskazująca<br />kropka_3();// trzecia kropka wskazująca<br />kropka_4();// czwarta kropka wskazująca<br />linia_nad_temp();//linia nad temperaturą<br /><br />st7565_display();<br />sei();/* włączamy globalne przerwania */<br />_delay_ms(70);<br />while(1)<br />{<br /><br />wyswietl_dane();<br />zmienna_paska = enkoderek();//zmienna paska odpowiada za przesuwanie się paska z lewej strony ekranu<br />PORTB = ~enkoderek();//wynik z enkodera przypisuję do portu B - zapalają się kontrolnie diody<br /><br />st7565_display();<br />//----------funkcje odpowiadające za przesuwanie się paska po lewej stronie ekranu----------------<br />//-------------------MENU-------------------------------------------------------------------------<br />if(zmienna_paska == 0){//jeśli zmienna równa zero, to pasek na pierwszej pozycji na ekranie<br />pasek_enkodera_1();<br />pasek_enkodera_20();<br />pasek_enkodera_30();<br />pasek_enkodera_40();<br />}<br />else if(zmienna_paska == 1){//jeśłi zmienna równa 1, to pasek na drugirej pozycji na ekranie<br />pasek_enkodera_2();<br />pasek_enkodera_10();<br />pasek_enkodera_30();<br />pasek_enkodera_40();<br />}<br />else if(zmienna_paska == 2){//jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />pasek_enkodera_3();<br />pasek_enkodera_10();<br />pasek_enkodera_20();<br />pasek_enkodera_40();<br />}<br />else if(zmienna_paska == 3){//jeśli zmienna równa 2, to pasek na trzeciej pozycji na ekranie<br />pasek_enkodera_4();<br />pasek_enkodera_10();<br />pasek_enkodera_20();<br />pasek_enkodera_30();<br />}<br /><br />//------TUTAJ WRZUCIŁEM TO CO MIAŁEM W PRZERWANIU--------------------<br />if(  !Timer1 ){<br />Timer1 = 1000;<br />        sek = 0;<br />        sek++;<br />        enkoderek();<br /><br />if( sek==1   ){<br />DS18X20_start_meas ( DS18X20_POWER_EXTERN, NULL );<br />LED_1_TOG;<br />}<br />if( sek==0  ) czujniki_cnt = search_sensors();//szukanie czujnika<br /><br />if( sek==2  ){<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />{<br />wyswietl_dane();//wyświetlanie danych<br />}<br />sek = 0;<br />}<br /><br />}<br />}<br />}<br /><br />void wyswietl_dane (void){<br />int8_t ac = cel;<br />if( subzero ) ac *= -1;<br />sprintf(tab, &quot;%d.%d&quot;&quot;\xfe&quot;&quot;C&quot;, ac, cel_fract_bits);//gdy czujnik podłączony<br />st7565_puts( 92, 56, tab, 1, 1, 0 );                // cel_fract_bits &lt;- to są dziesiętne celcjusza<br />st7565_puts_P( 85, 56, PSTR(&quot;\x01&quot;), 1, 1, 0 );//ac &lt;- to są stopnie celcjusza<br /><br />}<br /><br />void pasek_enkodera_1(void){<br />st7565_fillCircle( 0, 3, 3,1 );//pasek enkodera<br />st7565_fillCircle( 3, 3, 3,1 );//pasek enkodera<br />st7565_fillCircle( 6, 3, 3,1 );//pasek enkodera<br />}<br />void pasek_enkodera_2(void){<br />st7565_fillCircle( 0, 13, 3,1 );//pasek enkodera<br />st7565_fillCircle( 3, 13, 3,1 );//pasek enkodera<br />st7565_fillCircle( 6, 13, 3,1 );//pasek enkodera<br />}<br />void pasek_enkodera_3(void){<br />st7565_fillCircle( 0, 23, 3,1 );//pasek enkodera<br />st7565_fillCircle( 3, 23, 3,1 );//pasek enkodera<br />st7565_fillCircle( 6, 23, 3,1 );//pasek enkodera<br />}<br />void pasek_enkodera_4(void){<br />st7565_fillCircle( 0, 33, 3,1 );//pasek enkodera<br />st7565_fillCircle( 3, 33, 3,1 );//pasek enkodera<br />st7565_fillCircle( 6, 33, 3,1 );//pasek enkodera<br />}<br />void pasek_enkodera_10(void){<br />st7565_fillCircle( 0, 3, 3,0 );//pasek enkodera<br />st7565_fillCircle( 3, 3, 3,0 );//pasek enkodera<br />st7565_fillCircle( 6, 3, 3,0 );//pasek enkodera<br />}<br />void pasek_enkodera_20(void){<br />st7565_fillCircle( 0, 13, 3,0 );//pasek enkodera<br />st7565_fillCircle( 3, 13, 3,0 );//pasek enkodera<br />st7565_fillCircle( 6, 13, 3,0 );//pasek enkodera<br />}<br />void pasek_enkodera_30(void){<br />st7565_fillCircle( 0, 23, 3,0 );//pasek enkodera<br />st7565_fillCircle( 3, 23, 3,0 );//pasek enkodera<br />st7565_fillCircle( 6, 23, 3,0 );//pasek enkodera<br />}<br />void pasek_enkodera_40(void){<br />st7565_fillCircle( 0, 33, 3,0 );//pasek enkodera<br />st7565_fillCircle( 3, 33, 3,0 );//pasek enkodera<br />st7565_fillCircle( 6, 33, 3,0 );//pasek enkodera<br />}<br />void kropka_1(void){<br />st7565_fillCircle( 17, 3, 3,1 );// pierwsza kropka wskazująca<br />}<br />void kropka_2(void){<br />st7565_fillCircle( 17, 13, 3,1 );// druga kropka wskazująca<br />}<br />void kropka_3(void){<br />st7565_fillCircle( 17, 23, 3,1 );// trzecia kropka wskazująca<br />}<br />void kropka_4(void){<br />st7565_fillCircle( 17, 33, 3,1 );// czwarta kropka wskazująca<br />}<br />void linia_nad_temp(void){<br />st7565_drawLine( 145, 50, 0, 50, 1 );//linia nad temperaturą<br />st7565_drawLine( 146, 51, 0, 51, 1 );//linia nad tempereturą<br />}<br /><br />uint8_t enkoderek(){<br />static uint8_t index_tablicy=0;<br />//uint8_t tab&#91;index_tablicy&#93;;<br />    aktualny = PINA &amp; 3;//do zmiennej &quot;aktualny&quot; przypisuję aktualną pozycję blaszki enkodera<br />    if (aktualny != poprzedni){//jeśli altuala pozycja enkodera nie równa się poprzedniej<br />            if( tab1&#91;aktualny&#93; == poprzedni){//do tablicy wrzucam aktualną pozycję jednej blaszki enkodera<br />               enkoder++;<br />               if ((enkoder % 4)==0)  text++;<br />               if( text &gt; 4 ) text=4;<br />            }<br />            else{<br />                enkoder--;<br />                if ((enkoder % 4)==0)  text--;<br />                if( text == 255 ) text=0;<br />            }<br />            poprzedni = aktualny;//przylisuję w zmienną &quot;poprzednmi&quot; nową, aktualną wartośc<br /><br />            if((enkoder % 4)==0){<br />            tablica&#91;index_tablicy&#93; = text;<br />            if(index_tablicy &lt; dlugosc_tablicy)<br />                index_tablicy++;<br />            }<br />    }<br />    return text;<br />}<br /><br />///* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />///* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />//ISR(TIMER0_COMP_vect){<br />//static uint8_t cnt=0;/* statyczna zmienna cnt do odliczania setnych ms */<br />//if(++cnt&gt;99) /* gdy licznik ms &gt; 99 (minęła 1 sekunda) */<br />//{s1_flag=1;/* ustaw flagę tyknięcia sekundy */<br />//sekundy++;/* zwiększ licznik sekund */<br />//if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />//cnt=0;/* wyzeru licznik setnych ms */<br />//}<br />//}<br />//   ***TIMERY PROGRAMOWE***<br /><br />ISR(TIMER2_COMP_vect){<br />    uint16_t n;<br /><br />    n = Timer1;             /* 100Hz Timer1 */<br />    if (n) Timer1 = --n;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 5 lis 2018, o 23:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-05T18:18:36+01:00</updated>
<published>2018-11-05T18:18:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213422#p213422</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213422#p213422"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213422#p213422"><![CDATA[
Darku, ta funkcja , o której piszesz rysuję koło, więc łatwiej ją właśnie użyć<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Nie mieszasz, tylko gonisz z programem nauczania hehe. Ale dzięki Tobie zabrałem się w końcu za wskaźniki;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 5 lis 2018, o 18:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-05T18:03:47+01:00</updated>
<published>2018-11-05T18:03:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213421#p213421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213421#p213421"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213421#p213421"><![CDATA[
mam jeszcze zapytanko, żeby nie było za łatwo. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />wiem że fajne są funkcje &quot;st7565_fillCircle(...&quot;,<br />ale czy nie wygodniej byłoby narysować jeden kształt kursora i wstawiać go w odpowiedniej wysokości : 3, 13, 23, 33.?<br />nawet jeżeli nie ma gotowej funkcji- (znając Mirka to pewnie jest <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ), można taką złożyć z - na bank istniejącej jakiejś &quot;set_pixel()&quot;.<br />...............................................................<br />kurczę, może za szybko trajdolę moimi skrótami myślowymi i przez to niechcący Tobie mieszam.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 5 lis 2018, o 18:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-05T08:35:24+01:00</updated>
<published>2018-11-05T08:35:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213392#p213392</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213392#p213392"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213392#p213392"><![CDATA[
Łojć.<br />W przerwaniu to tylko sprawdzanie nóżek enkodera i wysypanie wartości + lub -,<br />ale nie realizacja funkcji z tym związanych.<br />pozostałe funkcje w chronologii pętli.<br /><br />Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 5 lis 2018, o 08:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-05T07:20:44+01:00</updated>
<published>2018-11-05T07:20:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213380#p213380</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213380#p213380"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213380#p213380"><![CDATA[
po pracy będę poprawiał kodzik <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=14082">wojciechgorzolka</a> — 5 lis 2018, o 07:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-11-05T07:16:31+01:00</updated>
<published>2018-11-05T07:16:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213378#p213378</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213378#p213378"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213378#p213378"><![CDATA[
<div class="quotetitle">wojciechgorzolka napisał(a):</div><div class="quotecontent"><br />A w moim kodzie, w przerwaniu wykonuję sprawdzenie czujnika temperatury, odczyt z czujnika i wyświetlenie temperatury i trwa to około trzech sekund.<br /></div><br /><br />powiem krótko <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> 'Ooooooooooooh My God'<br /><br />Jeśli ten kod napisałeś sobie, żeby sprawdzić czy w Bluebooku piszą prawdę - no to teraz już chyba sprawdziłeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... hmmm? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Niektóre początkujące osoby umieszczają chociażby samo wyświetlanie na zwykłym alfanumerycznym LCD i to już jest tysiąc razy za długa operacja w przerwaniu (bo przesłanie danych do COG jest o wiele dłuższe) , a to co kolega <strong><span style="color: #0080FF">napeklował </span></strong> <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tu do przerwania .... to po prostu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... no ale cóż, nie ma to jak sprawdzić na własnej skórze - troszkę może to dłużej potrwa ale człowiek lepiej zapamięta na przyszłość. Pomyśl sobie czym się różni pisanie kodu liniowo od wpeklowania wszystkiego w jedno przerwanie ? ..... odpowiedź krótka - niczym, jest nawet gorzej - bo już nawet w takiej sytuacji nie masz dostępnych innych przerwań ..... No chyba że pójdziesz jeszcze dalej i włączysz sobie atrybut ISR_NO_BLOCK dla przerwania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to wtedy zobaczysz zupełny armagedon przy takim podejściu do przerwań.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 lis 2018, o 07:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-11-05T07:16:03+01:00</updated>
<published>2018-11-05T07:16:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213377#p213377</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213377#p213377"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213377#p213377"><![CDATA[
Oczywiście że ma to wpływ. Rób tak by temperaturę odczytywać w pętli głównej. A przerwanie jak będzie to wtedy sie przerwie. Podpatrz jak to Mirek zrobił w projekcie wielozadaniowym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 5 lis 2018, o 07:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-05T06:50:10+01:00</updated>
<published>2018-11-05T06:50:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213376#p213376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213376#p213376"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213376#p213376"><![CDATA[
Naszła mnie taka myśl...<br />W BB jest napisane, aby przerwania były jak najkrótsze. A w moim kodzie, w przerwaniu wykonuję sprawdzenie czujnika temperatury, odczyt z czujnika i wyświetlenie temperatury i trwa to około trzech sekund. Czy ja dobrze rozumuję,że przez tą operację pętla główna jest w &quot;bezruchu&quot; przez ten czas? czyli nic się nie wykona przez trzy sekundy i dlatego mam kłopot z obsługą enkodera? Czy zmiana kodu, aby temperatura była sprawdzana i odczytywana w krótszym czasie i rzadziej- rozwiąże mój problem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 5 lis 2018, o 06:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-04T22:48:11+01:00</updated>
<published>2018-11-04T22:48:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213372#p213372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213372#p213372"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213372#p213372"><![CDATA[
ale jest o SPI <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=14082">wojciechgorzolka</a> — 4 lis 2018, o 22:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-04T22:43:39+01:00</updated>
<published>2018-11-04T22:43:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213371#p213371</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213371#p213371"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213371#p213371"><![CDATA[
Ale o funkcjach do st7565 nie ma w BB<br /> :/<br /><br />Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 4 lis 2018, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2018-11-04T22:12:32+01:00</updated>
<published>2018-11-04T22:12:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213370#p213370</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213370#p213370"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213370#p213370"><![CDATA[
ooo dziękuję Darku. poprawię to w kodzie. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i zobaczę czy pomogło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />muszę jeszcze doczytać w BB na ten temat <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=14082">wojciechgorzolka</a> — 4 lis 2018, o 22:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2018-11-04T22:11:01+01:00</updated>
<published>2018-11-04T22:11:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213369#p213369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213369#p213369"/>
<title type="html"><![CDATA[Re: enkoder + wyświetlacz COG - kłopot z wyświetlaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21524&amp;p=213369#p213369"><![CDATA[
bez wgryzania się w bibliotekę Mirka, bo nie mam. :/<br />przeanalizował bym na początku kolejność: <br />1. zapełnianie bufora funkcjami...<br />2. moment wysłania bufora do wyświetlacza,<br />3. moment czyszczenia bufora przed ponownym zapełnieniem.<br />domyślam się że funkcje, <br />st7565_fillCircle, pasek_enkodera_ ... itp wypełniają bufor<br />st7565_display(); wysyła,<br />st7565_cls(); czyści bufor. ?<br />przed zapełnieniem nowymi danymi trzeba czyścić. a tego nie widzę. może się tylko nadpisują?<br />takie spostrzeżenia.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 4 lis 2018, o 22:11</p><hr />
]]></content>
</entry>
</feed>