Обявления

Для полноценной работы рекомендуется пройти регистрацию.

Рекламные сообщения будут удаляться вместе с пользователем. Что есть реклама - буду решать я.

Термометр на ATtiny2313 и DS18B20

Здесь только проекты на ATtiny

Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 01 фев 2009 01:12

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

Чего хотелось:

  • минимальные размеры (в разумных пределах)
  • минимальная стоимость
  • простота конструкции
  • высокая повторяемость
  • ну и наконец универсальность (об этом чуть позже).

Что получилось:

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

Итак схема: (12.11.2009 привёл названия сегментов в соответствии с даташитом на индикатор.)


На схеме показан второй вариант включения термодатчика, если он не захотеть работать по однопроводной шине (что встречается очень редко). Обратите внимание, что подтягивающий резистор на 11 выводе должен быть 4,7кОм. Уменьшение или увеличение может привести к нестабильной работе датчика в случае включения по однопроводной схеме. Хотя в последнее время попадаются экземпляры датчиков, которые не хотят работать с таким подтягивающим резистором, приходится подбирать в диапазоне 1,8кОм - 6,2кОм (обычно около 4,0кОм).

Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 4 транзистора и 4 резистора, по сравнению с аналогичными схемами. Тут некоторые скажут: "так нельзя - большая нагрузка на порты!!!". Читаем datasheet на сей контроллер "DC Current per I/O Pin - 40.0 mA". У нас 8 сегментов в каждом символе, по 5 мА каждый - получается 40мА!!!.

Теперь посмотрим графики из того же описания:


Из графиков видно, что ток может достигать и 60 мА и даже 80 мА на пин. Ну не будем увлекаться - нам 5 мА на сегмент (40мА на символ) хватит с головой! Ограничительные резисторы подобраны для получения тока около 5 мА на сегмент. В моей схеме стоят 470 Ом. Я ркость сегментов при этом отличная!!! Так, чё-то я увлёкся теорией.

Практика!!!

Печатную плату рисовал исходя их соображений "как можно меньше, но как можно проще". Поэтому она получилась с несколькими перемычками...


На рисунке есть место под кварц - это для небольшой универсальности - у меня было несколько штук AT90S2313, у которых нет внутреннего генератора. КРЕНка применена в корпусе SOT-89. Защитные стабилитроны BZX79-C5V1 в корпусе DO-35. Конденсаторы в фильтре питания - 10mkF * 16V танталовые (других не нашлось), размера 3528 (SMD-B). Я их обычно не ставлю, а вместо них - 1mkF * 50V размера 1206.Глюков связанных с питанием не замечено.

Ну и далее фотки платы:


Далее запаиваем индикатор и программируем:


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

Чуть не забыл - фьюзы для нормальной работы термометра:


Покалькулировать эти самые фьюзы можно тут. А почитать про них - в описании на контроллер...

Заработало!!!

Итак, прошили, включили... Хм... работает!!! (а вот про эту красную штуку справа - читаем тут)


Ну ещё вот в таком виде:


Ответ на вопрос "что делают кнопочки ПЛЮС и МИНУС - читаем в статье ТЕРМОСТАТ". Это то, о чём говорилось в 5-м пункте "Чего хотелось".

Итак как видим получилось довольно простое (куда уж проще???) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика - "±0.5°C accuracy from –10°C to +85°C". Как показала практика точность гораздо выше - около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль...
Вложения
temp_led_oa.rar
Прошивка термометра для ОА
(1.17 КБ) Скачиваний: 3300
temp_led_oc.rar
Прошивка термометра для ОК
(1.17 КБ) Скачиваний: 2633
temp_firmware.rar
Исходник термометра
(5.46 КБ) Скачиваний: 4373
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Термометр

Сообщение GOR » 05 фев 2009 10:42

Уважаемый Hardlock, можно ли в термометр, добавить след. функцию- нажал на кнопочку термометр поработал секунд 5-10 и выключился (примерную схему я прицепил). И от батареек питать в таком случае можно.

С ув. GOR.
Вложения
GOR
Пробегал мимо
 
Сообщения: 2
Зарегистрирован: 05 фев 2009 10:24

Re: Термометр

Сообщение hardlock » 05 фев 2009 11:00

Тему переместил в соответствующий форум.

Я думаю можно. Если Вы немного понимаете в программировании, то скачайте проект и добавте управление на вывод PA0 или PA1 (это только для ATtiny2313).

Если нет, я постараюсь подумать в этом направлении, но быстро не обещаю.
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение GOR » 05 фев 2009 15:42

ничего в программировании не понимаю, потому и спросил ).
К сожалению, я пока что только схемоповторитель.
А сайт очень хороший, просто супер!

С ув. GOR
GOR
Пробегал мимо
 
Сообщения: 2
Зарегистрирован: 05 фев 2009 10:24

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 05 фев 2009 15:44

GOR писал(а):А сайт очень хороший, просто супер!

Спасибо за отзыв.

Как появится время, то постараюсь доработать прошивку.
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 08 фев 2009 23:20

Ввобщем сам удивляюсь,но все получилось.Поставил в термометр AT90s2313,скомпилировал прошивку и все заработало.Кстати если вместо кварца 8Мгц поставить 4Мгц,тоже работает только считывает температуру в два раза медленее.Спасибо Hardlockу и всем участникам форума.
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 08 фев 2009 23:22

dovjik1, при 4-х Мегагерцах не сильно мельтишит индикатор? Частота обновления в 2 раз ниже...

А прошивку компилировали в CodeVisionAVR, или просто прошили существующую?
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 08 фев 2009 23:41

Вот это да.Откуда такая оперативнось?А я подумал сообщение не отправилось.Да прошивку компилировал CodeVisionAVR,первый раз,и товарища небыло в помощь.Существующую заливал экран был темным,хотя кварц резонировал.Потом скомпилировал Ваш проект,залил,все сегменты загорелись но при нагревании датчика видно было что-то меняется.Потом в проекте поменял ОА на ОК и ура заработало.При 4 Мгц мельтишит если смотреть косым взглядом.Рядом сегодня стояли на attiny2313 и at90s2313 разница 0,3 градуса.Не может микросхема не правильно считать?
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 08 фев 2009 23:45

dovjik1, не - микросхема не может считать неправильно (почти). Могут врать немного термодатчики.
Скажу по секрету - в прошивке термометра отрицательные температуры показывает на 0,1 градуса больше (паример вместо -11,4 покажет -11,3). Там надо один бит добавлять. Но это не существенно.
В "термостате 0,1" - это устранил.

Скажите, а в проекте что-нибудь меняли, или просто скомпилировали и всё?
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 09 фев 2009 00:02

0,1 градус не существенно это когда термометры находятся в разных углах комнаты.А когда DS18b20 на расстоянии 0,5 мм єто уже существенно.Не принимайте єто всерьез.На атини 2313 я совал датчик в тающий снег показывал 0,0 или -0,0.Обломался я менять местами датчики и не уговаривайте-не буду.А в проекте я менял(как бы это поумнее обьяснить),Ну там где строка //anode #catode я черточки с дефисом поменял местами.Перед этим не поменял-все сегменты горели,наверное исходник для с ОА ,а у меня индикатор с ОК.Исправьте если что-то не так обьяснил,и правильно ли сделал?
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 09 фев 2009 10:33

dovjik1 писал(а):правильно ли сделал

Всё правильно сделали! Если больше ничего не меняли, то можно было прошивать прямо скомпилированные HEX файлы с сайта - там же есть и для ОА и для ОК.
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 11 фев 2009 21:58

Добрый вечер.Нет,прошивку с сайта я пробывал-не работает с AT90S2313.Только генерация кварца есть.В CodeVisionAVR менял название микросхемы и частоту кварца.Сегодня опять пробывал-тоже самое.Спасибо за внимание.
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 11 фев 2009 22:03

dovjik1 писал(а):менял название микросхемы и частоту кварца

ВОТ! Самое главное - поменяли название микросхемы. Если не сложно - выложите сюда рабочие версии.
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 11 фев 2009 22:16

Не проблема,только завтра могу.Все железо на работе а интернет дома.Не знаю,я вообще не спец в програмировании.Можно ли доверять этим прошивкам.Хотя у меня же работает.
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 11 фев 2009 22:18

dovjik1 писал(а):Хотя у меня же работает.

А вы думаете у меня прошивки проходят проверку на 1000 устройств в разных условиях? Вот на Вас, уважаемые повторятели, и проверяю :secret: ...
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 11 фев 2009 22:36

Хорошо.Только завтра.
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 12 фев 2009 22:53

Прошивка для термометра на AT90s2313.Индикатор с общим катодом,кварц 8 Мгц.Хотя я поставил 4 Мгц-работает.Только немного притормаживает.
Вложения
term_at90s2313_oc.rar
Прошивка для AT90s2313
(1.24 КБ) Скачиваний: 1415
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение Valentin_N » 13 фев 2009 00:55

Автору большое спасибо за интересные и позновательные темы :good:
У меня вопрос по Термометру
На страничке есть печатная плата, но очень бы хотелось что бы выложили печатку в формате *.lay
если не сложно :scratch:
Valentin_N
Пробегал мимо
 
Сообщения: 3
Зарегистрирован: 13 фев 2009 00:44
Откуда: ЮФО

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 13 фев 2009 13:15

Valentin_N писал(а): хотелось что бы выложили печатку в формате *.lay

берите печатку от термостата. она подходит 100% и даже лучше!
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 20 мар 2009 22:22

Добрый вечер.Вопрос такого плана.Просит знакомый сделать термометр в машину,только чтобы поместился под заглушку на панели.Заглушка маленькая.Выход нашел-трехразрядный индикатор на проводах.Сегодня суну для проверки в холодильник-минуса не показывает!Не знаю как выкрутиться.Минус наверное остался в четвертом разряде.Не удобно наверное будет пользоваться когда температура около нуля.Будеш думать +1или-1 градусов.А если (как по схеме ) коротнуть общие аноды первого и второго разряда?Будет плохо?
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 20 мар 2009 22:27

hardlock писал(а):Будет плохо?

будет. выведите один светодиод из первого разряда (средний) и будет вам счастье.
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение dovjik1 » 20 мар 2009 22:37

Да извините корочу не только общие аноды а и выходы микросхемы.Придется клеить плоский светодиод в начало индикатора.Спасибо за ответ.
dovjik1
Пробегал мимо
 
Сообщения: 18
Зарегистрирован: 28 янв 2009 00:20

Re: Термометр на ATtiny2313 и DS18B20

Сообщение Telek » 13 апр 2009 22:32

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

Преобразование температуры в числа для дисплея.

Так было:
Код: Выделить всё
  for(i=0; i<3; i++)
      {
         bDisplay[2-i] = T1 % 10;
         T1 /= 10;
      }


Понимая что деление очень "тяжелая" операция - придумал пару других вариантов:

Код: Выделить всё
  for (i=0;i<3;i++)
  {
     bDisplay[i]=0; 
     if (i==0) n=100;
     if (i==1) n=10;
     if (i==2) n=1;

     while(T1>=n)
    {
      T1-=n;   
      bDisplay[i]++;
    }   
  }

и "индусский способ" (раскладываем цикл для увеличения количества строк, а соответственно увеличения зарплаты :) )
Код: Выделить всё
  bDisplay[0]=0;
  while(T1>=100)
  {
  T1-=100;   
  bDisplay[0]++;
  }   

  bDisplay[1]=0;
  while(T1>=10)
  {
  T1-=10;   
  bDisplay[1]++;
  }   

  bDisplay[2]=0;
  while(T1>=1)
  {
  T1--;   
  bDisplay[2]++;
  }


И начал сравнивать.

По размеру:
Оказывается 1 вариант весит 166 байт, второй 66, третий 88

По скорости:
Преобразование числа 99: 1 вариант примерно 23030 тактов, второй 7827, третий 5588
Преобразование числа 9: 1 вариант примерно 23166 тактов, второй 5389, третий 1403
Т.е. получается, что если деление в проекте нужно только для преобразования выводимых чисел, то второй вариант экономит код, а третий время. Причем для сравнения - 23000 тактов - это примерно время обмена с одним датчиком DS18s20(т.е. примерно 3мс при 8МГц)
Telek
Пробегал мимо
 
Сообщения: 24
Зарегистрирован: 11 фев 2009 21:06
Откуда: Москва

Re: Термометр на ATtiny2313 и DS18B20

Сообщение hardlock » 14 апр 2009 08:16

Telek, прикольно! Я это писал на заре своего знакомства с контроллерами и о оптимизации совсем не задумывался. Если Вам не сложно - выложите тут исходники, пожалуйста. Может кому-то пригодяться... :oops:
Аватара пользователя
hardlock
Администратор
 
Сообщения: 3362
Зарегистрирован: 21 янв 2009 15:48
Откуда: zp.ua

Re: Термометр на ATtiny2313 и DS18B20

Сообщение Telek » 14 апр 2009 14:58

Вчера к сожалению в мои расчеты вкралась ошибка. Ошибка состояла в том, что я включил прерывание INT0, для включения термометра по кнопке(поработал - заснул, чтобы не сажать батарейки. По нажатию на кнопку проснулся, показал температуру и опять заснул.). В эмуляторе AVR Studio если прерывание по INT включено, то по умолчанию флаг прерывания выставляется постоянно, т.е. получается, что после выполнения каждой команды кода срабатывает прерывание... поэтому в количество тактов добавляются такты прерывания INT(по сути добавка равнялась количество команд кода помноженное на количество команд в прерывании)
Поэтому даю новые результаты по скорости:
Преобразование числа 99: 1 вариант примерно 1638 тактов, второй 611, третий 564
Преобразование числа 9: 1 вариант примерно 1646 тактов, второй 341, третий 123.
Результат уже не столь критичен по времени, хотя все равно быстрее чем деление.

Вот исходники и модель для Протеуса. http://odmax.ru/upload/Termometr.rar
Специфика: делалось с учетом 3х разрядного индикатора и термометра ds18s20(т.е. только целые значения температуры). Это практически твой код, за исключением экспериментального кода и несколько переделанного вывода во время обмена с термометром(У тебя после каждой посылки/приема байта к/от термометра и в основном цикле вызывалось "пересчет температуры"+"вывод", но так как пересчет достаточно "тяжел" и необходим только после получения нового значения температуры, то функция "пересчет температуры"+"вывод" разделена и пересчет выполняется только один раз(после получения данных), а все остальное время - только вывод ) + приделана кнопка "пробуждения" термометра для экономии батареек.
Telek
Пробегал мимо
 
Сообщения: 24
Зарегистрирован: 11 фев 2009 21:06
Откуда: Москва

След.

Вернуться в ATtiny



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8