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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9024&amp;mode</id>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-11-02T11:29:04+01:00</updated>
<published>2014-11-02T11:29:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101932#p101932</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101932#p101932"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101932#p101932"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Tak z ciekawości.<br />Czy linie 47 i 48 są potrzebne?<br /></div><br />W sumie to chyba nie pytanie tylko czy czujnik zostanie wykryty jeśli je usunę. Co prawda w pliku .h mam ustawiony tylko jeden czujnik na magistrali.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 2 lis 2014, o 11:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-10-31T22:34:48+01:00</updated>
<published>2014-10-31T22:34:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101772#p101772</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101772#p101772"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101772#p101772"><![CDATA[
Tak z ciekawości.<br />Czy linie 47 i 48 są potrzebne?<br />Z założenia wiesz, że w projekcie jest jeden czujnik to po co to sprawdzać?<br />50ms to może niedługo, ale... jak się przemnoży przez ileś tam pomiarów to <br />można by jeszcze troszeczkę prądziku zaoszczędzić <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> — 31 paź 2014, o 22:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MikieMan]]></name></author>
<updated>2014-10-30T22:00:55+01:00</updated>
<published>2014-10-30T22:00:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101645#p101645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101645#p101645"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101645#p101645"><![CDATA[
No śliczna ta chmurka i słonko <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Gratuluję Koledze fajnego projektu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3503">MikieMan</a> — 30 paź 2014, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T21:51:45+01:00</updated>
<published>2014-10-30T21:51:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101644#p101644</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101644#p101644"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101644#p101644"><![CDATA[
Ok udało mi się ogarnąć temat. Dziękuję wszystkim za pomoc i podpowiedzi.<br />Dla potomnych Atmega328 popędzana wewnętrznym oscylatorem 1MHz. Wykorzystałem przerwanie od watchdoga a atmega jest wybudzana tylko na czas pomiaru i wyświetlenie aktualnej temperatury. Ponieważ termometr ma działać wewnątrz pomieszczenia nie interesowały mnie temperatury ujemne dlatego brak skalowania oraz instrukcji w kodzie. Obsługa DS-a i OLED na Mirkowych bibliotekach.<br /><br />main.c<br />[syntax=c]#include &lt;avr/io.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;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdint.h&gt;<br />#include &lt;avr/power.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;OLED/picture.h&quot;<br />#include &quot;OLED/OLED_SSD_1306.h&quot;<br /><br />uint8_t czujniki_cnt;              // ilość czujników na magistrali<br />uint8_t subzero, cel, cel_fract_bits;   //wyniki pomiaru<br />volatile uint8_t wake_up;<br />void display_temp();<br />void display_error();<br />void icons();<br /><br />#define CZAS    60<br /><br />int main(void) {<br /><br />//konfiguracja nieużywanych pinów<br />DDRB |= 0xFF;<br />PORTB |= 0X00;<br />DDRD |= 0xFF;<br />PORTD |= 0x00;<br />mk_ssd1306_init(SSD1306_SWITCHCAPVCC, REFRESH_MIN, 1);  //inicjalizacja OLED<br /><br />power_all_disable();//wyłącznie niepotrzebnych układów<br /><br />       WDTCSR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE); //ustawienie możliwości zmiany preskalera<br />       WDTCSR = (1&lt;&lt;WDP2) | (1&lt;&lt;WDP1); //ustawienie preskalera na ~1s<br />       WDTCSR |= (1&lt;&lt;WDIE);  //włącznie przerwania WDT<br />       sei();//zezwolenie na przerwanie<br />       set_sleep_mode(SLEEP_MODE_PWR_DOWN);//tryb Power down<br /><br />while(1) {<br /><br />if(wake_up){<br /><br />power_twi_enable();//włączenie sprzętowego TWI na czas pomiaru<br />        czujniki_cnt = search_sensors();<br />        _delay_ms(50);<br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />        _delay_ms(750);<br />         if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />         display_temp();<br />         else<br />         display_error();<br />         icons();<br />         mk_ssd1306_display();<br />         power_twi_disable();//wyłącznenie sprzętowego TWI<br />         set_sleep_mode(SLEEP_MODE_PWR_DOWN);//wybranie trybu<br />         wake_up = 0;<br />}<br />sleep_mode(); // dobranoc<br />}<br />}<br /><br />ISR(WDT_vect)<br />{<br />        static uint16_t licznik = 0;<br />        if( ++licznik &gt; CZAS)<br />        {<br />                licznik = 0;<br />                wake_up = 1;<br />        }<br />}<br /><br /><br />void display_temp(){<br /><br />mk_ssd1306_fillRect(0,0,80,16,0);<br />mk_ssd1306_puts(0,0,&quot;Temperatura&quot;,1,1,0);<br />mk_ssd1306_put_int(0,16,cel,4,1,0);<br />mk_ssd1306_circle(51,21,5,1);<br /><br />}<br /><br />void display_error(){<br /><br />mk_ssd1306_fillRect(0,0,80,16,0);<br />mk_ssd1306_puts(0,0,&quot;Blad czujnika&quot;,1,1,0);<br />mk_ssd1306_fillRect(0,16,57,30,0);<br />mk_ssd1306_puts(0,16,&quot;Err&quot;,3,1,0);<br /><br />}<br /><br />void icons() {<br />        mk_ssd1306_fillRect(70,16,40,32,0);<br />if (cel &lt;= 25) mk_ssd1306_DrawBitmap_P(70,16,cloud,40,32,1);<br />else if (cel &gt;= 26) mk_ssd1306_DrawBitmap_P(70,16,sun,40,32,1);<br />}[/syntax]<br /><br />picture.h<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />const uint8_t cloud&#91;&#93; PROGMEM = {<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x07,0xFE,0x00,0x00,0x00,0x0F,<br />0x07,0x80,0x00,0x00,0x1C,0x01,0xC0,0x00,0x00,0x38,0x00,0xFE,0x00,0x00,0x70,0x00,<br />0x7F,0x80,0x00,0x60,0x00,0x01,0xC0,0x01,0xE0,0x00,0x00,0xE0,0x07,0xC0,0x00,0x00,<br />0x70,0x0E,0x00,0x00,0x00,0x30,0x1C,0x00,0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x30,<br />0x18,0x00,0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x30,0x18,<br />0x00,0x00,0x00,0x30,0x18,0x00,0x00,0x00,0x60,0x1C,0x00,0x00,0x00,0xE0,0x0E,0x00,<br />0x00,0x03,0xC0,0x07,0xFF,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60,0x00,0x00,0x70,0x70,0xE0,<br />0x00,0x00,0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />};<br /><br />const uint8_t sun&#91;&#93; PROGMEM = {<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x06,0x00,0xC0,0x00,0x00,0x06,0x01,0xC0,0x00,0x00,0x03,0x03,0x80,0x00,0x00,0x03,<br />0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0x03,0xFF,<br />0x02,0x00,0x03,0xC7,0xCF,0x87,0x00,0x03,0xCF,0x03,0xCE,0x00,0x00,0xCE,0x01,0xC4,<br />0x00,0x00,0x1C,0x00,0xE0,0x00,0x00,0x1C,0x00,0xE0,0x00,0x00,0x1C,0x00,0xE0,0x00,<br />0x00,0x1C,0x00,0xE0,0x00,0x00,0x1C,0x00,0xE0,0x00,0x00,0x8C,0x00,0xE0,0x00,0x01,<br />0xCE,0x01,0xCC,0x00,0x03,0x87,0x03,0xCF,0x00,0x03,0x07,0xFF,0x83,0x00,0x00,0x01,<br />0xFF,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,<br />0x00,0x00,0x00,0x07,0x03,0x80,0x00,0x00,0x0E,0x01,0x80,0x00,0x00,0x04,0x00,0x80,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />};[/syntax]<br /><br />I kilka fotek działającego &quot;termometru&quot;<br /><a href="http://forum.atnel.pl/_obrazki/o/1298/09f519624873f3b5319a00d98a7de47a.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1298/09f519624873f3b5319a00d98a7de47a.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1298/c12c0754fd4b3bcb57ba637ee6103852.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1298/c12c0754fd4b3bcb57ba637ee6103852.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1298/163a3223bc7cf83b5bb31f7f72db1420.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1298/163a3223bc7cf83b5bb31f7f72db1420.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 21:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T13:28:54+01:00</updated>
<published>2014-10-30T13:28:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101539#p101539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101539#p101539"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101539#p101539"><![CDATA[
<div class="quotetitle">eMCe2 napisał(a):</div><div class="quotecontent"><br />Polecam punkt 9.10: Minimizing Power Consumption w Datasheet'ie.<br /></div><br /><br />Instrukcją &quot;power_all_disable();&quot; wyłączyłem chyba wszystko co zbędne zostawiając włączone tylko sprzętowe TWI &quot;power_twi_enable();&quot;. Nieużywane piny ustawione jako wyjście z ustaleniem pinów na 0.<br /><br /><div class="quotetitle">eMCe2 napisał(a):</div><div class="quotecontent"><br />Nie mówisz też jaką procka pędzisz częstotliwością, jak zasilasz? Może tu ci więcej prądu ucieka...<br /></div><br /><br />Atmega została na wewnętrznym 1Mhz.<br /> Zasilam akumulatorem 3,6V ~1200mAh. Używam regulatora low drop LM1117. Zapewne to też będę musiał zmienić na coś mniej obciążającego przed trawieniem płytki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 13:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[eMCe2]]></name></author>
<updated>2014-10-30T12:27:12+01:00</updated>
<published>2014-10-30T12:27:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101526#p101526</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101526#p101526"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101526#p101526"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />No ale co 8 sek WDT ci generuje przerwanie które np obsłużysz sobie w programie tylko jako inkrementacja zmiennej. A w pętli główej programu będziesz sprawdzał czy już na tyle razy inkrementowało że można obudzić procka w innym przypadku usypiasz go.<br /></div><br /><br />Polecam punkt 9.10: Minimizing Power Consumption w Datasheet'ie.<br />Powyłączaj ADC którego nie używasz, komparator, BOD detector, wewnetrzne napiecie referencyjne itp to pewnie cos oszczędzisz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> A skoro masz budzic WDT to może lepszy będzie np.Power down<br />Nie mówisz też jaką procka pędzisz częstotliwością, jak zasilasz? Może tu ci więcej prądu ucieka...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1363">eMCe2</a> — 30 paź 2014, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2014-10-30T12:05:22+01:00</updated>
<published>2014-10-30T12:05:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101521#p101521</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101521#p101521"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101521#p101521"><![CDATA[
No ale co 8 sek WDT ci generuje przerwanie które np obsłużysz sobie w programie tylko jako inkrementacja zmiennej. A w pętli główej programu będziesz sprawdzał czy już na tyle razy inkrementowało że można obudzić procka w innym przypadku usypiasz go.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 30 paź 2014, o 12:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T11:56:38+01:00</updated>
<published>2014-10-30T11:56:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101519#p101519</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101519#p101519"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101519#p101519"><![CDATA[
<div class="quotetitle">eMCe2 napisał(a):</div><div class="quotecontent"><br />Kolego używasz Timera0 a nie 1 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Do tego Timer 2 jest tylko 8bit'owy więc może ci dosyć często budzić procka... Może warto skorzystać z Watchdoga. Piszą że można ustawić przerwanie WDT co 8 sek. max.<br /></div><br /><br />Oczywiście masz rację miałem na myśli Timer0. Co do WDT to te 8sek. to i tak za dużo. W sumie pomiar i wyświtlenie temp. wystarczyłby co 1min. a może raz na 5min. Qrcze już się chyba pogubiłem w tym wszystkim.<br /><br />Obecny pobór prądu to około 19mA to dość sporo jak na zakusy zasilania tego akumulatorem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[eMCe2]]></name></author>
<updated>2014-10-30T11:48:37+01:00</updated>
<published>2014-10-30T11:48:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101515#p101515</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101515#p101515"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101515#p101515"><![CDATA[
<div class="quotetitle">adamekp napisał(a):</div><div class="quotecontent"><br />No i kolega juz mnie oświecił. Chciałem budzić od przerwania timera ale widzę, że w tym trybie można wykorzystać przerwanie tylko od Timera2 a ja ustawiłem Timer1. W sumie to mógłbym użyć przerwania od TWI ale nie bardzo wiem jak to zrobić. W datasheet jest napisane &quot;TWI Address Match&quot; ale że co mam porównywać adres magistrali?<br /></div><br /><br />Kolego używasz Timera0 a nie 1 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Do tego Timer 2 jest tylko 8bit'owy więc może ci dosyć często budzić procka... Może warto skorzystać z Watchdoga. Piszą że można ustawić przerwanie WDT co 8 sek. max.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1363">eMCe2</a> — 30 paź 2014, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T09:17:22+01:00</updated>
<published>2014-10-30T09:17:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101502#p101502</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101502#p101502"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101502#p101502"><![CDATA[
No i kolega juz mnie oświecił. Chciałem budzić od przerwania timera ale widzę, że w tym trybie można wykorzystać przerwanie tylko od Timera2 a ja ustawiłem Timer1. W sumie to mógłbym użyć przerwania od TWI ale nie bardzo wiem jak to zrobić. W datasheet jest napisane &quot;TWI Address Match&quot; ale że co mam porównywać adres magistrali?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 09:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-10-30T08:44:48+01:00</updated>
<published>2014-10-30T08:44:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101501#p101501</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101501#p101501"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101501#p101501"><![CDATA[
To co ma wybudzać Twojego procka?<br />Jaki sygnał? <br />Jakie przerwanie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 30 paź 2014, o 08:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T08:39:42+01:00</updated>
<published>2014-10-30T08:39:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101500#p101500</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101500#p101500"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101500#p101500"><![CDATA[
Wygląda na to, że wykonuje się pierwszy pomiar, wyświetla na wyświetlaczu procek &quot;idzie spać&quot; i to tyle jego pracy już nie wstaje.<br /><br />Zdaje sobie sprawę z tych delay'ów ale na optymalizację przyjdzie czas. Póki co musi mi zacząć działać usypianie i wybudzanie.<br /><br />Co do fukcji:<br />set_sleep_mode()<br />sleep_mode()<br /><br />to są to funkcję default'owe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 08:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-10-30T08:02:08+01:00</updated>
<published>2014-10-30T08:02:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101498#p101498</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101498#p101498"/>
<title type="html"><![CDATA[Re: Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101498#p101498"><![CDATA[
Przyznam, że nie testowałem jeszcze oszczędzania energii <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Ale może napisałbyś co złego się dzieje?<br />Zazwyczaj przerwania włącza się jak już wszystko jest poustawiane.<br />Tymczasem Ty włączasz przerwania a potem jeszcze inicjalizujesz<br />OLEDa i wywołujesz funkcję set_sleep_mode()<br />Nie wydaje mi się aby to przeszkadzało ale...<br /><br />Poza tym może zmieniłbyś koncepcję. <br />Wysyłasz do czujnika rozkaz konwersji temperatury <br />i w delayu czekasz prawie sekundę na pomiar. A przecież<br />chcesz oszczędzać energię to czy nie lepiej wysłać rozkaz<br />do DSa i &quot;pójść spać&quot;? A potem tylko odebrać sobie gotową<br />temperaturę?<br />Używasz timera programowego to po co Ci w ogóle te delay'e<br />w pętli głównej? Zmień sobie rozdzielczość na 10ms i wtedy<br />wyliczysz każdy potrzebny w tym programie czas a będziesz miał<br />program nieblokujący.<br /><br />Pokaż funkcje:<br />set_sleep_mode()<br />sleep_mode()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 30 paź 2014, o 08:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[adamekp]]></name></author>
<updated>2014-10-30T08:41:55+01:00</updated>
<published>2014-10-30T00:20:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101487#p101487</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101487#p101487"/>
<title type="html"><![CDATA[Tryb power save Atmega328]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9024&amp;p=101487#p101487"><![CDATA[
Witam,<br />mam prośbę o pomoc w rozgryzieniu problemu z jakim się borykam. Atmega328 + OLED(I2C) + DS18B20 a wszystko ma pracować na akumulatorze 5V. Bez trybu power save działa wszystko ok ale chyba popełniam gdzieś błąd przy próbie ustawienia atmegi i pracy w trybie oszczędzania poboru prądu. Czy możecie proszę zerknąć na kod i wytknąć mi błędy jakie popełniam?<br /><br />[syntax=c]#include &lt;avr/io.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;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdint.h&gt;<br />#include &lt;avr/power.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;OLED/picture.h&quot;<br />#include &quot;OLED/OLED_SSD_1306.h&quot;<br /><br />uint8_t czujniki_cnt;           // ilość czujników na magistrali<br />uint8_t subzero, cel, cel_fract_bits;   //wyniki pomiaru<br />static uint8_t temp_1;//zmienna pomocnicza dla trybu power save<br />void display_temp();<br />void display_error();<br />void icons();<br />volatile char Flaga=0;<br /><br />int main(void) {<br /><br />//konfiguracja nieużywanych pinów<br />DDRB |= 0xFF;<br />PORTB |= 0X00;<br />DDRD |= 0xFF;<br />PORTD |= 0x00;<br /><br />power_all_disable();//wyłącznie niepotrzebnych układów<br />power_twi_enable();//włączenie sprzętowego TWI<br /><br />TCCR0A |= (1&lt;&lt;WGM01);//tryb ctc<br />TCCR0B |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);       //preskaler 1024<br />OCR0A = 199;//przerwanie co 200ms<br />TIMSK0 |= (1&lt;&lt;OCIE0A);//zezwolenie na przerwanie Comp. Match<br /><br />        temp_1 = cel;//przepisanie aktualnej temperatury do zmiennej<br />        sei();//zezwolenie na przerwanie<br />set_sleep_mode(SLEEP_MODE_PWR_SAVE);//tryb Power Save<br /><br />mk_ssd1306_init(SSD1306_SWITCHCAPVCC, REFRESH_MIN, 1);  //inicjalizacja OLED<br /><br />while(1) {<br /><br />if(Flaga){<br /><br />uint8_t temp_2 = cel;<br /><br />if(temp_2 != temp_1){<br /><br />        czujniki_cnt = search_sensors();<br />        _delay_ms(50);<br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />        _delay_ms(750);<br />         if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) )<br />         display_temp();<br />         else<br />         display_error();<br />         icons();<br />         mk_ssd1306_display();<br />         Flaga=0;<br />}<br /><br />}<br />sleep_mode();<br />}<br />}<br /><br />ISR(TIMER0_COMPA_vect)<br />{<br />static uint8_t int_counter = 0;<br /><br />        if (int_counter&gt;=10)<br />        {<br />                Flaga=1;<br />                int_counter=0;<br />        }<br />        else<br />        {<br />                int_counter++;<br />        }<br />}<br /><br /><br />void display_temp(){<br /><br />mk_ssd1306_fillRect(0,0,80,16,0);<br />mk_ssd1306_puts(0,0,&quot;Temperatura&quot;,1,1,0);<br />mk_ssd1306_put_int(0,16,cel,4,1,0);<br />mk_ssd1306_circle(51,21,5,1);<br /><br />}<br /><br />void display_error(){<br /><br />mk_ssd1306_fillRect(0,0,80,16,0);<br />mk_ssd1306_puts(0,0,&quot;Blad czujnika&quot;,1,1,0);<br />mk_ssd1306_fillRect(0,16,57,30,0);<br />mk_ssd1306_puts(0,16,&quot;Err&quot;,3,1,0);<br /><br />}<br /><br />void icons() {<br />    mk_ssd1306_fillRect(70,16,40,32,0);<br />    if (cel &lt;= 25) mk_ssd1306_DrawBitmap_P(70,16,cloud,40,32,1);<br />else if (cel &gt;= 26) mk_ssd1306_DrawBitmap_P(70,16,sun,40,32,1);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1298">adamekp</a> — 30 paź 2014, o 00:20</p><hr />
]]></content>
</entry>
</feed>