Страница 1 из 2
СV AVR ликбез
Добавлено: Вт мар 13, 2012 03:28:29
_sanych_
помогите пожалуйста. Нужно, что бы по приходу 1 на ногу МК другая выдавала сигнал, а по приходу 0 "молчала".
может быть так:
if (PORTD.0=1) {PORTB.4=PORTB.4} else {PORTB.4!=PORTB.4};
заранее спасибо
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 06:50:05
igor-x
_sanych_ писал(а):помогите пожалуйста. Нужно, что бы по приходу 1 на ногу МК другая выдавала сигнал, а по приходу 0 "молчала".
может быть так:
if (PORTD.0=1) {PORTB.4=PORTB.4} else {PORTB.4!=PORTB.4};
заранее спасибо
вообще то по CV есть отдельная тема.
а по коду возможно так ?
if (PIND.0==1)... и. т. д.
а чтобы код написать дальше надо понять что такое "приход " еденицы и нуля
.. кажется начинаю понимать что нужно.
когда на ноге PIND.0 еденица, то PORTB.4 тоже еденица
когда на ноге PIND.0 ноль, то PORTB.4 тоже ноль.
для этого и программы не надо- просто коротнуть на плате PORTB.4 и PORTD.0
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 07:47:45
pyzhman
Работать не будет. Будет так:
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 08:22:50
mr_smit
_sanych_ писал(а):
может быть так:
if (PORTD.0=1) {PORTB.4=PORTB.4} else {PORTB.4!=PORTB.4};
Может быть так понятней будет:
Код: Выделить всё
if (PIND.0 == 1) {
PORTB.4 = 1;
}
else {
PORTB.4 = 0;
};
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 08:27:11
Мастер Ломастер
ну а if-то зачем? сразу и пишите PORTB.4 = PIND.0;
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 13:25:29
_sanych_
if (PIND.0 == 1) {
PORTB.4 = 1;
}
else {
PORTB.4 = 0;
};
Дело в том, что на ноге PORTB.4 генерится ШИМ, а если писать PORTB.4 = 1, то он, наверное , будет выдавать 1. (Atmega128, ШИМ на нулевом таймере).
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 13:28:43
_sanych_
тоесть мне нужно, что бы по приходу на PORTD.0 1 или 0 на PORTB.4 включался или отключался ШИМ соответсятвенно.
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 14:03:11
igor-x
_sanych_ писал(а):тоесть мне нужно, что бы по приходу на PORTD.0 1 или 0 на PORTB.4 включался или отключался ШИМ соответсятвенно.
а 128 меги будет достаточно для выполнения такой задачи?
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 14:09:40
_sanych_
igor-x писал(а):_sanych_ писал(а):тоесть мне нужно, что бы по приходу на PORTD.0 1 или 0 на PORTB.4 включался или отключался ШИМ соответсятвенно.
а 128 меги будет достаточно для выполнения такой задачи?
А почему нет? Может Вы не поняли вопроса?
Сигнал приходит с датчиков холла (это либо 0 либо 1, и в зависимости от этого мне нужно либо включать, либо отключать ШИМ)
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 14:28:53
igor-x
_sanych_ писал(а):
А почему нет? Может Вы не поняли вопроса?
Сигнал приходит с датчиков холла (это либо 0 либо 1, и в зависимости от этого мне нужно либо включать, либо отключать ШИМ)
тогда в качестве ликбеза почитать немного даташиты...
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 14:38:31
_sanych_
igor-x писал(а):_sanych_ писал(а):
А почему нет? Может Вы не поняли вопроса?
Сигнал приходит с датчиков холла (это либо 0 либо 1, и в зависимости от этого мне нужно либо включать, либо отключать ШИМ)
тогда в качестве ликбеза почитать немного даташиты...
тогда может быть отправите на нужную страницу... я не понимаю, почему 128 мега не сможет справиться с такой задачей.
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:05:00
igor-x
_sanych_ писал(а):
тогда может быть отправите на нужную страницу... я не понимаю, почему 128 мега не сможет справиться с такой задачей.
просто задача поставлена некоректно - началось с ликбеза из одной строчки и одного сигнала, а потом оказывается МК должен работать в некой жесткой врЕменной диаграмме.
для начала надо эту временную диаграмму представить слушателям форума:
1.на вход поступает периодический сигнал с частотой ХХ герц
2.по фронту входного импульса должно произойти ХХХ событие
3. ну и так далее со всеми временами и задержками........
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:18:19
_sanych_
А что будет если написать так?
if (PIND.0 == 0) {
TCNT0 = 0;
};
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:21:00
_sanych_
Я понимаю, что делаю некорректно и неправильно и именно поэтому прошу помощи.
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:27:26
a_skr
ШИМ настраивается через COM01 и COM00 в TCCR0?
тогда
Код: Выделить всё
if(PIND.4) TCCR0 |= (1<<COM01); // или как там у вас настраивается
else TCCR0 &= ~((1<<COM01)|(1<<COM00));
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:30:06
Мастер Ломастер
очень грубо ваша задача должна решаться примерно так:
Код: Выделить всё
char temp_TCCR0 = TCCR0;
while(1){
if(PIND.0){
TCCR0 = temp_TCCR0;
} else {
TCCR0 = 0;
PORTB.4 = 0;
}
}
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:32:38
a_skr
не. проще направлением пина управлять
если не желательно, чтобы выход в воздухе болтался, можно резистором к земле притянуть
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:38:09
Мастер Ломастер
a_skr писал(а):не. проще направлением пина управлять
уверены, что при этом состояние на выходе будет однозначно прогнозируемым?
Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 15:39:07
a_skr
см выше

Re: СV AVR ликбез
Добавлено: Вт мар 13, 2012 16:20:55
_sanych_
Мастер Ломастер писал(а):очень грубо ваша задача должна решаться примерно так:
Код: Выделить всё
char temp_TCCR0 = TCCR0;
while(1){
if(PIND.0){
TCCR0 = temp_TCCR0;
} else {
TCCR0 = 0;
PORTB.4 = 0;
}
}
попробовал так, получается в любом случае на PORTB.4 ШИМа нет хоть 0 приходит на PIND.0 , хоть 1
