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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-23T20:50:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10454&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-02-23T20:50:15+01:00</updated>
<published>2015-02-23T20:50:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120629#p120629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120629#p120629"/>
<title type="html"><![CDATA[Re: Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120629#p120629"><![CDATA[
<div class="quotetitle">Dariusz Brzózka napisał(a):</div><div class="quotecontent"><br />Niestety ponowne wciśnięcie micro switch-a KEY_PIN_CLOSE nie daje żadnej reakcji i dioda nadal miga zamiast wejście układu w tryb Power Down.<br /></div><br />Zgodnie z programem musisz poczekać około 500 sekund, aby zmienna <em>key_lock2</em> zwiększyła się do 255 i przekręciła na 0. Dopiero wtedy warunek <em>!key_lock2</em> będzie spełniony.<br />Możesz zastąpić <em>_delay_ms</em> sprawdzaniem licznika timera programowego albo zamiast <em>key_lock2++</em> zerować tą zmienną.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 23 lut 2015, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Dariusz Brzózka]]></name></author>
<updated>2015-02-23T19:27:19+01:00</updated>
<published>2015-02-23T19:27:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120602#p120602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120602#p120602"/>
<title type="html"><![CDATA[Re: Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120602#p120602"><![CDATA[
Hej,<br />dzięki Krauser za podpowiedź <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />, wcześniej trochę nie ten kod wysłałem gdyż jeszcze z ustawieniami na Atmega8a (nie to skopiowałem co trzeba) poniżej wklejam kod na którym aktualnie próbuję zrozumieć jak prawidłowo ustawić tryb Power Down:<br />[syntax=c]/*!<br /> * Oprogramowanie modułów RFM12 , RFM12B<br /> * częstotliwości: 433MHz , 868MHz , 915MHz<br /> *<br /> *  Created on: 2011-10-06<br /> *      Author: Mirosław Kardaś<br /> *<br /> *  TEST NADAJNIKA<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/sleep.h&gt;<br /><br />//#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;MK_RFM12x/rf12.h&quot;<br /><br />#define KEY_PIN_CLOSE (1&lt;&lt;PD6)<br />#define KEY_PIN_OPEN (1&lt;&lt;PD7)<br /><br /><br />void send(void);// deklaracja funkcji send<br /><br />char test&#91;&#93;  = &quot;start&quot;;<br />char test1&#91;&#93; = &quot;stop&quot;;<br /><br />uint8_t key_lock;<br />uint8_t key_lock2;<br />uint8_t key_lock3;<br /><br />int main(void) {<br /><br /><br />DDRB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);//Ustawienie pinów jako wyjscia<br /><br />DDRC |= (1&lt;&lt;PC5)|(1&lt;&lt;PC4)|(1&lt;&lt;PC3)|(1&lt;&lt;PC2)|(1&lt;&lt;PC1)|(1&lt;&lt;PC0);// wyjście diody LED<br />PORTC &amp;= ~(1&lt;&lt;PC5);<br /><br />DDRD |= (1&lt;&lt;PD0)|(1&lt;&lt;PD1)|(1&lt;&lt;PD4)|(1&lt;&lt;PD5);//Ustawienie pinów jako wyjscia<br />DDRD &amp;= ~(KEY_PIN_CLOSE | KEY_PIN_OPEN);<br />PORTD |= KEY_PIN_CLOSE | KEY_PIN_OPEN;<br /><br /><br />//--- Wyłącz zbędne moduły ---<br /> //W celu oszczędzania energii wyłączamy domyślnie włączony<br /> //moduł komparatora analogowego<br /> ACSR |= (1&lt;&lt;ACD); //wyłącz komparator analogowy<br /><br /> //Turn off WDT<br /> WDTCSR = 0x00;<br /><br />_delay_ms(1000);<br /><br />//! inicjalizacja modułu RFM12 ***********<br />rf12_init();// inicjalizacja soft SPI i przerwań jeśli są używane<br />rf12_setrange( ZAKRES_433MHZ );// ustawiamy zakres częstotliwości: 433MHz, 868MHz lub 915MHz<br />rf12_setfreq( RF12FREQ433(438.00) );// ustalenie częstotliwości nadawania/odbioru (może być np: 432.74)<br />//rf12_setfreq( RF12FREQ868(862.00) );// przykład zmiany dla RFM12 na 868MHz - żaden problem ;) (może być np: 875.48)<br />rf12_setbaud(9600);// 19200 ustawienie prędkości - baud rate<br />rf12_setbandwidth(RxBW200, LNA_6, RSSI_79);// ustawienia odbiornika<br />rf12_setpower(PWRdB_0, TxBW120);// 1mW moc wyjściowa nadajnika, parametry FSK<br />rf12_disablewakeuptimer();// wyłączamy Wakeup Timer<br />rf12_trans(0x0000);// odczyt statusu - start modułu rfm12<br />rf12_trans(0xCC77);// jeśli posiadasz RFM12B (wesja SMD) odblokuj tę linię<br />//! inicjalizacja modułu RFM12 ***********<br /><br />// oczekiwanie na ustalenie się stanu wysokiego na wejściu klawisza<br /> _delay_ms(10);<br /><br /> DDRD &amp;= ~(1&lt;&lt;PD3);<br /> EICRA &amp;= ~( (1&lt;&lt;ISC11) | (1&lt;&lt;ISC10) ); //niski na INT1 poziom generuje przerwanie<br /> PORTD |= (1&lt;&lt;PD3);//Podciagnięcie INT1 do VCC<br /> EIMSK |= (1&lt;&lt;INT1); //włączenie przerwania INT1<br /><br /> sei();// włączenie globalne przerwań<br /><br /> set_sleep_mode(SLEEP_MODE_PWR_DOWN); //tryb uśpienia<br /><br /><br />// pętla główna programu<br />while(1) {<br /><br /><br /> PORTC |= (1&lt;&lt;PC5);<br /> _delay_ms(1000);<br /> PORTC &amp;= ~(1&lt;&lt;PC5);<br /> _delay_ms(1000);<br /><br />if( !key_lock3 &amp;&amp; !(PIND &amp; KEY_PIN_OPEN ) ) {<br />   key_lock3 = 1;<br /><br />  } else if( key_lock3 &amp;&amp; (PIND &amp; KEY_PIN_OPEN ) )<br />  {<br />  key_lock3++;<br /><br />  }<br /><br />if( !key_lock2 &amp;&amp; !(PIND &amp; KEY_PIN_CLOSE ) ) {<br />   key_lock2 = 1;<br /><br /><br />   sleep_mode();<br /><br />  } else if( key_lock2 &amp;&amp; (PIND &amp; KEY_PIN_CLOSE ) ) key_lock2++;<br /><br /><br />}<br /><br />}<br /><br /><br />void send(void)<br />{<br /><br /><br />#if RF12_UseIRQ == 0<br />if( !a ) {<br />rf12_txdata(test, 0);<br />a ^= 1;<br />} else {<br />rf12_txdata(test1, 0);<br />a ^= 1;<br />}<br />#endif<br /><br />#if RF12_UseIRQ == 1<br /><br />if( !key_lock &amp;&amp; !(PIND &amp; KEY_PIN_OPEN ) ) {<br />   key_lock = 1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br /><br />   PORTC ^= (1&lt;&lt;PC5);<br /><br />  rf12_txstart(test, 0);<br /><br />  } else if( key_lock &amp;&amp; (PIND &amp; KEY_PIN_OPEN ) ) key_lock++;<br /><br />if( !key_lock2 &amp;&amp; !(PIND &amp; KEY_PIN_CLOSE ) ) {<br />   key_lock2 = 1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br /><br />   PORTC ^= (1&lt;&lt;PC5);<br /><br />  rf12_txstart(test1, 0);<br /><br />  } else if( key_lock2 &amp;&amp; (PIND &amp; KEY_PIN_CLOSE ) ) key_lock2++;<br /><br />#endif<br />}<br /><br />ISR(INT1_vect)<br />{<br />//EIMSK &amp;= ~(1&lt;&lt;INT1); //włączenie przerwania INT1<br />}[/syntax]<br />Nie wiem czy dobrym tropem idę ale próbuje sprawdzić na początku to tak że po uruchomieniu układu dioda normalnie miga 1000 ms, gdy wcisnę micro switch KEY_PIN_CLOSE to mikrokontroler powinien wchodzić w tryb Power Down (dioda przestaje migać), natomiast po podłączeniu PD3 (INT1) do masy przewodem na stykówce powinien się wybudzić i dioda ponownie powinna migać. I tak to działa mi jak załączę układ do zasilania i za pierwszym razem wcisnę KEY_PIN_CLOSE. Niestety ponowne wciśnięcie micro switch-a KEY_PIN_CLOSE nie daje żadnej reakcji i dioda nadal miga zamiast wejście układu w tryb Power Down. Nadal się uczę i szukam rozwiązania, czy może widzi ktoś gdzie robię błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2557">Dariusz Brzózka</a> — 23 lut 2015, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-02-22T22:48:54+01:00</updated>
<published>2015-02-22T22:48:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120483#p120483</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120483#p120483"/>
<title type="html"><![CDATA[Re: Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120483#p120483"><![CDATA[
Podciągnij wejście z funkcją INT1 do plusa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 22 lut 2015, o 22:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Dariusz Brzózka]]></name></author>
<updated>2015-02-21T19:03:59+01:00</updated>
<published>2015-02-21T19:03:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120258#p120258</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120258#p120258"/>
<title type="html"><![CDATA[Re: Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=120258#p120258"><![CDATA[
Witam<br /><br />Powracam do tematu zmieniłem na Atmega88 i zastosowałem kod Krausera ale nadal mam problem widać że mikrokontroler wchodzi w stan Power Down ale nie mogę go wybudzić switch mam podłączony do INT1 po jego wciśnięciu cały czas się zachowuje jak by był w trybie Power Down poniżej kod:<br />[syntax=c]/*!<br /> * Oprogramowanie modułów RFM12 , RFM12B<br /> * częstotliwości: 433MHz , 868MHz , 915MHz<br /> *<br /> *  Created on: 2011-10-06<br /> *      Author: Mirosław Kardaś<br /> *<br /> *  TEST NADAJNIKA<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/sleep.h&gt;<br /><br />//#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;MK_RFM12x/rf12.h&quot;<br /><br />#define KEY_PIN_CLOSE (1&lt;&lt;PD6)<br />#define KEY_PIN_OPEN (1&lt;&lt;PD7)<br /><br />void send(void);// deklaracja funkcji send<br /><br />char test&#91;&#93;  = &quot;start&quot;;<br />char test1&#91;&#93; = &quot;stop&quot;;<br /><br />uint8_t key_lock;<br />uint8_t key_lock2;<br />uint8_t key_lock3;<br /><br />int main(void) {<br /><br />DDRB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);//Ustawienie pinów jako wyjscia<br /><br />DDRC |= (1&lt;&lt;PC5)|(1&lt;&lt;PC4)|(1&lt;&lt;PC3)|(1&lt;&lt;PC2)|(1&lt;&lt;PC1)|(1&lt;&lt;PC0);// wyjście diody LED<br />PORTC &amp;= ~(1&lt;&lt;PC5);<br /><br />DDRD |= (1&lt;&lt;PD0)|(1&lt;&lt;PD1)|(1&lt;&lt;PD4)|(1&lt;&lt;PD5);//Ustawienie pinów jako wyjscia<br />DDRD &amp;= ~(KEY_PIN_CLOSE | KEY_PIN_OPEN);<br />PORTD |= KEY_PIN_CLOSE | KEY_PIN_OPEN;<br /><br /><br />//--- Wyłącz zbędne moduły ---<br /> //W celu oszczędzania energii wyłączamy domyślnie włączony<br /> //moduł komparatora analogowego<br /> ACSR |= (1&lt;&lt;ACD); //wyłącz komparator analogowy<br /><br /> //Turn off WDT<br /> WDTCR = 0x00;<br /><br />_delay_ms(1000);<br /><br />//! inicjalizacja modułu RFM12 ***********<br />rf12_init();// inicjalizacja soft SPI i przerwań jeśli są używane<br />rf12_setrange( ZAKRES_433MHZ );// ustawiamy zakres częstotliwości: 433MHz, 868MHz lub 915MHz<br />rf12_setfreq( RF12FREQ433(438.00) );// ustalenie częstotliwości nadawania/odbioru (może być np: 432.74)<br />//rf12_setfreq( RF12FREQ868(862.00) );// przykład zmiany dla RFM12 na 868MHz - żaden problem ;) (może być np: 875.48)<br />rf12_setbaud(9600);// 19200 ustawienie prędkości - baud rate<br />rf12_setbandwidth(RxBW200, LNA_6, RSSI_79);// ustawienia odbiornika<br />rf12_setpower(PWRdB_0, TxBW120);// 1mW moc wyjściowa nadajnika, parametry FSK<br />rf12_disablewakeuptimer();// wyłączamy Wakeup Timer<br />rf12_trans(0x0000);// odczyt statusu - start modułu rfm12<br />rf12_trans(0xCC77);// jeśli posiadasz RFM12B (wesja SMD) odblokuj tę linię<br />//! inicjalizacja modułu RFM12 ***********<br /><br />// oczekiwanie na ustalenie się stanu wysokiego na wejściu klawisza<br /> _delay_ms(10);<br /><br /> MCUCR &amp;= ~( (1&lt;&lt;ISC11) | (1&lt;&lt;ISC10) ); //niski na INT0 poziom generuje przerwanie<br />         GICR |= (1&lt;&lt;INT1); //włączenie przerwania INT0<br />         sei();// włączenie globalne przerwań<br />         set_sleep_mode(SLEEP_MODE_PWR_DOWN); //tryb uśpienia<br /><br /><br /><br /><br />// pętla główna programu<br />while(1) {<br /><br />if( !key_lock3 &amp;&amp; !(PIND &amp; KEY_PIN_OPEN ) ) {<br />   key_lock3 = 1;<br /><br />   send();<br /><br />  } else if( key_lock3 &amp;&amp; (PIND &amp; KEY_PIN_OPEN ) ) key_lock3++;<br /><br />sleep_mode(); //uśpienie - power down = wyłączenie taktowania procesora<br />//_delay_ms(250);<br />}<br /><br />}<br /><br /><br />void send(void)<br />{<br /><br /><br />#if RF12_UseIRQ == 0<br />if( !a ) {<br />rf12_txdata(test, 0);<br />a ^= 1;<br />} else {<br />rf12_txdata(test1, 0);<br />a ^= 1;<br />}<br />#endif<br /><br />#if RF12_UseIRQ == 1<br /><br />if( !key_lock &amp;&amp; !(PIND &amp; KEY_PIN_OPEN ) ) {<br />   key_lock = 1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br /><br />   PORTC ^= (1&lt;&lt;PC5);<br /><br />  rf12_txstart(test, 0);<br /><br />  } else if( key_lock &amp;&amp; (PIND &amp; KEY_PIN_OPEN ) ) key_lock++;<br /><br />if( !key_lock2 &amp;&amp; !(PIND &amp; KEY_PIN_CLOSE ) ) {<br />   key_lock2 = 1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br /><br />   PORTC ^= (1&lt;&lt;PC5);<br /><br />  rf12_txstart(test1, 0);<br /><br />  } else if( key_lock2 &amp;&amp; (PIND &amp; KEY_PIN_CLOSE ) ) key_lock2++;<br /><br />#endif<br />}<br /><br />ISR(INT1_vect)<br />{<br />}[/syntax]<br /><br />Gdzie robię błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2557">Dariusz Brzózka</a> — 21 lut 2015, o 19:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-01-31T22:12:35+01:00</updated>
<published>2015-01-31T22:12:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116686#p116686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116686#p116686"/>
<title type="html"><![CDATA[Re: Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116686#p116686"><![CDATA[
Wszystko jest w specyfikacji procesora i na stronie <a href="http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html"  class="postlink">avr-libc</a><br />Podrzucam kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/sleep.h&gt;<br /><br />#define KEY1 (1&lt;&lt;PD2)<br />#define KEY1_PUPORTD |= KEY1<br />#define KEY1_DOWN !(PIND &amp; KEY1)<br /><br />#define LED1 (1&lt;&lt;PD4)<br />#define LED1_OUT DDRD |= LED1<br />#define LED1_ONPORTD &amp;= ~LED1<br />#define LED1_OFF PORTD |= LED1<br /><br /><br />int main(void)<br />{<br />KEY1_PU;<br />LED1_OUT;<br />LED1_OFF;<br />MCUCR &amp;= ~( (1&lt;&lt;ISC01) | (1&lt;&lt;ISC00) ); //niski na INT0 poziom generuje przerwanie<br />GICR |= (1&lt;&lt;INT0); //włączenie przerwania INT0<br />sei();<br />set_sleep_mode(SLEEP_MODE_PWR_DOWN); //tryb uśpienia<br /><br />while(1)<br />{<br />if(KEY1_DOWN) //akcja do wykonania po wybudzeniu - klawisz ciągle wciśnięty<br />{<br />LED1_ON;<br />_delay_ms(100);<br />LED1_OFF;<br />}<br />sleep_mode(); //uśpienie - power down = wyłączenie taktowania procesora<br />}<br />}<br /><br />ISR(INT0_vect)<br />{<br />//pusto<br />}[/syntax]<br /><br />Generalnie ATMEGA8A jest dosyć uboga pod względem wybudzania z trybu power down. Tylko przerwanie zewnętrzne (INT0 lub INT1) i tylko niskim poziomem jest w stanie obudzić procesor (jest jeszcze przerwanie od modułu TWI, ale tu się nie nada).<br /><br />Pokaż swój schemat jak już masz, a jak nie masz to zwróć uwagę na dołączenie klawiatury tak, aby wykorzystać INT0 i/lub INT1 oraz rozłączać zasilanie modułu. Dużo zależy od tego ile masz klawiszy. Korzystanie z innych trybów oszczędzania energii jest oczywiście możliwe, ale power down jest najoszczędniejszy. Pobór prądu dla Atmegi8A wynosi 0,5 uA (nowsza Atmega88PA 0,1 uA)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 31 sty 2015, o 22:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Dariusz Brzózka]]></name></author>
<updated>2015-01-31T17:20:31+01:00</updated>
<published>2015-01-31T17:20:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116657#p116657</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116657#p116657"/>
<title type="html"><![CDATA[Tryb power down Atmega8 plus RFM12B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10454&amp;p=116657#p116657"><![CDATA[
Witam,<br /><br />Mam zaprojektowany pilot opart na RFM12B i Atmega8A jak dotychczas był zasilany z zasilacza teraz chciałbym przejść do zasilania bateryjnego czy może ktoś zna jakieś strony opisujący tryby uśpienia jak się za to zabrać. Chciałbym uzyskać efekt taki, że jak pilot nie jest używany to procesor i RFM12B ma wejść w tryb uśpienia a jak wcisnę przycisk to ma się wzbudzić i wykonać polecenie. Czy jest to możliwe?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2557">Dariusz Brzózka</a> — 31 sty 2015, o 17:20</p><hr />
]]></content>
</entry>
</feed>