реклама на сайте
подробности

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Умный дом.
ps1x
сообщение Mar 25 2006, 21:46
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Прошу знающих посоветовать с чего начать. Делать буду для себя.
Идеи такие:
В комнате, корридоре и на кухне в стенах утоплены панели управления каждая представляет из себя:
- дисплей ЖК 16х2
- кнопки управления стрелка вверх, вниз, выбор и назад, т.е. всего 4 кнопки.
- датчик температуры для каждой панели
- управляющая микросхемка (атмега8 или 16 наверное)
- датчик ИК для приема комманд с пульта ДУ
А также есть исполнительные устройства, например в выключателе освещения, которые слушают, что им говорят панели и выполняют команды (например выключить свет).

Вопросы:
Какие мк использовать? (для панелей наверное что нибудь из серии мега а для исполнительных - тини)
Как организовать между мк одноранговую сеть? (желательно удобную для прокладки в стенах)
Как узнать какую систему комманд использует пульт? (от тв-тюнера маленький плоский, на одной таблетке-батарейке)

Сообщение отредактировал ps1x - Mar 25 2006, 21:55
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 25 2006, 23:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



В ATtiny25/45/85 есть встроенный датчик температуры. А вообще - любые чипы, у которых хватит ног и ресурсов под задачу.
Сеть - 2-проводная шина RS-485, аппаратный UART подключается через м/с-преобразователь (MAX487).
По ИК пультам море информации в интернете.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 00:32
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата
В ATtiny25/45/85 есть встроенный датчик температуры.

- за это спасибо
Цитата
Сеть - 2-проводная шина RS-485, аппаратный UART подключается через м/с-преобразователь (MAX487).
- с ее помощью можно организовать такую связь: исполнительное устройство --- панель---- панель. Нажать кнопку на последне панели, получить результат в виде "выполнено" от исполнительного устройства? т.е. панели имеют одинаковый приоритет, исполнительные устройства подключаются к определенной панели и общаются только с ней. Или лучше совместить исполнительное устройство и панель - налицо экономия, но сразу теряется гибкость системы.

По поводу пульта - информации по этому экземплярчику, к сожалению, не обнаружил, может есть другой метод? Ведь есть же программы которые можно надрессировать на любые пульты... Только как это реализовать в Меге blink.gif
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 26 2006, 05:43
Сообщение #4


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Хорошее описание некоторых популярных ИК протоколов
http://www.xs4all.nl/~sbp/knowledge/ir/ir.htm

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

1. Мастер-слэйв, логическая звезда.

В сети есть только один мастер, все остальные - слуги. Разговор всегда происходит между мастером и одним из млуг, слуги между собой сами разговаривать не могут. Мастер по очереди опрашивает всех слуг. Если у слуги есть новая информация (например, нажата кнопка), мастер получает ее, затем по своим таблицам смотрит кому она нужна, и рассылает исполнительным механизмам.

Достоинства: простая реализация; отсутствие столкновений, легкои надежно делается на RS485

Недостатки: для получения хорошего времени реакции скорости обмена должны быть довольно большими (порядка 100кбит/сек); центральный мастер является критическим звеном, если мастер помрет - ничего работать не будет.

2. Peer-to-peer

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

Достоинства: отсутствие столкновений, легко и надежно делается на RS485; обмен может быть ускорен по сравнению с (1), особенно если надо обмениваться большими пакетами; надежность выше, т.к. обмен не зависит от работоспособности одного узла.

Недостатки: довольно сложно реализовать, много возни; скорости обмена все равно должны быть довольно большими, чтобы координатор мог быстро передать токен.

3. Анархия - мать порядка (CSMA)

Координатора нет, мастера нет. Кому надо что-то передать - захватывает интерфейс и передает, после этого замолкает. Проблема возникает в тот момент, когда нескольким узлам взбредет передавать в одно и то же время. RS485 для этого не подходит, т.к. не приспособлен для работы со столкновениями.

Здесь напридумывано много вариантов, например

3.1. "По фигу, рано или поздно пробьемся"
Узел тупо передает свое сообщение и ждет подтверждения приема. Если ответа нет, исполняется псевдослучайная задержка, и передача повторяется. Надежда на то, что два столкнувшихся узла сделают разную задержку. Это вариант довольно гнилой, зато относительно простой.

3.2. Обнаружение столкновений (CSMA/CD)
Узлы "слушают" линию во время передачи и обнаруживают, что произошло столкновение. В этом случае происходит "разборка" тем или иным способом, один передает, другой встает в очередь. Примерно так работает LON

3.3. Избегание столкновений (CSMA/CA)
Линия работает по принципу "монтажного ИЛИ", один уровень "сильнее" другого. Узлы "слушают" каждый бит во время передачи и обнаруживают, что кто-то передает "сильный" уровень, в то время как они сами транслируют "слабый" уровень. После этого они тихо отцепляются от линии и не мешают "более старшим ребятам" разговаривать (первые биты в пакете задают приоритет).

Последний вариант - самый интересный. Так (или примерно так) работают CAN, EIB, C-Bus. При этом физическая скорость обмена может быть очень низкой (в C-Bus, например, всего 5 кбит/сек), а реактивность получается очень высокой, особенно если информация передается не одному узлу (как в том же LON в обычном режиме), а сразу всем, широковещательно (как в EIB, C-Bus и в кривовато реализованном широковещательном режиме LON).
Go to the top of the page
 
+Quote Post
impuls-v
сообщение Mar 26 2006, 10:04
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



А связь по электропровлдке тебя не устроит и стены долбить не надо.
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 10:20
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Большое спасибо за подробное разъяснение протоколов связи, думаю реализовать МАСТЕР - СЛЕЙВ, ибо опыта пока маловато, а поскольку делаю для себя, если что починить всегда можно ) а время реакции не важно.

По поводу электропроводки - есть специальные микросхемки которые этим занимаются? Если прийдется городить - паять то я пас. К томуже зачастую бывает что разные розетки в одной квартире идут от разных фаз - чтобы распределять нагрузку. Думаю, этот вариант окажется дорогим, сложным и малопригодным в моем случае (ИМХО).

По поводу ИК - еслиб я знал какой протокол в нем используется, я и не спрашивал бы ))
Есть программа для кпк которая с помошью встроенного в кпк ИРДА может натренироваться пулять в любой телевизор. Там это работает так - нажимаем вирт. кнопку на кпк, которую нужно запрограммировать, затем жмем соответствующую кнопку на пульте д.у. она запоминает последовательность импульсов, думаю, прийдется делать что-либо подобное, но как это запихнуть в мегу? ресурсов то мало.... glare.gif

И еще как будет выглядеть физически подключение мастер-слейв?
Вот так?::
Цитата
слейв...... _______ ...........слейв
=======|.мега...|=========
................|мастер|....................
................|..........|....................
=======|..........|....................
слейв........---------.....................


Сообщение отредактировал ps1x - Mar 26 2006, 10:30
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 11:28
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



и еще как будет физически реализована панель управления (как я предполагаю):
PORTD - дисплей
PORTB - cвязь и кнопки
PORTC- датчики и устройства

Хватит ли ножек у Меги8 для всего этого хозяйства?
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 26 2006, 11:34
Сообщение #8


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(ps1x @ Mar 26 2006, 19:50) *
И еще как будет выглядеть физически подключение мастер-слейв?
Вот так?::

Например, вот так
Код
RS485
|
|--master
|
|--slave
|
|--slave
|
...
|
|--slave


Сообщение отредактировал =AK= - Mar 26 2006, 11:38
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 11:39
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Тоесть, насколько я понял, все подключены к одному проводу, и посылать данные может только мастер?
Т.е. Мастер циклически опрашивает слейвы, если есть флаг наличия данных, то он общается с этим слейвом более детально?
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 15:27
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Есть ли у кого нибудь ссылка на понятный для неокрепшего разума алгритм меню?
Тоесть меню вида:
Главное меню
--Время
... --Уст. Дата
... --Уст. Время
--Устройства
... --Чайник
...... --Включить
...... --Выключить
...... --Таймер
... --Обогрев
...... --Включить
...... --Выключить
...... --Таймер
... --Кондер
...... --Включить
...... --Выключить
...... --Таймер
--Будильник
... --Время
--Температура
--Свет
... --Включить
... --Выключить
... --Таймер

Если используются кнопки вниз-вверх, выбор, отмена.

Сообщение отредактировал ps1x - Mar 26 2006, 15:28
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 16:37
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Почему код:
Цитата
unsigned char kod;
char disp1[16],disp2[16];
unsigned int cur;
struct menu // Declare PERSON struct type
{
char menu1[16];
char menu2[16];
char menu3[16];
char menu4[16];
char menu5[16];
} family_member; // Define object of type PERSON


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
switch (kod) {
case 'u':
if (cur==0){cur=4;}
cur--;
switch (cur) {
case 0:
disp1="d";
disp2='Preferences';
break;
};

break;
case 'd':

break;
case 's':

break;
case 'c':

break;

};

}

выдает ошибку в строчках:
disp1="d";
disp2='Preferences

--- must be lvalue
????
Go to the top of the page
 
+Quote Post
Petka
сообщение Mar 26 2006, 16:49
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(ps1x @ Mar 26 2006, 19:37) *
выдает ошибку в строчках:
disp1="d";
disp2='Preferences

--- must be lvalue
????


вы перепутали понятие строки и понятие одного символа.
в ДВОЙНЫХ ковычках пишутся СТРОКИ
в ОДИНАРНЫХ ковычках пишется ОДИН символ
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 17:07
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата
unsigned char kod;
char disp1[16];
unsigned int cur;
struct menu // Declare PERSON struct type
{
char menu1[16];
char menu2[16];
char menu3[16];
char menu4[16];
char menu5[16];
} family_member; // Define object of type PERSON


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
switch (kod) {
case 'u':
if (cur==0){cur=4;}
cur--;
switch (cur) {
case 0:
disp1="Dsad";

break;
};


При двойных кавычках тоже ругается... (
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 26 2006, 18:16
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ps1x @ Mar 26 2006, 19:07) *
При двойных кавычках тоже ругается... (

Либо:
char *disp1;

либо, если нужен именно буфер для других целей:

strcpy( &disp1[0], "abracadabra" );

либо, дабы избежать потенциальных ошибок:
strncpy( &disp1[0], "abracadabra", sizeof(disp1)-1 );


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ps1x
сообщение Mar 26 2006, 18:39
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Код

char *disp1;
disp1="Не работает";

- такой код выдает ошибку "pointers are to different memory classes"

ДОБАВЛЕННО:
а такой вроде как работает
Код
char *disp1;
*disp1="Не работает";


Сообщение отредактировал ps1x - Mar 26 2006, 18:41
Go to the top of the page
 
+Quote Post

6 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016