Страница 1 из 2

Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:05:20
lexsoft
И снова приветствую вас уважаемые коты. Забралась мне в голову мысль сделать на микроконтроллере attiny2313 многоканальный выключатель. Что мы имеем,микроконтроллер с порядка 16-ю свободными ногами,8 из которых будут входами,остальные 8 выходы.На входы вешаем нормально разомкнутые кнопки,8 штук,оставшиеся концы которых соединяем с землёй. Устройство должно работать следующим образом:При подаче питания на всех выходах 0. При нажатии кнопки,должна появляться 1 на соответствующем кнопке выходе.При последующем нажатии на выходе 0,и так далее.Все каналы должны работать независимо друг от друга.Необходима задержка включения секунды в 2,что бы дребезг контактов не напрягал.Тактировать контроллер наверное лучше от внутреннего генератора,уж коли он там есть. Судя по функционалу устройства,программа подозреваю нужна не сложная..Но проблема в том что я в программировании полный ноль.Пытался я что то понять в программировании скитаясь по сайтам с соответствующей тематикой,накачал книг-ну не понимаю я там нифига,что аж до нервоза)..Эти непонятные термины.. А управлять микроконтроллером до ужаса хочется. Не мог бы кто нибудь набросать код,так сказать для затравки? С меня пиво)

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:35:26
BoRtO
я могу написать прошиивку... а заместь пива сбросите его стоимость мне на кошелек :)

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:37:02
dr.doc
Наверно 8 D-триггеров с взаимным сбросом.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:38:48
BoRtO
ну автор говорит
lexsoft писал(а):управлять микроконтроллером до ужаса хочется
:)

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:39:31
МитяРа
dr.doc писал(а):с взаимным сбросом.
Точнее - с общим сбросом по питанию и задержкой на 2 секунды..

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 20:57:07
lexsoft
BoRtO,деловой подход. Только я качества в таком случае затребую)) Говори за сколько рублей прошивку можешь сваять?

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 21:02:10
BoRtO
lexsoft писал(а):качества
ок!
прошу в лс! :)

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 21:36:06
ploop
Да хватит уж на новичках навариваться. Так слабо помочь? Объяснить, что к чему... Ему же не готовая программа нужна, а научиться.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 21:38:37
BoRtO
ploop писал(а):Так слабо помочь?
Жить как то надо :cry: деньги из неба с падают :cry:

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 21:39:22
Dmitry Dubrovenko
ploop писал(а):Ему же не готовая программа нужна, а научиться.
А я понял, совсем наоборот... :roll:
А задача, действительно как-раз для обучения.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 21:48:42
lexsoft
Научиться очень хочу,хотя бы что то простейшее для понимания.. Многообещающие учебники "на доступном языке" напрочь нудоступны моему пониманию) Вот бы приятеля который за бутылкой водки разьяснил бы что к чему))

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 22:02:37
Dmitry Dubrovenko
Ну, если знаете, что такое триггер, и понимаете, что такое "логическое И", особых трудностей быть не должно.
Я бы рекомендовал, для начала ПИКи, но коль уж Вы хотите АВРы, то тут, на сайте, есть вполне приличный учебник.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Вт янв 17, 2012 22:39:46
ploop
Вот еще отличный курс: http://easyelectronics.ru/category/avr-uchebnyj-kurs

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Ср янв 18, 2012 08:37:47
pyzhman

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

//Date    : 18.01.2012
//Chip type           : ATtiny2313
//Clock frequency     : 8,000000 MHz

#include <tiny2313.h>

unsigned char old_knopki, knopki;


// Timer 0 overflow interrupt service routine
//Прерывание каждые 32 мсек
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//антидребезг
old_knopki= knopki;//запоминаем старое значение кнопок
knopki= PINB;//опрашиваем кнопки
//если нажата кнопка, то инвертируем соответствующий порт посредством Исключающего ИЛИ
if((old_knopki & 0x01) && !(knopki & 0x01)) PORTD^= 0x01;
if((old_knopki & 0x02) && !(knopki & 0x02)) PORTD^= 0x02;
if((old_knopki & 0x04) && !(knopki & 0x04)) PORTD^= 0x04;
if((old_knopki & 0x08) && !(knopki & 0x08)) PORTD^= 0x08;
if((old_knopki & 0x10) && !(knopki & 0x10)) PORTD^= 0x10;
if((old_knopki & 0x20) && !(knopki & 0x20)) PORTD^= 0x20;
if((old_knopki & 0x40) && !(knopki & 0x40)) PORTD^= 0x40;
if((old_knopki & 0x80) && !(knopki & 0x80)) PORTA^= 0x01;
}



void main(void)
{
#include "init.c"//инициализация

while (1);//вечно здесь
}
Остальные файлы да и этот тоже в приложении.
PS. Прости BoRtO, порешил, что как-то некрасиво за столь простое пиво брать. Мне бы водки.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Ср янв 18, 2012 08:51:20
lexsoft
Спасибо дружище! Будешь в Самаре,заезжай,поставлю тебе пузырь)

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Ср янв 18, 2012 08:52:44
pyzhman
Запомнил. :beer:

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Чт янв 19, 2012 07:27:07
lexsoft
Вчера пытался в протеусе это дело погонять,так и не понял где там питалово на контроллер цеплять..

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Чт янв 19, 2012 19:01:51
GRAF
Оно по умолчанию подано. Ваша задача залить прошивку.

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Чт янв 19, 2012 19:10:07
Мастер Ломастер
pyzhman писал(а):

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

//если нажата кнопка, то инвертируем соответствующий порт посредством Исключающего ИЛИ
if((old_knopki & 0x01) && !(knopki & 0x01)) PORTD^= 0x01;
if((old_knopki & 0x02) && !(knopki & 0x02)) PORTD^= 0x02;
if((old_knopki & 0x04) && !(knopki & 0x04)) PORTD^= 0x04;
if((old_knopki & 0x08) && !(knopki & 0x08)) PORTD^= 0x08;
if((old_knopki & 0x10) && !(knopki & 0x10)) PORTD^= 0x10;
if((old_knopki & 0x20) && !(knopki & 0x20)) PORTD^= 0x20;
if((old_knopki & 0x40) && !(knopki & 0x40)) PORTD^= 0x40;
if((old_knopki & 0x80) && !(knopki & 0x80)) PORTA^= 0x01;
я ошибаюсь или на самом деле вместо этого кода вот так было бы проще:

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

PORTD ^= old_knopki ^ knopki;
что-то голова не хочет думать :)))

Re: Многоканальный выключатель на микроконтроллере

Добавлено: Чт янв 19, 2012 19:22:04
pyzhman
Там еще PORTA есть. :) И - ну конечно же вы правы, можно было урезать до строчки. Тока хотелось, чтобы человек увидел что да как. :beer: