genia

как зафиксировать кнопку atmega8?

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

genia    0

Всем привет.

делаю примерно такую схему .

http://avr-start.ru/?p=1

 


Пока держу кнопку
выражение if выполняется. Отпускаю кнопку светодиод перестает мигать

Не могу понять как сделать что бы отпустив кнопку он продолжал мигать .

А отключать его например другой кнопкой или реле . Транзистором может как то.

Но лучше как то код поменять. Но как. незнаю (

Помогите :(

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


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

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

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

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

Сделай флаг, который будет выставляться при нажатии кнопки. Например:

uint8_t blink = 0, press = 0;

if(BUTTON_PRESS){
  if(press == 0){
  	press = 1;
    blink = !blink;
  }
  
  _delay_ms(100);
}else{
  press = 0;
}

if(blink){
  мигаем
}

Тут одно нажатие кнопки будет включать мигание, а второе выключать. Переменная press сделана для того, чтобы при удержании кнопки blink не щелкался по кругу.

  • Лайк 1

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


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

Спасибо вечером попробую)

Выложу исходник свой тоже

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


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

А вы бы не могли прокомментировать каждую строчку кода?

Просто я самый

новичок (

 

И н

только 25% понимаю кода :(

если не сложно )

 

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


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

Только я хотел сделать что бы отключать светодиод другой кнопкой.

1 кнопка включает его а

Другая откл.  

(

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


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

Ну так и делайте ;)

if (Нажата кнопка ВКЛ светодиода){
blink=1;
}
if (Нажата кнопка ВЫКЛ светодиода){
blink=0;
}

if (blink) {
Мигаем
} else 
  {
	Не мигаем
   }

 

  • Лайк 1

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


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

отправляю код который обещал

 

просидел весь вечер но так и не получилось добавить еще 1 кнопку например на порт.3   на откл. светодиодов.

 

1 кнопка должна их включать а вторая откл 

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

 

помогите пожалуйста подправить этот код :(

 

 

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

void main(void)
{

PORTB=0x02;
DDRB=0x01;

while (1)
{

if(PINB.1==1)            // выполнять при отпущена кнопка
{
// 1 раз моргнуть
PORTB.0=1;              //вкл
delay_ms(100);

PORTB.0=0;              //выкл    
delay_ms(100);


//1 раз моргнуть
PORTB.0=1;              
delay_ms(100);

PORTB.0=0;                 
delay_ms(100);


// 1 раз моргнуть
PORTB.0=1;              
delay_ms(100);

PORTB.0=0;                  
delay_ms(100);

//                                     вкл. второй светодиод
PORTB.2=1;
delay_ms(1000);

PORTB.2=0;
delay_ms(100);
 

}

};
}

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

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


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

Выше дали два рабочих кода. Осталось только подумать.

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


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

у меня ошибка при компиляции (

я примерно так пробовал но не получается (

 

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

 

uint8_t blink = 0, press = 0;

void main(void)
{

PORTB=0x02;
DDRB=0x01;

while (1)
if (Нажата кнопка ВКЛ светодиода)

{ blink=1; }

if (Нажата кнопка ВЫКЛ светодиода)

{ blink=0; }

if (blink) { Мигаем }

else { Не мигаем }
}

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


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

Ты так и оставил русские слова в коде?

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


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

я вот так делал )

 

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

 

uint8_t blink = 0, press = 0;

void main(void)
{

PORTB=0x02;
DDRB=0x01;

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

{ blink=1; }

if (PINB.3==1)

{ blink=0; }

if (blink) {PORTB.0=1;  }

else { PORTB.0=0;  }
}

 

 

 

 

при компиляции пишет вот такую ошибку

Error: C:\Documents and Settings\Администратор\Мои документы\Моя музыка\DEL\lesson2.c(4): missing '('

 

ошибка на 4 строчке:

uint8_t blink = 0, press = 0;

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

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


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

Вместо uint8 напиши unsigned char. И почему инклуды пустые?

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


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

исправил вот так

unsigned char_t blink = 0, press = 0;

 

но все равно теперь другая ошибка (

Error: C:\Documents and Settings\Администратор\Мои документы\Моя музыка\DEL\lesson2.c(4): missing ';'

 

а как прописать инклуды?

для чего они нужны?

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


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

_t убери. Может думать уже начнешь? Про #include читай в инете. Там же скачай учебник по Си и прочти.

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


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

а эти инклуды обязательно туда прописывать надо?

а какие библиотеки.

 

сейчас оставил вот эту строчку 

ошибок нет

unsigned char blink = 0;

 

проверю сейчас на схеме )

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


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

Естественно обязательно. Неужели так трудно открыть примеры в инете и посмотреть, что туда прописывают?

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


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

сейчас гляну. в протеусе пока ничего не работает (

из за инклудов наверное 

я просто новичок

что то не получается найти что туда прописать надо (

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


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

не получается подправить код (

найти эти инклуды

 

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

       #include <>


unsigned char blink = 0;

void main(void)
{
PORTB=0x02;
DDRB=0x01;
while (1)
if (PINB.1==1)
{ blink=1; }
if (PINB.3==1)
{ blink=0; }
if (blink) {PORTB.0=1;  }
else { PORTB.0=0;  }
}

 

 

 

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


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

У тебя, как минимум, нет фигурных скобок, принадлежащих while(1); И научись пользоваться вставкой кода на форуме.

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

unsigned char blink = 0;

void main(void){
 PORTB=0x02;
 DDRB=0x01;
  
 while (1){// тут 
     if (PINB.1==1){ 
       blink=1; 
     }

     if (PINB.3==1){ 
       blink=0; 
     }

     if (blink) {
       PORTB.0=1;  
     }else{ 
       PORTB.0=0;  
     }
  }// И тут
}

Пустые инклюды ставить не нужно. А библиотеки в них писать именно для своей IDE. Неужели так трудно прочесть базис по Си?

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


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

я не программист )

вчера всю ночь искал какие инклюды ставить но все без толку (

и сейчас продолжаю поиск

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


Ссылка на сообщение
Поделиться на других сайтах
BARS_    560
Только что, Eugene Hagin сказал:

я не программист )

Так зачем ты тогда пытаешься что-то писать? 

 

Только что, Eugene Hagin сказал:

и сейчас продолжаю поиск

А чего там искать? Берешь любой пример для своей IDE и там смотришь.

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


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

сейчас уже работает этот код .  такой каккой он есть.

но как то странно.

срабатывает только 1 раз

 

если отпустить port b1 светодиод начинает гореть 

нажимаю b.3 отключается

 

вроде все хорошо. Но повторно жму b1 снова его включить но он не горит (

 

если сразу нажать не b1 а b3 а потом b1 снова . он тоже гореть не начинает (

 

 

 

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


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

А кнопки как подключены?

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


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

А подтягивать к плюсу питания их кто будет? И для подключения кнопок на массу надо писать PINB.1==0 Начни уже теорию читать!!!

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Ну это ж логично. Скрещивать разной убитости АБ, или разного типа - нонсенс какой то. Интересная у вас работа.
    • Если сбросить провод с движка , будет звук или магнитола его через некоторое время его блокирует ? Если будет продолжать работать, то вам от "кассетника" надо будет оставить только переключатель режимов, который срабатывает, когда вы кассету в аппарат вставляете.  
    • Сорри, был занят. Да. Надо купить или выпаять откуда-нибудь... 250В на крайняк сойдёт.
      Импульс высокочастотный - ну, 0.015-0.022мкф можно попробовать. 4n7-6n8... 10n - стандарт везде. Что параллельно выключателю, что параллельно реле. Не надо.  Ничего не найдёшь на новом... Обычно на выключателе (контактах реле) подгорают контакты. Это не показатель. Небось китай?
    • Благодарю, @fant Вот этого автор вопроса как раз не уточнил, равно как и износ каждого аккумулятора. Поэтому разыгралась фантазия по поводу возможных последствий. А то, что их можно собирать в параллель, причем в неограниченном количестве, я хорошо понимаю. Скоро на одной ГЭСке генераторы разной мощности буду вводить в параллель с сетью. Вот это более интересная задача )))))
    • А это уже новая вводная. Разный саморазряд. Изначально ( лень крутить вверх) задавалась разная ёмкость. Но одинаковое напряжение и тип одинаковый, естественно.  Дохлый акуммулятор, естественно будет тянуть заряд из здорового, увеличивая саморазряд. Если АБ одного типа, но разной ёмкости, то абсолютно  не вижу причин почему им не работать в параллель. Единственно, желательно, но не критично, зарядить каждый АБ отдельно до уровня полного заряда или разрядить до отсечки, что бы уровнять напряжения. Затем сделать параллель и пользоваться. Общая ёмкость = сумма ёмкостей всех АБ, включённых параллельно.  На "фонарёвке" экспериментировали, особых проблем не обнаружили. Даже, цепляли меж собой заряженный и разряженный АБ. "Бабахов" так же не случалось. Токи, как для заряженного, так и разряженного не превышали допустимые. Причём высокими они были пару - тройку минут, потом спадали до не критичных.  О, даже эту тему обнаружил. ТЫЦ.
    • Да, собственно, ни в чем. Только с чего Вы взяли, что мне что-то "мешает" ))))) Я лишь выразил предположения, основываясь как раз на законы Кирхгофа.