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

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

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

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


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

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

Цитата:
Может, сходу поставить TCNT0=1 и выдёргивать только нужные импульсы? Как?

Да.
Как мне кажется, Ваша задача имеет неверные условия ... Вот Вы хотите за 15 сек "пробежать" частоты от 1 Гц до 2000 ... но один период 1 Гц - это 1 секунда!!! 1/15 всего времени!
Надобно постановку задачки изменить ...


На скобках действительно экономить не стоит ... всё одно компилятор "лишние" проигнорирует ... но понимать, где скобки нужны. а где нет - это обязательно Радостный

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


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

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

Про постановку задачи.
Представьте себе машину (не Завпорожец, ибо там на 3-4 придётся время умножать) разгоняющуюся с положения СТОП до 200 км в час. Времени надо будет секунд 15. Вот этот разгон надо симулировать нашим девайсом. И Бог с ним, что з 1 Герцом, можно и с 3-х Гц начать, сэкономим время на старте. Это уже "облизование" алгоритма, костяк пока не работает (плавное наростание частоты). Пределы частот можно в конце подкорректировать.
4-я страница пошла, а Запорожец и ныне там...
Вот что у меня не получается:
Когда делаб так
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};
то не выполняется последняя строчка кода : if ((TCNT0==1) && (ti==254)) {TCNT0=5};

Частота с максимума не переходит на минимум. Когда пишу вот так, то всё ок. Почему?
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=5};
то-есть TCNT0==2 на TCNT0=5 перескакивает нормально.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


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

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

Вы в курсе, что у вас блоки if выполняются последовательно... в первом блоке условие совпадает. Вы меняете условие и оно начинает совпать в следующем блоке.
Может вам нужно if else if ?

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


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

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

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


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

СообщениеДобавлено: 04 Июн 2007, 8:55    Заголовок сообщения: Ответить с цитатой

Сделал ппереключение с TCNT0=5 на TCNT0=4 потом на TCNT0=3. Работает. Но потом запутался в скобках и не смог разгребсти. Моржет
switch () {
case :
break;
};
легче сделать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


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

СообщениеДобавлено: 04 Июн 2007, 9:55    Заголовок сообщения: Ответить с цитатой

Может, но хотелось бы увидеть исходники. Может, что-то и подскажем - раз 2 место по горным лыжам Улыбка Я был на новый год в Шешорах и на Буковели. Радостный
_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


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

СообщениеДобавлено: 04 Июн 2007, 11:49    Заголовок сообщения: Ответить с цитатой

urry писал(а):
Может, но хотелось бы увидеть исходники. Может, что-то и подскажем - раз 2 место по горным лыжам Улыбка Я был на новый год в Шешорах и на Буковели. Радостный

Исходник дома. Вчера пол ночи сидел. Небыло уже сил его на мобилу перекидывать, что б на работу взять. Но исходникак там как такового и нет. Я только ЭТОТ момент пробую запустить, что б уже его "обкатанного" в БОЛЬШОЙ проэкт прилепить.
В Шешорах в этом году катания небыло, а Буковель гудел, в конце сезона, ибо вначале сезона снега небыло. А Вы, батенька, крут, раз в канун Нового года на Буковеле зависаете Улыбка Не дешовое ЭТО занятие Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


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

СообщениеДобавлено: 05 Июн 2007, 8:03    Заголовок сообщения: Ответить с цитатой

Мне надо последовательно, при достижении переменной ti==FF переходить каждый раз с TCCR0B==0x05 последовательно до TCCR0B==0x01 и так по кольцу. С 5 до 3 я дохожу, а дальше не знаю Грусть
Вот исходник:

#include <tiny13.h>


unsigned char ti;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

TCNT0=ti; // частота импульсов
ti=ti+1;
PORTB.1=~PORTB.1; //собственно импульсы
if ((TCCR0B==0x05) && (ti==0xFF)) {TCCR0B=0x04;}
else
{if ((TCCR0B==0x04) && (ti==0xFF)) {TCCR0B=0x03;}
};
}

interrupt [TIM0_COMPA] void timer0_compa_isr(void) //÷èñòî îáðàáîòêà êëàâû
{

}

interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{

}

void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x01;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

ti=0;



DDRB=0b111111;
PORTB=0b000001;
DDRB=0b111110;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1600,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0xFA;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

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

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

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog Timer interrupt: Off
#pragma optsize-
WDTCR=0x39;
WDTCR=0x29;


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

while (1)
{
// Place your code here
#asm("wdr")
};

}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
urry
Живет здесь... (>100)
Живет здесь... (>100)


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

СообщениеДобавлено: 05 Июн 2007, 9:52    Заголовок сообщения: Ответить с цитатой

А где проблема ?
В маин где-то определи переменную tajmer
Код:

unsigned char tajmer=5;
TCCR0B=tajmer;
//------------------------------------------------
и в прерывании
 TCNT0=ti; // частота импульсов
 PORTB.1=~PORTB.1; //собственно импульсы
 ti=ti+1;
if (t1==0xff)
{
tajmer--;
if (tajmer == 0) tajmer =5;
TCCR0B=tajmer;
}


Кстати, в Буковели я был всего 2 дня.. Там только под новый год был снег. Ющенко должен был кататься.
И на фика после фигурных скобок точка с запятой ?

_________________
меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVL
Знатный посетитель (>20)
Знатный посетитель (>20)


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

СообщениеДобавлено: 05 Июн 2007, 11:29    Заголовок сообщения: Ответить с цитатой

Спасибо, попробую.
Точка с запятой взята из примеров Кодевижина. А что, её там конкретно не надо?
Там в примерах так указано:


Код:
if () {
    }
else  {   
    };


Так ты на лыжах катаешся или просто отдыхать приезжал?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Страница 4 из 6

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


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

Powered by phpBB © 2001, 2005 phpBB Group

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