Zodiac21

Автоматические ворота на atmega

6 сообщений в этой теме

Zodiac21    0

Ребята! Делаю я автоматические ворота на базе atmega8, и столкнулся с проблемой в прошивке.....

Алгоритм работы таков:

кратковременно нажимаем на кнопку "открытие/закрытие" -----   начинается открытие до срабатывания концевика открытия.

нажимаем еще-раз, происходит закрытие  до срабатывания  концевика закрытия.

#include <io.h>
#include <mega8.h>
#include <delay.h>

int i=0;


void main(void)
{

PORTD=0x00;
DDRD=0xff;

PORTB=0xff;
DDRB=0x00;

PORTD.0=0;

while (1)
    {
     
    if(PINB.0==0)
    {
    delay_ms(100);
    i++;
    }


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
if(i==1)
{
PORTD.0=1;
PORTD.1=0;
}

if(PINB.1==0)
{
PORTD.0=0;
PORTD.1=0;
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

if(i==3)
{
PORTD.0=0;
PORTD.1=1;
}

if(PINB.2==0)
{
PORTD.0=0;
PORTD.1=0;
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

if(i>3)
{
i=0;
}


    }
}

Всё-бы ничего, но есть одно НО... Допустим ворота открылись, концевик открытия нажался и удерживается... При этом не получается закрыть ворота , потому-что выполняется условие :

if(PINB.1==0)
{
PORTD.0=0;
PORTD.1=0;
}

Вот если кратковременно нажать на концевик то всё работает как надо.......

 

Как быть-то???

Снимок1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
proekt07    25

Может концевик использовать для поднятия флага в программе?

Например,нажали кнопку открыть/закрыть.Ворота открылись,концевик замкнулся.Если концевик замкнулся,поднимаем флаг_открытых_ворот.Если флаг_открытых_ворот поднят,нажатие кнопки открыть/закрыть закрывает ворота.Сбрасываем флаг_открытых_ворот. И наоборот.

Изменено пользователем proekt07

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zodiac21    0

Огромное СПАСИБО!!! Сделал вот-так , всё заработало.....

#include <io.h>
#include <mega8.h>
#include <delay.h>

bit open=0;
bit close=0;

void main(void)
{

PORTD=0x00;
DDRD=0xff;

PORTB=0xff;
DDRB=0x00;


while (1)
    {
     
    if(PINB.0==0)
    {
    PORTD.0=1;
    PORTD.1=0;
    }
    
    if(PINB.1==0)
    {
    open=1;
    PORTD.0=0;
    }
    
    if(open==1&&PINB.0==0)
    {
    PORTD.0=0;
    PORTD.1=1;
    }
    
    if(PINB.2==0)
    {
    close=1;
    PORTD.1=0;
    }
    

    }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
m*****m8    3

Бит "close" сбрасывается на ноль только при сбросе питания. Для этого алгоритма атмега8 слишком жирно. Не учтено - если понадобится срочно закрыть ворота, только начавшие открываться. Придется ждать пока откроются полностью. И наоборот при закрытии. Нет токового реле. Кого-нибудь зажмет и будет давить пока не сгорит движок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

А где датчик тока, если под ворота что-то попало?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zodiac21    0

Да. Действительно, датчик нужная вещь. Про него как-то забыл...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Всем привет. Тут писали по поводу дрейфа луча, который убирается путем склеивания  транзисторов...... Ничего не клеил а просто сравнил новые и те которые стояли...... Старые выпаял и проверил транзистор -тестером китайским......Короче старые коэф h 145 - один......96 - другой!!!!!!Это короче не два плеча...... а плечо с ногой сравнить можно.....В общем . Из новых минимальное усиление где то в районе 190 и выше. Подобрал из новых один 193  второй 192..... Впаял . Тестил в районе часа, все нормально. Пока долго не работал, но будем посмотреть....
    • Я тоже не против, хотел где нибудь пп заказать, но ни как не получается, так как с этим ни разу не сталкивался, с заказом пп на производство. Одну плату точно возьму) 
    • @Denisdenis если будет полезным, то вот мой ресчёт транса дежурки, (тр. из атх блока EEL16), сердечник был без зазора, я задал зазор 0.2мм, что бы по боковым кернам положить бумажки по 0.1 мм первичка разделена на две части, вторичка между первичками, витки вторички по центру каркаса, на всю длину не распределял, фазировку соблюдал, м/с tny275, все завелось сразу, только вот свистело силовой трансформатор на EI33 мотал без разделения первички, в начале первичка, затем вторичка, я делал ЛБП на ток до 8 ампер, дроссель после выпрямителя на кольце, изготовил новый (при настройке использовал первый попавшийся примерно подходящий) посчитав как положенно, но правда в притык, но мне и долговременная нагрузка на 8 ампер не нужна затем после окончательной проверки выпаял, трансы дежурки и силовой и дроссель, пропитал в вакууме (компрессор от холодильники -шланг- банка с крышкой) лаком мл92, после чего стало абсолютно бесшумно! ещё раз под нагрузкой проверил, на 8 амперах, минут через 10 радиатор выпрямителя нагрелся до 50 гр, (включилось охлаждение), irf740, на ощуп холодные были, силовой трансформатор, тёплый дроссель холодный
    • У Вас разрешено прерывание по CCP, а обработчик CCP не написан и сделано ожидание флага в основном цикле. Поэтому вход в прерывание происходит от CCP, а попадает в обработчик TMR1, где Вы благополучно TMR1 зачем то сбрасываете... Кроме того, Вы в инициализации к чему то принудительно устанавливаете флаг CCPIF вместо его сброса. Cброс флага TMR1 не делаете вообще, значит, скорее всего, сразу после разрешения глобальных прерываний программа влетит в обработчик, ибо флаг взводится независимо от разрешения прерываний по любому переполнению счетчика. Совершенно непонятно зачем Вы сбрасываете регистр захвата CCPR1. Этот регистр в режиме захвата пишется из таймера, а читается после события захвата (по флагу CCPIF), зато сам TMR1 в инициализации не сбрасываете вообще (это необязательно в существующей задаче, но хоть логично для общего порядка). В общем написана какая то каша....
    • Falanger чем заменить LM358?  Ранее писал что мин ток при кз 2,2А. R8 1КОм (до этого было все прекрасно- начиналось от 0.01А). Сегодня занялся бп, взял мотор 12В (от дворников авто) подключил а стабилизации тока и напряжения  нет , выставил 12В ток увеличиваю мотор работает, ток уменьшаю падает напряжение. Сделал КЗ решил посмотреть реакцию переменника R7 при замыкании контактов (имитация крайне левого и крайне правого положения).  в итоге напряжение на х.х. при включении бп 5в и мееедленно растет по десятым долям. По моему лм-ка полное г.....но.