Технический форум по робототехнике.
Lockdog » 18 мар 2010, 17:32
Прошу вашей помощи.
На вход МК должен подаваться сигнал - либо это будет постоянное напряжение, либо меандр. Если сигнал есть, то МК должен выполнять команду. Но как это сделать в случае, если на вход подаётся меандр? Можно ли его как-то выпрямить?
=DeaD= » 18 мар 2010, 17:45
Частота какая меандра?
=DeaD= » 18 мар 2010, 17:45
Вообще RC-фильтры вроде еще не запрещены законом...

vadinator » 18 мар 2010, 17:47
"Выпрямить", можно в самом МК, введя допустимую задержку на анализ перехода выхода из 1 в 0 - входной сигнал считать присутствующим на входе, пока после перехода не прошло время равное длительности периода например...вариантов много... ну и естественно можно ввести аппаратный фильтр по входу...
avr123.nm.ru » 18 мар 2010, 18:49
Lockdog писал(а): меандр. Можно ли его как-то выпрямить?
Надо вход Цп зашунтировать конденсатором на землю, а меандр подавать на этот вход АЦП через резистор. Произведение R на C должно быть раз в 10 и более больше максимального периода меандра.
Только меандр это когда "1" и "0" равное время присутствуют. Т.е.
меандр это
частный случай прямоугольного сигнала.
Lockdog » 25 мар 2010, 02:11
В общем, нашёл решение, как "выпрямить" меандр с помощью логических вентилей.
Нужно один и тот же сигнал подать на два входа "ИЛИ", но один из них ещё и пропустить через инвертор.
- Вложения
-

avr123.nm.ru » 25 мар 2010, 08:40
Студентам надо показать - чтобы запомнили как ...
Michael_K » 25 мар 2010, 13:00
два входа "ИЛИ", но один из них ещё и пропустить через инвертор.
Эмм. А почему просто выход на единицу не коротнуть

(0 или 1) точно так же как и (1 или 0) ВСЕГДА дадут единицу...
Меандр там, не меандр, оторванный вход или заземленный - всегда.
Смысл-то в этой схеме какой?
Michael_K » 25 мар 2010, 13:01
avr123.nm.ru писал(а):Студентам надо показать - чтобы запомнили как ...
Тоже весело.
Lockdog » 25 мар 2010, 13:22
Michael_K писал(а):два входа "ИЛИ", но один из них ещё и пропустить через инвертор.
Эмм. А почему просто выход на единицу не коротнуть

(0 или 1) точно так же как и (1 или 0) ВСЕГДА дадут единицу...
Меандр там, не меандр, оторванный вход или заземленный - всегда.
Смысл-то в этой схеме какой?
Я всегда иду окольными путями)))
Ворон » 25 мар 2010, 14:38
вообще-то в схемке смысл есть- так как это формирователь коротких импульсов из длинных по фронту))чем больше последовательных инверторов) тем выше задержка до появления импульса и/или его длительность, время срабатывания одного инвертора умноженое на количество их,и плюс время задержки выходного элементе= ширина импульса, это вроде основы схемотехники... хотя мог и приврать где-то ,но вряд ли

Lockdog » 10 май 2010, 00:01
Вот написал такой код для обработки меандра с периодом 0,5 с.
- Код: Выделить всё • Развернуть
#include <mega8.h>
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
PORTD.0 = 1;
if (PINC.0 == 0)
{
PORTD.0 = 0;
}
}
// Declare your global variables here
void main(void)
{
DDRC=0x00;
DDRD=0xFF;
PORTC=0x00;
PORTD.0=0;
TCCR1A=0x00;
TCCR1B=0x0D;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x0F;
OCR1AL=0x92;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x10;
#asm("sei")
while (1)
{
};
}
Предделитель 1024 с
Режим СТС, прерывание при совпадение с OCR1A
Но почему-то не работает, ни в протеусе, ни на реальном железе.
Помогите плиз
Последний раз редактировалось
Vooon 10 май 2010, 16:34, всего редактировалось 1 раз.
Причина: [code=cpp]!!!
Lockdog » 11 май 2010, 14:17
Никто не сможет помочь?

rig » 11 май 2010, 17:18
кодевижен помоги!
а чем стандартные помощники не устравают?? Аппаратный шим к примеру в меге есть

Lockdog » 11 май 2010, 17:28
Дык я в кодвижне и писал, зачем мне шим? Я хочу чтобы таймер через каждые 0,5 сек вызывал прерывание и в нём проверял состояние ножки и если оно = 1, то выполнять какю-либо команду