Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс окт 07, 2018 15:30:01

Стыдно признаться, но на год забыл о программировании, по долгу службы надо вспомнить и все бы ничего да не получается одна мелкая зараза.
Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его, однако мои 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;
}

}

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

Вс окт 07, 2018 15:35:55

RNosadchuk писал(а):надо что бы сигнал
Что есть "сигнал" ?
У этого слова множество понятий.

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

Вс окт 07, 2018 18:02:22

Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его

ИМХО для корректной работы такого алгоритма, нужно сделать такие условия:
Если на входе «А» (PinB.2) - лог 1, и на входе «В» (PinB.0) - лог 0, то на выходе (PortB.1) устанавливаем лог 1. Если на входе «В» (PinB.0) - лог 1, и на входе «А» (PinB.2) - лог 0, то на выходе (PortB.1) устанавливаем лог 0. При всех остальных конфигурациях входов, на выходе (PortB.1) состояние не изменяется.

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

Вс окт 07, 2018 21:42:29

А еще дребезг отсекать, ежели источники сигнала - кнопки.

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

Пн окт 08, 2018 05:18:13

Суть RS-триггер. Только определиться с приоритетом сброса и установки.
Код:
int a;

Волшебный CV позволяет без заморочек использовать битовые переменные. Попробуйте:
Код:
bit a;

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

Сб окт 13, 2018 18:36:53

Суть в чем, надо что бы сигнал с одного порта включал порт Х, а с другого выключал его

ИМХО для корректной работы такого алгоритма, нужно сделать такие условия:
Если на входе «А» (PinB.2) - лог 1, и на входе «В» (PinB.0) - лог 0, то на выходе (PortB.1) устанавливаем лог 1. Если на входе «В» (PinB.0) - лог 1, и на входе «А» (PinB.2) - лог 0, то на выходе (PortB.1) устанавливаем лог 0. При всех остальных конфигурациях входов, на выходе (PortB.1) состояние не изменяется.


Переделал по вашему совету, так вот у меня получилось:
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 появляеться.

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

Сб окт 13, 2018 19:17:21

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

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

Схема:
1.png
(18.1 KiB) Скачиваний: 555


Прошивка:
RNosadchuk.zip
(254 байт) Скачиваний: 183

МК тактируется на заводских установках (1 МГц).

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

Сб окт 13, 2018 20:11:13

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

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

Схема:
1.png


Прошивка:
RNosadchuk.zip

МК тактируется на заводских установках (1 МГц).

Антидребезг всмысле задержка на срабатывание? Я добавлял задержку результат тот же. Работает, но можно ли россказать что у меня не так? Я понять хочу где я накосячил или что не учел...

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

Сб окт 13, 2018 20:44:31

где я накосячил или что не учел...

Дык, птичьего языка не знаю… пишу на АВ (Algorithm Builder)… :)

Вот так выглядит мой алгоритм… :))
Изображение

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

Сб окт 13, 2018 22:46:39

Работает, но можно ли россказать что у меня не так?

На ночь глядя кажется что всё и верно.
Даже ваш первый вариант должен работать. Антидребезг для данной постановки задачи не требуется.

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