реклама на сайте
подробности

 
 
> Вопросы по работе ШИМ, mega8 + appnote AVR131 = ?
aspID
сообщение Mar 3 2008, 13:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Согласно вышеозвученному апноту пишу код (вставил еще дерганье дополнительной ногой 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. Где ошибка? В ожидании или в обработке?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
aspID
сообщение Mar 4 2008, 05:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Пример был для 10-разрядного счетчика. Правкой 1023 на 255 в обработчике прерывания все вылечилось. Что же касается PB0 - достаточно было обратить внимание на то, что прерывание по переполнению счетчика и, соответственно, частоту I/Oclk разделить не только на предделитель, но и на 256.

Вот результат правки:
Прикрепленное изображение


Частота данного сигнала получилась 63.3Гц
Вопрос - почему нижний уровень держится на 0.5В? Как сделать его от 0? И каким образом перейти к 10-битному счетчику?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 01:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016