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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Применение DS1820 и LCD44780 для начинающих, Подключение нескольких DS1820 на шину.
SasaVitebsk
сообщение Nov 20 2006, 23:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Исследовал работу нескольких DS18B20/DS1820 "сидящих" на одной шине, а также возможность динамического подключения/замены данных датчиков на шине. Не нашёл. Некоторые библиотеки, в том числе выложенные на этом форуме являются нерабочими. Написал библиотеки, проверил и выложил их в виде библиотек в соответствующем разделе форума.

А здесь предлагаю для начинающих полный учебный проект использования данных библиотек. Написаны и проверены на стенде Nix-06 для начинающих который обсуждался в топике "getting started ..." и расположен по nix-06.nm.ru. Проект написан на IAR C и закончен, а то многие писали, что хотелось бы понять как применять те или иные библиотеки. Мои или другие.

Подключается несколько датчиков DS1820/ds18b20/ds18s20 в любом сочетании. На LCD дисплей выводится их количество и температура каждого. Допустимо подключения датчиков по двух-проводной схеме включения. Используется динамическое выделение памяти под ROM датчиков.

Библиотека LCD написана таким образом что допускает использование стандартных функций вывода outs и printf с элементами форматирования. Что и пременено в проекте. Имеется прямая индексация курсора и прочие вещи, которые облегчают написание меню и многоуровневых меню. В принципе должно работать для 4-ёх строчных дисплеев, но я не проверял.
Прикрепленные файлы
Прикрепленный файл  ds18b20.zip ( 17.94 килобайт ) Кол-во скачиваний: 522
 
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 19 2007, 01:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Несколько человек обращалось по поводу сложности переноса проекта под другие компиляторы (В одном случае GCC, в остальных - CV). Насколько я понимаю, проблемы возникают с формированием временных интервалов. В IAR имеется удобная встроенная ф-ия задержки на определённое колличество тактов(что легко формулой преобразуется в реальное время), в других компиляторах данная фича реализуется сложнее.

В связи с этим я вынес эти процедуры в отдельный файл(библиотеку) и оформил в виде п/программ, а остальные файлы(библиотеки) сделал более универсальными. Таким образом желающие смогут переписать только одну п/п по формированию задержки 1мкс, что я думаю не сложно. Кроме того я реализовал два варианта формирования задержек. Програмный вариант TimLowSw и аппаратный вариант TimLowHw. Аппаратный подключил к проекту. Он не зависит от компилятора (правда более зависим от частоты процессора и использует таймер 1). Попробовал также избавится от ф-ции __swap_nibbles(). Правда не проверял.

Исспользуемые мной ф-ии сохранения/восстановления прерываний в данном проекте можно запросто выкинуть. Они тут не используются.

Было бы интересно, если бы откликнулся кто-нибудь пробующий перенести проект под, например CV. Ещё лучше если он выложит его здесь же.
Прикрепленные файлы
Прикрепленный файл  ds18b20.zip ( 95.88 килобайт ) Кол-во скачиваний: 312
Прикрепленный файл  TimLowSw.zip ( 1.22 килобайт ) Кол-во скачиваний: 208
Прикрепленный файл  stdint.zip ( 3.13 килобайт ) Кол-во скачиваний: 201
 
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jan 19 2007, 01:58
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



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

Код
;Модуль для ЖКИ

.def LCD_reg = R20
.equ LCD_PORT_command = PORTC
.equ LCD_PIN_command = PINC
.equ LCD_DDR_command = DDRC
.equ LCD_PORT_data = PORTD
.equ LCD_PIN_data = PIND
.equ LCD_DDR_data = DDRD
.equ E  = 2
.equ RW = 1
.equ RS = 0
.equ BUSY = 7

LCD_on:
   push  R16
   in    R16,LCD_DDR_command
   ori   R16,$07
   out   LCD_DDR_command,R16
   ori   R16,$FF
   out   LCD_DDR_data,R16
   pop   R16
   ret
LCD_data:
   sbi   LCD_PORT_command,RS
LCD_command:
   push  R16
   rcall LCD_pause
   sbi   LCD_PORT_command,E
   ldi   R16,$FF
   out   LCD_DDR_data,R16
   out   LCD_PORT_data,LCD_reg
   rcall LCD_pause
   cbi   LCD_PORT_command,E
   ldi   R16,$00
   out   LCD_DDR_data,R16
   out   LCD_PORT_data,R16
   cbi   LCD_PORT_command,RS
   sbi   LCD_PORT_command,RW
   rcall LCD_pause
   sbi   LCD_PORT_command,E
   rcall LCD_pause
   sbis  LCD_PIN_data,BUSY
   rjmp  (PC-1)
   cbi   LCD_PORT_command,E
   cbi   LCD_PORT_command,RW
   pop   R16
   ret
LCD_pause:
   ldi  R16,$10
   dec  R16
   cpi  R16,$00
   brne (PC-2)
   ret
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 19 2007, 02:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я использую BUSY.
А задержки всё равно нужны.
1) для формирования 1-wire шины, так как BUSY там нет. smile.gif
2) Когда выполняешь операцию управления курсором, то читаю состояние курсора и возвращаю его.
Эта операция без задержки будет выполнена неправильно. Кстати, если будет время прикольнусь - покажу как на моей библиотеке многоуровневые меню формируются. Я из асма писал. Всё что я здесь видел - детский лепет. smile.gif
3) Для процесса инициализации дисплея. Там BUSY, тоже не сразу читать можно.
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 19 2007, 10:44
Сообщение #5


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2007, 05:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(GDI @ Jan 19 2007, 11:44) *
В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.


Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде.

А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих). Дело в том что редко какая-нибудь аппаратная хрень используется точно так как прописано. Обычно надо "почти так, но вот тут чуть чуть подправить". smile.gif И в этом смысле Си-шные библиотеки это позволяют делать.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 20 2007, 14:02
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(SasaVitebsk @ Jan 20 2007, 05:20) *
Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде.
А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих).

В CV они на C. Но вот сама возможность подключения нескольких датчиков, с использованием в дальнейшем их поиска на шине, кмк вещь бесполезная. Как их отличать? Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2007, 15:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Qwertty @ Jan 20 2007, 15:02) *
В CV они на C. Но вот сама возможность подключения нескольких датчиков, с использованием в дальнейшем их поиска на шине, кмк вещь бесполезная. Как их отличать? Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.


Возможно Вы правы, хотя абсолютных решений не бывает. Вы предлагаете использовать по одному входу на каждый датчик. Тогда каждый датчик чётко связан со своим местом(номером). Это тоже выход. Но у меня их до 10. Использовать 10 входов не всегда возможно. А программа позволяет использовать колличество датчиков ограниченное только свободной памятью (точнее памятью кучи). Например у меня в проекте под кучу выделено 256 байт. Это позволяет использовать 31 датчик из под меги 8.

А вообще я писал проект как учебный. (В смысле я использовал п/п для него в реальном проекте, а этот использовал для отладки) На мой взгляд он простой и наглядный. Возможно кто-нибудь найдёт в нём что-нибудь для себя интересное. Или оптимизирует его для себя и почуствует радость первой победы. smile.gif С ним просто можно проводить эксперименты. Я применил динамическое выделение памяти, хотя мог бы просто ограничить число датчиков разумным и создать массив. Зато некоторые увидят, как используется динамическая память и указатели.

В программировании не всё очевидно. Вот пример прототипа который я брал за основу.
Код
//Чтение температуры
uint8_t read_temp(void)
{
    uint8_t scratchpad[9];
    uint8_t crc = 0;
    // initiate array to 0
    for (uint8_t a1 = 0; a1 < 9; a1++) scratchpad[a1] = 0;
   // __delay_cycles(F_CLK); //time measurement temperature in DS18B20 (780ms)
    OW_reset();
    OW_write_byte(SKIP_ROM); // skip ROM
    OW_write_byte(READ_SCRATCHPAD); // read scratchpad 0xBE
//Recive data  in 1 Wire
    for (uint8_t c1 = 0; c1 < 9; c1++)
    {
        scratchpad[c1] = OW_read_byte();
    }
//Check CRC8  to 1 Wire data
    for(uint8_t i = 0; i < 8; i++)
      {
         crc =  OW_ComputeCRC8(scratchpad[i], crc);
       }
       if (crc == scratchpad[8])
       {
        return  ((scratchpad[1] << 4) | (scratchpad[0] >> 4));
        }
  return ( ERROR_CRC); // Message -80
}


А вот что получилось у меня.

Код
//Чтение температуры
int8_t    read_scratchpad(uint8_t tip)
{
uint8_t    scratchpad[8];
uint8_t    crc    = 0;

OW_write_byte(READ_SCRATCHPAD);                // читаем scratchpad 0xBE
for    (uint8_t c1    = 0; c1    < 8; c1++)
{
    scratchpad[c1] = OW_read_byte();            // Принять данные с    1 Wire шины
    crc    =  OW_crc8(crc, scratchpad[c1]);        // Посчитать CRC8  для 1 Wire шины
}
crc=OW_crc8(crc, OW_read_byte());
OW_reset();
if (crc == 0)                                    // Проверить CRC8  для 1 Wire шины
{
   if(tip==DS18B20TIP)
     return ((scratchpad[1] << 4) | ((scratchpad[0]+8) >> 4));
   else    
     return ((scratchpad[1] & 0x80) |    ((scratchpad[0]+1) >> 1));
}
else return ( ERROR_CRC);                        // Message -80
}

//Чтение температуры (для одного датчика на шине)
int8_t    read_temp_short(void)
{
    OW_reset();
    OW_write_byte(SKIP_ROM);                    // пропусь ROM
    return (read_scratchpad(DS18B20TIP));        // Чтение температуры
}


Найдите три различия. smile.gif
Не забывайте - это проект для начинающих.
Go to the top of the page
 
+Quote Post
Andy Great
сообщение Jan 21 2007, 19:06
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 793
Регистрация: 5-11-04
Из: Краматорск, Украина
Пользователь №: 1 057



Цитата(Qwertty @ Jan 20 2007, 14:02) *
Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.

Я рассматривал вариант задействования для этого верхнего/нижнего предела для аларма. Они сохраняются при выключении. Правда, пока не дошел ход, не проверял. Да и все равно, надо делать начальное сканирование, сохранять адреса... Лучше для этого (в моем случае) EEPROM использовать.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 21 2007, 19:20
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Andy Great @ Jan 21 2007, 20:06) *
Я рассматривал вариант задействования для этого верхнего/нижнего предела для аларма. Они сохраняются при выключении. Правда, пока не дошел ход, не проверял. Да и все равно, надо делать начальное сканирование, сохранять адреса... Лучше для этого (в моем случае) EEPROM использовать.


Если рассматривать подключение по очереди, то это можно сделать и с помощью моей библиотеки. К тому же, если хочется не тратить память, то можно запоминать лишь метку датчика. Этой меткой является CRC. То есть для хранения необходим лишь один байт. Но это всё равно не сработает если подключить сразу два. Из этого нет выхода, кроме как каждое гнездо на свой вход.

Цитата(Qwertty @ Jan 20 2007, 14:02) *
Простейший пример - один датчик на улице, другой в квартире. Хочется не просто получить две температуры, но и знать, какая из них на улице, а какая в доме. Или есть способ? Подключение по очереди с запоминанием серийного номера - простейший, но это не требует поиска на шине, то есть не совсем то.


Подключение по очереди ИМЕННО ТРЕБУЕТ поиска на шине и запоминание уже подключенных. Вообще поиск применяют там, где устройство сделано в одном месте, а датчик / датчики - подключат в другом.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 21 2007, 23:35
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(SasaVitebsk @ Jan 21 2007, 19:20) *
Если рассматривать подключение по очереди, то это можно сделать и с помощью моей библиотеки. К тому же, если хочется не тратить память, то можно запоминать лишь метку датчика. Этой меткой является CRC. То есть для хранения необходим лишь один байт. Но это всё равно не сработает если подключить сразу два. Из этого нет выхода, кроме как каждое гнездо на свой вход.

По аналогии с базами данных, точнее первичным ключом - идентификатор не должен повторяться. А CRC вполне может.

Цитата(SasaVitebsk @ Jan 21 2007, 19:20) *
Подключение по очереди ИМЕННО ТРЕБУЕТ поиска на шине и запоминание уже подключенных. Вообще поиск применяют там, где устройство сделано в одном месте, а датчик / датчики - подключат в другом.

Я наверно неправильно выразился. Имелся в виду режим обучения, когда датчики подключаются-отключаются по очереди. Одновременно на шине только один датчик. Тогда поиск не нужен и возможно четко провести идентификацию - SKIP ROM- READ ROM. И сохранить считанное в ЕЕПРОМ.

Использовать Th, TL не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг. smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 22 2007, 02:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Qwertty @ Jan 22 2007, 00:35) *
По аналогии с базами данных, точнее первичным ключом - идентификатор не должен повторяться. А CRC вполне может.


В данном случае не совсем так. Поясню. CRC является свёрткой. Это математическая ф-ция. Высчитывается её "мощность" - то есть колличество неповторяющихся данных при непрерывной генерации. Для данной формулы CRC примерно 128 байт. читаем же мы всего 7. Если учитывать такой фактор, что 1-2 байта будут повторятся (семейство/партия), то вероятность совпадения близка к нулю.

Цитата
Я наверно неправильно выразился. Имелся в виду режим обучения, когда датчики подключаются-отключаются по очереди. Одновременно на шине только один датчик. Тогда поиск не нужен и возможно четко провести идентификацию - SKIP ROM- READ ROM. И сохранить считанное в ЕЕПРОМ.


Ну это уже совсем из области фантазии. Совсем не представляю область применения датчиков таким образом. Я ещё понимаю подключение по одному. Подключил один - привязал (комната). Потом подключил второй - привязал (улица). А если используешь SKIP ROM, то что Вы тогда в EEPROM записывать будете? smile.gif

Цитата
Использовать Th, TL не получится. Данные в них еще надо занести, а для этого придется решать, в какой датчик что писать. И выйдет заколдованный круг. smile.gif


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


Подытоживая скажу. Безусловно не существует универсальных решений. Я делал эту библиотеку, конечно не для баловства, а она у меня применена в проекте. Попутно выложил. Я её не навязываю. Это бессмысленно. Если Вам она не подходит, то за уши притаскивать глупо. В тоже время там есть, к примеру чтение одиночных датчиков с помощью команды skip rom. IAR, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение.
Можете задавать вопросы. Буду отвечать. smile.gif
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 22 2007, 04:03
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(SasaVitebsk @ Jan 22 2007, 02:50) *
...
Для данной формулы CRC примерно 128 байт. читаем же мы всего 7. Если учитывать такой фактор, что 1-2 байта будут повторятся (семейство/партия), то вероятность совпадения близка к нулю.

Почему читаем 7? Всегда думал что идентификатор 64 бита, т.е. 8 байт. Близка к нулю и равна 0 - не одно и то-же. smile.gif
Цитата(SasaVitebsk @ Jan 22 2007, 02:50) *
Ну это уже совсем из области фантазии. Совсем не представляю область применения датчиков таким образом. Я ещё понимаю подключение по одному. Подключил один - привязал (комната). Потом подключил второй - привязал (улица). А если используешь SKIP ROM, то что Вы тогда в EEPROM записывать будете? smile.gif

Не вижу причин так не сделать. Режим обучения - "Подключите датчик улицы и нажмите кнопку...", "Отключите уличный, подключите комнатный и нажмите кнопку". Вполне реализуемо. А после SKIP ROM никто не мешает выполнить READ ROM, что я выше и написал. Другое дело, что SKIP ROM в этом случае и не нужен smile.gif В ЕЕПРОМ писать то, что вернет датчик на READ ROM. Без CRC.

Цитата(SasaVitebsk @ Jan 22 2007, 02:50) *
Подытоживая скажу. Безусловно не существует универсальных решений. Я делал эту библиотеку, конечно не для баловства, а она у меня применена в проекте. Попутно выложил. Я её не навязываю. Это бессмысленно. Если Вам она не подходит, то за уши притаскивать глупо. В тоже время там есть, к примеру чтение одиночных датчиков с помощью команды skip rom. IAR, к примеру, не использованные п/п не подключит. Поэтому вы можете использовать удобные для Вас. Кроме того они выложены в исходниках и Вы можете кроить их на своё усмотрение.
Можете задавать вопросы. Буду отвечать. smile.gif

Неиспользуемые п.п. не подключают все компиляторы C. В свое время мне потребовалось в одном устройстве применить два DS18S20. И вот тогда встала проблема отличать их друг от друга. Задача была решена путем пожертвования "лишней" ножки контроллера так как я не нашел приемлемых путей ввести режим обучения. В устройстве не было ни индикатора, ни кнопок - вообще никакого интерфейса кроме светодиода. Изобретать азбуку Морзе не хотелось. smile.gif Но зато датчики читаются параллельно, что немного разгружает контроллер. Но вот если нужно будет не 2 датчика, а например 16? Вот отсюда и был мой вопрос о привязке идентификатора к положению датчика в пространстве smile.gif К сожалению видимо решения нет. sad.gif
Go to the top of the page
 
+Quote Post
GDI
сообщение Jan 22 2007, 11:48
Сообщение #14


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
(GDI @ Jan 19 2007, 11:44) *

В CV в примерах есть подобный проект с использованием встроенных библиотек 1-wire и HD44780. А еще там есть встроенные функции задержки delay_ms(N) и delay_us(N) где N - это число милли- или микросекунд, соответственно, доступны при подключении delay.h.


Использование нескольких датчиков одновременно? Дело в том что не нашёл нигде.

А в общем встроенные библиотеки конечно хороши. Но если они не на Си, то это не облегчает работу (для неначинающих). Дело в том что редко какая-нибудь аппаратная хрень используется точно так как прописано. Обычно надо "почти так, но вот тут чуть чуть подправить". smile.gif И в этом смысле Си-шные библиотеки это позволяют делать.


В CV встроенные именно 1-wire и HD44780 - их исходный код не доступен, на Си, по крайней мере, а DS18B20 вполне на Си только расширение у файла .lib. Хорошо когда есть выбор использовать встроенные библиотеки или написанные отдельно... Вот только новичку трудно будет ее портировать на CV, а более искушенные разработчики уходят от CV на IAR или на другие компиляторы...



Цитата
Но вот если нужно будет не 2 датчика, а например 16?


Я делал проект на 8 датчиков на 8 ножках контроллера - все работало.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 22 2007, 12:38
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Qwertty @ Jan 22 2007, 05:03) *
Почему читаем 7? Всегда думал что идентификатор 64 бита, т.е. 8 байт. Близка к нулю и равна 0 - не одно и то-же. smile.gif


7+CRC=8. "Близка к 0" это свойство моего характера - выражаться уклончиво. Я думаю если Вы начнёте экспериментировать, то не дождётесь данного события. smile.gif Хотя, можно не экспериментировать и записать все 7 байт на датчик, как это делаю я.

Цитата
Не вижу причин так не сделать. Режим обучения - "Подключите датчик улицы и нажмите кнопку...", "Отключите уличный, подключите комнатный и нажмите кнопку". Вполне реализуемо. А после SKIP ROM никто не мешает выполнить READ ROM, что я выше и написал. Другое дело, что SKIP ROM в этом случае и не нужен smile.gif В ЕЕПРОМ писать то, что вернет датчик на READ ROM. Без CRC.


Подожди, так в моём варианте это выглядит ещё проще. Подключите датчик улицы - спасибо - Подключите датчик комнаты - спасибо. Даже кнопку нажимать не надо. Я и так увижу. Да и вообще запрос можно не выдавать. Главное по два не подключать. Но можно и два и три. Просто в данном случае неизвестно как система их индентифицирует. Но это не главное. В этом тоже есть своё преимущество. Разъёмы у меня паралельны. Куда бы я не воткнул уличный датчик - он будет уличный.

Но у меня сейчас по другому. Я просто предлагаю воткнуть нужное колличество датчиков и определить какой куда. Тоже интерактивное обучение. smile.gif А имя присвоить или картинку можно к любому любую.

Так чем Вас не устраивает такая модель?

Цитата
Но зато датчики читаются параллельно, что немного разгружает контроллер. Но вот если нужно будет не 2 датчика, а например 16? Вот отсюда и был мой вопрос о привязке идентификатора к положению датчика в пространстве smile.gif К сожалению видимо решения нет. sad.gif


Извини, но фраза "немного разгружает контроллер", - это для меня непереводимая игра слов. biggrin.gif Я считаю что программа написана правильно и конроллер под проект выбран правильно если проц загружен на 80% и более. И то в том случае если проект будет развиваться. Но был у меня проект с загрузкой 98% процессорного времени. Это нормально. Это говорит о том, что программист постарался "выжать из камня всё". Программа пишется один раз, а пользуются ей - длительное время. Поэтому нужно попробовать максимально использовать все возможности.

Решение есть всегда. Настоящий программист такого не напишет. smile.gif Он ставит на ночь два стакана (как известно) Один полный другой - пустой. Полный на случай если захочется пить, ну а пустой на случай если пить не захочется. smile.gif
Если меня спросит начальство можно ли сделать робота, который не отличается от человека (или другое аналогичное устр-во), то я отвечаю - "Да, но нецелесообразно"
biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


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


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