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

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

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

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


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

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

СТАВИМ НУЖНО К-ВО СТУПЕНЕЙ!!!
Код:

#define MAXLEVEL        2000

меняем типы - расширяем диапазоны. И ДОБАВЛЯЕМ ОДИН ФЛАГ!!!
Код:

unsigned int            level;  //задает текущий уровень
signed int              delta;  //подсчет отклонения
unsigned int            phase;  //счетчик

bit level_up; // УКАЗЫВАЕМ НАПРАВЛЕНИЕ ИЗМЕНЕНИЯ ЧАСТОТЫ!!!

Код:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=РАСЧИТЫВАЕМ НУЖНОЕ!!!
//ДАЛЬШЕ ИДЕТ САМА СУТЬ.
if (phase == 0){                //Новый цикл 

  if (level_up){                //Этот кусок динамически меняет значение LEVEL при отработке цикла ... заметте - изменение происходит через ОДИНКОВЫЕ промежутки времени!!! Отсюда и РАВНОМЕРНОСТЬ изменения
    if (level < MAXLEVEL)
      level++;
  }
  else{
   if (level > 0)
     level--;
  }

PORTD |= 0x04;                  //Импульс синхронизации фаз (для осциллографа)
phase = MAXLEVEL;
delta = -(MAXLEVEL / 2);
}

Дальше по коду.


Ниже пример "туда-сюда" частота сама скачет вверх/вниз - проект Протеуса тот же - посмотрите в осциллографе -красиво получается Улыбка
Код:

/ДАЛЬШЕ ИДЕТ САМА СУТЬ.
if (phase == 0){                //Новый цикл         

//Этот кусок кода предназначен для изменения "туда-сюда" level
  if (level_up){//вверх
   level++;
   if (level == MAXLEVEL)
     level_up = ~level_up;
  }
  else{
   level--;
   if (level == 0)
     level_up = ~level_up;
  }
 
PORTD |= 0x04;                  //Импульс синхронизации фаз (для осциллографа)
phase = MAXLEVEL;
delta = -(MAXLEVEL / 2);
}

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


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

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

Знаю следующий вопрос ... "А можно измененный исходник?" ... Можно!


Brezenham_2000.r_a_r.txt
 Описание:
RAR-архив!!!

Файлообменник
 Название файла:  Brezenham_2000.r_a_r.txt
 Размер файла:  18.96 KB
 Скачено:  114 раз(а)


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


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

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

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


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

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

1. AndryG, мы договаривались о 2000 ступеней, а в примере только 200. 2000 нельзя?
#define MAXLEVEL 200


2. Не ясно также зачем мне ЭТО: PORTD &= ~0x04; //Сброс импульса синхронизации фаз
Может, его можно вообще убрать?

3. Это (#define BT_PLUS 0x01
#define BT_MINUS 0x02
)
тоже можно убратьиз проэкта?

ПОЖАЛУЙСТА, уберите всё для меня лишнее, что б оно меня не путало, что б я понял саму суть. Хорошо?


P.S.
С первым и третьим вопросом я разобрался. Можно 200 увеличивать, а кнопки убрать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


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

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

И совсем не хорошее дело я заметил. Слезы
Мне нужен меандр, а на осциле в Протерусе видны "выбросы" нуля и единицы. То-есть время от времени длительность нуля ГОРАЗДО больше или меньше длительности единицы, и наоборот.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


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

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

AVL писал(а):

2. Не ясно также зачем мне ЭТО: PORTD &= ~0x04; //Сброс импульса синхронизации фаз
Может, его можно вообще убрать?

Это только для демонстрашки на осциллографе ... таким макаром я синхронизировал начало цикла алгоритма с "началом развертки" ... в алгоритме это совсем не нужно.
Цитата:

И совсем не хорошее дело я заметил. Слезы
Мне нужен меандр, а на осциле в Протерусе видны "выбросы" нуля и единицы. То-есть время от времени длительность нуля ГОРАЗДО больше или меньше длительности единицы, и наоборот.


Упс. А тут ничегоне могу сказать ... алгоритм решает именно поставленную задачу ...

Вы уверены, что Вам нужна скважность единица?

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


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

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

Да, увы, скважность единица нужна. Ибо на "выбросы" нуля или единицы щиток приборов не будет реагировать вообще. Представьте себе датчик Холла. У него выходной сигнал - меандр со скважностью "1". Это серьёзно усложняет дело?.
Может, я не чётко поставил задачу...
Надо изменять частоту от 0 до 2кГц. Представьте себе, что вы разгоняетесь на машине. Стрелка спидометра плавно набирает скорость, а не разгоняется от 0 км до 100 за 8 сек, а с 100 до 200 за оставшиеся 2 сек. ( Допустим, до 200 Вы разгоняетесь за 10 сек.)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


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

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

Цитата:
Надо изменять частоту от 0 до 2кГц. Представьте себе, что вы разгоняетесь на машине. Стрелка спидометра плавно набирает скорость, а не разгоняется от 0 км до 100 за 8 сек, а с 100 до 200 за оставшиеся 2 сек. ( Допустим, до 200 Вы разгоняетесь за 10 сек.)


Честно .. нифига не понял Улыбка ... для чего здесь скважность?

От чего зависит отклонение стрелки спидометра?

если стрелке важно "отношение длительности единицы к длительности нуля", то всё пройдет ... и потом .. мы, вроде, про ворота говорили... а теперь уже спидометр ?

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


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

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

AndryG писал(а):
Цитата:
Надо изменять частоту от 0 до 2кГц. Представьте себе, что вы разгоняетесь на машине. Стрелка спидометра плавно набирает скорость, а не разгоняется от 0 км до 100 за 8 сек, а с 100 до 200 за оставшиеся 2 сек. ( Допустим, до 200 Вы разгоняетесь за 10 сек.)


Честно .. нифига не понял Улыбка ... для чего здесь скважность?

От чего зависит отклонение стрелки спидометра?

если стрелке важно "отношение длительности единицы к длительности нуля", то всё пройдет ... и потом .. мы, вроде, про ворота говорили... а теперь уже спидометр ?


Угол отклонения стрелки зависит от частоты поступающих на неё импульсов. Но на сигнал такой формы 100010001000 или 011101110111 стрелка вообще реагировать не будет. Только на 1010101010101 будет реагировать. Ибо в спидометре не интегратор на конденсаторе сидит, а целый процессор, который контролирует параметры входящих импульсов.
Да, был разговор и о воротах, но это паралельная тема, которую я пока в перспективе держу, ибо, пока со спидометром не закончил.
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


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

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

На мой взгляд, можно сделать так, для "топтания на месте":
Делаем инкремент частоты +10, потом декримент -9, к примеру. Таким образом частота вроде и возрастает, а вроде и не сильно быстро. Надо, прада, думаю, для разных частот подбирать разные значения инкремента-декримента. Хотя, опять-же, на частотах близких к максимальным для моей задачи (2-3 кГц) всё-таки довольно быстро будет увеличиваться. Как такой вариант вам нравится?. Я в жизни не пробовал ЭТО сделать. Можете написать мне код этого алгоритма?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Страница 2 из 6

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


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

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.6669s (PHP: 91% - SQL: 9%) - SQL запросов: 14 - GZIP enabled - Debug on