Согласно вышеозвученному апноту пишу код (вставил еще дерганье дополнительной ногой PB0 для отладки)
Код
#ifndef ENABLE_BIT_DEFINITIONS
#define ENABLE_BIT_DEFINITIONS
#endif
#ifndef F_CPU
// #define F_CPU 3686400UL
#define F_CPU 1000000UUL
#endif
#include <intrinsics.h>
#include <iom8.h>
enum {UP, DOWN};
unsigned int uiPwm;
unsigned char ucDirection;
#pragma vector = TIMER1_OVF_vect
__interrupt void btn(void)
{
switch ( ucDirection )
{
case UP:
if ( ++uiPwm == 1023 )
ucDirection = DOWN;
break;
case DOWN:
if ( --uiPwm == 0 )
ucDirection = UP;
break;
}
OCR1A = uiPwm;
PORTB = ~(PORTB & 0x01 );
};
int main()
{
// Init Pin PB1
DDRB |= ( 0x01 << PB1 );
DDRB |= ( 0x01 << PB0 );
// Fast PWM, 8bit
TCCR1A |= ( 0x02 << COM1A0 );
TCCR1A |= ( 0x01 << WGM10 );
TCCR1B |= ( 0x01 << WGM12 );
// Allow T/C Interrupt
TIMSK |= ( 0x01 << TOIE1 );
// Initial value
OCR1A = 0;
// Start PWM with no prescaler
// TCCR1B |= ( 0x01 << CS10 );
// Start PWM with CLK/8
TCCR1B |= ( 0x02 << CS10 );
__enable_interrupt();
while ( 1 )
{
}
return 0;
};
В результате чего получаю следующую картинку:
И на ноге PB0 имею 2кГц:
Условия работы - внутренний генератор 8МГц.
На PB1 привешан резистор на 10К, от него - 100нФ в землю.
Ожидалось увидеть результат ШИМа - равнобедренную пилу и 1МГц на PB0. Где ошибка? В ожидании или в обработке?