Страница 1 из 1

Помогите разобраться с отладкой кода в Atmel Studio 6

Добавлено: Пт дек 08, 2017 16:10:36
201bazza
Всем привет! Пишу код программы, зашиваю в микроконтроллер и все работает не так как надо. С отладкой написанного кода тоже проблемы. Не могу понять как записываются значения в регистры. По замыслу нужно с ножки таймера-счетчика 2 в режиме ШИМ присвоить значения в ножку B0. Вот скриншот самой программы:

Изображение

Re: Помогите разобраться с отладкой кода в Atmel Studio 6

Добавлено: Вс дек 10, 2017 07:50:46
Z_h_e
PINB3 это константа.

Код: Выделить всё

#define PINB3   3
Можно сделать например так

Код: Выделить всё

if (PINB & (1<<PINB3))...

Re: Помогите разобраться с отладкой кода в Atmel Studio 6

Добавлено: Вс дек 10, 2017 08:52:09
Dimon456
Автор пытается программный ШИМ реализовать.
Я так понимаю что PB3 занят, верно?

Если уж программный ШИМ, то
Спойлер

Код: Выделить всё

unsigned char counter=0;
unsigned char lev_ch;
unsigned char buf_lev_ch;

interrupt [TIM2_OVF] void timer2_ovf_isr(void)  //обработка прерывания по переполнению таймера
{
  if (++counter==0) //счетчик перехода таймера через ноль
  {
    buf_lev_ch=lev_ch; //значения длительности ШИМ
    PORTB |=(1<<0); //подаем 1 на канал
  }
  if (counter==buf_lev_ch) PORTB&=~(1<<0); //подаем 0 на канал
}

void main(void)
{
  DDRB=0b00000001; // установка PortB пины 0 выход
  
ASSR=0x00;
TCCR2=0b00000001;  // настройка таймера, делитель выкл
TCNT2=0x00;
OCR2=0x00;  
  
  TIMSK = 0b01000000; // включить прерывание по переполнению таймера 
  #asm("sei")               // разрешить прерывания

  lev_ch=0; //начальные значения длительности ШИМ 

  while (1)       //бесконечная шарманка
  {

      if(lev_ch < 255) lev_ch++; //увеличиваем значения длительности ШИМ канала
      delay_ms(50); //пауза 50мс

   }
}