<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=58&amp;t=8217&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-21T18:55:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=8217&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-08-21T18:55:00+01:00</updated>
<published>2014-08-21T18:55:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92326#p92326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92326#p92326"/>
<title type="html"><![CDATA[Re: Jak przypisać adres czujnika DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92326#p92326"><![CDATA[
Numery znalezionych czujników po wywołaniu funkcji <em>serch_sensors</em> umieszczane są w tablicy, która jest zdefiniowana następująco:<br />[syntax=c]uint8_t gSensorIDs&#91;MAXSENSORS&#93;&#91;OW_ROMCODE_SIZE&#93;;[/syntax]<br />gdzie <em>OW_ROMCODE_SIZE</em> jest równe 8. W programie funkcja <em>DS18X20_read_meas</em> pobiera numer z tej właśnie tablicy <em>gSensorIDs[0]</em> lub <em>gSensorIDs[1]</em> itd. Nic nie stoi jednak na przeszkodzie, aby zamiast tej tablicy używać własnych 2 tablic skoro znasz już numery:<br />[syntax=c]uint8_t czujnik_zew&#91;8&#93; = {0x0A, 0x0B, 0x0C, 0x0D, 0x10, 0x20, 0x30, 0x40};<br />uint8_t czujnik_wew&#91;8&#93; = {0xA0, 0xB0, 0xC0, 0xD0, 0x01, 0x02, 0x03, 0x04};<br /><br />if( DS18X20_OK == DS18X20_read_meas(czujnik_zew, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp();[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 21 sie 2014, o 18:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektronik]]></name></author>
<updated>2014-08-21T17:29:08+01:00</updated>
<published>2014-08-21T17:29:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92311#p92311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92311#p92311"/>
<title type="html"><![CDATA[Jak przypisać adres czujnika DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8217&amp;p=92311#p92311"><![CDATA[
Witam<br /><br />Czy mógłby mi ktoś za demonstrować w jaki sposób przypisać id danego czujnika do danej nazwy. Załóżmy, że posiadam numery id tych czujników. Chodzi o to, w programie tego jeszcze nie ma, ale jak mam dwie diody jedna sygnalizuje pomiar temp zewn. a druga wewn. to czasami temperatura wewn. jest zewn. a zewn. wewn. W jaki sposób to zrobić gdyż nie potrafię jeszcze zrobić menu aby poustawiać poszczególne czujniki. Próbowałem już na podstawie kilku materiałów podanych tutaj na forum lecz niestety nie działa.<br /><br />[syntax=c]#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 />    #include &quot;LED_wys/led_wys.h&quot;<br />    #include &quot;1Wire/ds18x20.h&quot;<br />     <br />     <br />    void display_temp(void);<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 />    uint8_t  subzero, cel, cel_fract_bits;<br />     <br />    int main(void) {<br />            //inicjalizacja<br />            InitSpi();<br />            d_led_init();<br />     <br />     <br />     <br />            //inicjalizacja timera0<br />            TCCR0A  |= (1&lt;&lt;WGM01);                  // tryb pracy CTC<br />            TCCR0B  |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); // preskaler = 1024<br />            OCR0A   = 78;                                   // przerwanie co 5ms<br />            TIMSK0  = (1&lt;&lt;OCIE0A);                  // Odblok przer CompareMatch<br />            /* przerwanie wykonywane z częstotliwością ok 10ms (100Hz) */<br />            /* do naszych celów nie musi być to bardzo dokładne 10ms */<br />     <br />     <br />     <br />                    /* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />                    czujniki_cnt = search_sensors();//zwraca iloć czujnikow w magistrali<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();<br />                    else {<br />                            cy1=11;<br />                            cy2=11;<br />                            cy3=11;<br />                            cy4=12;<br />                    }<br />     <br />                    //dokonujemy odczytu temperatury z drugiego czujnika o ile został wykryty<br />                    if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp();<br />                    else {<br />                            cy1=11;<br />                            cy2=11;<br />                            cy3=11;<br />                            cy4=12;<br />                    }<br />     <br />                    sei();<br />     <br />     <br />     <br />     <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%4) ) czujniki_cnt = search_sensors();<br />     <br />                                    /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */<br />                                    if( 1 == (sekundy%4) ) 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%4) ) {<br />                                            if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp();<br />                                            else {<br />                                                    cy1=11;<br />                                                    cy2=11;<br />                                                    cy3=11;<br />                                                    cy4=12;<br />                                            }<br />                                    }<br />                                    if( 3 == (sekundy%4) ) {<br />                                    if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp();<br />                                            else {<br />                                                    cy1=11;<br />                                                    cy2=11;<br />                                                    cy3=11;<br />                                                    cy4=12;<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 />     <br />     <br />                    } /* koniec pętli nieskończonej */<br />            }<br />     <br />            /* wyświetlanie temperatury na pozycji X w drugiej linii LCD */<br />            void display_temp(void) {<br />     <br />                    if(subzero) cy1=11;     /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                    else cy1=12;    /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                    cy2=(cel)/10;<br />                    cy3=(cel)%10;<br />                    cy4=12;<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_COMPA_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 />     <br />                            if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />     <br />                            cnt=0;  /* wyzeru licznik setnych ms */<br />                    }<br />            }[/syntax]<br /><br />Pozdrawiam<br />Elektronik<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=858">Elektronik</a> — 21 sie 2014, o 17:29</p><hr />
]]></content>
</entry>
</feed>