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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-02T12:07:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9052&amp;mode</id>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-11-02T12:07:00+01:00</updated>
<published>2014-11-02T12:07:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101934#p101934</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101934#p101934"/>
<title type="html"><![CDATA[Re: Mały, Duży problem .]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101934#p101934"><![CDATA[
<div class="quotetitle">Morcinek92 napisał(a):</div><div class="quotecontent"><br />Problem rozwiązałem. <br /><br />Zasilanie do modułu miałem bezpośrednio z baterii. Co było błędem , pin VCC podpiąłem pod pin avr. <br />i w programie zmieniłem ze podczas pomiaru włączam zasilanie i po pomiarze wyłączam. <br />Efekt: <br />pobór prądu 0,5mA w trybie power down, natomiast przy nadawaniu 21mA . <br /><br />Pozdrawiam<br /></div><br /><br />kolego no oczywiście mozna tak zrobić, jednocześnie nie wiem czy to było Twoim głównym problemem. Poprostu problem ominąłeś wyłączając rfm przez pin uC. Ja mam podpięty pin VCC do baterii i nie ma problemu (pobór na poziomie 0,3mA), wnioskuje ze masz cos zle w kodzie a poprzez wyłączanie pinem problem znika. W sumie osiągnąłeś cel.<br />Tylko pomysl sobie.... jakbyś naprzykład chciał &quot;nadsłuchiwac&quot; sygnałów to jak?? na wyłączonym rfm nie odbierzesz nic. A paczka danych nie będzie czekać aż włączysz moduł i wtedy łaskawie sobie przyjdzie <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />Tutaj mysle ze dobrze byłoby wykozystac przerwania odebrania/wytsłania oferowane przez moduł RFM i moze sprzęgnąć je z przerwaniami w uC, sam tak bym chciał to rozwiązać, bo poki co pobór 0,3mA jest dla mnie troche za duzy jeszcze.<br /><br />Nie żebym Cie krytykował <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale masz ogromnyyy podbór w trybie Power Down, u mnie jest mniejszy w trybie Power Save.<br />Jesli dobrze przeliczyłem masz pobór na poziomie 500uA, zobacz sobie na wykresy w nocie. Przy włączonym WDT i tym trybie przy 3V powinieneś mieć ok. 18-20uA. Z wykresów zobczysz tez ze sam WDT zzera Ci 98% energii w tym trybie ; ) bo widać ze z wyłączonym WDT pobór jest na poziomie 1-2 uA. Mi kiedyś tez koledzy zwrócili uwagę na te wykresy, są bardzo pomocne.<br /><br />Jaka prędkością napędzasz procka?, wyłączaj na pewno ADC i komparaktor bo z tych samych tabelek dowiesz sie ile te moduły pobierają prądu... a jak zasilasz z baterii to masz duze znaczenie. Jak z zasilacza to pewnie bym sie tym nie przejął i bym zostawił pobór nawet 2 mA, z takim poborem to by bateria zjechała w ciagu 2-3 dni <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />co do kodu to ja robie tak:<br /><br />[syntax=c]&lt;avr/io.h&gt;<br />(...)<br /><br />int main( void ){<br /><br />   //ustawienie timera do odlicznia czasu<br />   //inicjacja modułów<br />   //ustawienie trybu powersave<br />   //inicjcja RF73<br />   //wybór kanału<br />   //wybór trybu - TX lub RX<br />   //start czujnika DS18b20<br /><br />while(1){<br /><br />if(!timer_flaga){<br />  search_sensors();//szukanie DS18b20<br /> DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(750);<br />      if(DS18X20_OK == DS18X20_read_meas(cz_piec, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ){<br />//przypisnie wyników do kolejnych elementów tablicy<br />} else <br />{<br /> //wyrzuc błąd np. do zmiennej<br />}<br /><br />           rfm73_buffer_write(rejestr_nadawczy_bez_ack,tablica,liczba danych do przesłania);<br />           timer_rfm73=1;//ustawienie czasu powtorzeń<br />   }<br />sleep_mode();<br />      }<br />   }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 2 lis 2014, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-11-01T22:08:19+01:00</updated>
<published>2014-11-01T22:08:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101887#p101887</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101887#p101887"/>
<title type="html"><![CDATA[Re: Mały, Duży problem .]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101887#p101887"><![CDATA[
No zasilanie ADC wyłączasz. Procka usypiasz.<br />A co z RFM? To on Ci podsysa ten upragniony prądzik.<br />Jego też musisz wysłać spać <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=189">MirkoT</a> — 1 lis 2014, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Morcinek92]]></name></author>
<updated>2014-11-01T22:07:21+01:00</updated>
<published>2014-11-01T22:07:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101886#p101886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101886#p101886"/>
<title type="html"><![CDATA[Re: Mały, Duży problem .]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101886#p101886"><![CDATA[
Problem rozwiązałem. <br /><br />Zasilanie do modułu miałem bezpośrednio z baterii. Co było błędem , pin VCC podpiąłem pod pin avr. <br />i w programie zmieniłem ze podczas pomiaru włączam zasilanie i po pomiarze wyłączam. <br />Efekt: <br />pobór prądu 0,5mA w trybie power down, natomiast przy nadawaniu 21mA . <br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=903">Morcinek92</a> — 1 lis 2014, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Morcinek92]]></name></author>
<updated>2014-11-01T19:30:32+01:00</updated>
<published>2014-11-01T19:30:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101850#p101850</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101850#p101850"/>
<title type="html"><![CDATA[Mały, Duży problem .]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9052&amp;p=101850#p101850"><![CDATA[
[syntax=c]// Aktualizacja : 01.1.2014r.<br />// Autor: Wójcik Marcin<br /><br />#include &quot;main.h&quot;<br /><br />    volatile uint8_t wake_up; //flaga<br /><br />    uint8_t sensor_cnt; //liczba czujników<br />    uint8_t subzero, cel, cel_fract_bits; //zmienne przechowujące temperaturę: znak, część całkowita, częśc ułamkowa<br />    char temp&#91;20&#93;; //łańcuch znaków wysyłany przez radio<br /><br />    int main(void)<br />    {<br />            power_all_disable(); //wyłączenie wszystkiego w procesorze<br />            LED_OUT; //konfiguracja LED i przycisku<br />            LED_OFF; // Dioda OFF<br />            KEY_PULL_UP; //Podciągnięcie przycisku do VCC<br />            DDRD |= BUZ_PIN; //dioda sygnalizacyjna<br /><br />            // Sygnał włączenia Nadajnika<br />            BUZ_ON;<br />            _delay_ms(300);<br />            BUZ_OFF;<br />            _delay_ms(300);<br />            BUZ_ON;<br />            _delay_ms(300);<br />             BUZ_OFF;<br />            _delay_ms(300);<br />            BUZ_ON;<br />            _delay_ms(300);<br />            BUZ_OFF;<br /><br />            // podciągnięcie nieużywanych pinów<br />            NOTUSED_PORTB_OUT;<br /><br />            power_spi_enable(); //włączenie SPI<br />            <br />            sensor_cnt = search_sensors();<br /><br />            //przerwanie zewnętrzne przycisku<br />            PCMSK2 |= (1&lt;&lt;PCINT18); //select PCINT interrupt pins<br />            PCICR |= (1&lt;&lt;PCIE2); //enable PCINT23..16 interrupt<br />            //konfiguracja watchdoga<br />            WDTCSR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE); //prescaler change enable<br />            WDTCSR = (1&lt;&lt;WDP3) | (1&lt;&lt;WDP0); //set prescaler ~8s<br />            WDTCSR |= (1&lt;&lt;WDIE); //enable interrupt<br /><br />            sei();<br />            //wybór najgłębszego trybu uśpienia<br />            set_sleep_mode(SLEEP_MODE_PWR_DOWN); //select mode<br /><br />            while(1)<br />            {<br />                    if(wake_up)<br />                    {<br />                            get_temp(); //pomiar i wysłanie<br />                            set_sleep_mode(SLEEP_MODE_PWR_DOWN); //select mode<br />                            wake_up = 0;<br />                    }<br />                    sleep_mode(); // uśpienie<br /><br />            }// koniec pętli while<br />    } // koniec ciała głównego (int)<br /><br /><br />    //przerwanie modułu watchdoga<br />    ISR(WDT_vect)<br />    {<br />            static uint16_t counter = 0;<br />            if( ++counter &gt; WAKE_UP_PERIOD(WAKE_UP_MIN))<br />            {<br />                    counter = 0;<br />                    wake_up = 1;<br />            }<br />    }<br /><br />    ISR(ADC_vect)<br />    {<br />            //empty<br />    }<br /><br />    //przerwanie przycisku<br />    ISR(PCINT2_vect)<br />    {<br />            if(0 == wake_up &amp;&amp; 0 == KEY_READ) wake_up = 1;<br />    }<br /><br />    //wymagane ze względu na procesor ATMEGA88PA<br />    static void disable_wdt(void)<br />    {<br />            MCUSR = 0;<br />            wdt_disable();<br />    }<br /><br />    void get_temp(void)<br />    {<br />            //włączenie i konfiguracja ADC<br />    <br />            power_adc_enable();<br />            ADMUX = (1&lt;&lt;REFS0) | (1&lt;&lt;REFS1) | (0&lt;&lt;MUX0) ; //1,1V, channel 0<br />            ADCSRA = (1&lt;&lt;ADEN) | (1&lt;&lt;ADIE) | (1&lt;&lt;ADPS1); //enable ADC, interrupt enable,250kHz<br />            //uśpienie na czas pomiaru adc, wejście w uśpienie rozpoczyna pomiar<br />            set_sleep_mode(SLEEP_MODE_ADC); //select mode<br />            sleep_mode(); // go to adc noise reduction mode and start conversion<br /><br />            //kontynuacja po obudzeniu<br /><br />            RFM70_Init();   //inicjalizacja modułu RFM<br />            SetChannelNum(41); // Wybór kanału<br />                        <br />            DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL ); //rozpocznij pomiar<br />            _delay_ms(1000);<br />            if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )//odczytaj wynik i jak OK to<br />            {<br />                    //wyślij łańcuch znaków z temperaturą<br />                    Send_Packet(W_TX_PAYLOAD_NOACK_CMD, format_string(temp), strlen(format_string(temp)));<br />                    LED_ON; //mignij raz<br />                    _delay_ms(100);<br />                    LED_OFF;<br />            }<br />            else<br />            {<br />                    //wyślij błąd<br />                    Send_Packet(W_TX_PAYLOAD_NOACK_CMD, &quot;ERROR!&quot;, strlen(&quot;ERROR!&quot;));<br />            }<br />            _delay_ms(1500);<br /><br />            //tu należy zmierzyć--------------------------------<br />            if (ADC &lt; 750) //Jeśli VCC &lt; 3V<br />            {<br />                    Send_Packet(W_TX_PAYLOAD_NOACK_CMD, &quot;CHARGE!&quot;, strlen(&quot;CHARGE!&quot;));<br />            }<br /><br />            //wyłączenie ADC<br />            ADCSRA &amp;= ~(1&lt;&lt;ADEN);<br />            power_adc_disable();<br />    }<br /><br />    //funkcja konwertująca zmienne przechowujące temperaturę na łańcuch znaków<br />    char* format_string(char * str)<br />    {<br />            char buf&#91;5&#93;;<br />            str&#91;0&#93; = '\0'; //wyczyść łańcuch znaków<br />            if(subzero)<br />                    strcat(str,&quot;-&quot;); //jeśli subzero==1 dopisz znak minus (temp. ujemna)<br />            else<br />                    strcat(str,&quot; &quot;); //jeśli subzero==0 dopisz spację zamiast znaku minus (temp. dodatnia)<br />            strcat(str, itoa(cel, buf,10)); //dopisz dziesiętne części temperatury<br />            strcat(str,&quot;.&quot;); //dopisz kropkę<br />            strcat(str, itoa(cel_fract_bits, buf,10)); //dopisz dziesiętne części stopnia<br />            strcat(str,&quot; C &quot;); //dopisz znak jednostek (C - stopnie Celsiusza)<br />            return str;<br />    }[/syntax]<br /><br />Problem mam z nadajnikiem temperatury , moduł radiowy RFM73 cały kod/urządzenie bez linijek <br /><br />[syntax=c]RFM70_Init();   //inicjalizacja modułu RFM<br />            SetChannelNum(41); // Wybór kanału[/syntax]<br /><br />Pobiera 1,2 mA ...<br /><br />Kiedy inicjalizuję moduł , prąd wzrasta do 22mA , wszystko było by okej gdyby nie zasilanie bateryjne. <br /><br />W takiej wersji kodu. Urządzenie działa prawidłowo. Pomiar wysyłany co 40 sec. Po włączeniu układu pobór prądu 1,2mA przez 40 sec. PO upływie 40 sec. następuję pomiar do 22mA (zrozumiałe to dla mnie ) , no i miałem nadzieje że znowu spadnie do 1,2 mA .. a tak się nie dzieje ciągle jest 22mA , macie pomysły jak to ogarnąć. Według mnie powinno to działąć tak jak chce a tak się nie dzieje... Pomocy <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=903">Morcinek92</a> — 1 lis 2014, o 19:30</p><hr />
]]></content>
</entry>
</feed>