Многоканальный выключатель на микроконтроллере
- Сообщения: 71
- Зарегистрирован: Чт фев 04, 2010 07:35:28
И снова приветствую вас уважаемые коты. Забралась мне в голову мысль сделать на микроконтроллере attiny2313 многоканальный выключатель. Что мы имеем,микроконтроллер с порядка 16-ю свободными ногами,8 из которых будут входами,остальные 8 выходы.На входы вешаем нормально разомкнутые кнопки,8 штук,оставшиеся концы которых соединяем с землёй. Устройство должно работать следующим образом:При подаче питания на всех выходах 0. При нажатии кнопки,должна появляться 1 на соответствующем кнопке выходе.При последующем нажатии на выходе 0,и так далее.Все каналы должны работать независимо друг от друга.Необходима задержка включения секунды в 2,что бы дребезг контактов не напрягал.Тактировать контроллер наверное лучше от внутреннего генератора,уж коли он там есть. Судя по функционалу устройства,программа подозреваю нужна не сложная..Но проблема в том что я в программировании полный ноль.Пытался я что то понять в программировании скитаясь по сайтам с соответствующей тематикой,накачал книг-ну не понимаю я там нифига,что аж до нервоза)..Эти непонятные термины.. А управлять микроконтроллером до ужаса хочется. Не мог бы кто нибудь набросать код,так сказать для затравки? С меня пиво)
- Реклама
я могу написать прошиивку... а заместь пива сбросите его стоимость мне на кошелек 
Пора что то поменять в своей жизни - поменял windows.
КПІ РТФ!
КПІ РТФ!
Наверно 8 D-триггеров с взаимным сбросом.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
ну автор говорит

lexsoft писал(а):управлять микроконтроллером до ужаса хочется
Пора что то поменять в своей жизни - поменял windows.
КПІ РТФ!
КПІ РТФ!
Точнее - с общим сбросом по питанию и задержкой на 2 секунды..dr.doc писал(а):с взаимным сбросом.
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
- Реклама
- Сообщения: 71
- Зарегистрирован: Чт фев 04, 2010 07:35:28
BoRtO,деловой подход. Только я качества в таком случае затребую)) Говори за сколько рублей прошивку можешь сваять?
ок!lexsoft писал(а):качества
прошу в лс!
Пора что то поменять в своей жизни - поменял windows.
КПІ РТФ!
КПІ РТФ!
Да хватит уж на новичках навариваться. Так слабо помочь? Объяснить, что к чему... Ему же не готовая программа нужна, а научиться.
Жить как то надоploop писал(а):Так слабо помочь?
Пора что то поменять в своей жизни - поменял windows.
КПІ РТФ!
КПІ РТФ!
А я понял, совсем наоборот...ploop писал(а):Ему же не готовая программа нужна, а научиться.
А задача, действительно как-раз для обучения.
ICQ нет, и, в ближайшее время, не будет.
- Сообщения: 71
- Зарегистрирован: Чт фев 04, 2010 07:35:28
Научиться очень хочу,хотя бы что то простейшее для понимания.. Многообещающие учебники "на доступном языке" напрочь нудоступны моему пониманию) Вот бы приятеля который за бутылкой водки разьяснил бы что к чему))
Ну, если знаете, что такое триггер, и понимаете, что такое "логическое И", особых трудностей быть не должно.
Я бы рекомендовал, для начала ПИКи, но коль уж Вы хотите АВРы, то тут, на сайте, есть вполне приличный учебник.
Я бы рекомендовал, для начала ПИКи, но коль уж Вы хотите АВРы, то тут, на сайте, есть вполне приличный учебник.
ICQ нет, и, в ближайшее время, не будет.
Код: Выделить всё
//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, порешил, что как-то некрасиво за столь простое пиво брать. Мне бы водки.
- Вложения
-
- TEMP.RAR
- (1.68 КБ) 240 скачиваний
Docendo discimus
- Сообщения: 71
- Зарегистрирован: Чт фев 04, 2010 07:35:28
Спасибо дружище! Будешь в Самаре,заезжай,поставлю тебе пузырь)
Запомнил. 
Docendo discimus
- Сообщения: 71
- Зарегистрирован: Чт фев 04, 2010 07:35:28
Вчера пытался в протеусе это дело погонять,так и не понял где там питалово на контроллер цеплять..
Оно по умолчанию подано. Ваша задача залить прошивку.
я ошибаюсь или на самом деле вместо этого кода вот так было бы проще: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;битва с дураками проиграна, победители торжествуют. слава победителям!
Там еще PORTA есть.
И - ну конечно же вы правы, можно было урезать до строчки. Тока хотелось, чтобы человек увидел что да как. 
Docendo discimus


