Начинающий. Делаю ШЫМ по примеру из WinAVR demo.c, но в Кодевижне (1.24.7а Eval.)
Вот кусок проги с наиболее полезными (по моему) строками, сгенерированной Кодевиженовским CodeWizard'ом с моими строками
(тело прерывания и переменные перед ним):
Код:
Chip type : ATmega8
Program type : Application
Clock frequency : 1,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
static enum {UP, DOWN}dir=UP;
static unsigned int pwm=0;
const unsigned int TOP=1023;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
switch (dir)
{
case UP:
if (++pwm == TOP)
dir=DOWN;
break;
case DOWN:
if (--pwm == 0)
dir=UP;
break;
};
OCR1A=pwm;
}
//== а это - из ф-ии main():
PORTB=0x00;
DDRB=0x02;
...
// Clock source: System Clock/64
// Clock value: 1000,000 kHz/64
// Mode: Ph. correct PWM top=00FFh
// OC1A output: Non-Inv.
// Timer 1 Overflow Interrupt: On
TCCR1A=0x81;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x04;
...
остальная периферия инициализирована в нули (как нерабочая)
потом идет бесконечный цикл
Мои ожидания: подключенный между OC1A (portB.1) и землей светодиод должен плавно загораться и гаснуть тоже плавно, т.е. график яркости такой:
.../\/\/\...
вместо этого получается пила, состоящая из циклов вида:
.../|/|/\|\|\...
т.е. четыре нарастающих яркости, потом 4 спадающих, все это повторяется.
1. В чем косяк программы?
2. В AVR Studio 3.56 ни одна из моих переменных не видна. Интересно узнать причины.
Спасибо.
Заключайте листинги в тег CODE <V>