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

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 90
Зарегистрирован: Пн апр 03, 2017 11:40:46

Сообщение 201bazza »

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

Изображение
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

PINB3 это константа.

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

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

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

if (PINB & (1<<PINB3))...
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение 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мс

   }
}
Ответить

Вернуться в «AVR»