Умный Дом по Ethernet

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
PervakovDanil
Сообщения: 103
Зарегистрирован: 16 фев 2012, 18:23
Откуда: АР Крым, г.Бахчисарай

Re: Умный Дом по Ethernet

Сообщение PervakovDanil » 13 май 2012, 21:41

kuzmich9023, открою небольшую тайну:
логический 0 это не 0 вольт, а логическая 1 это не 3,3 вольта.
А еще кроме логического 0 и 1 есть еще Высокоимпедансное состояние или Z-состояние.

Андрей, скажите пожалуйста (может kuzmich9023 неправильно задал вопрос) : при конфигурировании порта МК "на вход" подключаются ли внутренние подтягивающие резисторы ?

P.S.
мне очень жаль, что народ запрыгивает на ступеньку с названием "микроконтроллеры" пропуская при этом ступеньки с названием "дискретная логика".

kuzmich9023, для Вас что нибудь говорит наименование "К155ЛА3" ?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: Умный Дом по Ethernet

Сообщение THK » 13 май 2012, 22:56

PervakovDanil писал(а):открою небольшую тайну:
логический 0 это не 0 вольт, а логическая 1 это не 3,3 вольта.
Применительно к этой схеме, можно считать лог.1 = 3.3 Вальта
PervakovDanil писал(а):kuzmich9023, для Вас что нибудь говорит наименование "К155ЛА3" ?
Круто наехали! Я-бы был поспокойней.
PervakovDanil писал(а):P.S.
мне очень жаль, что народ запрыгивает на ступеньку с названием "микроконтроллеры" пропуская при этом ступеньки с названием "дискретная логика".
+1
Хотя с другой стороны, если сразу задана достаточно высокая планка и у человека достаточно целеустремления и желания, то его скорее всего ждет удача!

kuzmich9023 писал(а):У меня вопрос по данному прибору. Выходы у меги в не активном состоянии 0 (0v) а в активном 1(3.3V) тоесть на выход если все пины за исключение ацп используються? а на вход если конфигурировать то лог состояние пинов в отсутствии сигнала какое? и при входе подаеться на ножки 3.3в или на массу замыкаеться?
При конфигурировании пина как вход, включаются подтягивающие резисторы и на входе будет 3.3 Вольта. Почитайте ветку повнимательнее, уже звучали подобные вопросы и выкладывались схемы как входных, так и выходных цепей.
Говоря Вашим языком надо замыкать на массу.

PS "Так кто на ком стоял? Потрудитесь излагать Ваши мысли яснее." (с) Булгаков. Собачье сердце.

PervakovDanil
Сообщения: 103
Зарегистрирован: 16 фев 2012, 18:23
Откуда: АР Крым, г.Бахчисарай

Re: Умный Дом по Ethernet

Сообщение PervakovDanil » 14 май 2012, 07:59

THK, да я возможно был резок. Постараюсь быть полояльнее. Но вспомните изучение грамоты в 1 классе. Сначала черточки и кружочки, затем из черточек складывают буквы. А затем из букв складывают слова. А по чему в радиолюбительстве нужно иначе ?
THK писал(а):При конфигурировании пина как вход, включаются подтягивающие резисторы и ...
Не согласен.
Или тогда прокомментируйте строки:
файл main.c версия 3.02
строки 537 - 566

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

DDRD |= (1<<port_num);
if (_port_d[i] == 1 )
PORTD|= (1<<port_num);
else
PORTD &= ~(1<<port_num);
А особенно эти (строки 607-612):

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

	else
		{
			if ( port_letter == 'D' )
			DDRD &= ~(1<<port_num);
			if ( port_letter == 'C' )
			DDRC &= ~(1<<port_num);
			if ( port_letter == 'B' )
			DDRB &= ~(1<<port_num);
		}
в моем понимании т.к. эти строки расположены до вечного цикла "while(1)" это идет начальная инициализация портов при "холодном старте". Так ?

мои коменты:

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

if ( port_letter == 'D' ) // если порт D
DDRD &= ~(1<<port_num); // записать 0 т.е. переключить его на вход
А где тогда строки записи 1 в PORTD и включения подтягивающего резистора ?

Если не там рою, то пожалуйста ткните пальцем на номер строки.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"

THK
Модератор
Сообщения: 588
Зарегистрирован: 18 мар 2011, 19:00
Откуда: Серпухов, МО

Re: Умный Дом по Ethernet

Сообщение THK » 14 май 2012, 10:04

PervakovDanil писал(а):А где тогда строки записи 1 в PORTD и включения подтягивающего резистора ?

Если не там рою, то пожалуйста ткните пальцем на номер строки.
Возможно я ошибся. У меня на модуле входов стоят подтягивающие резисторы и этот момент я мог легко упустить.
Дождемся ответа Андрея...

PS А резисторы я ставлю со времен К155ЛА3, несмотря на то, что пустой вход в ТТЛ=1. ;)

kuzmich9023
Сообщения: 4
Зарегистрирован: 13 май 2012, 15:04

Re: Умный Дом по Ethernet

Сообщение kuzmich9023 » 14 май 2012, 15:20

к155ла3 мне говорит о том что это утюг. Народ мне не ответили на вопрос. активное состояние (выход контроллера включен) 3.3в ,а не активное 0в? я спрашиваю по тому что цепляю на выход uln2003,а у неё выхода инвертируються по отношению ко входу. чтоб плату не делать вторую печатную я интересуюсь. в исходники глядеть лениво.

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 14 май 2012, 16:02

А где тогда строки записи 1 в PORTD и включения подтягивающего резистора
похоже Вы правы
эта часть кода
if (_port_type == 1 )
{
код
}
else
{
if ( port_letter == 'D' )
DDRD &= ~(1<<port_num);
if ( port_letter == 'C' )
DDRC &= ~(1<<port_num);
if ( port_letter == 'B' )
DDRB &= ~(1<<port_num);
}

переключает порты на вход и они остаются болтаться в воздухе
кстати выражение
if (_port_type == 1 )
можно написать так
if (_port_type )
будет работать

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 14 май 2012, 16:07

чтоб плату не делать вторую печатную я интересуюсь
делайте не бойтесь :D если будет инверсия перед выводом в порт сделайте инверсию
~(PORTX)
в исходники глядеть лениво
а все таки придеться ;)

kuzmich9023
Сообщения: 4
Зарегистрирован: 13 май 2012, 15:04

Re: Умный Дом по Ethernet

Сообщение kuzmich9023 » 14 май 2012, 16:14

да я уже начинаю понимать что надо нырнуть в исходник.

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 14 май 2012, 16:26

я думаю нужно взглянуть сюда
if ( srv_cmd == '1' )
{
if ( port_letter == 'D' )
PORTD|= (1<<port_num);
else if ( port_letter == 'C' )
PORTC|= (1<<port_num);
else if ( port_letter == 'B' )
PORTB|= (1<<port_num);
}
// OFF
else if ( srv_cmd == '0' )
{
if ( port_letter == 'D' )
PORTD &= ~(1<<port_num);
else if ( port_letter == 'C' )
PORTC &= ~(1<<port_num);
else if ( port_letter == 'B' )
PORTB &= ~(1<<port_num);

сдесь устанавливается состояние портов после выполнения команд
этот код лишь загружает состояние портов из EEPROM при включении устройства
if (_port_type == 1 )
{
if ( port_letter == 'D' )
{
DDRD |= (1<<port_num);
if (_port_d == 1 )
PORTD|= (1<<port_num);
else
PORTD &= ~(1<<port_num);

// Выключаем ШИМ
if ( port_num == 6 )
TCCR0A &= ~(1 << COM0A1);
else if ( port_num == 5 )
TCCR0A &= ~(1 << COM0B1);
else if ( port_num == 3 )
TCCR2A &= ~(1 << COM2B1);

}
else if ( port_letter == 'C' )
{
DDRC |= (1<<port_num);
if (_port_d == 1 )
PORTC|= (1<<port_num);
else
PORTC &= ~(1<<port_num);
}
else if ( port_letter == 'B' )
{
DDRB |= (1<<port_num);
if (_port_d == 1 )
PORTB|= (1<<port_num);
else
PORTB &= ~(1<<port_num);
}

kuzmich9023
Сообщения: 4
Зарегистрирован: 13 май 2012, 15:04

Re: Умный Дом по Ethernet

Сообщение kuzmich9023 » 14 май 2012, 19:39

Благодарю за помощь.

PervakovDanil
Сообщения: 103
Зарегистрирован: 16 фев 2012, 18:23
Откуда: АР Крым, г.Бахчисарай

Re: Умный Дом по Ethernet

Сообщение PervakovDanil » 14 май 2012, 19:42

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

Ну и раз пошел разбор сырцов по косточкам :
функция ISR(TIMER1_COMPA_vect)
строки

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

	i = ~PIND;              // read keys (low active)
	i ^= input_state;            // key changed ?
	ct0 = ~(ct0 & i);            // reset or count ct0
	ct1 = ct0 ^ (ct1 & i);       // reset or count ct1
	i &= ct0 & ct1;              // count until roll over ?
	input_state ^= i;            // then toggle debounced state
	input_press |= input_state & i;   // 0->1: key press detect

	i = ~PINC;              // read keys (low active)
	i ^= input_state2;            // key changed ?
	ct2 = ~(ct2 & i);            // reset or count ct0
	ct3 = ct2 ^ (ct3 & i);       // reset or count ct1
	i &= ct2 & ct3;              // count until roll over ?
	input_state2 ^= i;            // then toggle debounced state
	input_press2 |= input_state2 & i;   // 0->1: key press detect
порт C и D есть, а порт B ?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 15 май 2012, 04:18

возможно автор решил что кнопки можно подключить только к портам D и C
i = ~PIND; // read keys (low active)
i ^= input_state; // key changed ?
ct0 = ~(ct0 & i); // reset or count ct0
ct1 = ct0 ^ (ct1 & i); // reset or count ct1
i &= ct0 & ct1; // count until roll over ?
input_state ^= i; // then toggle debounced state
input_press |= input_state & i; // 0->1: key press detect

i = ~PINC; // read keys (low active)
i ^= input_state2; // key changed ?
ct2 = ~(ct2 & i); // reset or count ct0
ct3 = ct2 ^ (ct3 & i); // reset or count ct1
i &= ct2 & ct3; // count until roll over ?
input_state2 ^= i; // then toggle debounced state
input_press2 |= input_state2 & i; // 0->1: key press detect
как я понял это процедура антидребезга
Из исходника довольно сложно понять что происхоит
Несколькими часами позже
Возможно дело в следующем, в первых версиях прошивки было определено
char *aio[IO_SIZE] = {"D0", "D1", "D3", "D4", "D5", "D6", "D7", "C0", "C1", "C2", "C3", "C4", "C5"};
т. е не было порта B
рт C и D есть, а порт B
Затем стало
char *aio[IO_SIZE] = {"C5", "D0", "C4", "D1", "C3", "C2", "D3", "B1", "D7", "D6", "D5", "C0", "D4", "C1"};
добавился B1 и появилась запись
else if ( port_letter == 'B' )
PORTB &= ~(1<<port_num);
а сюда
i = ~PIND; // read keys (low active)
i ^= input_state; // key changed ?
ct0 = ~(ct0 & i); // reset or count ct0
ct1 = ct0 ^ (ct1 & i); // reset or count ct1
i &= ct0 & ct1; // count until roll over ?
input_state ^= i; // then toggle debounced state
input_press |= input_state & i; // 0->1: key press detect

i = ~PINC; // read keys (low active)
i ^= input_state2; // key changed ?
ct2 = ~(ct2 & i); // reset or count ct0
ct3 = ct2 ^ (ct3 & i); // reset or count ct1
i &= ct2 & ct3; // count until roll over ?
input_state2 ^= i; // then toggle debounced state
input_press2 |= input_state2 & i; // 0->1: key press detect
внести забыли
Кстати что Вы имели ввиду
при ручной переинициализации

PervakovDanil
Сообщения: 103
Зарегистрирован: 16 фев 2012, 18:23
Откуда: АР Крым, г.Бахчисарай

Re: Умный Дом по Ethernet

Сообщение PervakovDanil » 15 май 2012, 10:39

Да я тоже посчитал, что попросту после добавления порта В в список портов ввода-вывода устройства в один раздел программы изменения не внесли.

При включении устройства программа восстанавливает настройки портов ввода-вывода МК ("холодный" или "горячий" старт), которые пользователь "руками" установил ранее.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 15 май 2012, 12:37

1. В данной прошивке активное состояние выходов - лог. 1
2. Встроенные подтягивающие резисторы на входах не включаются. В схеме моего исполнительного модуля используются внешние резисторы, которые подтягивают входы к лог. 1
3. "Защита от дребезга" действительно не работает на портах "B". Их в устройстве всего два. Один задействован как светодиод, а другой в готовом исполнительном модуле для MegaD-328 работает как выход. Поэтому в данный момент лично для меня это не очень актуально. Но в перспективе надо, конечно, реализовать этот механизм и для "B".

nemozar
Сообщения: 8
Зарегистрирован: 18 мар 2012, 16:52

Re: Умный Дом по Ethernet

Сообщение nemozar » 20 май 2012, 13:03

http://www.ebay.com/itm/280833017800?ss ... 1438.l2649
http://www.ebay.com/itm/280706213546?ss ... 1438.l2649

наконец то пришли ко мне платы... Подскажите пожалуйста как подключить теперь их вместе. В интернете написано, что надо задействовать пины 10-13 + земля питание. Земля и питания это два нижних пина на ENC28J60. А вот 10-12 к каким подключать и в какой последовательности? Оставшиеся пины на ENC28J60 clkout, int, wol, sc,si,sck,cs,reset.

хочется уже попробовать :) спасибо!

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 21 май 2012, 03:14

Оставшиеся пины на ENC28J60 clkout, int, wol, sc,si,sck,cs,reset.
sc,si,sck,cs,
подключите к одноименным ногам MEGI
int, wol
пустые
clkout,
если не используете внешнее тактирование ARDUINO то оставте свободным
reset
можете подключить к любой ноге, только нужно будет подправить прошивку , а можно вообще не подключать
вот кусок из прошивки который показывает что куда воткнуть
#define ENC28J60_CONTROL_PORT PORTB
#define ENC28J60_CONTROL_DDR DDRB
#if defined(__AVR_ATmega88__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
#define ENC28J60_CONTROL_CS PORTB2
#define ENC28J60_CONTROL_SO PORTB4
#define ENC28J60_CONTROL_SI PORTB3
#define ENC28J60_CONTROL_SCK PORTB5
#endif
#if defined(__AVR_ATmega644__)||defined(__AVR_ATmega644P__)
#define ENC28J60_CONTROL_CS PORTB4
#define ENC28J60_CONTROL_SO PORTB6
#define ENC28J60_CONTROL_SI PORTB5
#define ENC28J60_CONTROL_SCK PORTB7
#endif
хочется уже попробовать :) спасибо!
Попробуйте ;)

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Умный Дом по Ethernet

Сообщение vtec » 21 май 2012, 10:53

Я подключил, работает. Только прошивка Arduino'вская.
VCC - 3.3V
GND - GRND
CS - 10
SI - 11
SCK - 13
SO - 12

Кто нибудь пробовал прошить прошивкой Андрея данный набор? То есть снести прошивку Arduino'вскую и подключить данный модуль, чтобы работало?

alexsis_76

Re: Умный Дом по Ethernet

Сообщение alexsis_76 » 21 май 2012, 10:57

Кто нибудь пробовал прошить прошивкой Андрея данный набор? То есть снести прошивку Arduino'вскую и подключить данный модуль, чтобы работало?

Должно только надо переназначить ноги ,большой разницы нет,ардуино это или самопал в основе все та же мега

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Умный Дом по Ethernet

Сообщение Andrey_B » 22 май 2012, 12:46

Подключил к Мегадевайсу датчик освещенности.
Подробнее тут http://www.ab-log.ru/smart-house/ethernet/light-sensor

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Умный Дом по Ethernet

Сообщение vtec » 22 май 2012, 14:49

Почему был выбран именно этот датчик/модуль?

Ответить