Управление нагрузкой atmega8

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вс окт 07, 2018 14:26:29

Сообщение RNosadchuk »

Стыдно признаться, но на год забыл о программировании, по долгу службы надо вспомнить и все бы ничего да не получается одна мелкая зараза.
Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его, однако мои 3 строчки не хотят работать постоянно, а прорабатывают лиь 1 раз.
Удалось накарябать нечто подоное:

void main(void)
{
int a;

DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

while (1)
{
if (PINB.2 == 1)

{a=0;};

if (PINB.0 == 1)

{a=1;};

PORTB.1=a;
}

}
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

RNosadchuk писал(а):надо что бы сигнал
Что есть "сигнал" ?
У этого слова множество понятий.
Контактная информация:
Реклама
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Сообщение АСУ »

[uquote="RNosadchuk",url="/forum/viewtopic.php?p=3475144#p3475144"]Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его[/uquote]
ИМХО для корректной работы такого алгоритма, нужно сделать такие условия:
Если на входе «А» (PinB.2) - лог 1, и на входе «В» (PinB.0) - лог 0, то на выходе (PortB.1) устанавливаем лог 1. Если на входе «В» (PinB.0) - лог 1, и на входе «А» (PinB.2) - лог 0, то на выходе (PortB.1) устанавливаем лог 0. При всех остальных конфигурациях входов, на выходе (PortB.1) состояние не изменяется.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Сообщение AndTer »

А еще дребезг отсекать, ежели источники сигнала - кнопки.
Глупый не задает вопросы. Глупый и так все знает.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Суть RS-триггер. Только определиться с приоритетом сброса и установки. Волшебный CV позволяет без заморочек использовать битовые переменные. Попробуйте:
Docendo discimus
Контактная информация:
Реклама
Родился
Сообщения: 3
Зарегистрирован: Вс окт 07, 2018 14:26:29

Сообщение RNosadchuk »

[uquote="АСУ",url="/forum/viewtopic.php?p=3475324#p3475324"][uquote="RNosadchuk",url="/forum/viewtopic.php?p=3475144#p3475144"]Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его[/uquote]
ИМХО для корректной работы такого алгоритма, нужно сделать такие условия:
Если на входе «А» (PinB.2) - лог 1, и на входе «В» (PinB.0) - лог 0, то на выходе (PortB.1) устанавливаем лог 1. Если на входе «В» (PinB.0) - лог 1, и на входе «А» (PinB.2) - лог 0, то на выходе (PortB.1) устанавливаем лог 0. При всех остальных конфигурациях входов, на выходе (PortB.1) состояние не изменяется.[/uquote]

Переделал по вашему совету, так вот у меня получилось:
while (1)
{
if (PINB.0 == 1 && PINB.2 == 0)
{
a=1;};
if (PINB.2 == 1 && PINB.0 == 0)
{
a=0;};

PORTB.1=a;
}

}
Но что то код не фурычит, где то я напартачил, есть мысли где? А то компилятор ошибок не бьет, а протеус показывает что первое условие срабатывает и на PORTB.1 лог.1 появляеться.
Реклама
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Сообщение АСУ »

AndTer писал же об антидребезге...

Вот попробуй эту прошивку… при нажатии на кнопку РВ2 и РВ0 кнопка отпущена, на РВ1 лог 1. При нажатии на кнопку РВ0 и РВ2 кнопка отпущена, на РВ1 лог 0.

Схема:
1.png
(18.1 КБ) 580 скачиваний
Прошивка:
RNosadchuk.zip
(254 байт) 203 скачивания
МК тактируется на заводских установках (1 МГц).
Родился
Сообщения: 3
Зарегистрирован: Вс окт 07, 2018 14:26:29

Сообщение RNosadchuk »

[uquote="АСУ",url="/forum/viewtopic.php?p=3480657#p3480657"]AndTer писал же об антидребезге...

Вот попробуй эту прошивку… при нажатии на кнопку РВ2 и РВ0 кнопка отпущена, на РВ1 лог 1. При нажатии на кнопку РВ0 и РВ2 кнопка отпущена, на РВ1 лог 0.

Схема:
1.png
Прошивка:
RNosadchuk.zip
МК тактируется на заводских установках (1 МГц).[/uquote]
Антидребезг всмысле задержка на срабатывание? Я добавлял задержку результат тот же. Работает, но можно ли россказать что у меня не так? Я понять хочу где я накосячил или что не учел...
Друг Кота
Сообщения: 3342
Зарегистрирован: Ср янв 02, 2013 08:37:35

Сообщение АСУ »

[uquote="RNosadchuk",url="/forum/viewtopic.php?p=3480705#p3480705"]где я накосячил или что не учел...[/uquote]
Дык, птичьего языка не знаю… пишу на АВ (Algorithm Builder)… :)

Вот так выглядит мой алгоритм… :))
Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Сообщение AndTer »

[uquote="RNosadchuk",url="/forum/viewtopic.php?p=3480705#p3480705"]Работает, но можно ли россказать что у меня не так?[/uquote]
На ночь глядя кажется что всё и верно.
Даже ваш первый вариант должен работать. Антидребезг для данной постановки задачи не требуется.

1. Приведите полный листинг программы и в какой среде пишите.
2. Какой МК вы используете. Какая схема подключения всех ножек? (Ресет подтянут к +, всё питание везде подключено)
3. Какие фьюзы устанавливаете?(источник тактового сигнала, работает ли мк, частота, сторожевой таймер)
4. Подтяжку ножек сделали? Хотя бы внутреннюю.
Глупый не задает вопросы. Глупый и так все знает.
Ответить

Вернуться в «AVR»