Здравствуйте, уважаемые! Только начал я осваивать прелести микропроцессоров, как тут же "напоролся" на проблему. Собственно о ней: решил я сделать для машины електронный термометр на двух цифровых датчиках. Купил проц PIC16F84A, датчики DS18B20, ЛСД на основе HD44780, нашел готовую схему с прошивкой, прошил проц. И только после включения схемы и внимательного изучения даташитов понял, что программа предназначалась для датчика ds1821, а он 8-ми битный, а я купил ds18b20 (16-ти битный). DS18B20 у нас в городе достать можно, ds1821 - нет. У Вас, я уверен, есть "заготовки" с детства цифровых датчиков, а для меня - большая проблема на уровне микропроцессора переделать формат принимаемых данных. Очень прошу помочь переделать программу под ds18b20. Просьба не пинать начинающего и помочь в переделке программы ( прилеплена ), или ткнуть носом где можно взять PIC16F84A+DS18B20(2-4штуки)+ЛСД на основе HD44780(форматом 16х1), как котенка в молоко на первой неделе его жизни. Вся информация взята осюда: http://electromost.com/publ/bytovaja_tekhnika/termometr_s_temodatchikom_ds1821/4-1-0-11 Спасибо! P.S.Какое удовольствия заняться чем-то новым, собрать/сделать - работает! А когда делаешь/мучишся/учишся/пробуешь а оно не выходит - руки опускаются....
...внимательного изучения даташитов понял, что программа предназначалась для датчика ds1821, а он 8-ми битный, а я купил ds18b20 (16-ти битный)....
бряхня(из кинухи)!!! по разрешению 1821 = 0,01 градуса. 1820 = 0,06 градуса. погрешность у них одинаковая - т.к. реализованы одинаково (терморезистор, генератор, регистры подсчёта, 1Wire(у 21 - протокол усечён)). отличия есть но небольшие короче говоря.
Компания Hongfa представляет новое высоковольтное мощное реле HR12-V с нормально разомкнутыми контактами. Герконовые реле имеют ряд преимуществ по сравнению с электромеханическими. Среди них: малый размер, высокая скорость срабатывания, стабильная по характеристикам и взрывобезопасная коммутация цепей и экономичность энергопотребления. Новое реле HR12-V способно коммутировать мощность 100 Вт в цепях постоянного тока, значения которого лежат в области 10 мА/1,5 кВ…1,5 А/60 В. Температура эксплуатации составляет -40…105°C.
У меня на ЛСД оба датчика всегда показывают 0,1С. Другого оправдания я не нашел - только несоответствие сигналов с датчика. По даташиту они не взаимозаменяемые. Отличие - длина передаваемой кодировки. Или я не прав?
КОМПЭЛ продолжает поддерживать и расширять список складских позиций Hongfa, представленных электромеханическими реле. Продукция компании активно применяется в таких областях, как промышленность, энергетика, бытовые приборы, автомобильная отрасль и специальная техника, требующая высокой надежности и на сегодняшний момент может легко заменить электромеханические реле ушедших из РФ брендов.
Код передается один и тот же, просто при меньшей битности в коде больше не несущих информацию нулей... Они отличаются, но не принципиально. DS18B20 имеет изменяемую битность, смысл только в том что чем меньше бит измеряет - тем быстрее. Могут отличатся кодами команд и всего лишь. и да DS18B20 перед использованием надо подготовить - записать в его куций EEPROM настройку на нужную битность, иначе получишь фигню - т.к. количество бит одинаковое а страдает выравнивание, в результате универсальной процедурой не обойтись - каждую битность надо интерпретировать по-своему.
Либо предусмотреть в прошивке процедуру подготовки термометра, инициируемую нажатием SMD-кнопки на плате или джампером. Вдруг накроется и придется ставить другую...
Почему нельзя это делать каждое включение... операция записи занимает время, и тратится ресурс встроенной в термометр EEPROM, однажды от просто накроется самопроизвольно.
Заголовок сообщения: Re: 8бит в 16бит (термодатчик ds1821 в ds18b20)
Добавлено: Чт мар 07, 2013 22:38:22
DS18B20 готовить предварительно не надо. Есть параметры по умолчанию с завода, включаемые при подаче питания - 12 бит (если датчик новый), выравнивание вправо. Для проверки, что записано в ЕЕПРОМ, можно произвести чтение Scratchpad'а, и проверить биты конфигурации. Если они в нужном состоянии, то ничего писать не надо. Посто подать команду "Convert", через >750 мс (при макс. точности) прочитать командой "Read Scratchpad" (9 байт). первые два байта - температура с дискретностью 1/16 градуса. Как я понял из ДШ на 1821, там есть команда чтения температуры, которая выдаёт 1 байт (целое число градусов). Чтобы получить что-то после запятой, требуется доп. телодвижения - запросить двумя отдельными командами два регистра, и провести арифмерические действия с ними. Соответственно, коды команд этих микросхем разный. Русское описание DS18B20 http://www.e-voron.dp.ua/files/pdf/maxim/ds18b20-rus.pdf
..первые два байта - температура с дискретностью 1/16 градуса....Чтобы получить что-то после запятой...
апсолютно верно. 1/16 = 0,0625 (DS18x20) 1/100 = 0,01 (DS1821) и там и там - повышенную точность надо вычислять(лень лезть в код по 20 - но вроде как и его так-же надо было к 0,06 разрешению приводить). даташиты на этот счёт имеются.
готовить не надо. но если 21 - он может быть переведён в режим термостата. и это доп. гимор с точки зрения железа и софта. работа с 20 и 21 - очень похожа. (если одиночное)запуск на преобразование, ждём, чтение регистров, запуск на преобразование .... команды очень близки либо совпадают. по допускам и кривизны - терморезистор внутри. приход к реальной температуре - 5 минут (физика процесса передачи тепла). 20 в пром. установках - менее удобны.
Решил перейти на готовую прогу того-же устройста, только на ATTiny. Учитывая, что и 10 лет назад она была практичнее ( пусть не убьют меня PICовци ), всегда мечтал програмировировать именно Атмел. Ну больше он мне нравился и нравится, извините.... Но тоже, естественно, нужны советы. Правда это уже совсем другая тема http://radiokot.ru/circuit/digital/home/24/
Последний раз редактировалось pelia Сб мар 09, 2013 22:46:59, всего редактировалось 2 раз(а).
Вероятно,если писать на asm для датчиков ds18b20,памяти и хватит 2313-ой.Ну а,если попроще,на C,да использовать для этого функцию sprinntf,да ещё,к тому-же использовать тип данных float для вывода температуры,то ниже меги8 не обойтись.
Ну а,если попроще,на C,да использовать для этого функцию sprinntf,да ещё,к тому-же использовать тип данных float для вывода температуры,то ниже меги8 не обойтись.
Да...Для Вас это может и попроще........ Лично я считаю, что если уже учить, то Ассемблер. Сложнее конечно но, думаю, практичнее
Да учите всё,да на разные контроллеры.PIC-и,AVR,LPC,STM,8051.Один день одно,два дня другое.Ведь в школе алгебра с литературой не путалось? Вот для начала,то чего Вам надо,но на меге8.Разбирайтесь.Не забывайте смотреть настройки компилятора в свойствах проекта,ведь там может "спрятано" основное.
Vov123, до Меги8/16/32 мне еще далеко. Я только учусь. Для начала был очень большой "напряг" выставить фусы.... ( Я уверен он опять повторится ) Я имел ввиду что когда-то давно пробовал освоить Assembler, когда еще не было ( я не видел ) программ для написания на С. Я понимаю - это НАМНОГО проще но, на Ассемблере это "первый" код, на более "низком" уровне ( перед самым програмированием проца ). Он максимально точен ко всем командам процессора. А если вобщем: высказываясь Вашим языком: зная некоторые стихотворения проще изучить сам язык, верно? Но а Ассемблере можна сделать "чудеса" недоступные любому другому языку програмирования - лично мое мнение
Ну,что-ж,желаю Вам удачи и терпения.Когда Ваши желания и мысли перейдут рубеж 1Кб кода асм (половина 2313),я думаю Вы сами выберите удобный для Вас язык высокого уровня. А пока могу порекомендовать самоучитель Белова.Там и про асм,и те-же примеры программы на Си (CVAVR,а на диске и WinAVR),программаторах и программировании,фусах и русский перевод даташита 2313.
Мега 8 в самый раз для начала. Куда там далеко? Она самая простая в линейке и достаточно выводов для экспериментов. Можно определить целый порт под отладочные нужды и еще останется. Собственно, у атмеловских контроллеров система команд одна - отличаются они лишь набором переферии и адресами регистров в каждой из них - но это вас беспокоить не должно, к каждому контроллеру уже заранее составлен заголовочный файл с определениями. А если его нет - можно набросать самому, по примеру соседнего по функциональности - останется только сверить адреса регистров.
На самом деле, на ассемблере писать довольно тяжело если пользоваться исключительно ассемблером, вставлять в код магические числа и напрочь забыть что есть такие вещи как INCLUDE, .DEFINE и .MACRO
Если правильно все использовать писать на ассемблере становится даже интересно.
...а Ассемблере можна сделать "чудеса" недоступные любому другому языку...
азм отличается от других языков только одной вещью:
что сделал = сам дурак.
всё остальное - не плюсы. и размеры программ - это не то, ради чего потом начинают задействовать другие языки. рубеж 1к - это хэллоу ворд для пром. заказа. размер тут не критерий. и боязни не вызывает. вызывает напряг другое - скорость разработки(ввод нового имеется ввиду), отвлечение внимания не только на логику работы, и т.п. вещи..
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения