 |
|
|
|
| Автор |
Сообщение |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 29 Май 2007, 7:45 Заголовок сообщения: |
|
|
| Цитата: | | Может, сходу поставить TCNT0=1 и выдёргивать только нужные импульсы? Как? |
Да.
Как мне кажется, Ваша задача имеет неверные условия ... Вот Вы хотите за 15 сек "пробежать" частоты от 1 Гц до 2000 ... но один период 1 Гц - это 1 секунда!!! 1/15 всего времени!
Надобно постановку задачки изменить ...
На скобках действительно экономить не стоит ... всё одно компилятор "лишние" проигнорирует ... но понимать, где скобки нужны. а где нет - это обязательно  _________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>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 |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 29 Май 2007, 10:09 Заголовок сообщения: |
|
|
Спасибо, теперь в курсе.
Переделываю. |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 04 Июн 2007, 8:55 Заголовок сообщения: |
|
|
Сделал ппереключение с TCNT0=5 на TCNT0=4 потом на TCNT0=3. Работает. Но потом запутался в скобках и не смог разгребсти. Моржет
switch () {
case :
break;
};
легче сделать? |
|
| Вернуться к началу |
|
 |
urry Живет здесь... (>100)


Зарегистрирован: 23.10.2006 Сообщения: 243
|
Добавлено: 04 Июн 2007, 9:55 Заголовок сообщения: |
|
|
Может, но хотелось бы увидеть исходники. Может, что-то и подскажем - раз 2 место по горным лыжам Я был на новый год в Шешорах и на Буковели.  _________________ меня не интересует мнение людей. которые разбираются в этом вопросе. Только тех, кто сами что-то сделали (А. Энштейн) |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 04 Июн 2007, 11:49 Заголовок сообщения: |
|
|
| urry писал(а): | Может, но хотелось бы увидеть исходники. Может, что-то и подскажем - раз 2 место по горным лыжам Я был на новый год в Шешорах и на Буковели.  |
Исходник дома. Вчера пол ночи сидел. Небыло уже сил его на мобилу перекидывать, что б на работу взять. Но исходникак там как такового и нет. Я только ЭТОТ момент пробую запустить, что б уже его "обкатанного" в БОЛЬШОЙ проэкт прилепить.
В Шешорах в этом году катания небыло, а Буковель гудел, в конце сезона, ибо вначале сезона снега небыло. А Вы, батенька, крут, раз в канун Нового года на Буковеле зависаете Не дешовое ЭТО занятие  |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>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)


Зарегистрирован: 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.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 05 Июн 2007, 11:29 Заголовок сообщения: |
|
|
Спасибо, попробую.
Точка с запятой взята из примеров Кодевижина. А что, её там конкретно не надо?
Там в примерах так указано:
Так ты на лыжах катаешся или просто отдыхать приезжал? |
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять вложения в этом форуме Вы можете просматривать вложения в этом форуме
|
|