Программирование mega8

Тема в разделе "AVR", создана пользователем yango1988, 24 окт 2016.

  1. yango1988

    yango1988 Гость

    Сообщения:
    3
    Симпатии:
    0
    Я новичок, не могу понять как задать условие, что бы при зажатой кнопке, светодиод горел какое то время а потом гас, подскажите как это сделать


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

    void main(void)
    {



    PORTB=0x00;
    DDRB=0x00;



    PORTC=0b00000001;
    DDRC=0b00000010;


    PORTD=0x00;
    DDRD=0x00;



    while (1)
    {

    if (!PINC.0) {

    PORTC.1=1;
    delay_ms(500);
    PORTC.1=0;




    };


    }


    }
     
    : include
  2. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.503
    Симпатии:
    376
    Адрес:
    Талгар
    вот это вот вообще не понятно

    PORTB=0x00;
    DDRB=0x00;



    PORTC=0b00000001;
    DDRC=0b00000010;


    PORTD=0x00;
    DDRD=0x00;

    если включаем порт на вход , то подтяжку включаем на +, а если порт на выход, то подтяжка на минус.


    зачем объявлять порты по разному ??

    PORTC=0b00000001; это то же самое что и PORTC&=~0х01

    теперь получается что тут вход РС-0
    PORTC=0b00000001;
    а строчкой ниже уже РС-1
    DDRC=0b00000010;

    задержки :
    #include <delay.h> разве не так должно быть ?
    #include <util/delay.h>.... (правда это в атмел студии, может в вашей среде разработки быть и правильно)

    условие пишем ...
    if ((PINC &(1<<1))==0) //если РС-1 равен 0
    _delay_ms (50); //подождать 50мс
    PORTD|=(1<<0); //установить PD-0 в один
    Последнее редактирование: 24 окт 2016
  3. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.503
    Симпатии:
    376
    Адрес:
    Талгар
    вот тут вот

    PORTB=0x00;
    DDRB=0x00;



    PORTC=0b00000001;
    DDRC=0b00000010;


    PORTD=0x00;
    DDRD=0x00;

    должно быть вроде этого

    PORTB=0x00;
    DDRB=0xFF; // это будет вход


    если включаем на вход одну ногу со всего порта
    PORTC&=~0x01;
    DDRC|=0x01; // РС-1 установить на вход


    PORTD=0xFF; //это будет выход
    DDRD=0x00;
  4. yango1988

    yango1988 Гость

    Сообщения:
    3
    Симпатии:
    0
    Попробовал но схема работает как то через раз
  5. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.503
    Симпатии:
    376
    Адрес:
    Талгар
    она должна была только зажечь и всё, чтобы тухло когда кнопку отпускаешь надо ниже добавить else

    if ((PINC &(1<<1))==0) //если РС-1 равен 0
    _delay_ms (50); //подождать 50мс
    PORTD|=(1<<0); //установить PD-0 в один
    else
    PORTD&=~(1<<0); //установить PD-0 в ноль
  6. yango1988

    yango1988 Гость

    Сообщения:
    3
    Симпатии:
    0
    Задача немного другая, нужно что бы нажал кнопку, светодиод горит 5 секунд потом гаснет, но кнопка должна быть зажата в этот момент на неопределённое время. Отпускаешь кнопку и все по новой - зажал кнопку светодиод горит 5 сек. потом гаснет при зажатой кнопке
  7. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.503
    Симпатии:
    376
    Адрес:
    Талгар
  8. timsoon

    timsoon В доску свой

    Сообщения:
    378
    Симпатии:
    46
    Род занятий:
    КИПиА, it, и прочее
    Адрес:
    г.Капчагай
    --- Сообщения объединены, 27 окт 2016 ---
    помоему нужен цикл. Нажал .Пока цикл крутится пять сек. Переменная вырастет до нного значения и все стоит. Пока не отпустишь кнопку переменная не обнулится.[/QUOTE]
    А лед горит только в определенных пределах значений переменных.
    Последнее редактирование: 27 окт 2016
  9. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.915
    Симпатии:
    318
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Значит так...
    1. Ждем нажатия кнопки.
    2. Включаем светодиод на 5 сек (используем задержку)
    3. Ждем отжатия кнопки.
    4. Переходим к пункту 1.
  10. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.503
    Симпатии:
    376
    Адрес:
    Талгар
    ну да, только вот мне кажется что тольк.... ТС, на дверной звонок хочешь поставить ? чтобы долго не держали ;)

Поделиться этой страницей