<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; attiny13]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=294&amp;type=atom" />
	<updated>2025-10-19T23:06:17Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=294</id>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11956#p11956" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>galina пишет:</cite><blockquote><p> Что представляют собой&nbsp; эти столбики и сколько их там ?</p></blockquote></div><p>Столбики = ток в какой-то момент времени; высота = уровень, он динамический.<br />Сколько их - не считал но много, полагаю связано с шириной дисплея в точках (128/3 или 128/2).</p>]]></content>
			<author>
				<name><![CDATA[Karl2233]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1733</uri>
			</author>
			<updated>2025-10-19T23:06:17Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11956#p11956</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11780#p11780" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Karl2233 пишет:</cite><blockquote><p>Александр спасибо!<br />Скетч из сообщения 109 работает как надо. <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/40cdf1c2d9cfb76f4a6a81cb60d8cfa9.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/40cdf1c2d9cfb76f4a6a81cb60d8cfa9.jpg" /></span> <br />Это я пальцем наводки создаю. </p><p>Жалко нет 1,3 двухцветных.<br />Пара вопросов -&nbsp; в какой строке можно изменить интервал измерения? <br />И я ж буду переменку мерять, как-то надо вычислять RMS? Если не сложно, можете учесть этот нюанс? <br />Вот что подумал. Напряжения очень маленькие будут: 0-5В. В случае с делителем и диодом, точность очень низкая будет. Конечно, в данном применении точность напряжения не так и важна но... <br />Может есть смысл внешний АЦП или что-то подобное использовать? <br />Вот, наткнулся <a href="http://%20%20%20%20http://easyelectronics.ru/zamer-setevogo-napryazheniya.html">&nbsp; &nbsp; http://easyelectronics.ru/zamer-set … eniya.html</a> на модуль для Ардуино. </p><br /><p>з.ы. заказал ТТ. Соберу сварочник, отпишусь.</p></blockquote></div><p>Здравствуйте<br /> Что представляют собой&nbsp; эти столбики и сколько их там ?</p>]]></content>
			<author>
				<name><![CDATA[galina]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1049</uri>
			</author>
			<updated>2025-04-26T06:39:37Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11780#p11780</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11766#p11766" />
			<content type="html"><![CDATA[<p>HT1611+DHT11.Часы с режимом показаний температуры и влажности. Батарейный вариант. Можно от литиевого аккумулятора запитать.<br /></p><div class="codebox"><pre><code>#include &lt;util/delay.h&gt;
#include &lt;avr/sleep.h&gt;
#include &lt;avr/interrupt.h&gt;

#define DI  0
#define SK  1
#define HK  2
#define DHT_ 3 //vdd DHT11
#define DHT 4 
byte _hum, _temp; 

void setup() {
  sei();
 
 DDRB |=(1&lt;&lt;DI)|(1&lt;&lt;SK)|(1&lt;&lt;HK)|(1&lt;&lt;DHT_);
 PORTB |= (1&lt;&lt;DHT_);
 PORTB &amp;= ~(1&lt;&lt;SK)|(1&lt;&lt;HK);
 ACSR ^= ~_BV(ACIE);//comparator off
 ACSR |= ACD;           
 PRR |= (1&lt;&lt;PRADC);// ADC off  
  

}
void writeDigit(byte d) {
  for (int i=0;i&lt;4;i++) {
   PORTB |= (1&lt;&lt;SK);
   if(d &amp; (1 &lt;&lt; (3-i))) PORTB |=(1&lt;&lt;DI);
   else  PORTB &amp;=~(1&lt;&lt;DI);
    _delay_us(5);
    PORTB &amp;= ~(1&lt;&lt;SK); 
    _delay_us(5);
  } 
   _delay_us(10);
}


void loop() 
{ 
 dht_read(&amp;_hum, &amp;_temp);
 byte d0=_temp / 10%10;
 byte d1= _temp %10;if(d1==0)d1=10;
 byte d2=_hum / 10%10;
 byte d3=_hum %10;if(d3==0)d3=10;
   PORTB &amp;=~(1&lt;&lt;DHT_); //выключение питания dht11
   PORTB &amp;=~(1&lt;&lt;HK); //режим показания температуры
    _delay_ms(50);         
    writeDigit(0);
    writeDigit(0);
    writeDigit(d0);
    writeDigit(d1);
    writeDigit(0);
    writeDigit(0);
    writeDigit(d2);
    writeDigit(d3);
    writeDigit(0);
    writeDigit(0);
 
    WDDelay(8); // время отображения температуры
    PORTB |=(1&lt;&lt;HK); //режим часов
    for (int i=0;i&lt;8;i++) { //время отображения часов
    WDDelay(8);    
    } 
    PORTB |= (1&lt;&lt;DHT_); //включение питания dht11
    WDDelay(6);//1sec
}  
    

//////// Watchdog timer /////////

// Use Watchdog for time delay; n=0 is 16ms; n=6 is 1sec ; n=9 is 8secs, 
void WDDelay (int n) {
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 // WDTCSR = 1&lt;&lt;WDIE | (n &amp; 0x8)&lt;&lt;2 | (n &amp; 0x7); // attiny10
 WDTCR = 1&lt;&lt;WDTIE | (n &amp; 0x8)&lt;&lt;2 | (n &amp; 0x7);
  sleep_enable();
  sleep_cpu();
}

ISR(WDT_vect) {
  //WDTCSR = 0&lt;&lt;WDIE; // attiny10
  WDTCR = 0&lt;&lt;WDTIE; 
}
 //// общая функция опроса датчика dht11////
  byte dht_read(byte *hum, byte* temp) {
  byte data[5];
  byte error=dht_start();
  if (error) return error; 
 
  for (byte i=0; i&lt;5; i++)
  {
    data[i]=dht_byte();
  }
  
  if (data[0]+data[1]+data[2]+data[3]!=data[4]) return 3;  
  *hum=data[0];
  *temp=data[2]; 
  return 0;
}
 byte  dht_start(){
  DDRB|=(1&lt;&lt;DHT);
  _delay_ms(20);
  DDRB&amp;=~(1&lt;&lt;DHT);
  _delay_us(40);
  if (PINB&amp;(1&lt;&lt;DHT)) return 1; 
  _delay_us(80); 
  if (!(PINB&amp;(1&lt;&lt;DHT))) return 2; 
  while(PINB&amp;(1&lt;&lt;DHT));
  return 0;
}

byte dht_byte(){
  byte i=8, byte=0;
  while(i--){
    while(!(PINB&amp;(1&lt;&lt;DHT)));
    _delay_us(40);
    if (PINB&amp;(1&lt;&lt;DHT)) {
      byte|=(1&lt;&lt;i);
      while(PINB&amp;(1&lt;&lt;DHT));
    }
  }
  return byte;
}</code></pre></div><p>Режим часов<br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/04/fdab7c05cc373df60fe3b3907bc59d81.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/04/fdab7c05cc373df60fe3b3907bc59d81.jpg" /></span> <br />Режим отображения температуры и влажности<br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/04/2f52834095bc1f6fa6b10302c1ab0b83.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/04/2f52834095bc1f6fa6b10302c1ab0b83.jpg" /></span> <br />Упрощённая схема<br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/04/8a6e143c501dd99c1e581aa09e77257f.bmp" alt="http://forum.rcl-radio.ru/uploads/images/2025/04/8a6e143c501dd99c1e581aa09e77257f.bmp" /></span></p>]]></content>
			<author>
				<name><![CDATA[klause]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2004</uri>
			</author>
			<updated>2025-04-17T05:39:37Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11766#p11766</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11416#p11416" />
			<content type="html"><![CDATA[<p>В интернете нашёл суточный таймер mini-tini. <br />&quot;Устройство способно точно по заданному ранее времени один раз в сутки,&nbsp; включить и отключить электрическое устройство.<br />Настройка времени включения и отключения исполнительного устройства, происходит так:<br />В течении суток в нужное нам время включения, нужно однократно нажать Кн1. (если нужно чтобы в течении суток устройство включалось только на 1 минуту, больше ничего делать не нужно, ровно через сутки в это-же время таймер будет включен на 1 минуту...., но это если кому нужно 1 минута.&quot;</p><p>Сделал я чуть лучше. Время можно установить фиксированное в программе. 0.0 - 1минута. До значения 23.58. (23.59. таймер не отключится). L1 моргнёт при нажатии Кн1 и будет гореть постоянно.</p><p>Если необходимо по текущему времени установить отключения таймера, то&nbsp; надо кратковременно нажать Кн2. При этом будет мигающий светодиод L1 с частотой 1Гц.<br />Кнопки Кн1 и&nbsp; Кн2 взаимно блокируются.<br /></p><div class="codebox"><pre><code>#include &lt;EEPROM.h&gt;
#define SDA  PB4
#define SCL  PB3

unsigned char hour,min,ch;
byte flag,t1,t2;
int main(void) {
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, OUTPUT);
  ch = ds_read(0); // первый запуск ds1307
 if(ch==128)ds_write(0x00,0); 
  

while(1) {
    read_time(); // считываем текущее время 
     
    if (digitalRead(1) == 0&amp;&amp;flag==0) //start кнопка включения
        { 
        set_time(0,0,0);// обнуление начало счёта
       flag=1; 
       EEPROM.update(0,17); // установка часов отключения 0-23 
       EEPROM.update(1,59); // установка минут отключения 0-59 
       EEPROM.update(2,1); // обновление статуса кнопок
       for(byte i=0;i&lt;3;i++){ // мигаем 
       ds_write(0x07,128); //OFF L1
       delay(100); 
       ds_write(0x07,0);  //ON L1
       delay(100);}
        }
    if (digitalRead(0) == 0&amp;&amp;flag==1) // кнопка отключения
        {
         flag=0;      
        EEPROM.update(0,hour); //установка отключения по часам реального времени 0-23
        EEPROM.update(1,min); //установка отключения по минутам реального времени 0-59
        EEPROM.update(2,0);
         ds_write(0x07,0b00010000);  //flash L1             
        }  
 if(hour&lt;=t1&amp;&amp;min&lt;=t2) digitalWrite(2,HIGH); // включаем реле
 else digitalWrite(2,LOW);

     flag=EEPROM.read(2); //ячейка памяти статуса кнопок
     t1=EEPROM.read(0); //ячейка памяти часов отключения
     t2=EEPROM.read(1); //ячейка памяти минут отключения

 delay(100);
}}
bool i2c_read_bit() {
    bool i2c_bit = 1;        
    DDRB &amp;= ~(1 &lt;&lt; SDA);            
    delayMicroseconds(10); 
    DDRB &amp;= ~(1 &lt;&lt; SCL);                
    if((PINB &gt;&gt; SDA) &amp; 1) i2c_bit=0;                            
    delayMicroseconds(10);  
    DDRB |= (1 &lt;&lt; SCL);              
    return i2c_bit;  
}
 
byte i2c_write_byte(byte data){
    for (byte i=0; i&lt;8; i++){i2c_write_bit((data&amp;0x80)==0);data&lt;&lt;=1;}    
    return i2c_read_bit(); 
}
 
byte i2c_read_byte(byte a){
    byte i, data=0;                
    for(i=0; i&lt;8; i++){if (!i2c_read_bit()) data++;if(i!=7) data&lt;&lt;=1;}        
    i2c_write_bit(a);return data;  
}
 
void i2c_write_bit(byte b){
    delayMicroseconds(5);
    if(b){DDRB |= (1 &lt;&lt; SDA);}else{DDRB &amp;= ~(1 &lt;&lt; SDA);}
    delayMicroseconds(5);
    DDRB &amp;= ~(1 &lt;&lt; SCL);       
    delayMicroseconds(10);
    DDRB |= (1 &lt;&lt; SCL);
}
 
void i2c_start(){
     delayMicroseconds(10);  
     DDRB &amp;= ~(1 &lt;&lt; SDA); DDRB &amp;= ~(1 &lt;&lt; SCL); 
     delayMicroseconds(10); 
     DDRB |= (1 &lt;&lt; SDA);  PORTB &amp;= ~(1 &lt;&lt; SDA);
     delayMicroseconds(10); 
     DDRB |= (1 &lt;&lt; SCL);  PORTB &amp;= ~(1 &lt;&lt; SCL);   
     delayMicroseconds(10);
}
 
void i2c_stop()  {
     DDRB |= (1 &lt;&lt; SDA);            
     delayMicroseconds(10);
     DDRB &amp;= ~(1 &lt;&lt; SCL);               
     delayMicroseconds(10); 
     DDRB &amp;= ~(1 &lt;&lt; SDA);             
}
 
byte ds_read(byte reg){
     byte data = 0;
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_start(); 
     i2c_write_byte(0b11010001); 
     data = i2c_read_byte(0);
     i2c_stop();
     return data;
  }
 
void ds_write(byte reg, byte data){
     i2c_start();
     i2c_write_byte(0b11010000);
     i2c_write_byte(reg);
     i2c_write_byte(data);
     i2c_stop();
  }  
 
void set_time(byte hours ,byte minute, byte second){
    ds_write(0x00,(second/10&lt;&lt;4)+second%10);
    ds_write(0x01,(minute/10&lt;&lt;4)+minute%10);
    ds_write(0x02,(hours/10&lt;&lt;4)+hours%10);

  }
void read_time(){  
min =  (ds_read(1) &amp; 0x0F) + (((ds_read(1) &amp; 0x70) &gt;&gt; 4) * 10);
hour = (ds_read(2) &amp; 0x0F) + (((ds_read(2) &amp; 0x70) &gt;&gt; 4) * 10);
     
  } </code></pre></div><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/02/dafab7e0664cbdfa118175fa4a9449a8.gif" alt="http://forum.rcl-radio.ru/uploads/images/2025/02/dafab7e0664cbdfa118175fa4a9449a8.gif" /></span></p>]]></content>
			<author>
				<name><![CDATA[klause]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2004</uri>
			</author>
			<updated>2025-02-17T07:51:10Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11416#p11416</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11283#p11283" />
			<content type="html"><![CDATA[<p>Во теперь ОК,СПАСИБО!!!!!!!<span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/72436eac6e045067f1f9adae165686bb.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/72436eac6e045067f1f9adae165686bb.png" /></span></p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-17T12:15:12Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11283#p11283</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11282#p11282" />
			<content type="html"><![CDATA[<p>byte a0 = temp/100;<br />if(a0==0){a0=19;}</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2025-01-17T12:10:00Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11282#p11282</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11281#p11281" />
			<content type="html"><![CDATA[<p>уважаемый liman324 не получается <span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/de81ae3b28f5af517d2c65e947ae807e.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/de81ae3b28f5af517d2c65e947ae807e.png" /></span> <span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/6ec4f6044485c624d5dc555085646bb5.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/6ec4f6044485c624d5dc555085646bb5.png" /></span></p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-17T12:06:16Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11281#p11281</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11280#p11280" />
			<content type="html"><![CDATA[<p>byte a0 = temp/100;<br />if(a0&lt;0){a0=19;}</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2025-01-17T11:42:02Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11280#p11280</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11279#p11279" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;
 
// Project Files (Github):  https://github.com/wagiminator/ATtiny13-TinyOLEDdemo
// License: http://creativecommons.org/licenses/by-sa/3.0/
 
#define I2C_SDA         PB3                   
#define I2C_SCL         PB4                  
#define TEMP            PB0
#define BUTTON          PB2
 
#define I2C_SDA_HIGH()  DDRB &amp;= ~(1&lt;&lt;I2C_SDA) 
#define I2C_SDA_LOW()   DDRB |=  (1&lt;&lt;I2C_SDA) 
#define I2C_SCL_HIGH()  DDRB &amp;= ~(1&lt;&lt;I2C_SCL) 
#define I2C_SCL_LOW()   DDRB |=  (1&lt;&lt;I2C_SCL) 

bool minus;
uint8_t buffer[8];
 
int main(void) {
    PORTB |=(1 &lt;&lt; BUTTON);
    OLED_init();
    OLED_clear();                    
 
while(1) { 
    if(((PINB &gt;&gt; BUTTON) &amp; 1) == 0){   
    int temp = read_temp();
    if(temp&lt;0){minus=1;temp=-temp;}else{minus=0;}
    byte a0 = temp/100;
    byte a1 = temp/10%10;
    byte a2 = temp%10;
    if(minus==0){uint8_t buffer0[8] = {19, a0, a1, 16, a2, 19, 12, 19};OLED_printB(buffer0);}
     else{uint8_t buffer1[8] = {18, a0, a1, 16, a2, 19, 12, 19};OLED_printB(buffer1); }                                              
    _delay_ms(10000);}
    OLED_clear();                   
}}
 
///// I2C ///////////////////////////////////////////////////////
void I2C_init(void) {DDRB  &amp;= ~((1&lt;&lt;I2C_SDA)|(1&lt;&lt;I2C_SCL)); PORTB &amp;= ~((1&lt;&lt;I2C_SDA)|(1&lt;&lt;I2C_SCL));}
void I2C_write(uint8_t data) {
  for(uint8_t i = 8; i; i--) {I2C_SDA_LOW();                        
    if (data &amp; 0x80) I2C_SDA_HIGH();I2C_SCL_HIGH();data&lt;&lt;=1;I2C_SCL_LOW();}
  I2C_SDA_HIGH();I2C_SCL_HIGH();asm(&quot;nop&quot;);I2C_SCL_LOW();                         
}
void I2C_start(uint8_t addr) {I2C_SDA_LOW();I2C_SCL_LOW();I2C_write(addr);}
void I2C_stop(void) {I2C_SDA_LOW();I2C_SCL_HIGH();I2C_SDA_HIGH();}
 
///// OLED ///////////////////////////////////
#define OLED_ADDR       0x78                  
#define OLED_CMD_MODE   0x00                  
#define OLED_DAT_MODE   0x40                  
#define OLED_INIT_LEN   15 
 
// OLED init settings
const uint8_t OLED_INIT_CMD[] PROGMEM = {
  0xA8, 0x1F,       
  0x22, 0x00, 0x03, 
  0x20, 0x01,       
  0xDA, 0x02,       
  0x8D, 0x14,       
  0xAF,             
  0x00, 0x10, 0xB0, 
  0xA1, 0xC8        
};
 
// Simple reduced 3x8 font
const uint8_t OLED_FONT[] PROGMEM = {
  0x7F, 0x41, 0x7F, // 0  0
  0x00, 0x00, 0x7F, // 1  1
  0x79, 0x49, 0x4F, // 2  2
  0x41, 0x49, 0x7F, // 3  3
  0x0F, 0x08, 0x7E, // 4  4
  0x4F, 0x49, 0x79, // 5  5
  0x7F, 0x49, 0x79, // 6  6
  0x03, 0x01, 0x7F, // 7  7
  0x7F, 0x49, 0x7F, // 8  8
  0x4F, 0x49, 0x7F, // 9  9
  0x7F, 0x09, 0x7F, // A 10
  0x7F, 0x48, 0x78, // b 11
  0x7F, 0x41, 0x63, // C 12
  0x78, 0x48, 0x7F, // d 13
  0x7F, 0x49, 0x41, // E 14
  0x7F, 0x09, 0x01, // F 15
  0x00, 0x60, 0x00, // . 16
  0x00, 0x36, 0x00, // : 17
  0x08, 0x08, 0x08, // - 18
  0x00, 0x00, 0x00  //   19
};
 
void OLED_cursor(uint8_t xpos, uint8_t ypos) {
  I2C_start(OLED_ADDR);                   
  I2C_write(OLED_CMD_MODE);               
  I2C_write(xpos &amp; 0x0F);                 
  I2C_write(0x10 | (xpos &gt;&gt; 4));     
  I2C_write(0xB0 | (ypos &amp; 0x07));    
  I2C_stop();                           
}
 
void OLED_clear(void) {
  OLED_cursor(0, 0);                      
  I2C_start(OLED_ADDR);                   
  I2C_write(OLED_DAT_MODE);              
  for(uint16_t i=512; i; i--) I2C_write(0x00); 
  I2C_stop();  
}
 
void OLED_init(void) {
  I2C_init();                             
  I2C_start(OLED_ADDR);                   
  I2C_write(OLED_CMD_MODE);               
  for (uint8_t i = 0; i &lt; OLED_INIT_LEN; i++) I2C_write(pgm_read_byte(&amp;OLED_INIT_CMD[i])); 
  I2C_stop();                            
}
 
uint8_t OLED_stretch(uint8_t b){b=((b &amp; 2)&lt;&lt;3)|(b&amp;1);b|=b&lt;&lt;1;b|=b&lt;&lt;2;return b;}
 
void OLED_printD(uint8_t ch) {
  uint8_t i, j, k, b;                     
  uint8_t sb[4];                          
  ch += ch &lt;&lt; 1;                          
  for(i=8; i; i--) I2C_write(0x00);       
  for(i=3; i; i--) {                      
    b = pgm_read_byte(&amp;OLED_FONT[ch++]);  
    for(j=0; j&lt;4; j++, b &gt;&gt;= 2) sb[j] = OLED_stretch(b);  
    j=4; if(i==2) j=6;               
    while(j--) {                    
      for(k=0; k&lt;4; k++) I2C_write(sb[k]);
}}}
 
void OLED_printB(uint8_t *buffer) {
  I2C_start(OLED_ADDR);      
  I2C_write(OLED_DAT_MODE);              
  for(uint8_t i=0; i&lt;8; i++) OLED_printD(buffer[i]); 
  I2C_stop();                            
}
 
//// DS18B20 //////////////////////////////////////
uint8_t therm_reset(){
    uint8_t i;
    PORTB &amp;= ~(1 &lt;&lt; TEMP);
    DDRB |= (1 &lt;&lt; TEMP);
    _delay_us(480);  
    DDRB &amp;= ~(1 &lt;&lt; TEMP);
    _delay_us(60);
    i=((PINB &gt;&gt; TEMP) &amp; 1);
    _delay_us(420);
    return i;
}
void therm_write_bit(uint8_t bit){
    DDRB |= (1 &lt;&lt; TEMP);
    if(bit) DDRB &amp;= ~(1 &lt;&lt; TEMP);
    _delay_us(60);
    DDRB &amp;= ~(1 &lt;&lt; TEMP);
}
uint8_t therm_read_bit(void){
    uint8_t bit=0;
    DDRB |= (1 &lt;&lt; TEMP);
    DDRB &amp;= ~(1 &lt;&lt; TEMP);
    _delay_us(14);
    if(PINB &amp; (1 &lt;&lt; TEMP)) bit=1;
    _delay_us(45);
    return bit;
}
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;
}
void therm_write_byte(uint8_t byte){
    uint8_t i=8;
    while(i--){therm_write_bit(byte&amp;1);byte &gt;&gt;= 1;
    }}
int read_temp(){
    uint8_t temperature[2];
    int 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();
    return temper = (temperature[1] &lt;&lt; 8 | temperature[0])*10/16;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-17T11:39:26Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11279#p11279</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11277#p11277" />
			<content type="html"><![CDATA[<p>Используйте &lt;&gt;</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2025-01-16T23:54:33Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11277#p11277</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11276#p11276" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/648ce26f8f62285b69070975bfc4c740.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/648ce26f8f62285b69070975bfc4c740.png" /></span></p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-16T20:57:27Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11276#p11276</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11275#p11275" />
			<content type="html"><![CDATA[<p>как вставить код? копирую-вставляю Ошибка-нельзя вставлять теги в самого себя</p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-16T20:52:57Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11275#p11275</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11274#p11274" />
			<content type="html"><![CDATA[<p>Опубликуйте код который Вы используете.</p>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2025-01-16T17:39:21Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11274#p11274</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11273#p11273" />
			<content type="html"><![CDATA[<p>Добрый день liman324 в сообщении 130 я просил посоветовать как сделать чтобы показывал отрицательные температуры, я нашел у вас на форуме,работает, но не значущий ноль портит всю картину при меньше 10. Подскажите как убрать плиз<span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/03fcba4c070f6c8b724aa001a355d91b.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/03fcba4c070f6c8b724aa001a355d91b.png" /></span> <br />.</p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-16T17:24:56Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11273#p11273</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: attiny13]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=11262#p11262" />
			<content type="html"><![CDATA[<p>Добрый деньliman324 Попробовал Термометр на DS18B20 с большими цифрамиссылка <a href="http://rcl-radio.ru/?p=112955,">http://rcl-radio.ru/?p=112955,</a> но беда при минусе вот что показывает<span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/01/cb915427469dcb757625566cf4459bae.png" alt="http://forum.rcl-radio.ru/uploads/images/2025/01/cb915427469dcb757625566cf4459bae.png" /></span> , при положительной температуре все хорошо. Подскажите где и что подправить.</p>]]></content>
			<author>
				<name><![CDATA[nickolaus]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=1096</uri>
			</author>
			<updated>2025-01-09T10:38:49Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=11262#p11262</id>
		</entry>
</feed>
