<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; Термометр на RGB, Attiny13 и DS18B20]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=572&amp;type=atom" />
	<updated>2024-03-19T07:39:17Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=572</id>
		<entry>
			<title type="html"><![CDATA[Re: Термометр на RGB, Attiny13 и DS18B20]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=9758#p9758" />
			<content type="html"><![CDATA[<p>Навскидку нашрайбал. Условия задания не очень точны. При включении горит белым. Потом до 35гр. мигает синим.После 39гр. мигает красный. В интервале температур горят синий - зеленый-красный. Датчик или кнопка подключается между Reset и Gnd. Режим энергосбережения не включен.Выключение через 5мин. Вариант не финальный.<br /></p><div class="codebox"><pre><code>#include &lt;avr/sleep.h&gt;
#include &lt;avr/power.h&gt;
const unsigned long Alarm = 300000; // alarm time - 5 minutes
unsigned long StartTime = 0;        // start time
const int OUT = 4; // DS18b20
const int RedPin = 0; // красный
const int GreenPin = 1;// зелёный
const int BluePin = 2; // синий
void setup () {
  ADCSRA &amp;= ~(1&lt;&lt;ADEN);// disable ADC
  pinMode(RedPin, OUTPUT);
  pinMode(GreenPin, OUTPUT);
  pinMode(BluePin, OUTPUT);
  pinMode(OUT, INPUT_PULLUP);
  for(byte i=0;i&lt;3;i++){digitalWrite(i,HIGH);}
  delay(2000); 
  for(byte i=0;i&lt;3;i++){digitalWrite(i,LOW);}
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}

void loop () {
  int t = read_temp();
  if (millis() - StartTime &lt; Alarm){
  if(t&lt;350){digitalWrite(2,HIGH);delay(1000);digitalWrite(2,LOW);delay(1000);}// Интервалы температур.
  if(t&gt;=350&amp;&amp;t&lt;365){digitalWrite(2,HIGH);digitalWrite(0,LOW);digitalWrite(3,LOW);}
  else { digitalWrite(2,LOW);}
  if(t&gt;=365&amp;&amp;t&lt;375){digitalWrite(1,HIGH);digitalWrite(2,LOW);digitalWrite(3,LOW);}
  else { digitalWrite(1,LOW);}
  if(t&gt;=375&amp;&amp;t&lt;=390){digitalWrite(0,HIGH);digitalWrite(1,LOW);digitalWrite(2,LOW);}
  if(t&gt;390){digitalWrite(0,HIGH);delay(1000);digitalWrite(0,LOW);delay(1000);}

  }
  
 // sleep_enable();
 // sleep_mode();
  // Continue after reset
}
// reset
uint8_t therm_reset(){
    uint8_t i;
    PORTB &amp;= ~(1 &lt;&lt; OUT);
    DDRB |= (1 &lt;&lt; OUT);
    delayMicroseconds(480);  
    DDRB &amp;= ~(1 &lt;&lt; OUT);
    delayMicroseconds(60);
    i=((PINB &gt;&gt; OUT) &amp; 1);
    delayMicroseconds(420);
    return i;
}
// write bit
void therm_write_bit(uint8_t bit){
    PORTB &amp;= ~(1 &lt;&lt; OUT);
    DDRB |= (1 &lt;&lt; OUT);
    delayMicroseconds(1);
    if(bit) DDRB &amp;= ~(1 &lt;&lt; OUT);
    delayMicroseconds(60);
    DDRB &amp;= ~(1 &lt;&lt; OUT);
}
// read bit
uint8_t therm_read_bit(void){
    uint8_t bit=0;
    PORTB &amp;= ~(1 &lt;&lt; OUT);
    DDRB |= (1 &lt;&lt; OUT);
    delayMicroseconds(1);
    DDRB &amp;= ~(1 &lt;&lt; OUT);
    delayMicroseconds(14);
    if(PINB &amp; (1 &lt;&lt; OUT)) bit=1;
    delayMicroseconds(45);
    return bit;
}
 
// read byte
uint8_t therm_read_byte(void){
    uint8_t i=8, n=0;
    while(i--){n&gt;&gt;=1;n|=(therm_read_bit()&lt;&lt;7);}
    return n;
}
 
// write byte
void therm_write_byte(uint8_t byte){
    uint8_t i=8;
    while(i--){therm_write_bit(byte&amp;1);byte &gt;&gt;= 1;
    }
}
// read temp
int read_temp(){
    uint8_t temperature[2];
    float temper;
    therm_reset();
    therm_write_byte(0xCC);
    therm_write_byte(0x44);
    while(!therm_read_bit());
    therm_reset();
    therm_write_byte(0xCC);
    therm_write_byte(0xBE);
    temperature[0]=therm_read_byte();
    temperature[1]=therm_read_byte();
    therm_reset();
    temper = (temperature[1] &lt;&lt; 8 | temperature[0])*10/16;
    return (int)temper;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[klause]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2004</uri>
			</author>
			<updated>2024-03-19T07:39:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=9758#p9758</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Термометр на RGB, Attiny13 и DS18B20]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=8110#p8110" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>Просто на rgb или на адресной ленте rgb?</p></blockquote></div><p>Просто RGB. Что б менял цвет от синего к красному в диапазоне =&lt;35 до &gt;=39.<br />Весь прикол мне видится в миниатюрности и наглядности.<br />А если наворотить, так вообще: например датчик положения, что б при встряхивании сбрасывался(светит белым).<br />И засыпал через пять минут после последнего изменения температуры.<br />Будить так же можно встряхиванием.<br />Уф! Чет нафантазировал я жестко <img src="http://forum.rcl-radio.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> <br />.. Но это наверное невозможно в Attiny13 впихнуть.</p>]]></content>
			<author>
				<name><![CDATA[Karl2233]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1733</uri>
			</author>
			<updated>2023-07-27T15:35:19Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=8110#p8110</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Термометр на RGB, Attiny13 и DS18B20]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=8107#p8107" />
			<content type="html"><![CDATA[<p>Просто на rgb или на адресной ленте rgb?</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2023-07-27T13:08:38Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=8107#p8107</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Термометр на RGB, Attiny13 и DS18B20]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=8105#p8105" />
			<content type="html"><![CDATA[<p>Как-то попался мне проект термометра на Attiny13, DS18B20 и светодиодах.<br />Думаю что прикольная штука могла б получится при такой логике:<br />От синего до красного, 35 -39. Термометр был бы мелкий и наглядный.<br />Конечно точность DS18B20 хромает, но&nbsp; читал&nbsp; даташит, ьам упоминается программное повышение точности до 0,1 градуса, что весьма неплохо.</p>]]></content>
			<author>
				<name><![CDATA[Karl2233]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1733</uri>
			</author>
			<updated>2023-07-27T12:07:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=8105#p8105</id>
		</entry>
</feed>
