<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ATtiny84_WDT_sleep</id>
	<title>ATtiny84 WDT sleep - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=ATtiny84_WDT_sleep"/>
	<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny84_WDT_sleep&amp;action=history"/>
	<updated>2026-05-17T04:58:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://www.marcelpost.com/wiki/index.php?title=ATtiny84_WDT_sleep&amp;diff=3166&amp;oldid=prev</id>
		<title>Admin at 10:55, 4 November 2019</title>
		<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny84_WDT_sleep&amp;diff=3166&amp;oldid=prev"/>
		<updated>2019-11-04T10:55:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The following code puts the ATtiny84 into sleep mode and it is woken up by an overflow of the Watchdog Timer (WDT). It should be compatible with the ATtiny85 series. Note that disabling the ADC functions (ADC and Comparator) are probably in different registers (e.g. ADCSRA or ADCSRB).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/sleep.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/wdt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// these define cbi and sbi, for as far they are not known yet&lt;br /&gt;
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))&lt;br /&gt;
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))&lt;br /&gt;
&lt;br /&gt;
void setup_watchdog(int ii) &lt;br /&gt;
{&lt;br /&gt;
  // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms&lt;br /&gt;
  // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec&lt;br /&gt;
&lt;br /&gt;
  uint8_t bb;&lt;br /&gt;
  if (ii &amp;gt; 9 ) ii=9;&lt;br /&gt;
  bb=ii &amp;amp; 7;&lt;br /&gt;
  if (ii &amp;gt; 7) bb|= (1&amp;lt;&amp;lt;5);&lt;br /&gt;
  bb|= (1&amp;lt;&amp;lt;WDCE);&lt;br /&gt;
&lt;br /&gt;
  MCUSR &amp;amp;= ~(1&amp;lt;&amp;lt;WDRF);&lt;br /&gt;
  // start timed sequence&lt;br /&gt;
  WDTCSR |= (1&amp;lt;&amp;lt;WDCE) | (1&amp;lt;&amp;lt;WDE);&lt;br /&gt;
  // set new watchdog timeout value&lt;br /&gt;
  WDTCSR = bb;&lt;br /&gt;
  WDTCSR |= _BV(WDIE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// system wakes up when watchdog is timed out&lt;br /&gt;
void system_sleep() &lt;br /&gt;
{&lt;br /&gt;
  cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF&lt;br /&gt;
  setup_watchdog(9);                   // approximately 8 seconds sleep&lt;br /&gt;
 &lt;br /&gt;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here&lt;br /&gt;
  sleep_enable();&lt;br /&gt;
  sei();                               // Enable the Interrupts so the wdt can wake us up&lt;br /&gt;
&lt;br /&gt;
  sleep_mode();                        // System sleeps here&lt;br /&gt;
&lt;br /&gt;
  sleep_disable();                     // System continues execution here when watchdog timed out &lt;br /&gt;
  sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main( void ) &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  while ( 1 ) &lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;your code goes here&amp;gt;		&lt;br /&gt;
     &amp;lt;your code goes here&amp;gt;		&lt;br /&gt;
     &amp;lt;your code goes here&amp;gt;		&lt;br /&gt;
	&lt;br /&gt;
     system_sleep();  // start power down sequence&lt;br /&gt;
	&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Watchdog Interrupt Service / is executed when watchdog timed out&lt;br /&gt;
ISR(WDT_vect)&lt;br /&gt;
{&lt;br /&gt;
 // nothing here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>