<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=663</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=663&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219».]]></description>
		<lastBuildDate>Sun, 13 Oct 2024 08:57:16 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10898#p10898</link>
			<description><![CDATA[<p>Привет. Я заметил разницу в настройках arduino ide ( у меня 2.3.3) для attiny13<br />У тебя указано EEPROM NO RETAINED , А в последней версии по умолчанию EEPROM RETAINED</p>]]></description>
			<author><![CDATA[null@example.com (rn3qkp)]]></author>
			<pubDate>Sun, 13 Oct 2024 08:57:16 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10898#p10898</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10638#p10638</link>
			<description><![CDATA[<p>таймер с звуковым оповещением</p><p>минуты фиксированы 1 3 5 7 10 12 15 20 30 45 60 90</p><div class="codebox"><pre><code>// MAX7219
#define DIN    PB0
#define CLK    PB1
#define CS     PB2 

#define BUTTON_1 PB4  // start/stop 
#define BUTTON_2 PB3  // set time

int ccc,set,min,sec;
bool start;

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {
   PORTB |=(1&lt;&lt;BUTTON_1)|(2&lt;&lt;BUTTON_2);
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов         
 
while(1) { 
  if(((PINB &gt;&gt; BUTTON_2) &amp; 1)==LOW){start=0;_delay_ms(200);set++;if(set&gt;11){set=0;}}

if(start==0){
  switch(set){
    case 0: ccc=300;break;
    case 1: ccc=900;break;
    case 2: ccc=1500;break;
    case 3: ccc=2100;break;
    case 4: ccc=3000;break;
    case 5: ccc=3600;break;
    case 6: ccc=4500;break;
    case 7: ccc=6000;break;
    case 8: ccc=9000;break;
    case 9: ccc=13500;break;
    case 10: ccc=18000;break;
    case 11: ccc=27000;break;
    }}
  
  if(((PINB &gt;&gt; BUTTON_1) &amp; 1)==LOW &amp;&amp; start==0){start=1;_delay_ms(100);}

  if(start==1){ccc--;if(ccc&lt;0){start=0;
  DDRB |=(1&lt;&lt;BUTTON_1);
  for(int n=0;n&lt;10;n++){PORTB|=(1&lt;&lt;BUTTON_1);_delay_ms(200);PORTB&amp;=~(1&lt;&lt;BUTTON_1);_delay_ms(200);}
  DDRB &amp;=~(1&lt;&lt;BUTTON_1);
  }}

  min = ccc/300;
  sec = (ccc*2-(min*600))/10;
  WriteBit16(1, min/10%10);
  WriteBit16(2, min%10 + 0xF0);
  WriteBit16(3, sec/10%10);
  WriteBit16(4, sec%10);
  _delay_ms(200);
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 16 Aug 2024 05:51:52 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10638#p10638</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10637#p10637</link>
			<description><![CDATA[<p>секундомер 0.0-999.9 сек</p><div class="codebox"><pre><code>// MAX7219
#define DIN    PB0
#define CLK    PB1
#define CS     PB2 

#define BUTTON PB4 

int ccc;
bool start;

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {
   PORTB |=(1&lt;&lt;BUTTON);
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов         
 
while(1) { 
  if(((PINB &gt;&gt; BUTTON) &amp; 1)==LOW &amp;&amp; start==0 &amp;&amp; ccc==0){start=1;_delay_ms(200);ccc=2;}
  if(((PINB &gt;&gt; BUTTON) &amp; 1)==LOW &amp;&amp; start==1){start=0;_delay_ms(200);}
  if(((PINB &gt;&gt; BUTTON) &amp; 1)==LOW &amp;&amp; start==0 &amp;&amp; ccc&gt;0){ccc=0;_delay_ms(200);}
  if(start==1){ccc++;}
  WriteBit16(1, ccc/1000%10);
  WriteBit16(2, ccc/100%10);
  WriteBit16(3, ccc/10%10 + 0xF0);
  WriteBit16(4, ccc%10);
  _delay_ms(100);
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 16 Aug 2024 03:34:40 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10637#p10637</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10633#p10633</link>
			<description><![CDATA[<p>attiny13+DHT11+ds18b20 - мини погодная станция </p><p>температура на улице<br />температура в помещении<br />влажность в помещении</p><div class="codebox"><pre><code>// MAX7219
#define DIN  PB0
#define CLK  PB1
#define CS   PB2  
#define TEMP PB4   
#define DHT  PB3 

bool minus;
byte data_dht[5];

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов         
 
while(1) { 
  int temp = read_temp();
  if(temp&lt;0){minus=1;temp=-temp;}else{minus=0;}
  if(minus==0){WriteBit16(1, 15);}else{WriteBit16(1, 10);}
  WriteBit16(2, temp/100%10);
  WriteBit16(3, temp/10%10+0xf0);
  WriteBit16(4, temp%10);
  _delay_ms(3000);
  
  
  dht_read(); 
  WriteBit16(1, 15);
  WriteBit16(2, 15);
  WriteBit16(3, data_dht[2]/10%10);
  WriteBit16(4, data_dht[2]%10);
  _delay_ms(3000);

  WriteBit16(1, 12);
  WriteBit16(2, 15);
  WriteBit16(3, data_dht[0]/10%10);
  WriteBit16(4, data_dht[0]%10);
  _delay_ms(3000);
  }

   
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  

//// 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;
}  

int dht_read(){
        byte i = 0,i1 = 0;  
        for(i = 0;i &lt; 5;i++){data_dht[i] = 0;}                  
        DDRB |=(1 &lt;&lt; DHT); 
        PORTB &amp;= ~(1 &lt;&lt; DHT); 
        _delay_ms(18); 
        PORTB |= (1 &lt;&lt; DHT);
        _delay_us(40); 
        DDRB &amp;= ~(1 &lt;&lt; DHT); 
        _delay_us(80); 
    while(PINB &amp; (1 &lt;&lt; DHT));
      for (i = 0; i &lt; 5; i++){
        data_dht[i]=0;
      for (i1=0; i1&lt;8; i1++){
    while(!(PINB &amp; (1 &lt;&lt; DHT)));  
        _delay_us(30);
      if (PINB &amp; (1 &lt;&lt; DHT)){data_dht[i] |= 1 &lt;&lt; (7-i1);}
    while(PINB &amp; (1 &lt;&lt; DHT));  
}}return 1;}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 15 Aug 2024 05:16:33 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10633#p10633</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10632#p10632</link>
			<description><![CDATA[<p>attiny13+ds3231+температура-простые часы</p><div class="codebox"><pre><code>// MAX7219
#define DIN  PB0
#define CLK  PB1
#define CS   PB2  

#define SDA  PB3
#define SCL  PB4
   

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int dp;

int main(void) {
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов 
  // set_time(24,3,8,15,9,55,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59        
 
while(1) { 
  byte sec =  (ds_read(0) &amp; 0x0F) + (((ds_read(0) &amp; 0x70) &gt;&gt; 4) * 10);
  byte min =  (ds_read(1) &amp; 0x0F) + (((ds_read(1) &amp; 0x70) &gt;&gt; 4) * 10);
  byte hour = ((ds_read(2) &amp; 0x0F) + ((ds_read(2) &amp; 0x70) &gt;&gt; 4) * 10);
  int temper = (ds_read(0x11)*100 + ((ds_read(0x12) &amp; 0b11000000) &gt;&gt; 6)*25)/10 ;

 if(sec&lt;50){
  WriteBit16(1, hour/10%10);
  if(dp==0){ WriteBit16(2, hour%10+0xf0);}else{WriteBit16(2, hour%10);}
  WriteBit16(3, min/10%10);
  WriteBit16(4, min%10);
 }
 else{
  WriteBit16(1, 15);
  WriteBit16(2, temper/100%10);
  WriteBit16(3, temper/10%10+0xf0);
  WriteBit16(4, temper%10);
  }
  
  _delay_ms(500);
  dp++;
  if(dp&gt;1){dp=0;}
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  

bool i2c_read_bit() {
    bool i2c_bit = 1;        
    DDRB &amp;= ~(1 &lt;&lt; SDA);            
    _delay_us(10); 
    DDRB &amp;= ~(1 &lt;&lt; SCL);                
    if((PINB &gt;&gt; SDA) &amp; 1) i2c_bit=0;                            
    _delay_us(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){
    _delay_us(5);
    if(b){DDRB |= (1 &lt;&lt; SDA);}else{DDRB &amp;= ~(1 &lt;&lt; SDA);}
    _delay_us(5);
    DDRB &amp;= ~(1 &lt;&lt; SCL);       
    _delay_us(10);
    DDRB |= (1 &lt;&lt; SCL);
}
 
void i2c_start(){
     _delay_us(10);  
     DDRB &amp;= ~(1 &lt;&lt; SDA); DDRB &amp;= ~(1 &lt;&lt; SCL); 
     _delay_us(10); 
     DDRB |= (1 &lt;&lt; SDA);  PORTB &amp;= ~(1 &lt;&lt; SDA);
     _delay_us(10); 
     DDRB |= (1 &lt;&lt; SCL);  PORTB &amp;= ~(1 &lt;&lt; SCL);   
     _delay_us(10);
}
 
void i2c_stop()  {
     DDRB |= (1 &lt;&lt; SDA);            
     _delay_us(10);
     DDRB &amp;= ~(1 &lt;&lt; SCL);               
     _delay_us(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 years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){ds_write(0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){ds_write(0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){ds_write(0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){ds_write(0x03,days);}
    if(datas &lt; 255){ds_write(0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){ds_write(0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255)ds_write(0x06,(years/10&lt;&lt;4)+years%10);
  }   </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 15 Aug 2024 04:17:09 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10632#p10632</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10631#p10631</link>
			<description><![CDATA[<p>attiny13+ds3231 - простые часы</p><div class="codebox"><pre><code>// MAX7219
#define DIN  PB0
#define CLK  PB1
#define CS   PB2  

#define SDA  PB3
#define SCL  PB4
   

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int dp;

int main(void) {
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов 
  // set_time(24,3,8,15,9,55,0);// год 00-99, ДН 1-7 (1=ВС), месяц 1-12, дата 1-31, час 0-23, минуты 0-59, секунды 0-59        
 
while(1) { 
  byte min =  (ds_read(1) &amp; 0x0F) + (((ds_read(1) &amp; 0x70) &gt;&gt; 4) * 10);
  byte hour = ((ds_read(2) &amp; 0x0F) + ((ds_read(2) &amp; 0x70) &gt;&gt; 4) * 10);

  WriteBit16(1, hour/10%10);
 if(dp==0){ WriteBit16(2, hour%10+0xf0);}else{WriteBit16(2, hour%10);}
  WriteBit16(3, min/10%10);
  WriteBit16(4, min%10);
  _delay_ms(500);
  dp++;
  if(dp&gt;1){dp=0;}
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  

bool i2c_read_bit() {
    bool i2c_bit = 1;        
    DDRB &amp;= ~(1 &lt;&lt; SDA);            
    _delay_us(10); 
    DDRB &amp;= ~(1 &lt;&lt; SCL);                
    if((PINB &gt;&gt; SDA) &amp; 1) i2c_bit=0;                            
    _delay_us(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){
    _delay_us(5);
    if(b){DDRB |= (1 &lt;&lt; SDA);}else{DDRB &amp;= ~(1 &lt;&lt; SDA);}
    _delay_us(5);
    DDRB &amp;= ~(1 &lt;&lt; SCL);       
    _delay_us(10);
    DDRB |= (1 &lt;&lt; SCL);
}
 
void i2c_start(){
     _delay_us(10);  
     DDRB &amp;= ~(1 &lt;&lt; SDA); DDRB &amp;= ~(1 &lt;&lt; SCL); 
     _delay_us(10); 
     DDRB |= (1 &lt;&lt; SDA);  PORTB &amp;= ~(1 &lt;&lt; SDA);
     _delay_us(10); 
     DDRB |= (1 &lt;&lt; SCL);  PORTB &amp;= ~(1 &lt;&lt; SCL);   
     _delay_us(10);
}
 
void i2c_stop()  {
     DDRB |= (1 &lt;&lt; SDA);            
     _delay_us(10);
     DDRB &amp;= ~(1 &lt;&lt; SCL);               
     _delay_us(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 years, byte days, byte monts, byte datas, byte hours ,byte minute, byte second){
    if(second &lt; 255){ds_write(0x00,(second/10&lt;&lt;4)+second%10);}
    if(minute &lt; 255){ds_write(0x01,(minute/10&lt;&lt;4)+minute%10);} 
    if(hours &lt; 255){ds_write(0x02,(hours/10&lt;&lt;4)+hours%10);}
    if(days &lt; 255){ds_write(0x03,days);}
    if(datas &lt; 255){ds_write(0x04,(datas/10&lt;&lt;4)+datas%10);}
    if(monts &lt; 255){ds_write(0x05,(monts/10&lt;&lt;4)+monts%10);}
    if(years &lt; 255)ds_write(0x06,(years/10&lt;&lt;4)+years%10);
  }   </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 15 Aug 2024 04:02:20 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10631#p10631</guid>
		</item>
		<item>
			<title><![CDATA[Re: attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10630#p10630</link>
			<description><![CDATA[<p>attiny13+ds18b20 термометр</p><div class="codebox"><pre><code>// MAX7219
#define DIN  PB0
#define CLK  PB1
#define CS   PB2  
#define TEMP PB4    

int ccc;
bool minus;

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов         
 
while(1) { 
  int temp = read_temp();
  if(temp&lt;0){minus=1;temp=-temp;}else{minus=0;}
  if(minus==0){WriteBit16(1, 15);}else{WriteBit16(1, 10);}
  WriteBit16(2, temp/100%10);
  WriteBit16(3, temp/10%10+0xf0);
  WriteBit16(4, temp%10);
  _delay_ms(3000);
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  

//// 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>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 15 Aug 2024 03:26:58 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10630#p10630</guid>
		</item>
		<item>
			<title><![CDATA[attiny13 + 7-и сегм. 4-х разр. инд. на MAX7219]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10629#p10629</link>
			<description><![CDATA[<p>Основная статья - <a href="http://rcl-radio.ru/?p=132443">http://rcl-radio.ru/?p=132443</a></p><p>тест</p><div class="codebox"><pre><code>// MAX7219
#define DIN PB0
#define CLK PB1
#define CS  PB2      

int ccc;

#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {
   DDRB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS); 
   PORTB |=(1&lt;&lt;DIN)|(1&lt;&lt;CLK)|(1&lt;&lt;CS);
   WriteBit16(0x0F, 0);// тест выкл.
   WriteBit16(0x0C, 1);// вкл. индик.
   WriteBit16(0x0A, 2);// яркость
   WriteBit16(0x09, 0xFF);// дешифраторы вкл.
   WriteBit16(0x0B, 3);// кол-во разрядов         
 
while(1) { 
  ccc++;
  WriteBit16(1, ccc/1000%10);
  WriteBit16(2, ccc/100%10 + 0xF0);// запятая
  WriteBit16(3, ccc/10%10);
  WriteBit16(4, ccc%10);
  _delay_ms(1000);
  }
}

void WriteBit16(byte reg, byte data){  
     PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CS);
     for(int i = 7; i &gt;= 0; i--){
        if(((reg &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     for(int i = 7; i &gt;= 0; i--){
        if(((data &gt;&gt; i) &amp; 1) == 1){PORTB |=(1&lt;&lt;DIN);}
         else{PORTB &amp;=~(1&lt;&lt;DIN);}
        PORTB |=(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;CLK);
        }
     PORTB |=(1&lt;&lt;CS);PORTB &amp;=~(1&lt;&lt;CLK);PORTB &amp;=~(1&lt;&lt;DIN);
  }  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 15 Aug 2024 02:42:20 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10629#p10629</guid>
		</item>
	</channel>
</rss>
