Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить
Подсчет каждого нечетного импульса
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Подскажите пожалуйста!
Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить
Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: Подсчет каждого нечетного импульса
Digital писал(а):Подскажите пожалуйста!
Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить
Включаеш прерывание по фронту внешнего импульса, например на ноге INT0 и накапливаеш в переменной кол-во выходов в прерывание. На нужном значении переменной, дергаеш еще какой-либо ногой МК. далее возможны вариации.....
Я б не использовал увелечение переменной(инкремент). можно упереться в предел значения переменной. пробуй мой вариант.
Код: Выделить всё
bit chet = 0;
if(chet == 1)
{
// сдесь твои операции четного кода
chet = !chet;
}
else
{
chet = !chet;
}- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Спасибо за советы, обдумаю еще раз, попробую на недельке. Сначала думал тоже о переменной, но не смог сформулировать условие нечетности числа (как запрограммировать условие, что число считать нечетным, если оно не делится без остатка на 2). Может есть у кого варианты реализации этого условия?
Деление числа без остатка.
Но я б использовал мой вариант выше. Тактов процессор должен тратить меньше.
Код: Выделить всё
if(!(x%2))
{
}Но я б использовал мой вариант выше. Тактов процессор должен тратить меньше.
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Обязательно попробую все варианты.
Re: Подсчет каждого нечетного импульса
Digital писал(а):Спасибо за советы, обдумаю еще раз, попробую на недельке. Сначала думал тоже о переменной, но не смог сформулировать условие нечетности числа (как запрограммировать условие, что число считать нечетным, если оно не делится без остатка на 2). Может есть у кого варианты реализации этого условия?
Младший бит числа проверить, если 0 - четное.
например счетчик
Код: Выделить всё
unsigned char count=0
...
if (!(count&0b1)){
do something
}инкрементировать естественно по приему каждой пачки импульсов, если упрестя в конечное значение - должен с нуля считать начать
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Кашпо писал(а):микропроцессорное зажигание мутите?
Нет, девайс попроще. имитатор сигнала датчика положения КВ для проверки контроллера инжектора на "столе".
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Выкладываю, так сказать, побочный продукт обсуждаемой темы. Может кому-нибудь пригодится. Это делитель частоты на 2, ну или аналог Т-триггера, без использования таймеров МК AVR. Нужная частота задается функцией delay_us(х) или delay_ms(х).
//Компилятор CodeVisionAVR
#include <mega16_h>
#include <delay_h>
unsigned char chet;
void initialization(void)
{
PORTA=0; DDRA=0;
PORTB=0x3F; DDRB=0xC0;
PORTC=0; DDRC=0;
PORTD=0; DDRD=0;
}
void main(void)
{
initialization();
while(1)
{
PORTB.6^=(1<<0);
delay_us(1250);
chet++;
if((chet%2)==1)
{
PORTB.7^=(1<<0);
}
}
}
P.S. с определением нечётности разобрался. Всем ответившим спасибо.
//Компилятор CodeVisionAVR
#include <mega16_h>
#include <delay_h>
unsigned char chet;
void initialization(void)
{
PORTA=0; DDRA=0;
PORTB=0x3F; DDRB=0xC0;
PORTC=0; DDRC=0;
PORTD=0; DDRD=0;
}
void main(void)
{
initialization();
while(1)
{
PORTB.6^=(1<<0);
delay_us(1250);
chet++;
if((chet%2)==1)
{
PORTB.7^=(1<<0);
}
}
}
P.S. с определением нечётности разобрался. Всем ответившим спасибо.
Последний раз редактировалось Digital Пт ноя 21, 2008 18:23:21, всего редактировалось 2 раза.
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Igor_67 писал(а):Ну ты паришься!? Смотри пост выше у Kostya740! Там всё правильно! Чёт-нечёт. Какие проблемы?
No problem, sir
- Digital
- Открыл глаза
- Сообщения: 78
- Зарегистрирован: Сб сен 13, 2008 16:23:09
- Откуда: Kaluga
- Контактная информация:
Подсчет каждого нечетного импульса
Igor_67 писал(а):Ну так и чё???
хм. ??? По этой теме ничего.
Другие проблемы еще не сформулировал.