Re: attiny13
Так-то да, там не столь важна точность, да и напряжение низкое - 1,2-3,5В.
Тут скорее вопрос корректности показаний - из-за наводок и маленького имеряемого может ерунду показывать. А если получится намотать 4-6В там уже будет интересно.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Разное → attiny13
Так-то да, там не столь важна точность, да и напряжение низкое - 1,2-3,5В.
Тут скорее вопрос корректности показаний - из-за наводок и маленького имеряемого может ерунду показывать. А если получится намотать 4-6В там уже будет интересно.
liman324 Заменил, плюсовые точь в точь, а минусовые на 0.1 меньше
![]()
Можно русифицировать текст.
1
.const char Message1[] PROGMEM = "TEMPERATURA";2.
const uint8_t OLED_FONT[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x06, 0x09, 0x09, 0x06, 0x00, // Значок градуса 8
0x00, 0x41, 0x22, 0x1c, 0x00, // ) 9
0x14, 0x08, 0x3E, 0x08, 0x14, // * 10
0x08, 0x08, 0x3E, 0x08, 0x08, // + 11
0x00, 0x00, 0xA0, 0x60, 0x00, // , 12
0x08, 0x08, 0x08, 0x08, 0x08, // - 13
0x00, 0x60, 0x60, 0x00, 0x00, // . 14
0x20, 0x10, 0x08, 0x04, 0x02, // / 15
0x3E, 0x41, 0x41, 0x41, 0x3E, // 0 16
0x00, 0x42, 0x7F, 0x40, 0x00, // 1 17
0x42, 0x61, 0x51, 0x49, 0x46, // 2 18
0x21, 0x41, 0x45, 0x4B, 0x31, // 3 19
0x18, 0x14, 0x12, 0x7F, 0x10, // 4 20
0x27, 0x45, 0x45, 0x45, 0x39, // 5 21
0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 22
0x01, 0x71, 0x09, 0x05, 0x03, // 7 23
0x36, 0x49, 0x49, 0x49, 0x36, // 8 24
0x06, 0x49, 0x49, 0x29, 0x1E, // 9 25
0x00, 0x36, 0x36, 0x00, 0x00, // : 26
0x00, 0x56, 0x36, 0x00, 0x00, // ; 27
0x08, 0x14, 0x22, 0x41, 0x00, // < 28
0x14, 0x14, 0x14, 0x14, 0x14, // = 29
0x00, 0x41, 0x22, 0x14, 0x08, // > 30
0x02, 0x01, 0x51, 0x09, 0x06, // ? 31
0x32, 0x49, 0x59, 0x51, 0x3E, // @ 32
0x7C, 0x12, 0x11, 0x12, 0x7C, // A 33
0x7F, 0x49, 0x49, 0x49, 0x36, // B 34
0x3E, 0x41, 0x41, 0x41, 0x22, // C 35
0x7F, 0x41, 0x41, 0x22, 0x1C, // D 36
0x7F, 0x49, 0x49, 0x49, 0x41, // E 37
0x7F, 0x09, 0x09, 0x09, 0x01, // F 38
0x3E, 0x41, 0x49, 0x49, 0x7A, // G 39
0x7F, 0x08, 0x08, 0x08, 0x7F, // H 40
0x00, 0x41, 0x7F, 0x41, 0x00, // I 41
0x20, 0x40, 0x41, 0x3F, 0x01, // J 42
0x7F, 0x08, 0x14, 0x22, 0x41, // K 43
0x7F, 0x40, 0x40, 0x40, 0x40, // L 44
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M 45
0x7F, 0x04, 0x08, 0x10, 0x7F, // N 46
0x3E, 0x41, 0x41, 0x41, 0x3E, // O 47
0x7F, 0x01, 0x01, 0x01, 0x7F, // П 48
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q 49
0x7F, 0x09, 0x09, 0x09, 0x06, // Р 50
0x46, 0x49, 0x49, 0x49, 0x31, // S 51
0x01, 0x01, 0x7F, 0x01, 0x01, // T 52
0x07, 0x48, 0x48, 0x48, 0x3F, // У 53
};3.
OLED_num(-8);//OLED_num(-9)nickolaus пишет:liman324 Заменил, плюсовые точь в точь, а минусовые на 0.1 меньше
![]()
Можно русифицировать текст.
1.const char Message1[] PROGMEM = "TEMPERATURA";
2.const uint8_t OLED_FONT[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x06, 0x09, 0x09, 0x06, 0x00, // Значок градуса 8
0x00, 0x41, 0x22, 0x1c, 0x00, // ) 9
0x14, 0x08, 0x3E, 0x08, 0x14, // * 10
0x08, 0x08, 0x3E, 0x08, 0x08, // + 11
0x00, 0x00, 0xA0, 0x60, 0x00, // , 12
0x08, 0x08, 0x08, 0x08, 0x08, // - 13
0x00, 0x60, 0x60, 0x00, 0x00, // . 14
0x20, 0x10, 0x08, 0x04, 0x02, // / 15
0x3E, 0x41, 0x41, 0x41, 0x3E, // 0 16
0x00, 0x42, 0x7F, 0x40, 0x00, // 1 17
0x42, 0x61, 0x51, 0x49, 0x46, // 2 18
0x21, 0x41, 0x45, 0x4B, 0x31, // 3 19
0x18, 0x14, 0x12, 0x7F, 0x10, // 4 20
0x27, 0x45, 0x45, 0x45, 0x39, // 5 21
0x3C, 0x4A, 0x49, 0x49, 0x30, // 6 22
0x01, 0x71, 0x09, 0x05, 0x03, // 7 23
0x36, 0x49, 0x49, 0x49, 0x36, // 8 24
0x06, 0x49, 0x49, 0x29, 0x1E, // 9 25
0x00, 0x36, 0x36, 0x00, 0x00, // : 26
0x00, 0x56, 0x36, 0x00, 0x00, // ; 27
0x08, 0x14, 0x22, 0x41, 0x00, // < 28
0x14, 0x14, 0x14, 0x14, 0x14, // = 29
0x00, 0x41, 0x22, 0x14, 0x08, // > 30
0x02, 0x01, 0x51, 0x09, 0x06, // ? 31
0x32, 0x49, 0x59, 0x51, 0x3E, // @ 32
0x7C, 0x12, 0x11, 0x12, 0x7C, // A 33
0x7F, 0x49, 0x49, 0x49, 0x36, // B 34
0x3E, 0x41, 0x41, 0x41, 0x22, // C 35
0x7F, 0x41, 0x41, 0x22, 0x1C, // D 36
0x7F, 0x49, 0x49, 0x49, 0x41, // E 37
0x7F, 0x09, 0x09, 0x09, 0x01, // F 38
0x3E, 0x41, 0x49, 0x49, 0x7A, // G 39
0x7F, 0x08, 0x08, 0x08, 0x7F, // H 40
0x00, 0x41, 0x7F, 0x41, 0x00, // I 41
0x20, 0x40, 0x41, 0x3F, 0x01, // J 42
0x7F, 0x08, 0x14, 0x22, 0x41, // K 43
0x7F, 0x40, 0x40, 0x40, 0x40, // L 44
0x7F, 0x02, 0x0C, 0x02, 0x7F, // M 45
0x7F, 0x04, 0x08, 0x10, 0x7F, // N 46
0x3E, 0x41, 0x41, 0x41, 0x3E, // O 47
0x7F, 0x01, 0x01, 0x01, 0x7F, // П 48
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q 49
0x7F, 0x09, 0x09, 0x09, 0x06, // Р 50
0x46, 0x49, 0x49, 0x49, 0x31, // S 51
0x01, 0x01, 0x7F, 0x01, 0x01, // T 52
0x07, 0x48, 0x48, 0x48, 0x3F, // У 53
};
3. OLED_num(-8);//OLED_num(-9)
а 3 пункт вместо какого?
Вместо OLED_num(-9). Это значок градуса, на любителя.
"
OLED_num(-2);
a0 = temp%10;
OLED_num(a0);
OLED_num(-9); // здесь поменять значение
OLED_num(19);
_delay_ms(10000);}
OLED_clear(); "
Добрый деньliman324 Попробовал Термометр на DS18B20 с большими цифрамиссылка http://rcl-radio.ru/?p=112955, но беда при минусе вот что показывает
, при положительной температуре все хорошо. Подскажите где и что подправить.
Добрый день liman324 в сообщении 130 я просил посоветовать как сделать чтобы показывал отрицательные температуры, я нашел у вас на форуме,работает, но не значущий ноль портит всю картину при меньше 10. Подскажите как убрать плиз
.
Опубликуйте код который Вы используете.
как вставить код? копирую-вставляю Ошибка-нельзя вставлять теги в самого себя

Используйте <>
#include <avr/io.h>
#include <util/delay.h>
// 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 &= ~(1<<I2C_SDA)
#define I2C_SDA_LOW() DDRB |= (1<<I2C_SDA)
#define I2C_SCL_HIGH() DDRB &= ~(1<<I2C_SCL)
#define I2C_SCL_LOW() DDRB |= (1<<I2C_SCL)
bool minus;
uint8_t buffer[8];
int main(void) {
PORTB |=(1 << BUTTON);
OLED_init();
OLED_clear();
while(1) {
if(((PINB >> BUTTON) & 1) == 0){
int temp = read_temp();
if(temp<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 &= ~((1<<I2C_SDA)|(1<<I2C_SCL)); PORTB &= ~((1<<I2C_SDA)|(1<<I2C_SCL));}
void I2C_write(uint8_t data) {
for(uint8_t i = 8; i; i--) {I2C_SDA_LOW();
if (data & 0x80) I2C_SDA_HIGH();I2C_SCL_HIGH();data<<=1;I2C_SCL_LOW();}
I2C_SDA_HIGH();I2C_SCL_HIGH();asm("nop");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 & 0x0F);
I2C_write(0x10 | (xpos >> 4));
I2C_write(0xB0 | (ypos & 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 < OLED_INIT_LEN; i++) I2C_write(pgm_read_byte(&OLED_INIT_CMD[i]));
I2C_stop();
}
uint8_t OLED_stretch(uint8_t b){b=((b & 2)<<3)|(b&1);b|=b<<1;b|=b<<2;return b;}
void OLED_printD(uint8_t ch) {
uint8_t i, j, k, b;
uint8_t sb[4];
ch += ch << 1;
for(i=8; i; i--) I2C_write(0x00);
for(i=3; i; i--) {
b = pgm_read_byte(&OLED_FONT[ch++]);
for(j=0; j<4; j++, b >>= 2) sb[j] = OLED_stretch(b);
j=4; if(i==2) j=6;
while(j--) {
for(k=0; k<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<8; i++) OLED_printD(buffer[i]);
I2C_stop();
}
//// DS18B20 //////////////////////////////////////
uint8_t therm_reset(){
uint8_t i;
PORTB &= ~(1 << TEMP);
DDRB |= (1 << TEMP);
_delay_us(480);
DDRB &= ~(1 << TEMP);
_delay_us(60);
i=((PINB >> TEMP) & 1);
_delay_us(420);
return i;
}
void therm_write_bit(uint8_t bit){
DDRB |= (1 << TEMP);
if(bit) DDRB &= ~(1 << TEMP);
_delay_us(60);
DDRB &= ~(1 << TEMP);
}
uint8_t therm_read_bit(void){
uint8_t bit=0;
DDRB |= (1 << TEMP);
DDRB &= ~(1 << TEMP);
_delay_us(14);
if(PINB & (1 << TEMP)) bit=1;
_delay_us(45);
return bit;
}
uint8_t therm_read_byte(void){
uint8_t i=8, n=0;
while(i--){n>>=1;n|=(therm_read_bit()<<7);}
return n;
}
void therm_write_byte(uint8_t byte){
uint8_t i=8;
while(i--){therm_write_bit(byte&1);byte >>= 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] << 8 | temperature[0])*10/16;
}byte a0 = temp/100;
if(a0<0){a0=19;}
уважаемый liman324 не получается

byte a0 = temp/100;
if(a0==0){a0=19;}
Во теперь ОК,СПАСИБО!!!!!!!
В интернете нашёл суточный таймер mini-tini.
"Устройство способно точно по заданному ранее времени один раз в сутки, включить и отключить электрическое устройство.
Настройка времени включения и отключения исполнительного устройства, происходит так:
В течении суток в нужное нам время включения, нужно однократно нажать Кн1. (если нужно чтобы в течении суток устройство включалось только на 1 минуту, больше ничего делать не нужно, ровно через сутки в это-же время таймер будет включен на 1 минуту...., но это если кому нужно 1 минута."
Сделал я чуть лучше. Время можно установить фиксированное в программе. 0.0 - 1минута. До значения 23.58. (23.59. таймер не отключится). L1 моргнёт при нажатии Кн1 и будет гореть постоянно.
Если необходимо по текущему времени установить отключения таймера, то надо кратковременно нажать Кн2. При этом будет мигающий светодиод L1 с частотой 1Гц.
Кнопки Кн1 и Кн2 взаимно блокируются.
#include <EEPROM.h>
#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&&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<3;i++){ // мигаем
ds_write(0x07,128); //OFF L1
delay(100);
ds_write(0x07,0); //ON L1
delay(100);}
}
if (digitalRead(0) == 0&&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<=t1&&min<=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 &= ~(1 << SDA);
delayMicroseconds(10);
DDRB &= ~(1 << SCL);
if((PINB >> SDA) & 1) i2c_bit=0;
delayMicroseconds(10);
DDRB |= (1 << SCL);
return i2c_bit;
}
byte i2c_write_byte(byte data){
for (byte i=0; i<8; i++){i2c_write_bit((data&0x80)==0);data<<=1;}
return i2c_read_bit();
}
byte i2c_read_byte(byte a){
byte i, data=0;
for(i=0; i<8; i++){if (!i2c_read_bit()) data++;if(i!=7) data<<=1;}
i2c_write_bit(a);return data;
}
void i2c_write_bit(byte b){
delayMicroseconds(5);
if(b){DDRB |= (1 << SDA);}else{DDRB &= ~(1 << SDA);}
delayMicroseconds(5);
DDRB &= ~(1 << SCL);
delayMicroseconds(10);
DDRB |= (1 << SCL);
}
void i2c_start(){
delayMicroseconds(10);
DDRB &= ~(1 << SDA); DDRB &= ~(1 << SCL);
delayMicroseconds(10);
DDRB |= (1 << SDA); PORTB &= ~(1 << SDA);
delayMicroseconds(10);
DDRB |= (1 << SCL); PORTB &= ~(1 << SCL);
delayMicroseconds(10);
}
void i2c_stop() {
DDRB |= (1 << SDA);
delayMicroseconds(10);
DDRB &= ~(1 << SCL);
delayMicroseconds(10);
DDRB &= ~(1 << 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<<4)+second%10);
ds_write(0x01,(minute/10<<4)+minute%10);
ds_write(0x02,(hours/10<<4)+hours%10);
}
void read_time(){
min = (ds_read(1) & 0x0F) + (((ds_read(1) & 0x70) >> 4) * 10);
hour = (ds_read(2) & 0x0F) + (((ds_read(2) & 0x70) >> 4) * 10);
} 
HT1611+DHT11.Часы с режимом показаний температуры и влажности. Батарейный вариант. Можно от литиевого аккумулятора запитать.
#include <util/delay.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#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<<DI)|(1<<SK)|(1<<HK)|(1<<DHT_);
PORTB |= (1<<DHT_);
PORTB &= ~(1<<SK)|(1<<HK);
ACSR ^= ~_BV(ACIE);//comparator off
ACSR |= ACD;
PRR |= (1<<PRADC);// ADC off
}
void writeDigit(byte d) {
for (int i=0;i<4;i++) {
PORTB |= (1<<SK);
if(d & (1 << (3-i))) PORTB |=(1<<DI);
else PORTB &=~(1<<DI);
_delay_us(5);
PORTB &= ~(1<<SK);
_delay_us(5);
}
_delay_us(10);
}
void loop()
{
dht_read(&_hum, &_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 &=~(1<<DHT_); //выключение питания dht11
PORTB &=~(1<<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<<HK); //режим часов
for (int i=0;i<8;i++) { //время отображения часов
WDDelay(8);
}
PORTB |= (1<<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<<WDIE | (n & 0x8)<<2 | (n & 0x7); // attiny10
WDTCR = 1<<WDTIE | (n & 0x8)<<2 | (n & 0x7);
sleep_enable();
sleep_cpu();
}
ISR(WDT_vect) {
//WDTCSR = 0<<WDIE; // attiny10
WDTCR = 0<<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<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<<DHT);
_delay_ms(20);
DDRB&=~(1<<DHT);
_delay_us(40);
if (PINB&(1<<DHT)) return 1;
_delay_us(80);
if (!(PINB&(1<<DHT))) return 2;
while(PINB&(1<<DHT));
return 0;
}
byte dht_byte(){
byte i=8, byte=0;
while(i--){
while(!(PINB&(1<<DHT)));
_delay_us(40);
if (PINB&(1<<DHT)) {
byte|=(1<<i);
while(PINB&(1<<DHT));
}
}
return byte;
}Режим часов
Режим отображения температуры и влажности
Упрощённая схема
Александр спасибо!
Скетч из сообщения 109 работает как надо.![]()
Это я пальцем наводки создаю.Жалко нет 1,3 двухцветных.
Пара вопросов - в какой строке можно изменить интервал измерения?
И я ж буду переменку мерять, как-то надо вычислять RMS? Если не сложно, можете учесть этот нюанс?
Вот что подумал. Напряжения очень маленькие будут: 0-5В. В случае с делителем и диодом, точность очень низкая будет. Конечно, в данном применении точность напряжения не так и важна но...
Может есть смысл внешний АЦП или что-то подобное использовать?
Вот, наткнулся http://easyelectronics.ru/zamer-set … eniya.html на модуль для Ардуино.з.ы. заказал ТТ. Соберу сварочник, отпишусь.
Здравствуйте
Что представляют собой эти столбики и сколько их там ?
Что представляют собой эти столбики и сколько их там ?
Столбики = ток в какой-то момент времени; высота = уровень, он динамический.
Сколько их - не считал но много, полагаю связано с шириной дисплея в точках (128/3 или 128/2).
forum.rcl-radio.ru → Разное → attiny13
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|
|