roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 12:51

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 02:00 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Захотелось мне тут сделать генератор на 36 KHz. Сначала сделал просто через Delay_us(). Но так не интересно. Надо бы через ШИМ. Есть кварц 11.059200 MHz и Мега16. Как я не пытался не получается точно частота 36 KHz. Скважность не 50% а плавает. Далее сделал через таймер и в прерывании изменял состояиние вывода. Вот код:
Код:
#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)
      {

      };
}


А теперь вопрос: как это записать красиво через ШИМ, но чтобы не было прерывания, а то получится тот же таймер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 02:42 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
snayperAlfa писал(а):
как это записать красиво через ШИМ, но чтобы не было прерывания, а то получится тот же таймер.

Рекомендую воспользоваться очень удобным, интерактивным мастером кода компилятора ICC - вот пример настройки таймера - http://avr123.nm.ru/z6.htm

Или мастером CVAVR - вот пример ШИМ - http://avr123.nm.ru/z8.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 14:41 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Генератор кода это штука удобная когда только начинаеш разбираться. Если посмотреть в перспективу, то генератор кода разлагает мозг программера, поскольку если компилятор сделает гдето ошибку, то ты не сможеш понять в чем дело.
Если кто может,то выложите код запуска ШИМа 8-битного на кварц 11,059200 MHz


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 15:28 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
snayperAlfa писал(а):
генератор кода разлагает мозг программера

Фантастика ! Как он это делает ? Капает на мозг кислотой аль щелочью ЖЖЖЕТ ?

snayperAlfa писал(а):
если компилятор сделает гдето ошибку, то ты не сможеш понять в чем дело.

Типа СЕКРЕТНЫЙ НЕВИДИМЫЙ код чтоль создает ? Ни в даташите не почитать ни в симуляторе ни в железе увидеть что не та ... ДА ?

Фантастика ! Жуть какая-то.

А если компилятор Си паскаля или бэйсика ошибочно скомпилит умножение например, то наверно сразу повесится надА ? Пока мозг не разложился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 17:53 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
:) Можно конечно и так описать процесс использования генератора кода.Разложение происходит на уровне:не хочу сомтреть даташит,лучше запущу генератор в CV. А теперь по существу: какой режим PWM использовать для генерации меандра 36 KHz. Кварц 11,059200 MHz. У меня не получился приемлемый результат с использованием Fast и Phase correction PWM. Не получается ровный меандр. Что записаь в регистр таймера 8-битного что бы получить 36 KHz, но чтобы не было обработки прерывания(чтоб не было как в первом посте с таймером).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 19:16 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
snayperAlfa писал(а):
не хочу сомтреть даташит, лучше запущу генератор в CV.

Правильно. Именно для такой последовательности генератор и создан. А если вы уже в даташите нашли то нафига вам генератор то ???

Но никто не мешает вам после создания кода в генертаоре почитать даташит про те регистры с которыми работает код от генератора и понять что и зачем он сделал.

snayperAlfa писал(а):
какой режим PWM использовать для генерации меандра 36 KHz. Кварц 11,059200 MHz. У меня не получился приемлемый результат с использованием Fast и Phase correction PWM.

Дак он и не может получится. Делители имеют грубый шаг и частоты ШИМ получаются с грубым шагом если не использовать прерывания и не менять в них некоторые параметры.


Добавлено спустя 14 минут 53 секунды:
Вот мастер выдал. Возможно надо частоту 72000 задавать.

ОСТОРОЖНО Смотрите !!! чтоб только МОЗГ у вас не начал разрушаться !!!

Надеюсь ничто не помешает вам теперь посмотреть даташит и разобраться что означают установки в этих регистрах.

Возможно этот код даже работать будет если соотв ножку МК выходом назначить ...

//ICC-AVR application builder : 01.02.2009 18:05:41
// Target : M16
// Crystal: 11.059Mhz

//TIMER0 initialize - prescale:8
// WGM: CTC
// desired value: 36000Hz
// actual value: 35445,510Hz (-1,6%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0xDA; //set count
OCR0 = 0x26; //set compare
TCCR0 = 0x1A; //start timer
}

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 20:07 
Не в сети

Зарегистрирован: 05 июн 2008, 22:03
Сообщения: 163
Откуда: Украина,Одесса
прог. языки: С,Java,SQL если это язык,C++ немного
Попробуйте запустить ваш пример в Протеусе и увидите частоту в 18 KHz.

Вот я модернезировал свой код используя CTC:
Код:
#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=0xff;

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

//TIMSK |= (1 << 1);

//SREG |= (1 << 7);

while (1)
      {

      };
}


Так что еще неизвестно кому мозг генератор разлагает :)


Вложения:
Комментарий к файлу: Вот пожалуйста можно убедится
36 KHz.rar [11.29 КиБ]
Скачиваний: 41
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ и Таймеры
СообщениеДобавлено: 01 фев 2009, 20:22 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
snayperAlfa писал(а):
Попробуйте запустить ваш пример в Протеусе и увидите частоту в 18 KHz.


А вы ПОПРОБУЙТЕ ВНИМАТЕЛЬНО прочитать мой пост .... Может быть разглядите про 72000 ...

И еще можно на скрин мастера ВНИМАТЕЛЬНО ПОЗЫРИТЬ и увидет частоту какого события он показывает !


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO