ps1x 0 25 марта, 2006 Опубликовано 25 марта, 2006 (изменено) · Жалоба Прошу знающих посоветовать с чего начать. Делать буду для себя. Идеи такие: В комнате, корридоре и на кухне в стенах утоплены панели управления каждая представляет из себя: - дисплей ЖК 16х2 - кнопки управления стрелка вверх, вниз, выбор и назад, т.е. всего 4 кнопки. - датчик температуры для каждой панели - управляющая микросхемка (атмега8 или 16 наверное) - датчик ИК для приема комманд с пульта ДУ А также есть исполнительные устройства, например в выключателе освещения, которые слушают, что им говорят панели и выполняют команды (например выключить свет). Вопросы: Какие мк использовать? (для панелей наверное что нибудь из серии мега а для исполнительных - тини) Как организовать между мк одноранговую сеть? (желательно удобную для прокладки в стенах) Как узнать какую систему комманд использует пульт? (от тв-тюнера маленький плоский, на одной таблетке-батарейке) Изменено 25 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 25 марта, 2006 Опубликовано 25 марта, 2006 · Жалоба В ATtiny25/45/85 есть встроенный датчик температуры. А вообще - любые чипы, у которых хватит ног и ресурсов под задачу. Сеть - 2-проводная шина RS-485, аппаратный UART подключается через м/с-преобразователь (MAX487). По ИК пультам море информации в интернете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба В ATtiny25/45/85 есть встроенный датчик температуры. - за это спасибо Сеть - 2-проводная шина RS-485, аппаратный UART подключается через м/с-преобразователь (MAX487). - с ее помощью можно организовать такую связь: исполнительное устройство --- панель---- панель. Нажать кнопку на последне панели, получить результат в виде "выполнено" от исполнительного устройства? т.е. панели имеют одинаковый приоритет, исполнительные устройства подключаются к определенной панели и общаются только с ней. Или лучше совместить исполнительное устройство и панель - налицо экономия, но сразу теряется гибкость системы. По поводу пульта - информации по этому экземплярчику, к сожалению, не обнаружил, может есть другой метод? Ведь есть же программы которые можно надрессировать на любые пульты... Только как это реализовать в Меге :blink: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 17 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба Хорошее описание некоторых популярных ИК протоколов 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
impuls-v 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба А связь по электропровлдке тебя не устроит и стены долбить не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 (изменено) · Жалоба Большое спасибо за подробное разъяснение протоколов связи, думаю реализовать МАСТЕР - СЛЕЙВ, ибо опыта пока маловато, а поскольку делаю для себя, если что починить всегда можно ) а время реакции не важно. По поводу электропроводки - есть специальные микросхемки которые этим занимаются? Если прийдется городить - паять то я пас. К томуже зачастую бывает что разные розетки в одной квартире идут от разных фаз - чтобы распределять нагрузку. Думаю, этот вариант окажется дорогим, сложным и малопригодным в моем случае (ИМХО). По поводу ИК - еслиб я знал какой протокол в нем используется, я и не спрашивал бы )) Есть программа для кпк которая с помошью встроенного в кпк ИРДА может натренироваться пулять в любой телевизор. Там это работает так - нажимаем вирт. кнопку на кпк, которую нужно запрограммировать, затем жмем соответствующую кнопку на пульте д.у. она запоминает последовательность импульсов, думаю, прийдется делать что-либо подобное, но как это запихнуть в мегу? ресурсов то мало.... :glare: И еще как будет выглядеть физически подключение мастер-слейв? Вот так?:: слейв...... _______ ...........слейв =======|.мега...|========= ................|мастер|.................... ................|..........|.................... =======|..........|.................... слейв........---------..................... Изменено 26 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба и еще как будет физически реализована панель управления (как я предполагаю): PORTD - дисплей PORTB - cвязь и кнопки PORTC- датчики и устройства Хватит ли ножек у Меги8 для всего этого хозяйства? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 17 26 марта, 2006 Опубликовано 26 марта, 2006 (изменено) · Жалоба И еще как будет выглядеть физически подключение мастер-слейв? Вот так?:: Например, вот так RS485 | |--master | |--slave | |--slave | ... | |--slave Изменено 26 марта, 2006 пользователем =AK= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба Тоесть, насколько я понял, все подключены к одному проводу, и посылать данные может только мастер? Т.е. Мастер циклически опрашивает слейвы, если есть флаг наличия данных, то он общается с этим слейвом более детально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 (изменено) · Жалоба Есть ли у кого нибудь ссылка на понятный для неокрепшего разума алгритм меню? Тоесть меню вида: Главное меню --Время ... --Уст. Дата ... --Уст. Время --Устройства ... --Чайник ...... --Включить ...... --Выключить ...... --Таймер ... --Обогрев ...... --Включить ...... --Выключить ...... --Таймер ... --Кондер ...... --Включить ...... --Выключить ...... --Таймер --Будильник ... --Время --Температура --Свет ... --Включить ... --Выключить ... --Таймер Если используются кнопки вниз-вверх, выбор, отмена. Изменено 26 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба Почему код: 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 ???? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба выдает ошибку в строчках: disp1="d"; disp2='Preferences --- must be lvalue ???? вы перепутали понятие строки и понятие одного символа. в ДВОЙНЫХ ковычках пишутся СТРОКИ в ОДИНАРНЫХ ковычках пишется ОДИН символ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба 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; }; При двойных кавычках тоже ругается... ( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 26 марта, 2006 Опубликовано 26 марта, 2006 · Жалоба При двойных кавычках тоже ругается... ( Либо: char *disp1; либо, если нужен именно буфер для других целей: strcpy( &disp1[0], "abracadabra" ); либо, дабы избежать потенциальных ошибок: strncpy( &disp1[0], "abracadabra", sizeof(disp1)-1 ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 26 марта, 2006 Опубликовано 26 марта, 2006 (изменено) · Жалоба char *disp1; disp1="Не работает"; - такой код выдает ошибку "pointers are to different memory classes" ДОБАВЛЕННО: а такой вроде как работает char *disp1; *disp1="Не работает"; Изменено 26 марта, 2006 пользователем ps1x Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться