cargo29

Включение И Отключение При Нажатии

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

cargo29    16

смысл устройства такой 3 выхода, 3 входа тини13. 1 кнопка это один светодиод, при нажатии она отключает светодиод, если еще раз нажать ее она включает светодиод. набросок кода пока для одного порта


#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/delay.h>
char k_1 = 1;
int main(void)
{
DDRB = 0b00000111;
//PORTB = 0b00000111;

while(1)
{

if ((PINB & _BV(PB4))!=0){
//PORTB = 0b00000011;
if (k_1==1)
{
k_1 = 0;
PORTB = 0b00000001;
while((PINB & _BV(PB4))!=0);
}
else
{
k_1 = 1;
PORTB = 0b00000000;
while((PINB & _BV(PB4))!=0);
}

}

}
}

Один раз нажимаешь срабатывает когда нажимаешь еще раз то уже не работает.

еще вопросик

(PINB & _BV(PB4))==0 что этот символ дает в данном коде?

Схема что бы было понятнее как подключено

638386363328638358386.jpg

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

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


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

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

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

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

А как ты пишешь код если не знаешь как это делать? Этот символ обозначает взятие адреса. То есть ты считываешь, что находится по указанному адресу. В общем-схема полная лажа, код никудышный. Учи Си потом садись писать, а не наоборот. Должно быть как-то так.

bool trg_=true;

int main (void)

{

DDRB=0b11111000;

PORTB=0b00000111;

while(1)

{

if((PINB&(1<<PB0))==0)

{

trg_^=true;

if(trg_==true)PORTB&=~_BV(PB4);

else PORTB|=_BV(PB4);

while((PINB&(1<<PB0))==0);

};

};

};

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


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

Если так хочется сэкономить резисторы, то нужно включить внутреннюю подтяжку (pull-up) на управляющих входах, а кнопки на землю. А сейчас на входах непонятно что.

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


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

Схема "шлак". Зачем светодиоды подключать через транзистор? Достаточно одного резистора будет. Можно подключить светодиод анодом к минусу(будет меньшая нагрузка на МК).Если надо могу набросать кодик для Codevision(потом можно переделать под другую среду, главное понять смысл).

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


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

ааааааааааааааааааааааааааааааааа, светодиоды это для наглядности там будет другая нагрузка более мощная которая требует включение через транзисторы или даже реле. самое главное код, и должно на выход быть поры, 3 кнопки и каждая управляет своим портом, одну кнопку не получится.

Rhime мне интересно как ты учился? книжечки читал или тоже на форумах зависал? полюбому скажет прочитал много статей умных книг. Все учения идут от опыта, пробуешь пишешь ошибки находишь вот учение а не книжки зубрить со школы должен был знать

  • Одобряю 1
  • Не одобряю 1

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


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743
анодом к минусу
Да неужели?
  • Одобряю 2

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


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

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

при такой схеме включении будут срабатывать все кнопки http://forum.cxem.net/index.php?showtopic=124786&st=20

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


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

Вопрос не по теме, кто нибудь заказывал детали с ebay? за какое время доходили?

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


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

Rhime мне интересно как ты учился? книжечки читал или тоже на форумах зависал? полюбому скажет прочитал много статей умных книг. Все учения идут от опыта, пробуешь пишешь ошибки находишь вот учение а не книжки зубрить со школы должен был знать

Вы из-за каждой неверно поставленной точки на форум обращаетесь, вместо того, чтобы мозгами пораскинуть или хотя бы одну книжку или статью на соответствующую тему прочитать. Поддерживаю Rhime. По фразе "полюбому скажет прочитал много статей умных книг" , делаю вывод, что для Вас это подвиг, и Вы других пытаетесь под себя равнять. Вы сами то подумайте, откуда ещё взять информацию, кроме как не из книги или статьи? Те кто Вам на вопросы отвечают, получили инфу именно таким образом по большей части.

*И что в книжечке то плохого? Она содержит сразу всю необходимую информацию. И слова против не скажет, если её мусолить постоянно. И скорость развития намного быстрее, чем по три часа на форуме ждать, пока скажут куда точку передвинуть.

**вот после такого "учения от опыта" получается соответствующий сорт кода.

Изменено пользователем tcoder
  • Одобряю 1
  • Не одобряю 1

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


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

Вот такой кодик набросал для одного светодиода. Рабочий 100%. Я бы взял мк с бОльшим кол-вом ножек,например тини2313,потому что тут придется настраивать каждый порт отдельно.

#include <tiny13.h>
#include <delay.h>
void main(void){
unsigned char i=1; // вводим переменную для счета
PORTB.0=0x00;//Пин в 0
DDRB.0=0xFF; // Пин на выход
DDRB.3=0x00;// Пин на ввод
PORTB.3 = 0xFF ;//Пин в 1

while (1) {
if (PINB.3==0){
i=i+1;
delay_ms(50);//антидребезг
}
switch(i) {
case 1: {
PORTB.0=0;
break;
}
case 2:{
PORTB.0=1;
break;
}	
default:
i=1;

}
}
	 }

По первому нажатию кнопки светодиод горит, по второму-тухнет.(По этому коду: кнопка на PORTB.3, светодиод на PORTB.0)

Изменено пользователем Radiotehnika S-90

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


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

Radiotehnika S-90 спасибо за код, уточню немного кнопка как работает, на прерывание на минус? на счет мк с большим количеством портов думал, дело в том что у меня их трудно достать заказ идет тини13 и то с китая (не знаю дойдет или нет) суть будет такая, мне нужно будет отключать и включать парные каналы УФМЗ но раз он мощный поэтому буду делать через транзистор. (в виде ключа, в обрыв питания). tcoder я с тобой не соглашусь, у меня книги по делфи валяются (библия делфи и много других) в них все одно и тоже написано, только объясняют по разному, ничего нового в другой книге я и не узнал то, что уже знал со статей в интернете, а их как известно, очень много по делфи, так же и учил остальные языки программирования, форумы статьи, сидел и разбирался в коде а не книжки читал потому, что знал что в книгах для общего пользования написано, что есть в статьях, которых мало по написанию кода на мк

я надеюсь не такая схема включения кнопки (в конце статьи )http://forum.cxem.net/index.php?showtopic=124786&st=20

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


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

А зачем покупать или скачивать кучу книг про одно и то же? :) Вы купите/скачайте одну книгу непосредственно по той среде, в которой сейчас работаете. Чтобы не было вопросов типа "а что этот символ обозначает" :) И причём тут делфи вообще, Вы сейчас не на делфи же пишете? "дЭлфийские" знания тут не помогут... А поскольку ещё имеются проблемы с алгоритмизацией, то вероятно и чтение сишной книги не сразу поможет :yes:

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


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

tcoder я скачивал и покупал, даже стоял пролистывал быстренько в книжном, пишут одно и тоже. Вот даже взять делфи там нету описания компонентов всех, все описание базовое. я и так читаю статейки и сижу на форумах, что бы быстрее осмыслить. и то что я не знаю или не понимаю код я считаю нормально все через это проходили

Radiotehnika S-90 вот в этом и проблема с такой схемой включения я писал в другой теме, а тут будет 3 кнопки и нужно сделать их независимые друг от друга. :unsure: а при такой схеме одну нажмешь все сработают, я уже чувствую что легче взять мк с 3 разными портами тогда можно осуществить, все равно спасибо за помощь и код. Не по теме, реально ли осуществить регулятор ВЧ НЧ ? хватит ли скорости обработки ?

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


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

пробуй тогда во Флоукод, там графически, логикой допрешь, когда перепробуешь варианты

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


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

Распространение программы: платная от £49. Есть бесплатная версия с ограничениями и только для микроконтроллеров PIC

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


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

cargo29, а в чем проблема? Ну горят одновременно, а уловить суть и чуток подправить код трудно? Подключайте кнопки как у меня на схеме. Вот подправил код. дальше думаю понятно будет. Просто вводим еще одну переменную и дальше все аналогично. Хотел сказать еще, что у вас вывод ресет задействовать не получится, придется выставлять дополнительный фьюз.

#include <tiny13.h>
#include <delay.h>
void main(void){
unsigned char i=1;
unsigned char c=1; // вводим переменную для счета
PORTB.0=0x00;//Пин в 0
DDRB.0=0xFF; // Пин на выход
DDRB.3=0x00;// Пин на ввод
PORTB.3 = 0xFF ;//Пин в 1
PORTB.1=0x00;//Пин в 0
DDRB.1=0xFF; // Пин на выход
DDRB.4=0x00;// Пин на ввод
PORTB.4 = 0xFF ;//Пин в 1


while (1) {
if (PINB.3==0){
i=i+1;
delay_ms(50);//антидребезг
}
switch(i) {
case 1: {
PORTB.0=0;
break;
}
case 2:{
PORTB.0=1;
break;
}
default:
i=1;

}
if (PINB.4==0){
c=c+1;
delay_ms(50);//антидребезг
}
switch© {
case 1: {
PORTB.1=0;
break;
}
case 2:{
PORTB.1=1;
break;
}
default:
c=1;

}
}

}

В протеусе все работает замечательно.

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


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

Подскажи еще в твоем коде

PORTB.0=0x00;//Пин в 0. вход
DDRB.0=0xFF; // Пин на выход. иницилиализация порта на выход
DDRB.3=0x00;// Пин на ввод. иницилиализация порта на вход
PORTB.3 = 0xFF ;//Пин в 1 . выход

почему в таком порядке или без разницы это?

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


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

cargo29,

ты бы хоть одну мигалку с нуля сам написал

Ты ведь по и-нету какие-то обрывки собираешь и у тебя всё в голове перемешалось.

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


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

простое кривым кодом без использования таймера да.

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


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

Radiotehnika S-90 Пробовал вставить код ошибки почти на все. #include <tiny13.h> этот файл не может найти и на все DDRB.3 типа таких где используется через точку указания вывода походит на язык С++

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


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

cargo29, Вы точно обрывки собираете, как 8244 сказал.

Никаким C++ тут и не пахнет. Radiotehnika S-90 дал Вам код для CvAVR, там всё верно. У Вас AvrStudio (как я понял). Там синтаксис языка немного отличается.

Вам надо просто убрать этот include , а взамен

DDRB.3=0x00;// Пин на ввод

написать DDRB &= 0xF7;

Откуда взялось эта команда и волшебное число 0xF7, я не скажу из принципа. Сами подумайте. Иначе никогда ничего не поймёте.

  • Одобряю 3

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


Ссылка на сообщение
Поделиться на других сайтах
Если надо могу набросать кодик для Codevision(потом можно переделать под другую среду, главное понять смысл).

cargo29, сообщения вообще не читаем?Вас интересует только огрызок кода, а то что люди пишут нет?

Каждая среда разработки имеет свой синтаксис написания кода.

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


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

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

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

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

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

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

Войти

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

Войти сейчас