ATMEGA8A. Две кнопки, два реле. На катушках реле меандр. ???

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Ср ноя 02, 2022 16:20:28

Сообщение Alax2 »

Возникла необходимость перепрошить контроллер газировального аппарата. Старая слетела. Опыт программирования AVR минимален. Поизучал немного, и взялся. И сразу затыка. Написал на СИ прг.- две кнопки управляют двумя реле (через оптопары). При проверке осциллографом на катушках реле (или на входах оптопары) МЕАНДР. Это вместо высокого уровня.
Seturator.txt
(730 байт) 75 скачиваний
Изображение
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

А что должно быть? К этому сумбуру как-бы исходника надо бы приложить свою хотелку. Я так понимаю: нажали одну кнопку - сработало реле, налило воды. А выключать? Вроде должно по таймеру? Где он? Где задержка?
Типичная ошибка новичка: "Я написал фигню, а она не робить. Почему?" А как должна? Где расписан алгоритм?
Изображение
Реклама
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Наверное, микроконтроллер постоянно ресетится по ватчдогу или ещё какой-то причине
Контактная информация:
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Спойлер

Код: Выделить всё

//==================
#define KEY_1_PIN  PIND
#define KEY_1      0

#define KEY_2_PIN  PIND
#define KEY_2      1

#define OUT_1_PORT PORTC
#define OUT_1_DDR  DDRC
#define OUT_1      0

#define OUT_2_PORT PORTC
#define OUT_2_DDR  DDRC
#define OUT_2      1
//==================

//==================
#define set_bit(reg, bit)  reg |= (1<<(bit))    // Установка бита.
#define clr_bit(reg, bit)	reg &= (~(1<<(bit))) // Сброс бита.
#define switch_bit(reg, bit)  reg ^= (1<<(bit)) // Переключение бита.
//------------------------------------------------------------------------
#define check_bit(reg, bit) (reg & (1<<bit))    // Проверка бита.
//==================

//==================
#define check_key_1() (!(check_bit (KEY_1_PIN, KEY_1))) // Low level
#define check_key_2() (!(check_bit (KEY_2_PIN, KEY_2))) // Low level
//==================

//==================
#define __out_1_on()  clr_bit (OUT_1_PORT, OUT_1) // Low level
#define __out_1_off() set_bit (OUT_1_PORT, OUT_1) // High level

#define __out_2_on()  clr_bit (OUT_2_PORT, OUT_2) // Low level
#define __out_2_off() set_bit (OUT_2_PORT, OUT_2) // High level
//==================

//==================
void out_1_on (void);
void out_1_off (void);

void out_2_on (void);
void out_2_off (void);
//==================

//==================
void out_1_on (void)
{
   __out_1_on ();
}

void out_1_off (void)
{
   __out_1_off ();
}

void out_2_on (void)
{
   __out_2_on ();
}

void out_2_off (void)
{
   __out_2_off ();
}
//==================

int main(void)
{
// IO init
   set_bit (OUT_1_PORT, OUT_1); // Логика управления отрицательная,
   set_bit (OUT_2_PORT, OUT_2); // то есть, активный логический 0. Поэтому сразу выставляем 1.

// Важно. Если логика отрицательная, порты выставлять в 1 в первую очередь. Если сначала выставить DDRx, то нижние ключи выдадут кратковременный 0. Поэтому, сначала PORTx. Так верхние ключи сразу выдадут 1.

   set_bit (OUT_1_DDR, OUT_1); // Out_1. Выход.
   set_bit (OUT_2_DDR, OUT_2); // Out_2. Выход.
	
   while (1)
   {
      if (check_key_1 ()) // проверка кн. "газ вода
         out_1_on ();     // вкл. клапан "газ.вода"
      else
         out_1_off ();    // выкл. клапан "газ.вода"

      if (check_key_2 ()) // проверка кн. "хол. вода"
         out_1_on ();     // вкл. клапан "хол.вода"				 
      else
         out_1_off ();     // выкл. клапан "хол.вода"				 
   }
}
Последний раз редактировалось Demiurg Ср ноя 02, 2022 22:44:30, всего редактировалось 4 раза.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Alax2, и выключение инверсией - это странно и ненадежно и неправильно. Потому что невозможно гарантировать, в каком действительно было состоянии, проверки-то нет.

Добавлено after 54 seconds:
Re: ATMEGA8A. Две кнопки, два реле. На катушках реле меандр. ???
вот у Demiurg выключение однозначное.
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Вы проверяете две кнопки, но включаете одну и туже катушку. Когда кнопка первая нажата то реле включается, а при проверке на вторую кнопку - -выключается. У вас опечатка банальная из-за копипаста
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Тогда зачем второе реле, если на первом 2 кнопки - это ПУСК и СТОП ? И вообще - нафиг тут МК? Одного таймера - больше чем достаточно.
Что-то тут недоговорено. Вспоминаю соотв. эпизод из "Особенностей национальной рыбалки" :)
Изображение
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

alex1126 Нет. ТС не разобрался с битовыми операциями.

Код: Выделить всё

	 PORTC^=(1<<PC0);                   // вкл. клапан "газ.вода" // Инверсия. XOR
	 }
        else
        {
        PORTC|=(1<<PC0);                   // выкл. клапан "газ.вода"
Контактная информация:
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

ааааа, я не тот исходник смотрел :) но в нем тоже ошибка :)
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1315
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Сообщение НАПАЛМ »

[uquote="Alax2",url="/forum/viewtopic.php?p=4313836#p4313836"]Возникла необходимость перепрошить контроллер газировального аппарата. Старая слетела. Опыт программирования AVR минимален. Поизучал немного, и взялся. И сразу затыка. Написал на СИ прг.- две кнопки управляют двумя реле (через оптопары). При проверке осциллографом на катушках реле (или на входах оптопары) МЕАНДР. Это вместо высокого уровня.
Seturator.txt
Изображение[/uquote]
Принципиальную схему и блок-схему алгоритма работы предоставьте, чтобы можно было вам помочь.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Уже решено. Тс применял неправильные битовые операции.
Контактная информация:
Ответить

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