Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:00:52

Бу-га-га!!!! Заработало!! Контрольная сумма верно проверяется, только вот неверная информация приходит раз в 10 сек, походу задержки надо подбирать... Или может дело в отсутствии кварца?

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:10:00

В тыщапицотый раз про прерывания. Отключайте их на время работы с датчиком

Кстати, об этом я уже писал
Shapa писал(а):Dako А на счёт того, что у вас датчик белеберду выдает..(навреное, то 55, то 85) вы прерывания отключите, пока датчик опрашиваете. И не надо его дергать чаще чем 1 раз в секунду! Он у нас уже почетный пенсионер, работать так быстро не умеет и не хочет

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:13:58

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

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:18:21

Dako писал(а):У меня жеж динамическая индикация на прерываниях, как я её могу отключить? На данный момент у меня если контрольная сумма не сходится, значение температуры не обновляется, не красиво конечно, но я копаю дальше

А вы попробуйте. Потом уже копайте. Если я окажусь не прав, то я обязательно изучу ваш код, чтобы понять как вы объеденили опрос датчика и прерывания и буду использовать в своих конструкциях. Вы же не против?

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:19:30

Нет конечно, щас попробую ;)

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:21:51

кстати, вы в AVRstudio пишите?
Код:
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

Добавьте
в шапку #define F_CPU ваша тактовая в герцах.
Примерно так:
Код:
#define F_CPU 8000000 // 8 Мгц
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:35:29

Вы правы, спасибо за совет! Отключив прерывания во время общения с датчиком, за 5 мин не увидел ни одного сбоя. Уменьшая частоту индикации, удалось увеличить стабильность передачи. Значит ли это, что подпрограмма обработки прерывания "размазывает" временные интервалы? Если я в шапке укажу тактовую частоту, что это даст?

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 09:44:05

Dako писал(а): Значит ли это, что подпрограмма обработки прерывания "размазывает" временные интервалы?

Как-то так.

Dako писал(а): Если я в шапке укажу тактовую частоту, что это даст?

используемая вами библиотека
#include <util/delay.h>
требует чтобы данная константа была определена для расчёта количества циклов необходимых для реализации дискреты временой задержки. Т.е. Без неё могут не верно вычисляться _delay_us(); _delay_ms();

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 10:44:25

Уррра! Всё работает 100% стабильно! Всё дело было в том, что у меня проц был настроен на частоту 1 МГц, следовательно с динамической индикацией ни о каких точных задержках в микросекундах и речи быть не могло. Выставил частоту 8МГц - и всё заработало как положено! ))) Спасибо всем за помощь!

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 10:55:50

Как у тя датчик вообще умудрялся отвечать? :shock:

На будущее: перед началом нового проекта, в заготовке, нужно первым делом всё проверить: тактовую, фьюзы, всё остальное. Потом начинать проект. Если нет частотометра, можно вывести светодиод наружу, рассчитать, например, на 1Гц мигалку. Если реально мигает не так, как по расчёту - явно где-то косяк.

Re: В тыщапицотый раз про DS18B20.

Ср фев 15, 2012 11:07:30

Это первый такой проект )) В будущем конечно же учту ))

Re: В тыщапицотый раз про DS18B20.

Ср фев 22, 2012 01:42:30

Shapa писал(а):Если я окажусь не прав, то я обязательно изучу ваш код, чтобы понять как вы объеденили опрос датчика и прерывания и буду использовать в своих конструкциях. Вы же не против?

Очень просто объединить прерывание и опрос датчика, я тут на AVR на асме замутил первую свою работу, все пошло аки по маслу, все в прерывании обрабатывается с частотой 10000hz. Во время опроса датчика, каждое прерывание использует гдето 20% времени на обработку обмена, так что на остальные нужды остается 80% времени до старта следующего прерывания (tiny13a частота 9,6 mhz)

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 13:16:06

Кстати, кто мне объяснит такой феномен! Лежат на столе штук 10, DS1820, пинцетом быстренько беру и по очереди их вставляю в разьем измеряющего приборчика, в первый момент все как один показывают 25 градусов, но секунд через 10 постепенно уходят до 27. Что это может быть, вродебы от пинцета не должны нагреваться (держу всего пару секунд, да и пинцет такойже температуры должен быть как и все вокруг) опрос происходит раз в секунду. Как я понял как только питание начинает поступать на датчик, он постепенно начинает на 2 градуса больше показывать, может питание надо убирать в промежутках между опросами?
?????

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 13:23:17

график температуры при поочередном включении разных датчиков.
Вложения
датчики-уходят.gif
(13.66 KiB) Скачиваний: 1302

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 13:29:13

Кстати. Первое мое творение на AVR!
Вложения
termotiny.jpg
(55.64 KiB) Скачиваний: 1096

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 14:13:34

Чето я в ступоре.
Если втыкаю датчики в разъем (хоть зажимаю контакты, хоть нет), то они сек ч-з 10 постепенно повышают температуру на пару град (проверил на всех 10шт.).
Если они лежат в рядок на столе и я к ножкам прижимаю проводки от платки, то все нормально (сейчас все 10шт стабильно показывают 24,5).
?????

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 15:48:00

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

Re: Всё по DS18(B/S)20.

Ср фев 22, 2012 19:34:54

разве может у термодатчиков быть саморазогрев? в таком случае они всегда врать будут, помоему такого не может быть, тут причина в чемто другом, не соображу пока.

Re: Всё по DS18(B/S)20.

Чт фев 23, 2012 10:12:46

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

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

Re: Всё по DS18(B/S)20.

Вт фев 28, 2012 05:33:37

Недавно собрал градусник на ds18b20. Что бы кому то не пришлось искать, выкладываю схему и код. Набросал "для себя" так что если кто воспользуется...то "как есть". За базовый проект был взят проект термометра с этого же сайта. Потом он был упрощен...схема в статье была на ОК, я сделал индикацию на ОА и избавился от транзисторов. Плюс схема позволяет развести себя в один слой. Обратите внимание, печатная плата предполагает крепление индикатора с то же стороны что и дороги, что экономит место, но паять неудобно. Еще одно. Подтяжка ds18b20 к питанию нужна на 1кОм, а не на 4.7...я просто не стал исправлять в схеме. Иначе работает не всегда, просто не успевает подняться линия. И еще. Питание и программатор одновременно подключать не надо. Либо одно, либо другое...никаких защит и перемычек не предусмотрено.

Производство схемы было отдельным моментом. ЛУТ с бумагой (самой разной) не прокатил. То ли утюг не греет достаточно сильно, то ли принтер или тонер, или куча видов бумаги не подошли, не знаю. И тут я выкопал под авторством некоего alex_avr2 (если память не изменяет) статейку о технологии ЛУТ+фольга. Суть вопроса:
1. Обматываем фольгой лист формата А4, просто по краям загибаем. Лучше из толстой бумаги типа "ламонд" или даже пленки, тонкая бумага садится и это ох как заметно по складкам на фольге (но я использовал обычную бумагу-снегурочку и все супер! Правда не знаю, может быть из за усадки МК плохо лез в дырки...но я еще и просверлил их кривовато). Фольга обычная, кухонная, стоит рулон несколько десятков рублей...я просто с кухни взял валявшуюся. Лист бумаги можно будет много раз использовать, так что можно и купить один "ламонд".
2. Когда обмотали, печатаем прямо на фольге дороги. Получается отличный рисунок. Потом вырезаем это дело, кладем на текстолит, сверху я положил лист А4 обычной бумаги (что бы утюг не царапать о фольгу). Проглаживаем. Это дело немедленно прилипает к текстолиту накрепко. Потом берем ноготь и им разглаживаем складки на фольге (или еще чем, можно например стирательной резинкой...я и так делал). Это делается что бы фольга "обтянула" дорожки...раньше так карандашом через листочек тетрадки монетки обрисовывали, закрашивая...в результате получалось тисненное изображение монетки...вот такое же выпуклое изображение дорожек на фольге и надо получить, путем разглаживания. После разглаживания, тонер каждой дорожки окажется в своем "канале" из фольги и никуда не поплывет. Опять проглаживаем утюгом, уже долго и вдумчиво, так как тонер уже в "каналах" и никуда не денется, надо его приплавить к меди как следует.
Я не делал так, но думаю если плата двухсторонняя, то можно на этом этапе просверлить пару отверстий и с другой стороны совместить другой рисунок дорог для слоя. Площадки под отверстия можно заранее на трассировке заготовить для этого.
3. Засовываем это дело в травилку...хлорное железо у меня. Фольга растворяется очень быстро если платку покачивать...буквально минуты. Потом можно вытащить и проверить рисунок (медь еще не растворилась) и если что подретушировать...но оно не понадобится, тонер прилипает ВЕСЬ и железно, ничего не остается от фольги и отдирать ничего не надо!
4. Я не проверял рисунок, просто сразу протравил и все...так как рисунок переносится идеально и без проблем!
5. Сверлим дырки. Для того что бы проще было, я сделал 0.2мм пустоты в контактных площадках...как бы накернил для сверла, очень удобно. Само сверло сделал из моторчика и цанги от карандаша...обычный карандаш с стержнями, взял цангу (бывают медные, но я обошелся пластмассой) и надел на вал моторчика, приклеив суперклеем. Так же приклеил и сверло...так как все отверстия одного диаметра, но до этого много просверлил без приклеивания, то же работает. Внутрь цанги только надо кусок скрепки запихнуть что бы сверло не проваливалось. Так как цанга гибкая, то центрирование сверла можно осуществлять тонкой трубочкой от того же карандаша (наконечник для грифеля) или ногтями, просто придавив его. Без этого оно будет скакать и попасть куда то трудно.

Таким образом можно делать дороги 0.1 мм, причем спокойно и без кучи "попыток" и гемора. Все получается с первого раза и процедура элементарна...я сразу сделал свою первую в жизни плату с дорогами 0.3 мм (что бы с запасом). Получилось идеально, без единого косяка, как распечатал такие и дороги! Не требуется ни спец бумаг, ни супер принтеров с супер печками и тонером, ни ламинаторов, вообще никаких особых требований и "тренированых навыков", никакого "оборудования для фотолаборатории"! Результат выглядит как промышленная плата.

Думаю новичкам как и мне важно знать как сделать саму плату без особых напрягов, потому так подробно и написал :) А с термометра начинают многие.
Вложения
main.c
(7.45 KiB) Скачиваний: 906
termoind.ps
(128.17 KiB) Скачиваний: 706
termoind-x.pdf
(13.25 KiB) Скачиваний: 686
Последний раз редактировалось 3DRaven Вт фев 28, 2012 09:42:58, всего редактировалось 2 раз(а).
Ответить