Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Умный дом.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
ps1x
Прошу знающих посоветовать с чего начать. Делать буду для себя.
Идеи такие:
В комнате, корридоре и на кухне в стенах утоплены панели управления каждая представляет из себя:
- дисплей ЖК 16х2
- кнопки управления стрелка вверх, вниз, выбор и назад, т.е. всего 4 кнопки.
- датчик температуры для каждой панели
- управляющая микросхемка (атмега8 или 16 наверное)
- датчик ИК для приема комманд с пульта ДУ
А также есть исполнительные устройства, например в выключателе освещения, которые слушают, что им говорят панели и выполняют команды (например выключить свет).

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

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

По поводу пульта - информации по этому экземплярчику, к сожалению, не обнаружил, может есть другой метод? Ведь есть же программы которые можно надрессировать на любые пульты... Только как это реализовать в Меге blink.gif
=AK=
Хорошее описание некоторых популярных ИК протоколов
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
А связь по электропровлдке тебя не устроит и стены долбить не надо.
ps1x
Большое спасибо за подробное разъяснение протоколов связи, думаю реализовать МАСТЕР - СЛЕЙВ, ибо опыта пока маловато, а поскольку делаю для себя, если что починить всегда можно ) а время реакции не важно.

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

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

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

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

Например, вот так
Код
RS485
|
|--master
|
|--slave
|
|--slave
|
...
|
|--slave
ps1x
Тоесть, насколько я понял, все подключены к одному проводу, и посылать данные может только мастер?
Т.е. Мастер циклически опрашивает слейвы, если есть флаг наличия данных, то он общается с этим слейвом более детально?
ps1x
Есть ли у кого нибудь ссылка на понятный для неокрепшего разума алгритм меню?
Тоесть меню вида:
Главное меню
--Время
... --Уст. Дата
... --Уст. Время
--Устройства
... --Чайник
...... --Включить
...... --Выключить
...... --Таймер
... --Обогрев
...... --Включить
...... --Выключить
...... --Таймер
... --Кондер
...... --Включить
...... --Выключить
...... --Таймер
--Будильник
... --Время
--Температура
--Свет
... --Включить
... --Выключить
... --Таймер

Если используются кнопки вниз-вверх, выбор, отмена.
ps1x
Почему код:
Цитата
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
Цитата(ps1x @ Mar 26 2006, 19:37) *
выдает ошибку в строчках:
disp1="d";
disp2='Preferences

--- must be lvalue
????


вы перепутали понятие строки и понятие одного символа.
в ДВОЙНЫХ ковычках пишутся СТРОКИ
в ОДИНАРНЫХ ковычках пишется ОДИН символ
ps1x
Цитата
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
Цитата(ps1x @ Mar 26 2006, 19:07) *
При двойных кавычках тоже ругается... (

Либо:
char *disp1;

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

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

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

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

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

ДОБАВЛЕННО:
а такой вроде как работает
Код
char *disp1;
*disp1="Не работает";
vet
flash char *disp1;
disp1="Не работает";
zltigo
Цитата(ps1x @ Mar 26 2006, 20:39) *
1)
char *disp1;
disp1="Не работает";
- такой код выдает ошибку "pointers are to different memory classes"

2)
а такой вроде как работает
char *disp1;
*disp1="Не работает";

1. Это уже конкретные AVRовские заморочки с flash - я не в курсе, как я понимаю Вам "vet" ответил.

2.Бред, если компилятор на такое хотя-бы одно предупреждение не выдал, то хреновый компилятор,
либо ему все предупреждения задавили.
Ну а сделать он мог, максимум, в память по адресу на который указывает указатель disp1 (кстати в пределах данного фрагмента не инициализированный! ) запихнуть один байт 'Н'. И выдать пару варнингов:
- неинициализированный указатель;
- хрен знает какое преобразование строки к байту;
ps1x
В общем правильны вариант оказался:
Код
        char *mainm[7]={"  Time","  Date","  Preferences","  Devices","  Info","  Time",">>"};
        lcd_puts(mainm[cur]);

- работает полностью в полном обьеме cheers.gif

Вот недоделаное меню:
Код
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.5 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date    : 26.03.2006
Author  : ps1x                            
Company : ccc                            
Comments:


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 1,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
#asm
   .equ __lcd_port=0x18;PORTB
#endasm
#include <mega8.h>
#include <stdio.h>
#include <STRING.h>
#include <lcd.h>
#include <delay.h>

unsigned char kod,m;//kod- код нажатой кнопки, м - флаг в каком меню находимся
char *mainm[7]={"  Time","  Date","  Preferences","  Devices","  Info","  Time",">>"};//пункты главного меню
int cur,temp;//сur-текущий пункт меню, temp - температура (на будущее)
unsigned int hour,min,sec;//переменные для показа часов (на будущее)


void showmm(int cur) //функция показа главного меню, в зависимости от значения активного пункта
{
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_puts(mainm[cur]);//выводим текущ. пункт меню
        lcd_gotoxy(0,0);    
        lcd_puts(mainm[6]);//выводим символ ">>" для обозначения активного пункта.
        lcd_gotoxy(0,1);
        lcd_puts(mainm[cur+1]);//следующий пункт

}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
switch (kod) { //в зависимости от нажатой кнопки

    case 'u'://если кнопка вверх
        if (cur==0){cur=5;}//ограничене для закольцовывания меню ))
        cur--;//уменьшение указателя
    switch (m) {//если активно главное меню
    case 'm':
        showmm(cur);//отображение гл. мен.
    break;
    }
    break;
    case 'd'://кнопка вниз
        if (cur==4){cur=-1;}//ограничение
        cur++;
        showmm(cur);
    break;
    case 's'://нажатие кнопки селект
        switch(cur){
        case 3:
        lcd_clear();
        lcd_putsf("Выполняем этот пункт!");//если активен пункт 3 то выполняем этот код
        };
    break;
    case 'c':

    break;
    case 'z':
        
    break;

    };
kod='z';
}

// Declare your global variables here



void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
TCCR0=0x04;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")
lcd_init(16);
while (1) //опрашиваем клавиатуру
      {
if (PIND.0==1)
{kod='u';delay_ms(250);}

if (PIND.1==1)
{kod='d';delay_ms(250);}

if (PIND.2==1)
{kod='s';delay_ms(250);}

if (PIND.3==1)
{kod='c';delay_ms(250);}


      };
}


как вам такая реализация???

p.s. КОД НЕЗАКОНЧЕН!

Как заставить ISIS показывать русские буквы?
И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR?
bezobraznic
Цитата(ps1x @ Mar 27 2006, 00:01) *
Как заставить ISIS показывать русские буквы?
И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR?


#pragma rl+
lcd_putsf("Что-то на русском");
#pragma rl-
ps1x
Как я понял, ИСИС с русским не дружит... )
Тем не менее остаются вопросы:
Как общаться Мегам между собой - rs232 насколько я почерпнул из интернета - самый простой метод.
Например:
мастер-пульт посылает каждому пульту-слейву по байту вида
хххxzzzz - где xxxx-идентификатор устройства(слейва) zzzz- комманда
например
00011010 - посылает первому слейву запрос на наличие у слейва информации для кого нибудь другого устройства, и слушает....
потом ему приходит:
00000010 - типа хочу что-то послать второму слейву
мастер ему говорит - 00010001 - готов к приему (говорит первому слейву), слушает...
слейв отвечает 00010010, 10110110 - типа передай второму слейву (00010010), что я его люблю (10110110).
Мастер кричит в эфир 00101111 - второй слейв, слушай сюда!
Второй отвечает - 00000001 - слушаю!
Мастер говорит - 00100010, 10110110.
Вот такая история...
Кто нибудь осуществлял подобного ттипа задачки? Поделитесь опытом, пожалуйста!
TamTam
Цитата(ps1x @ Mar 27 2006, 00:01) *
В общем правильны вариант оказался:
Код
        char *mainm[7]={"  Time","  Date","  Preferences","  Devices","  Info","  Time",">>"};
        lcd_puts(mainm[cur]);

- работает полностью в полном обьеме cheers.gif

Вот недоделаное меню:
Код
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.5 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date    : 26.03.2006
Author  : ps1x                            
Company : ccc                            
Comments:


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 1,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/
#asm
   .equ __lcd_port=0x18;PORTB
#endasm
#include <mega8.h>
#include <stdio.h>
#include <STRING.h>
#include <lcd.h>
#include <delay.h>

unsigned char kod,m;//kod- код нажатой кнопки, м - флаг в каком меню находимся
char *mainm[7]={"  Time","  Date","  Preferences","  Devices","  Info","  Time",">>"};//пункты главного меню
int cur,temp;//сur-текущий пункт меню, temp - температура (на будущее)
unsigned int hour,min,sec;//переменные для показа часов (на будущее)


void showmm(int cur) //функция показа главного меню, в зависимости от значения активного пункта
{
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_puts(mainm[cur]);//выводим текущ. пункт меню
        lcd_gotoxy(0,0);    
        lcd_puts(mainm[6]);//выводим символ ">>" для обозначения активного пункта.
        lcd_gotoxy(0,1);
        lcd_puts(mainm[cur+1]);//следующий пункт

}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
switch (kod) { //в зависимости от нажатой кнопки

    case 'u'://если кнопка вверх
        if (cur==0){cur=5;}//ограничене для закольцовывания меню ))
        cur--;//уменьшение указателя
    switch (m) {//если активно главное меню
    case 'm':
        showmm(cur);//отображение гл. мен.
    break;
    }
    break;
    case 'd'://кнопка вниз
        if (cur==4){cur=-1;}//ограничение
        cur++;
        showmm(cur);
    break;
    case 's'://нажатие кнопки селект
        switch(cur){
        case 3:
        lcd_clear();
        lcd_putsf("Выполняем этот пункт!");//если активен пункт 3 то выполняем этот код
        };
    break;
    case 'c':

    break;
    case 'z':
        
    break;

    };
kod='z';
}

// Declare your global variables here



void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
TCCR0=0x04;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")
lcd_init(16);
while (1) //опрашиваем клавиатуру
      {
if (PIND.0==1)
{kod='u';delay_ms(250);}

if (PIND.1==1)
{kod='d';delay_ms(250);}

if (PIND.2==1)
{kod='s';delay_ms(250);}

if (PIND.3==1)
{kod='c';delay_ms(250);}


      };
}


как вам такая реализация???

p.s. КОД НЕЗАКОНЧЕН!

Как заставить ISIS показывать русские буквы?
И будет ли реальное устройство их показывать (имеется в виду что дисплей АНГ/РУС) если компилировать в CVAVR?


А можно на скриншот ISIS посмотреть ???
ps1x
ОБНАРУЖЕНЫ СЛЕДУЮЩИЕ ОШИБКИ
Произошла ошибка при загрузке файла, в связи с тем, что директория 'uploads' имеет неправильные атрибуты. Если Вы получили эту ошибку, просим Вас обратиться к Администратору форума и сообщить об этой ошибке.

---вот такая лажа случилась, щас залью на хостинг...

http://www.annesemonin.ru/scr.jpg -- вот адрес картинки.

Добавленно:
http://www.annesemonin.ru/scr1.jpg -- с русскими буквами.
Balaganov
Цитата(ps1x @ Mar 27 2006, 00:27) *
Как я понял, ИСИС с русским не дружит... )
...

Качаеш отсюда редактор симоволов LCDALPHA и отредактируеш шрифты в нем.
Quick Help: сохранить .BMP, открыть LCDALPHA.DLL, загрузить сохраненную .BMP и сохранить LCDALPA.DLL.

Удачи!
ps1x
Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)?
з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)
_artem_
Для начала вот это достаточно будет .:

http://rapidshare.de/files/16570538/gui.rar.html
ps1x
Cпасибо! ценная информация!
Laptop
Цитата(ps1x @ Mar 27 2006, 20:54) *
Не смог я всетаки со своим меню разобраться, посему прошу помощи. Какой самый простой метод организации многоуровнего меню? Есть-ли у кого нибудь ссылки на алгоритмы работы меню (реализации GUI)?
з.ы. Все что нашел - под винду, т.е. совершенно не подходит (используют оконные меню и иже с ними)

ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить.
ps1x
Цитата(Laptop @ Mar 27 2006, 22:41) *
Цитата(ps1x @ Mar 27 2006, 20:54) *

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

ИМХО, самый простой метод с организацией списка и хождения по его элементам, в полях элемента хранишь все что тебе необходимо. Реализация проста до безобразия, а всю рутину берет на себя компилятор. И главное, что потом добавив поля можешь хоть картинки к каждой менюшке подвесить.

Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал.
Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так?
Laptop
Цитата(ps1x @ Mar 27 2006, 21:54) *
Дык а есть исходники с комментариями на русском для дебилов? С удовольствием бы поизучал.
Насколько я понял из некоторых примеров, надо создать несколько структур - для пункта меню, для меню и для вбранного пункта меню, так?

Исходников к сожалению нет. Несколько структур создавать не обязательно, все элементы могут быть одинаковы, надо только определить для себя каким будет отображение на экране.
Самый простой вариант когда отображается один уровень, с вложенностью (точнее с одновременным отображением нескольких уровней вложенности) чуть сложнее, больше работы процессору.

Структура элемента следующая:
предыдущий пункт
следующий пункт
вход в нижний уровень вложенности, если есть
признак активного пункта
поле возможно указателя на функцию, возвращающую значение пункта меню(On, Off, etc.)

Необходимо только предусмотреть затычки для неиспользуемых полей.-
Вся работа сводится к беготне по ссылкам внутри спискаsmile.gif
ps1x
Ну, отображаться будут две строки меню (на дисплее 16*2), причем перед одной из них символ ">>" как индикатор активного пункта, вобщем можете взглянуть на скрин-шот из эмулятора
http://www.annesemonin.ru/scr.jpg
Максимальная вложенность - 3, тоесть:

Главное меню
----настройки
---------контраст
---------яркость
---------идентификатор
----таймер
---------проверить
---------установить

и т.п.

Гы, а как собственно "бегать" по элементам? (switch?)
ps1x
Ну что, неужели не у кого нет идей или своих наработок?

з.ы. просто самому в этом разобраться трудно...
zltigo
Цитата(ps1x @ Mar 28 2006, 13:44) *
Ну что, неужели не у кого нет идей или своих наработок?

Может просто тему сменить? А то уж больно издалека и неожиданно 'умный дом' начинается :-)
ps1x
Просто перешел от главной темы, к частностям, т.е. например после меню перейдем к соединению панелей между собой, потом к датчикам и так далее до полность разобранной темы по умному дому, получиться "все в одном" - удобно для других будет (имхо)
zltigo
Цитата(ps1x @ Mar 28 2006, 15:52) *
удобно для других будет (имхо)

Тогда ждите. Может и подтянется кто-то для кого создание "умного дома" и написание
"Hello World" (утрирую, естественно) одинаково интересны.
Laptop
Цитата(ps1x @ Mar 28 2006, 00:45) *
Ну, отображаться будут две строки меню (на дисплее 16*2), причем перед одной из них символ ">>" как индикатор активного пункта, вобщем можете взглянуть на скрин-шот из эмулятора
http://www.annesemonin.ru/scr.jpg
Максимальная вложенность - 3, тоесть:

Главное меню
----настройки
---------контраст
---------яркость
---------идентификатор
----таймер
---------проверить
---------установить

и т.п.

Гы, а как собственно "бегать" по элементам? (switch?)

Просто активный пункт выбираешь стрелками для беганья по меню и именно его тображаешь как активный, вроде проосто. Дополнительно вычисляешь кто сверху от этого уровня меню, сосед или родитель сверху и в соответствии с отступами отбражаешь. Вся информация содержится в выбранном активном пункте или элементе списка если проще.
BVU
Вообще-то подобный комплекс (умный дом) основанный на коммуникационной технологии BlueTooth и предпологает построение максимально интелектуальной и автоматизированной системы применительно к различным домашним и прочим электро-приборам управляемых от единого мастера (ПК). Об этом еще толковали в момент зарождения BlueTooth, как технологии. Средства коммуникации могут быть различны: USB, прочие разновидности сети, но BlueTooth изначально преспособлена под данный вариант использования, это как идеология, так и беспроводной способ передачи. Так что рекомендую рассмотреть данный вариант, тем более, что он является перспективным как сейчас, так и в будущем.
kolobok0
Цитата(BVU @ Mar 29 2006, 10:02) *
Вообще-то подобный комплекс (умный дом) основанный на коммуникационной технологии BlueTooth и предпологает построение максимально интелектуальной и автоматизированной системы применительно к различным домашним и прочим электро-приборам управляемых от единого мастера (ПК). Об этом еще толковали в момент зарождения BlueTooth, как технологии. Средства коммуникации могут быть различны: USB, прочие разновидности сети, но BlueTooth изначально преспособлена под данный вариант использования, это как идеология, так и беспроводной способ передачи. Так что рекомендую рассмотреть данный вариант, тем более, что он является перспективным как сейчас, так и в будущем.


енто Вы откель прочитали ? smile.gif Насколько в курсе - просто на сегоднешний момент времени НЕТ единого комуникационного стандарта в данной плоскости. Идёт грызня (или более мягше - перетягивание одеяла на ся) между различными протоколами...1Wire, голубой зуб, WiFi, x-10, LonWorn и т.д.. Более прикольно это всё наблюдать на фоне просьб буржуев-заказчиков - сделать расширитель RS232 к покупаемому у нас в России оборудованию. Очень уж смахивает на обычный пиар различных фирм своих технологий. Или по другому - захват рынка сбыта...


удачи Вам
(круглый)
ps1x
Думаю я для себя буду делать на rs232 - проще и дешевле. Всего два провода можно и под плинтусом спрятать )) А Ви-Фи и блютусы это для профи и для массового производства (затраты на установку в квартире меньше.)
kolobok0
Цитата(ps1x @ Mar 29 2006, 14:56) *
Думаю я для себя буду делать на rs232 - проще и дешевле. Всего два провода можно и под плинтусом спрятать )) А Ви-Фи и блютусы это для профи и для массового производства (затраты на установку в квартире меньше.)


лучший с точки зрения "модернизирования" и развития - всё таки rs485 если уж в последовательный канал близкий к rs232... Но рекомендую глянуть 1Wire - его плюс в 1 проводе данных (в принцепе 485 то же самое даёт), и (на мой взгляд) больше оконечных устройств. Всяких там таблеток, доступ, и прочей лабуды... Но как говориться - хозяин барин... Мы в своих установках юзаем 1Wire (по установке) - просче в мантаже, да и стоимость решения - достаточно низкая... Хотя на плате есть и i2c (ну енто совсем короткие шлейфы) к примеру...Дальнии подключения - то обычно rs232, 485, ethernet...

с уважением
(круглый)
ps1x
подключения- максимум метров 6. 1 wire имеется ввиду всеже что там 2 провода? Так у rs232 тоже 2 data+ и data- или нет?
kolobok0
Цитата(ps1x @ Mar 29 2006, 15:06) *
подключения- максимум метров 6. 1 wire имеется ввиду всеже что там 2 провода? Так у rs232 тоже 2 data+ и data- или нет?


у RS232 - 3 проводка...
уровни -12, +12, GND (земля по нашенски)...

с уважением
(круглый)
beer_warrior
rs232 я бы не рекомендовал. Ограничение на расстояние, и интерфейс точка-точка.
Можно попробовать rs485 - расстояние поболее и многоточечный, однако ИМХО это не для дома.
1-wire разработан именно для подобных вещей - надо зайти на maxim-ic.com и посмотреть документацию - там и системы доступа, и контроль температуры. Плюс в рунете любимая фича 1-wire термометры - доки и примеров море.
Для полного блезиру советую посмотреть LIN - упрощенный CAN - если не ошибаюсь есть у Атмела соответствующая аппликуха.
kolobok0
Цитата(beer_warrior @ Mar 29 2006, 15:27) *
rs232 я бы не рекомендовал. Ограничение на расстояние, и интерфейс точка-точка.......


расстояние звучало - около 6 метров. правда не понятно насколько много помех будет... а вот точка-точка, это решаемо...с помощью пару-тройки милкосхем на рассыпухи (к примеру) , немного поколдовать над протоколом...и штук 8 RS232 уже дышат в шинной топологии... Цена вопроса - затраты на программирование...

удачи Вам
(круглый)
beer_warrior
Цитата
немного поколдовать над протоколом...и штук 8 RS232 уже дышат в шинной топологии... Цена вопроса - затраты на программирование...


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


Я думаю все переболели этим, и забросили.
Сналчала, оно выглядит круто и прикольно, а когда доходит дело до эксплуатации и обслуживания быстро обламываешься...
александр_в
Хотелось-бы поговорить об функциях умного дома, а реализация это уже дело техники.
Например:
- охранная сигнализация
- управление отоплением в зависимости от времени суток и выходных
- управление кондиционером по времени
- при открывании калитки музыкальный звонок и включение освещения (на каждую калитку своя мелодия)
- вечерний свет (имитация присутствия дома)
- измерение температуры в каждой комнате, на улице и в подвале (актуально при хранинии овощей)
- набор будильников для включения различных устройств по времени
- администрирование всех контроллеров с ПК
Какие будут еще предложения ?
kolobok0
Цитата(александр_в @ Mar 30 2006, 00:05) *
Хотелось-бы поговорить об функциях умного дома, а реализация это уже дело техники.
Например:
- охранная сигнализация
- управление отоплением в зависимости от времени суток и выходных
- управление кондиционером по времени
- при открывании калитки музыкальный звонок и включение освещения (на каждую калитку своя мелодия)
- вечерний свет (имитация присутствия дома)
- измерение температуры в каждой комнате, на улице и в подвале (актуально при хранинии овощей)
- набор будильников для включения различных устройств по времени
- администрирование всех контроллеров с ПК
Какие будут еще предложения ?


+пожарная тематика
+аварийная тематика(протечка трубы, обмерзание канализации)
+идентификация людей в жилище(метка, СО и т.д.)
+управление вентиляцией (не только вкл-выкл)
+отопление(не только поддержание температуры)
+-администрирование не с ПК а с удобной консоли. Одной, регулируя масштабность. ПК - это вчерашний день.Либо переносной ПК...
+домашняя метеостанция
+анализатор распорядка дня и необходимых действий (например проверить давление в шинах, т.к. температура на улице ушла более чем на 10 градусов)
+видеофон

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

с уважением
(круглый)
defunct
Цитата(kolobok0 @ Mar 30 2006, 13:44) *
Цитата(александр_в @ Mar 30 2006, 00:05) *



Мда, неплохая задумка, лет эдак на "надцать", если самому все это делать.
Я бы предложил для начала простенькую задачку:
Голосовое управление освещением во всех комнатах. Хотя бы вкл/откл, хотя лучше и яркость регулировать.
александр_в
Частично уже реализовано.
Голосовое управление очень заманчиво, но ставить под это дело ПК не совсем разумно. А как сделать по другому не знаю.
defunct
Цитата(александр_в @ Mar 31 2006, 16:13) *
Частично уже реализовано.
Голосовое управление очень заманчиво, но ставить под это дело ПК не совсем разумно. А как сделать по другому не знаю.

Не надо ПК! Смысл реализовать такую штуку на AVR. Реакцию на последовательность звуков разных частот.
Himik_2
А такой вариант не подойдёт ? У меня собрано: центральный контроллер с дисплеем 320х240 точек (можно вывести простейшую графику), имеет 2 - RS232, 2 - I2c, а-ля SPI, шесть кнопок; влево-вправо, вверх-вниз, ввод и сброс процессора (Z84). IR - порт (RC5), ик светодиод, часы реального времени. подсветка кнопок, возможность перепрограммирования (с компа).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.