Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Захотелось мне тут сделать генератор на 36 KHz. Сначала сделал просто через Delay_us(). Но так не интересно. Надо бы через ШИМ. Есть кварц 11.059200 M
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
snayperAlfa
Захотелось мне тут сделать генератор на 36 KHz. Сначала сделал просто через Delay_us(). Но так не интересно. Надо бы через ШИМ. Есть кварц 11.059200 MHz и Мега16. Как я не пытался не получается точно частота 36 KHz. Скважность не 2, а плавает. Далее сделал через таймер и в прерывании изменял состояиние вывода. Вот код:
Код
#include <mega16.h>
#include <delay.h>
  
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
  PORTB.0=~PORTB.0;
}

// Declare your global variables here

void main(void)
{
  
  DDRB=1;

TCCR0=0b00011001;
TCNT0=0;
OCR0=150;

TIMSK |= (1 << 1);

SREG |= (1 << 7);

while (1)
      {

      };
}


А теперь вопрос: как это записать красиво через ШИМ, но чтобы не было прерывания, а то получится тот же таймер.
SysRq
Делайте на 16-битном таймере за номером 1. Ошибка частоты в пределах 0.2%, прерывание не требуется - мк сам будет дергать ногой OC1A.
snayperAlfa
А Fast или Phase Correction PWM?
SysRq
ШИМ вам зачем? Он вам не нужен.
snayperAlfa
Разобрался. Использовал СТС как в начале поста.
Вот пожалуйста может кому пригодится.Там исходник на С,файл прошивки и проект для Протеуса.
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.