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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-10-08T09:57:09+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21385&amp;mode</id>
<entry>
<author><name><![CDATA[Andrzej]]></name></author>
<updated>2018-10-08T09:57:09+01:00</updated>
<published>2018-10-08T09:57:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212415#p212415</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212415#p212415"/>
<title type="html"><![CDATA[Re: termometr czterokanałowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212415#p212415"><![CDATA[
Tak będzie tobie wyświetlało ponieważ masz to niepotrzebnie. Wg mnie do usunięcia bo dubluje Ci temperaturę,<br />[syntax=c]lcd_locate(1,x);<br />               if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />               else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                 lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                 lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                 lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                 lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */[/syntax]<br /><br />A napis error będzie w prawidłowym miejscu bo go wskazujesz <br />[syntax=c]lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);[/syntax]<br /><br />Musisz sobie przerobić wg mnie <strong>display temp</strong> np tak<br />[syntax=c]void display_temp(uint8_t y, uint8_t x);[/syntax]<br /><br />oraz<br />[syntax=c]void display_temp(uint8_t y, uint8_t x) {<br />lcd_locate(y,x);<br />if(subzero) lcd_str(&quot;-&quot;);/* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else lcd_str(&quot; &quot;);/* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel);/* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;);/* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />}[/syntax]<br />i teraz możesz sobie pozycjonować gdzie chcesz np [syntax=c]display_temp(1,9);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7001">Andrzej</a> — 8 paź 2018, o 09:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcgend]]></name></author>
<updated>2018-10-07T18:33:05+01:00</updated>
<published>2018-10-07T18:33:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212402#p212402</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212402#p212402"/>
<title type="html"><![CDATA[Re: termometr czterokanałowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212402#p212402"><![CDATA[
Napis error wyświetla odpowiednio, w dobrym miejscu?<br />Myślę, że powinieneś do funkcji display_temp przekazywać x i y i wyświetlać tylko jedną wartość na raz a nie dwie w dwóch wierszach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6774">marcgend</a> — 7 paź 2018, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Robert27]]></name></author>
<updated>2018-10-07T17:46:37+01:00</updated>
<published>2018-10-07T17:46:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212398#p212398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212398#p212398"/>
<title type="html"><![CDATA[termometr czterokanałowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21385&amp;p=212398#p212398"><![CDATA[
Serdecznie witam kolegów<br />Na imię mam Robert ,mam prawie 50 lat i to jest mój pierwszy post na tym forum.<br />Elektroniką zajmuję się już bardzo długo,jakiś czas temu postanowiłem zająć się mikrokontrolerami avr kupiłem programator i książkę p.Mirka i o ile nie mam problemów z tworzeniem i projektowaniem płytek w eagle to ze zrozumieniem kodu mam problem<br />troszkę przerobiłem kod z książki z termometrem DS18B20,w oryginale wyświetlało dwie temperatury (dwa kanały) ja potrzebuję cztery, i niby mi się udało wykrywa cztery czujniki,po wyjęciu jednego lub dwóch wyświetla error,ale  w lini (0,0) i (1,0) wyświetla tak jakby z jednego czujnika podobna sytuacja jest z liniami (0,9) i (1,9) i wyswietla tak jakby z drugiego.<br />Gdzie robię błąd ? koledzy pomożecie  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />kod:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-13<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />void display_temp(uint8_t x);<br /><br /><br /><br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />int main(void) {<br /><br />DDRD |= (1&lt;&lt;PD3);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTD |= (1&lt;&lt;PD3);// załączamy podświetlenie LCD - stan wysoki<br /><br />/* ustawienie TIMER0 dla F_CPU=11,0592MHz */<br />TCCR2 |= (1&lt;&lt;WGM21);/* tryb CTC */<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS20);/* preskaler = 1024 */<br />OCR2 = 107;/* dodatkowy podział przez 108 (rej. przepełnienia) */<br />TIMSK |= (1&lt;&lt;OCIE2);/* 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 /><br />lcd_init();/* inicjalizacja LCD */<br /><br />/* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />czujniki_cnt = search_sensors();<br /><br /><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 /><br />/* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br />_delay_ms(750);<br /><br />/* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />/* wyświetlamy temperaturę gdy czujnik wykryty */<br /><br />       if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(0,0);<br />lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br /><br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(0,9);<br />lcd_str(&quot; error &quot;);<br />}<br /><br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);<br />}<br /><br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;3&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(1,9);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />sei();/* włączamy globalne przerwania */<br /><br />//lcd_locate(0,0);<br />//lcd_str_P(PSTR(&quot; T-WEW    T-ZEW&quot;)); /* wyświetl napisy w zerowej linii LCD */<br /><br />/* pętla nieskończona */<br />while(1) {<br /><br />if(s1_flag) {/* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br />if( 0 == (sekundy%3) ) {<br /><br />uint8_t *cl=(uint8_t*)gSensorIDs;// pobieramy wskaźnik do tablicy adresów czujników<br />for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy całą tablicę<br />czujniki_cnt = search_sensors();// ponownie wykrywamy ile jest czujników i zapełniamy tablicę<br />lcd_locate(0,8);<br /><br />lcd_int( czujniki_cnt );// wyświetlamy ilość czujników na magistrali<br />}<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedną sekundę po rozkazie konwersji<br /> *  dokonuj odczytu i wyświetlania temperatur z 2 czujników jeśli są podłączone, jeśli nie<br /> *  to pokaż komunikat o błędzie<br /> */<br />if( 2 == (sekundy%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(0,0);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />lcd_locate(0,9);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);<br />}<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;3&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<br />else {<br />    lcd_locate(1,9);<br />lcd_str(&quot; error &quot;);<br />}<br />}<br />}<br /><br />/* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br />} /* koniec pętli nieskończonej */<br /><br /><br /><br />/* wyświetlanie temperatury na pozycji X w drugiej linii LCD */<br />void display_temp(uint8_t x) {<br />lcd_locate(0,x);<br />if(subzero) lcd_str(&quot;-&quot;);/* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else lcd_str(&quot; &quot;);/* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel);/* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;);/* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br /><br /><br /><br /><br />lcd_locate(1,x);<br />        if(subzero) lcd_str(&quot;-&quot;);/* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />else lcd_str(&quot; &quot;);/* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />lcd_int(cel);/* wyświetl dziesiętne części temperatury  */<br />lcd_str(&quot;.&quot;);/* wyświetl kropkę */<br />lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br /><br /><br />}<br /><br /><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(TIMER2_COMP_vect)<br />{<br />static uint8_t cnt=0;/* statyczna zmienna cnt do odliczania setnych ms */<br /><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 />}[/syntax]<br /><br /><a href="https://obrazkiforum.atnel.pl/18791/8ac53889d1246a056d52c8dc8502c96d.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/18791/8ac53889d1246a056d52c8dc8502c96d.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/18791/f430697e9eedb7127c3667560a2ed4d6.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/18791/f430697e9eedb7127c3667560a2ed4d6.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/18791/1bac322c204fffb385deb76e203f47f4.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/18791/1bac322c204fffb385deb76e203f47f4.jpg" alt="Obrazek" /></a>   <br /><br />Z góry serdeczne dzięki za pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18791">Robert27</a> — 7 paź 2018, o 17:46</p><hr />
]]></content>
</entry>
</feed>