24 февраля 2022 года в 5 утра, без объявления войны, россия напала на Украину.

Они пришли "освобождать народ от нацистов и националистов".
С этого момента наша жизнь изменилась на "до" и "после".
Нас освобождают от наших домов, от наших любимых, от наших родителей и от наших детей....
Тут я не буду никого агитировать или переубеждать, разумный человек найдёт всю информацию
в интернете, а для зомби никакие доводы и факты не послужат аргументом.

Я не умею много писать, да и без мата тут сложно что-то написать.
Поэтому выражу все мои чувства одним фото.

«Спасибо дедушка путин за счастливое детство и мое освобождение». ©

Дополню словами уважаемого человека, широко известного в узких кругах:
тут путин не виноват, не он нажал на кнопку сброса,
- виноват пилот, который нажал на кнопку сброса, мог промахнуться. виноваты жена/мать/брат/друг пилота, которые не позвонили ему, и не сказали "нет войне",
- виноват тот, кто отдал приказ, и виноваты его жена/мать/брат/друг,
- виноват тот, кто цеплял бомбу, потому что он мог её обезвредить, "ну бывает, не сработала",
- виноват кладовщик, виноват водитель, который перевозил эту бомбу. виноваты жена...и т.д., потому что не позвонили и не сказали "нет войне, не вези бомбы",
- виноваты все журналисты оркостана, потому что они врут,
- виноваты недограждане, потому что не сказали журналистам "не врите",
- виноваты все... все 160 миллионов,
- а те 2, 3, 5 тысяч, которые вышли, и которых запаковали, это даже не десятая процента, это погрешность... случайно оказавшиеся в мордоре люди. ©

PS: За несколько часов до вторжения был атакован и взломан крупный интернет хостинг в Киеве, где и размещался мой сайт. Только 16 марта отважным админам удалось частично восстановить работу хостинга. Далеко не все сайты выжили, т.к. были повреждены даже бэкапы.
Нет, нет, я не жалуюсь, нет. В цифровом мире нет ничего ценного, материального...


Due to periodic DDoS attacks, the forum may not be available.

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

Здесь только проекты на ATtiny
Post Reply
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

В Интернете есть куча схем термометров на 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мА!!!.

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

Практика!!!

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

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

Чуть не забыл - фьюзы для нормальной работы термометра:
fuses.gif
fuses.gif (13.27 KiB) Viewed 89089 times
Покалькулировать эти самые фьюзы можно тут. А почитать про них - в описании на контроллер...

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

Итак, прошили, включили... Хм... работает!!! (а вот про эту красную штуку справа - читаем тут)
working1.jpg
Ну ещё вот в таком виде:
working2.jpg
Ответ на вопрос "что делают кнопочки ПЛЮС и МИНУС - читаем в статье ТЕРМОСТАТ". Это то, о чём говорилось в 5-м пункте "Чего хотелось".

Итак как видим получилось довольно простое (куда уж проще???) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика - "±0.5°C accuracy from –10°C to +85°C". Как показала практика точность гораздо выше - около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль...
Attachments
temp_led_oa.rar
Прошивка термометра для ОА
(1.17 KiB) Downloaded 4511 times
temp_led_oc.rar
Прошивка термометра для ОК
(1.17 KiB) Downloaded 3766 times
temp_firmware.rar
Исходник термометра
(5.46 KiB) Downloaded 5931 times
GOR
Пробегал мимо
Posts: 2
Joined: 05 Feb 2009 09:24

Термометр

Post by GOR »

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

С ув. GOR.
Attachments
пит.jpg
пит.jpg (14.33 KiB) Viewed 94424 times
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

Re: Термометр

Post by hardlock »

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

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

Если нет, я постараюсь подумать в этом направлении, но быстро не обещаю.
GOR
Пробегал мимо
Posts: 2
Joined: 05 Feb 2009 09:24

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

Post by GOR »

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

С ув. GOR
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

GOR wrote:А сайт очень хороший, просто супер!
Спасибо за отзыв.

Как появится время, то постараюсь доработать прошивку.
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Ввобщем сам удивляюсь,но все получилось.Поставил в термометр AT90s2313,скомпилировал прошивку и все заработало.Кстати если вместо кварца 8Мгц поставить 4Мгц,тоже работает только считывает температуру в два раза медленее.Спасибо Hardlockу и всем участникам форума.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

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

А прошивку компилировали в CodeVisionAVR, или просто прошили существующую?
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Вот это да.Откуда такая оперативнось?А я подумал сообщение не отправилось.Да прошивку компилировал CodeVisionAVR,первый раз,и товарища небыло в помощь.Существующую заливал экран был темным,хотя кварц резонировал.Потом скомпилировал Ваш проект,залил,все сегменты загорелись но при нагревании датчика видно было что-то меняется.Потом в проекте поменял ОА на ОК и ура заработало.При 4 Мгц мельтишит если смотреть косым взглядом.Рядом сегодня стояли на attiny2313 и at90s2313 разница 0,3 градуса.Не может микросхема не правильно считать?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

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

Скажите, а в проекте что-нибудь меняли, или просто скомпилировали и всё?
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

0,1 градус не существенно это когда термометры находятся в разных углах комнаты.А когда DS18b20 на расстоянии 0,5 мм єто уже существенно.Не принимайте єто всерьез.На атини 2313 я совал датчик в тающий снег показывал 0,0 или -0,0.Обломался я менять местами датчики и не уговаривайте-не буду.А в проекте я менял(как бы это поумнее обьяснить),Ну там где строка //anode #catode я черточки с дефисом поменял местами.Перед этим не поменял-все сегменты горели,наверное исходник для с ОА ,а у меня индикатор с ОК.Исправьте если что-то не так обьяснил,и правильно ли сделал?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

dovjik1 wrote:правильно ли сделал
Всё правильно сделали! Если больше ничего не меняли, то можно было прошивать прямо скомпилированные HEX файлы с сайта - там же есть и для ОА и для ОК.
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Добрый вечер.Нет,прошивку с сайта я пробывал-не работает с AT90S2313.Только генерация кварца есть.В CodeVisionAVR менял название микросхемы и частоту кварца.Сегодня опять пробывал-тоже самое.Спасибо за внимание.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

dovjik1 wrote:менял название микросхемы и частоту кварца
ВОТ! Самое главное - поменяли название микросхемы. Если не сложно - выложите сюда рабочие версии.
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Не проблема,только завтра могу.Все железо на работе а интернет дома.Не знаю,я вообще не спец в програмировании.Можно ли доверять этим прошивкам.Хотя у меня же работает.
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

dovjik1 wrote:Хотя у меня же работает.
А вы думаете у меня прошивки проходят проверку на 1000 устройств в разных условиях? Вот на Вас, уважаемые повторятели, и проверяю :secret: ...
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Хорошо.Только завтра.
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Прошивка для термометра на AT90s2313.Индикатор с общим катодом,кварц 8 Мгц.Хотя я поставил 4 Мгц-работает.Только немного притормаживает.
Attachments
term_at90s2313_oc.rar
Прошивка для AT90s2313
(1.24 KiB) Downloaded 2045 times
Valentin_N
Пробегал мимо
Posts: 3
Joined: 12 Feb 2009 23:44
Location: ЮФО

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

Post by Valentin_N »

Автору большое спасибо за интересные и позновательные темы :good:
У меня вопрос по Термометру
На страничке есть печатная плата, но очень бы хотелось что бы выложили печатку в формате *.lay
если не сложно :scratch:
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

Valentin_N wrote: хотелось что бы выложили печатку в формате *.lay
берите печатку от термостата. она подходит 100% и даже лучше!
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Добрый вечер.Вопрос такого плана.Просит знакомый сделать термометр в машину,только чтобы поместился под заглушку на панели.Заглушка маленькая.Выход нашел-трехразрядный индикатор на проводах.Сегодня суну для проверки в холодильник-минуса не показывает!Не знаю как выкрутиться.Минус наверное остался в четвертом разряде.Не удобно наверное будет пользоваться когда температура около нуля.Будеш думать +1или-1 градусов.А если (как по схеме ) коротнуть общие аноды первого и второго разряда?Будет плохо?
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

hardlock wrote:Будет плохо?
будет. выведите один светодиод из первого разряда (средний) и будет вам счастье.
dovjik1
Пробегал мимо
Posts: 18
Joined: 27 Jan 2009 23:20

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

Post by dovjik1 »

Да извините корочу не только общие аноды а и выходы микросхемы.Придется клеить плоский светодиод в начало индикатора.Спасибо за ответ.
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

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

Post by Telek »

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

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

Так было:

Code: Select all

  for(i=0; i<3; i++)
      {
         bDisplay[2-i] = T1 % 10;
         T1 /= 10;
      }
Понимая что деление очень "тяжелая" операция - придумал пару других вариантов:

Code: Select all

  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]++;
    }    
  }
и "индусский способ" (раскладываем цикл для увеличения количества строк, а соответственно увеличения зарплаты :) )

Code: Select all

  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МГц)
User avatar
hardlock
Администратор
Posts: 4010
Joined: 21 Jan 2009 14:48
Location: Minsk - zp.ua
Contact:

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

Post by hardlock »

Telek, прикольно! Я это писал на заре своего знакомства с контроллерами и о оптимизации совсем не задумывался. Если Вам не сложно - выложите тут исходники, пожалуйста. Может кому-то пригодяться... :oops:
Telek
Пробегал мимо
Posts: 24
Joined: 11 Feb 2009 20:06
Location: Москва

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

Post by Telek »

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

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