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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-08-19T15:42:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=22361&amp;mode</id>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-08-19T15:42:17+01:00</updated>
<published>2019-08-19T15:42:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=221402#p221402</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=221402#p221402"/>
<title type="html"><![CDATA[Re: Usypianie arduino i watchdog]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=221402#p221402"><![CDATA[
<div class="quotetitle">radex324 napisał(a):</div><div class="quotecontent"><br />Witam, czy mógłby mi ktoś wyjaśnić czy da się tak zaprogramować watchdog aby działał razem z usypianiem procesora?<br /></div><br />Da, ale WDT będzie co pewien czas resetował lub budził albo budził po czy resetował CPU.<br /><br /><div class="quotetitle">radex324 napisał(a):</div><div class="quotecontent"><br />Zaś jeżeli zmienię na &quot; WDTCSR |= 1&lt;&lt;WDE | 1&lt;&lt; WDIE; &quot; to wykonuje się przerwanie i jak ma wykonać się drugie to procesor się restartuje.<br /></div><br />Normalne zachowanie, pierwsze przepełnienie licznika wywołuje przerwanie, drugie wywołuje reset.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 19 sie 2019, o 15:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[radex324]]></name></author>
<updated>2019-06-23T20:42:38+01:00</updated>
<published>2019-06-23T20:42:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=219943#p219943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=219943#p219943"/>
<title type="html"><![CDATA[Usypianie arduino i watchdog]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22361&amp;p=219943#p219943"><![CDATA[
Witam, czy mógłby mi ktoś wyjaśnić czy da się tak zaprogramować watchdog aby działał razem z usypianiem procesora? Aktualnie napisałem program z pomocą pewnej strony gdzie watchdog generuje tylko przerwanie budzi procesor i znowu śpi. Tworzę sterownik do samochodu który będzie ukryty w drzwiach bez dostępu i dlatego muszę zastosować reset w przypadku zacięcia się ale musi to działać wraz z usypianiem procesora. <br />[syntax=c]/*<br /> * Sketch for testing sleep mode with wake up on WDT.<br /> * Donal Morrissey - 2011.<br /> *<br /> */<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/power.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br />#define LED_PIN (13)<br /><br />volatile int f_wdt=1;<br /><br /><br /><br />/***************************************************<br /> *  Name:        ISR(WDT_vect)<br /> *<br /> *  Returns:     Nothing.<br /> *<br /> *  Parameters:  None.<br /> *<br /> *  Description: Watchdog Interrupt Service. This<br /> *               is executed when watchdog timed out.<br /> *<br /> ***************************************************/<br />ISR(WDT_vect)<br />{<br />  if(f_wdt == 0)<br />  {<br />    f_wdt=1;<br />  }<br />  else<br />  {<br />    Serial.println(&quot;WDT Overrun!!!&quot;);<br />  }<br />}<br /><br /><br />/***************************************************<br /> *  Name:        enterSleep<br /> *<br /> *  Returns:     Nothing.<br /> *<br /> *  Parameters:  None.<br /> *<br /> *  Description: Enters the arduino into sleep mode.<br /> *<br /> ***************************************************/<br />void enterSleep(void)<br />{<br />  set_sleep_mode(SLEEP_MODE_PWR_SAVE);   /* EDIT: could also use SLEEP_MODE_PWR_DOWN for lowest power consumption. */<br />  sleep_enable();<br />  <br />  /* Now enter sleep mode. */<br />  sleep_mode();<br />  <br />  /* The program will continue from here after the WDT timeout*/<br />  sleep_disable(); /* First thing to do is disable sleep. */<br />  <br />  /* Re-enable the peripherals. */<br />  power_all_enable();<br />}<br /><br /><br /><br />/***************************************************<br /> *  Name:        setup<br /> *<br /> *  Returns:     Nothing.<br /> *<br /> *  Parameters:  None.<br /> *<br /> *  Description: Setup for the serial comms and the<br /> *                Watch dog timeout. <br /> *<br /> ***************************************************/<br />void setup()<br />{<br />  Serial.begin(9600);<br />  Serial.println(&quot;Initialising...&quot;);<br />  delay(100); //Allow for serial print to complete.<br /><br />  pinMode(LED_PIN,OUTPUT);<br /><br />  /*** Setup the WDT ***/<br />  <br />  /* Clear the reset flag. */<br />  MCUSR &amp;= ~(1&lt;&lt;WDRF);<br />  <br />  /* In order to change WDE or the prescaler, we need to<br />   * set WDCE (This will allow updates for 4 clock cycles).<br />   */<br />  WDTCSR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);<br /><br />  /* set new watchdog timeout prescaler value */<br />  WDTCSR = 1&lt;&lt;WDP0 | 1&lt;&lt;WDP3; /* 8.0 seconds */<br />  <br />  /* Enable the WD interrupt (note no reset). */<br />  WDTCSR |= _BV(WDIE);<br />  <br />  Serial.println(&quot;Initialisation complete.&quot;);<br />  delay(100); //Allow for serial print to complete.<br />}<br /><br /><br /><br />/***************************************************<br /> *  Name:        enterSleep<br /> *<br /> *  Returns:     Nothing.<br /> *<br /> *  Parameters:  None.<br /> *<br /> *  Description: Main application loop.<br /> *<br /> ***************************************************/<br />void loop()<br />{<br />  if(f_wdt == 1)<br />  {<br />    /* Toggle the LED */<br />    digitalWrite(LED_PIN, !digitalRead(LED_PIN));<br />    <br />    /* Don't forget to clear the flag. */<br />    f_wdt = 0;<br />    <br />    /* Re-enter sleep mode. */<br />    enterSleep();<br />  }<br />  else<br />  {<br />    /* Do nothing. */<br />  }<br />}[/syntax] Zaś jeżeli zmienię na  &quot; WDTCSR |= 1&lt;&lt;WDE | 1&lt;&lt; WDIE; &quot;  to wykonuje się przerwanie i jak ma wykonać się drugie to procesor się restartuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6007">radex324</a> — 23 cze 2019, o 20:42</p><hr />
]]></content>
</entry>
</feed>