Например TDA7294

Форум РадиоКот • Просмотр темы - Генерация меандра на Mega
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср дек 24, 2025 13:23:08

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 03:55:22 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
Я делаю умножитель импульсов на mega8, и возникли некоторые вопросы.

Считаю входные импульсы и опорные (метод временных ворот). Получаю частоту входного сигнала (да, отмечу, входной сигнал - меандр).

Потом операции с вычисленной цифрой (умножение).

Собственно вопрос, как выводить импульсы нужной частоты ? Как я понимаю ШИМ регистр использовать не получится, его частота определяется только делителем ШИМ.

А выводить PORTx.x = 1; delay_ms (period); PORTx.x = 0; - не очень красивый вариант. Да и будут моменты, когда период будет плавать из-за возникновения прерывания. Хотя, на тех частотах (у меня на входе от 6Гц до 100Гц, коэффициент умножения от 0,1 до 5, т.е. на выходе не более 500Гц) плавание периодна +- с десяток микросекунд совершенно не критичен.

А вопрос в том, как реализовать это красиво? правильно...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 04:00:29 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Правильно реализовать это на таймере в режиме генерации частоты. ШИМ тут ни при чем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 08:55:39 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
Ser60, у меги8 разве есть такой аппаратный режим?
Мне кажется тут надо таймером только интервалы отмерять (например 1мс), а генерацию программно реализовывать.
при таймере 1мс - период генерируемого сигнала будет кратен 1мс.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 09:27:35 
Прорезались зубы

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт май 18, 2012 23:12:23
Сообщений: 249
Рейтинг сообщения: 0
если нуна точность и малый шаг перестройки частоты - делайте программный DDS


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 09:42:49 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
А чем CTC режим совместно с Toggle on Compare Match не угодил? Как раз меандр будет.
Про про требуемую точность и, соответственно, применимость конкретного способа - это автору темы видней.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пт июн 21, 2013 19:04:08 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
ibiza11 писал(а):
у меги8 разве есть такой аппаратный режим?

Извиняюсь, что пространно выразился, но я имел в виду именно CTC режим как описал выше Kavka. ТС вместо измерения входной частоты следует измерять ее период, затем делить его на множитель и полученную величину использовать для вычисления полупериода генерируемой частоты таймером. Конечно, из-за ошибок оккругления при делении изменять генерируемую частоту можно будет только с некоторым дискретом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пн июн 24, 2013 12:18:42 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
А где можно прочитать статеечку про конфигурирование СТС ? Меня немного в тупик поставили overflow interrupt, compare interrupt, timer value, compare...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пн июн 24, 2013 13:37:30 
Друг Кота

Карма: 64
Рейтинг сообщений: 1020
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4371
Откуда: Ижевск
Рейтинг сообщения: 0
По мне, режим CTC здесь не нужен. Делаю так, правда для ATtiny2313(AT90S2313), для mega8 будет примерно так же.
СпойлерИзображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пн июн 24, 2013 16:22:43 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
akl, все бы хорошо, только я asm не знаю ))) только на C. Расскажите алгоритм...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Пн июн 24, 2013 18:20:28 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 621
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3764
Рейтинг сообщения: 1
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Symbiosis писал(а):
А где можно прочитать статеечку про конфигурирование СТС ?

Исчерпывающая информация по режимам таймера находится в ДШ. Кроме того, по AVR8 имеется много книг на русском. Выбирайте любую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Вт июн 25, 2013 06:28:51 
Друг Кота

Карма: 64
Рейтинг сообщений: 1020
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4371
Откуда: Ижевск
Рейтинг сообщения: 0
Symbiosis писал(а):
...Расскажите алгоритм...
Ничего сложного. Алгоритм основан на предположении, что множитель может быть представлен простой дробью, в числителе (N) и знаменателе (M) которого стоят целые числа. Для Вашего случая при множителе 0,1 (10/1 для периода, т.е. N=10, M=1) отсчитываются 10 входных периодов, а на выходе должен сформироваться 1 выходной период. Для множителя 5 (1/5 для периода, т.е. N=1, M=5)на каждый входной период формируется 5 выходных периодов. Для реализации этого алгоритма задействован Т1 с использованием прерываний захвата, переполнения и сравнения. Прерывания переполнения Т0 просто формируют импульс на выходе схемы. Замечу, Т1 запускается один раз и далее никогда не останавливается. Т0 запускается вначале формирования выходного импульса и при переполнении формирует конец импульса. Из вышеописанного Вы самостоятельно можете сформировать меандр. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 06:48:12 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
Почему может не работать ? То нормально работает, то тупит контроллер.

Код:
#include <tiny13.h>
#include <delay.h>   

unsigned int RP100MS = 0;
unsigned int timer = 0;
unsigned int temp = 0;
unsigned int calc = 0;

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
RP100MS++;
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if (timer == 59) {
        RP100MS = temp;
        timer = 0;     
        RP100MS = 0;
        }
else {
timer++;
};
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=Out Func1=In Func0=In
// State5=T State4=T State3=T State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x04;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150.000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x40;
MCUCR=0x02;
GIFR=0x40;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {   
      calc = temp/1,25 // ((temp / 0,5) /2,5) пауза половину периода и коэффициент деления
     
      PORTB.2 = 0;
      delay_ms(calc);
      PORTB.2 = 1;
      delay_ms(calc);

      };
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 09:09:32 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
а как должен работать ваш код?
я вижу программную генерацию импульсов на ноге PORTB.2, период зависит от переменной temp. Но я не вижу, где в вашей программе задается этот temp.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 09:13:39 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
Вот здесь

Код:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if (timer == 59) {
        RP100MS = temp;
        timer = 0;     
        RP100MS = 0;
        }
else {
timer++;
};
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 09:16:34 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
:))) гениально!
я не вижу ни одной операции присвоения значения переменной temp

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 09:23:32 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
Бугага. Тогда другой вопрос, почему оно работает но глючно :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Ср апр 09, 2014 09:25:12 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
заработало )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Чт апр 10, 2014 02:43:26 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Вс апр 27, 2008 13:44:52
Сообщений: 600
Рейтинг сообщения: 0
В общем рано обрадовался...

Глюк алгоритмический. В общем пока на входе есть импульсы на выходе все красиво. Как только на вход ничего не идёт, на выходе меандр 58кГц. Подсобите , как сделать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Чт апр 10, 2014 05:07:05 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24617
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Как вариант, контролировать текущий массив входных измерений.
Только нужно учесть скорость изменения входной частоты...
Это традиционная сигнальная задача фильтрации...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генерация меандра на Mega
СообщениеДобавлено: Чт апр 10, 2014 08:14:55 
Прорезались зубы

Зарегистрирован: Пт мар 14, 2014 19:36:10
Сообщений: 206
Рейтинг сообщения: 0
Symbiosis писал(а):
Я делаю умножитель импульсов на mega8

Извращение какое-то.

Цитата:
А вопрос в том, как реализовать это красиво? правильно...

Красиво и правильно будет использование DDS с управлением от mega8. В крайнем случае можно использовать внутренний СТС, но спектр там будет тот еще.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  1,  

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


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y