<?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=ATtiny85_PWM</id>
	<title>ATtiny85 PWM - 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=ATtiny85_PWM"/>
	<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny85_PWM&amp;action=history"/>
	<updated>2026-05-17T04:11:25Z</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=ATtiny85_PWM&amp;diff=2140&amp;oldid=prev</id>
		<title>Admin at 09:12, 1 February 2016</title>
		<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=ATtiny85_PWM&amp;diff=2140&amp;oldid=prev"/>
		<updated>2016-02-01T09:12:34Z</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;This is a cut-and-paste example of setting PWM on a Atmel AVR ATtiny85. It uses pin PB0.&lt;br /&gt;
&lt;br /&gt;
[[File:Attiny85_pinout.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tested on: ATtiny85&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define HIGH      1&lt;br /&gt;
#define LOW       0&lt;br /&gt;
#define INPUT     1&lt;br /&gt;
#define OUTPUT    0&lt;br /&gt;
&lt;br /&gt;
#define LED PB0      // OC0A PWM output pin  (on t84=PB2, t85=PB0)&lt;br /&gt;
#define SWITCH PB4   // ptt switch&lt;br /&gt;
&lt;br /&gt;
const uint8_t sine_wave_50[] PROGMEM= &lt;br /&gt;
{&lt;br /&gt;
  133,145,158,168,179,189,196,204,209,214,&lt;br /&gt;
  217,219,219,219,217,212,207,199,191,184,&lt;br /&gt;
  176,166,156,143,133,122,112, 99, 89, 79,&lt;br /&gt;
   71, 64, 56, 48, 43, 38, 36, 36, 36, 38,&lt;br /&gt;
   41, 46, 51, 59, 66, 77, 87, 97,110,122,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void init_pwm()&lt;br /&gt;
{&lt;br /&gt;
   //Set PORTB1 pin as output&lt;br /&gt;
   DDRB=0xFF;&lt;br /&gt;
   // initial OCR1A value&lt;br /&gt;
   OCR0A=80;&lt;br /&gt;
   //Output compare OC1A 8 bit non inverted PWM&lt;br /&gt;
   TCCR0A=0x91;&lt;br /&gt;
   //start timer without prescaler&lt;br /&gt;
   TCCR0B=0x01;&lt;br /&gt;
   //enable output compare interrupt for OCR1A&lt;br /&gt;
   TIMSK=0x10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   pinMode(SWITCH,OUTPUT);&lt;br /&gt;
   digitalWrite(SWITCH,LOW);&lt;br /&gt;
  &lt;br /&gt;
   init_pwm();&lt;br /&gt;
   uint8_t step=0;&lt;br /&gt;
   &lt;br /&gt;
   while(1)&lt;br /&gt;
   {&lt;br /&gt;
   &lt;br /&gt;
      digitalWrite(SWITCH,HIGH);&lt;br /&gt;
   &lt;br /&gt;
      // send a 1000Hz tone &lt;br /&gt;
      for (step=0; step&amp;lt;50; step++)&lt;br /&gt;
      {&lt;br /&gt;
         OCR0A = pgm_read_byte(&amp;amp;sine_wave_50[step]);&lt;br /&gt;
         _delay_us(20); &lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* [[ATtiny84_PWM]]&lt;br /&gt;
* [[ATtiny85_ADC]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>