[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] Tiny26 PWM?
From: |
Kris |
Subject: |
[avr-gcc-list] Tiny26 PWM? |
Date: |
Sat, 4 Oct 2003 20:07:54 -0400 |
I've tried replicating the PWM demo on an ATtiny26, but my results are
sporadic at best. I've read all the docs I could find on the tiny26, and
while they describe the general procedure you should take, they're
incredibly light on the specifics. Any help would be appreciated. Here's my
code:
/*
attiny26 specifics:
output led should be on pb3, pin 4
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
// for the attiny26
#define OC1 PB3 // 1 or OC1B
#define DDROC DDRB // TCCR1A file://COM1B0/1 TIMSK
#define OCR OCR1B
enum { UP, DOWN };
volatile uint16_t pwm;
volatile uint8_t direction;
SIGNAL (SIG_OVERFLOW1){
switch (direction)
{
case UP:
if (++pwm == 1023)
direction = DOWN;
break;
case DOWN:
if (--pwm == 0)
direction = UP;
break;
}
OCR = pwm;
}
void ioinit (void){
// set PWM value to 0
OCR = 0;
// enable OC1 (PB3) as output
DDROC |= _BV(OC1);
// Enable and lock PLL
PLLCSR |= _BV(PLLE);
// Wait for PLL to lock (app. 100 ms)
while(!(PLLCSR & _BV(PLOCK))){;}// may need to manually set plock?
// Set PLL as asynchronous PWM clock source
PLLCSR |= _BV(PCKE);
// Set PWM mode: toggle OC1B on compare
TCCR1A &= ~_BV(COM1B1);// COM1B1 = 0
TCCR1A |= _BV(COM1B0);// COM1B0 = 1
// Set PWM Top value: OCR1C = 0xFF
OCR1C = 0xff;
// enable PWMB
TCCR1A |= _BV(PWM1B);
// Enable Timer/ Set PWM clock prescaler to PCK/2 (32 MHz PWM clock)
TCCR1B |= _BV(CS12) | _BV(CS10);// CS13=0, CS12=1, CS11=0, CS10=1 => 4 Mhz?
// TCCR1B |= _BV(CS11);//CS13=0, CS12=0, CS11=1, CS10=0 => 32 Mhz?
// TCCR1B |= _BV(CS10);//CS13=0, CS12=0, CS11=0, CS10=1 => 64 Mhz?
// Enable Timer1 OVF interrupt
// TIMSK |= _BV(TOIE1);
timer_enable_int (_BV (TOIE1));
// enable interrupts
sei ();
}
int main (void){
ioinit ();
// loop forever, the interrupts are doing the rest
for (;;){;}
return 0;
}
- [avr-gcc-list] Tiny26 PWM?,
Kris <=