Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по работе ШИМ
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
aspID
Согласно вышеозвученному апноту пишу код (вставил еще дерганье дополнительной ногой 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. Где ошибка? В ожидании или в обработке?
aspID
Пример был для 10-разрядного счетчика. Правкой 1023 на 255 в обработчике прерывания все вылечилось. Что же касается PB0 - достаточно было обратить внимание на то, что прерывание по переполнению счетчика и, соответственно, частоту I/Oclk разделить не только на предделитель, но и на 256.

Вот результат правки:
Нажмите для просмотра прикрепленного файла

Частота данного сигнала получилась 63.3Гц
Вопрос - почему нижний уровень держится на 0.5В? Как сделать его от 0? И каким образом перейти к 10-битному счетчику?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.