Страница 1 из 1
Подсчет каждого нечетного импульса
Добавлено: Пн ноя 17, 2008 18:40:42
Digital
Подскажите пожалуйста!
Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить

Добавлено: Пн ноя 17, 2008 21:39:23
Aheir
Ну так заведите переменную, которая будет увеличиваться на 1 при приеме каждой новой пачки и по нечетному значению этой переменной генерируйте нужный импульс.

Re: Подсчет каждого нечетного импульса
Добавлено: Пн ноя 17, 2008 23:24:08
TechMike
Digital писал(а):Подскажите пожалуйста!
Не пойму как реализовать (пользуюсь cvavr) подсчет каждого нечетного импульса. Может кто-нибудь посоветовать? Задача такая: в бесконечном цикле отсчитывать пачку из 58 импульсов, затем пауза на 2 импульса и т.д., а по каждой нечетной пачке генерировать 1 импульс. Но получается только на каждую пачку генерить

Включаеш прерывание по фронту внешнего импульса, например на ноге INT0 и накапливаеш в переменной кол-во выходов в прерывание. На нужном значении переменной, дергаеш еще какой-либо ногой МК. далее возможны вариации.....
Добавлено: Пн ноя 17, 2008 23:35:40
Dr. Alex
Или завести переменную, которая увеличивается на 1. Когда переменная будет равна 2, выдавать нужную тебе пачку и сбрасывать переменную в 0.
Так и получится каждый чётный импульс...
Добавлено: Пн ноя 17, 2008 23:47:55
kostya740
Я б не использовал увелечение переменной(инкремент). можно упереться в предел значения переменной. пробуй мой вариант.
Код: Выделить всё
bit chet = 0;
if(chet == 1)
{
// сдесь твои операции четного кода
chet = !chet;
}
else
{
chet = !chet;
}
Подсчет каждого нечетного импульса
Добавлено: Вт ноя 18, 2008 19:31:10
Digital
Спасибо за советы, обдумаю еще раз, попробую на недельке. Сначала думал тоже о переменной, но не смог сформулировать условие нечетности числа (как запрограммировать условие, что число считать нечетным, если оно не делится без остатка на 2). Может есть у кого варианты реализации этого условия?
Добавлено: Вт ноя 18, 2008 19:34:54
kostya740
Деление числа без остатка.
Но я б использовал мой вариант выше. Тактов процессор должен тратить меньше.
Подсчет каждого нечетного импульса
Добавлено: Вт ноя 18, 2008 19:43:13
Digital
Обязательно попробую все варианты.
Добавлено: Вт ноя 18, 2008 20:03:22
Кашпо
микропроцессорное зажигание мутите

?
Re: Подсчет каждого нечетного импульса
Добавлено: Вт ноя 18, 2008 21:25:37
smac
Digital писал(а):Спасибо за советы, обдумаю еще раз, попробую на недельке. Сначала думал тоже о переменной, но не смог сформулировать условие нечетности числа (как запрограммировать условие, что число считать нечетным, если оно не делится без остатка на 2). Может есть у кого варианты реализации этого условия?
Младший бит числа проверить, если 0 - четное.
например счетчик
Код: Выделить всё
unsigned char count=0
...
if (!(count&0b1)){
do something
}
инкрементировать естественно по приему каждой пачки импульсов, если упрестя в конечное значение - должен с нуля считать начать
Подсчет каждого нечетного импульса
Добавлено: Ср ноя 19, 2008 18:31:44
Digital
Кашпо писал(а):микропроцессорное зажигание мутите

?
Нет, девайс попроще. имитатор сигнала датчика положения КВ для проверки контроллера инжектора на "столе".
Подсчет каждого нечетного импульса
Добавлено: Чт ноя 20, 2008 19:51:06
Digital
Выкладываю, так сказать, побочный продукт обсуждаемой темы. Может кому-нибудь пригодится. Это делитель частоты на 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. с определением нечётности разобрался. Всем ответившим спасибо.
Добавлено: Чт ноя 20, 2008 19:56:30
Igor_67
Ну ты паришься!? Смотри пост выше у Kostya740! Там всё правильно! Чёт-нечёт. Какие проблемы?
Подсчет каждого нечетного импульса
Добавлено: Чт ноя 20, 2008 21:11:56
Digital
Igor_67 писал(а):Ну ты паришься!? Смотри пост выше у Kostya740! Там всё правильно! Чёт-нечёт. Какие проблемы?
No problem, sir

Добавлено: Чт ноя 20, 2008 21:14:06
Igor_67
Ну так и чё???
Подсчет каждого нечетного импульса
Добавлено: Чт ноя 20, 2008 21:24:16
Digital
Igor_67 писал(а):Ну так и чё???
хм. ??? По этой теме ничего.
Другие проблемы еще не сформулировал.