 |
|
|
|
| Автор |
Сообщение |
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 |
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 21 Май 2007, 14:00 Заголовок сообщения: |
|
|
Знаю следующий вопрос ... "А можно измененный исходник?" ... Можно!
| Описание: |
|
 Файлообменник |
| Название файла: |
Brezenham_2000.r_a_r.txt |
| Размер файла: |
18.96 KB |
| Скачено: |
114 раз(а) |
_________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 21 Май 2007, 16:32 Заголовок сообщения: |
|
|
Спасибо, вникаю!
Отпишу, что мне ясно, что не ясно и что не так
|
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>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.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 23 Май 2007, 17:05 Заголовок сообщения: |
|
|
И совсем не хорошее дело я заметил.
Мне нужен меандр, а на осциле в Протерусе видны "выбросы" нуля и единицы. То-есть время от времени длительность нуля ГОРАЗДО больше или меньше длительности единицы, и наоборот.
|
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 23 Май 2007, 17:40 Заголовок сообщения: |
|
|
| AVL писал(а): |
2. Не ясно также зачем мне ЭТО: PORTD &= ~0x04; //Сброс импульса синхронизации фаз
Может, его можно вообще убрать?
|
Это только для демонстрашки на осциллографе ... таким макаром я синхронизировал начало цикла алгоритма с "началом развертки" ... в алгоритме это совсем не нужно.
| Цитата: |
И совсем не хорошее дело я заметил. Слезы
Мне нужен меандр, а на осциле в Протерусе видны "выбросы" нуля и единицы. То-есть время от времени длительность нуля ГОРАЗДО больше или меньше длительности единицы, и наоборот.
|
Упс. А тут ничегоне могу сказать ... алгоритм решает именно поставленную задачу ...
Вы уверены, что Вам нужна скважность единица?
_________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>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 |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>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.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 24 Май 2007, 7:56 Заголовок сообщения: |
|
|
На мой взгляд, можно сделать так, для "топтания на месте":
Делаем инкремент частоты +10, потом декримент -9, к примеру. Таким образом частота вроде и возрастает, а вроде и не сильно быстро. Надо, прада, думаю, для разных частот подбирать разные значения инкремента-декримента. Хотя, опять-же, на частотах близких к максимальным для моей задачи (2-3 кГц) всё-таки довольно быстро будет увеличиваться. Как такой вариант вам нравится?. Я в жизни не пробовал ЭТО сделать. Можете написать мне код этого алгоритма?
|
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять вложения в этом форуме Вы можете просматривать вложения в этом форуме
|
|