Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Пример применения алгоритма Брезенхама
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 24 Май 2007, 10:37    Заголовок сообщения: Ответить с цитатой

Ладно ... если Вы хотите скважность 1 то можно делать просто на таймере ...

Таймер ставим на минимальное время периода (2 кГц частота ... фронты 4 кГц -- период 250мкс.) -- на 250 мкс.

Дальшее вводим переменную(ПЕРИОД), которая указывает, "через сколько сработок таймера нужно сформировать фронт"

Каждое срабатывание таймера мы делаем декремент переменной(ПЕРИОД), если равна нулю. то загружаем в нее нужное число и формируем фронт.

Например. Нужна частота 1 Гц - значит фронты нужно формировать каждые 4000 сработки таймера (ПЕРИОД = 4000).

Так мы формируем нужный сигнал.


Дальше пытаемся его изменять ... вводим еще одну переменную(КАЧАНИЕ), которая будет указывать "через сколько сработок таймера нужно изменить частоту" ...

Кстати ... Вы поняли глюк с НЕРАВНОМЕРНЫМ изменением частоты в Вашем варианте с изменением периода таймера при каждом его срабатывании?

Попробуем определелится с переменной КАЧАНИЕ ... нужно изменить ее значение от 1 до 4000 за 15 сек, 15/4000 = 0,00375 сек.
У нас таймер настроен на 0,00025сек... значит изменять переменную нужно каждые 0,00375/0,00025 = 13 сработок.

... вот теперь только думается мне ... как будет происходить изменение частоты, если частота у нас "300 сработок таймера", а меняем мы ее каждые 13 сработок ....

Видать бред всё это ... надобно тут математику вспоминать посерьезней...

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 24 Май 2007, 11:12    Заголовок сообщения: Ответить с цитатой

Продолжаю думать ... не такая простая задача ...

Если Вам нужна скважность 1 и 2000 итераций ... то что получается ... по одному импульсу каждой частоты с дельтой частоты 1 Гц... получается 1Гц 2Гц 3Гц ... 2000Гц ... нужное время 1/1сек + 1/2сек + 1/3сек + ... + 1/2000сек -- надо вспоминать формулу суммы геометрической прогрессии Улыбка ... то 100% процентов это больше 15 сек Радостный

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

Хм. Конкретизируйте задачку ...

Попробуем сделать к-во итераций 100 (для спидометра 0-200км/ч -- это дельта 2км/ч получается ... вроде нормально)

Значит 15/100 = 0.15 сек - время, через которое мы изменяем частоту ... значит нужно умудриться в эти 150мс впихивать целые периоды определенных частот ... или по другому ... "каждые 150 мс начинать генерить новую частоту" ... тем самым последний период предыдущего периода будет у нас обрезанным.

и вообще ... при изменении скорости ... изменении частоты ... как можно вообще получить скважность 1 на всем промежутке?!

Кто еще что придумает?!

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 24 Май 2007, 11:32    Заголовок сообщения: Ответить с цитатой

Подкинули еще идею ... для красивой скважности изменять частоту сигнала после каждого периода ... НО для равномерного наростания изменять нужно кадый раз раз на разную частоту ...
Например ... генерим период на 1 гц ... н занял время 1 сек ... в это время уже дожна быть частота 2000* 1/15 = 133.3(3) Гц
Значит частоту ставим 133Гц ... отгенерили импульс - у нас прошло времени 1/133 сек ... в это время частота должна быть ?? гц ... ставим ее ... и т.д.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 20.09.2006
Сообщения: 52
Откуда: Коломыя UA

СообщениеДобавлено: 24 Май 2007, 12:06    Заголовок сообщения: Ответить с цитатой

Кстати ... Вы поняли глюк с НЕРАВНОМЕРНЫМ изменением частоты в Вашем варианте с изменением периода таймера при каждом его срабатывании?


Ну, не глюк, оно так и планировалось, но я не ождидал, что будет столь большой дискомфорт на больших частотах... Так-то там всё красиво генерится Улыбка

Да, думать тяжело, но я морально Вам помогаю... Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 20.09.2006
Сообщения: 52
Откуда: Коломыя UA

СообщениеДобавлено: 25 Май 2007, 15:21    Заголовок сообщения: Ответить с цитатой

Всё так плохо?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 25 Май 2007, 17:08    Заголовок сообщения: Ответить с цитатой

времени пока нет ... на работе конец месяца ... попробую позже с разбивкой на сотню шагов ...
_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 20.09.2006
Сообщения: 52
Откуда: Коломыя UA

СообщениеДобавлено: 25 Май 2007, 17:26    Заголовок сообщения: Ответить с цитатой

ок.
И ещё.
Для увеличения частоты генерации я думал применить следующий код:

if (TCNT0==5 & ti==254) {TCNT0=4};
if (TCNT0==4 & ti==254) {TCNT0=3};
if (TCNT0==3 & ti==254) {TCNT0=2};
if (TCNT0==2 & ti==254) {TCNT0=1};
if (TCNT0==1 & ti==254) {TCNT0=5};
ti - тики таймера, от 0 до 255.

для изменения тастоты тактирования таймера. Но в жизни получил полный глюк. А именно, как видим, при наборе максимальной частоты TCNT0==1 должкн перейти на TCNT0=5. А в действительности частота генерации скачет как хочет. Причём это на реальном кристале, а в симуляторе всё ок. В чём может быть беда? Питается девайс от ЮЗБ порта, кондёры по питанию имеются. ДОГ таймер может тут воду муить? Хотя проц не сбрасывается, а прочто частота гуляет как себе хочет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 20.09.2006
Сообщения: 52
Откуда: Коломыя UA

СообщениеДобавлено: 26 Май 2007, 13:05    Заголовок сообщения: Ответить с цитатой

Или как ПРАВИЛЬНО мне генерить импульсы без лишних заморочек?
Может, сходу поставить TCNT0=1 и выдёргивать только нужные импульсы? Как?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
avr123.nm.ru
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 07.08.2006
Сообщения: 67

СообщениеДобавлено: 27 Май 2007, 0:03    Заголовок сообщения: Ответить с цитатой

не экономьте на скобках !
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 20.09.2006
Сообщения: 52
Откуда: Коломыя UA

СообщениеДобавлено: 27 Май 2007, 12:36    Заголовок сообщения: Ответить с цитатой

Так:

if ((TCNT0==5) & (ti==254)) {TCNT0=4};
if ((TCNT0==4) & (ti==254)) {TCNT0=3};
if ((TCNT0==3) & (ti==254)) {TCNT0=2};
if ((TCNT0==2) & (ti==254)) {TCNT0=1};
if ((TCNT0==1) & (ti==254)) {TCNT0=5}; или маловато всё-таки?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Страница 3 из 6

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.6943s (PHP: 63% - SQL: 37%) - SQL запросов: 12 - GZIP enabled - Debug on