0@0
0@0
179
0@-140
70
482
0@-216
root
input
output
globalVariable
2
95887a02-9001-4b2f-8f35-13c5f373e3dc
LibraryGroup-Байты, UART
0@0
4
10
430@590
450@590 corner: 530@730
430@590 corner: 550@730
471.5d@603.5d
H
8.0d
530@620
550@620
530@610 corner: 550@630
Min
19.0d
530@640
550@640
530@630 corner: 550@650
26
570@650
590@650 corner: 655.0d@670
570@650 corner: 675.0d@670
594@664.5d
570@660
655.0d@660
675.0d@660
1
dannie byte
57.0d
9.0d
590@660
550@660 corner: 550@660
Sec
20.0d
530@660
550@660
530@650 corner: 550@670
Mo
16.0d
530@680
550@680
530@670 corner: 550@690
Day
20.0d
530@700
550@700
530@690 corner: 550@710
1670@180
1690@180 corner: 1786.0d@360
1670@180 corner: 1806.0d@360
1670@210
znak1
1670@230
disp SR
text
a58bfc88-593b-442c-ad19-00ead6cec3db
вход текста для вывода на экран
66708cca-95ef-47d7-820f-f6d94d0de304
0cf4b379-8f5f-40a8-a2b7-c75cad68e2f3
lcd 1602 74hc164
тест подключения экрана 1602 через 74нс164
43
dat
вход дата
3b324f62-0e4b-4561-8db2-f08bff06ea24
4
049032aa-5feb-4a9f-a043-d9cb46b1e945
clk
вход клок
0efe4a09-a86e-4da2-a7dc-a3bbdd42660f
5
9bd5c1b2-bfc6-4534-b17d-0691d29997d7
Datain
znak
7c462cb8-78d3-4cb6-99ca-f959273a6109
положение курсора знак от 0 до 15
364f65cd-0ca6-4faa-ae5f-6e6d17257f9b
stroka
59a8d917-c2b6-42d7-8b17-1f127687a582
строка 0=первая . 1=вторая
dff95035-5656-4951-aa24-72a9b496f61f
506af7ef-e9dc-416c-b383-5949420fb728
5
lcd.begin(16,2);
lcd.setCursor(znak, stroka);
lcd.print(Datain);
64
#include
<Wire.h>
#include
<LiquidCrystal_SR.h>
lcd
(dat,clk,TWO_WIRE);
LiquidCrystal_SR
начало первой строки, знак от 0 до 19
8
1490@130
1510@130 corner: 1550@210
1490@130 corner: 1570@210
1515.0d@143.5d
25
1340@100
1360@100 corner: 1400@160
1340@100 corner: 1420@160
1365.0d@113.5d
1
N bloka=
1340@130
1360@130
1298.0d@134.0d
30
620@230
640@230 corner: 680@270
620@230 corner: 700@270
643.5d@243.5d
480@310
500@310 corner: 580@390
480@310 corner: 600@390
522.5d@323.5d
400@310
420@310 corner: 436.0d@330
400@310 corner: 456.0d@330
424@323.5d
456.0d@320
2
17484423
8.0d
7.0d
0.0d
442.0d@320
456.0d@320 corner: 456.0d@340
C+
480@340
500@340
480@330 corner: 500@350
6
390@370
410@370 corner: 426.0d@390
390@370 corner: 446.0d@390
414@383.5d
432.0d@370 corner: 446.0d@390
446.0d@380
3
3
27725101
8.0d
7.0d
0.0d
432.0d@380
446.0d@360 corner: 446.0d@380
C -
480@360
500@360
480@350 corner: 500@370
R
480@380
500@380
480@370 corner: 500@390
580@370 corner: 600@390
600@380
twoInputs
0
V
10.0d
580@380
29
910@350
930@350 corner: 1035.0d@490
910@350 corner: 1068.0d@490
935.0d@364.5d
12
810@370
830@370 corner: 875.0d@390
810@370 corner: 895.0d@390
834@384.5d
810@380
830@380
810@370 corner: 830@390
875.0d@370 corner: 895.0d@390
895.0d@380
reading
37.0d
9.0d
0.0d
875.0d@380
895.0d@380 corner: 895.0d@380
Reading
910@380
930@380
24C32_Запись
record
c4a8464a-7a72-4793-a52b-b4e0f9698ce0
b22d5422-f403-475c-a799-a2faa73cc762
firstbyte
681a4a8c-aa3d-407c-aa5e-81da6f3c52b2
c2a5bc0c-8faf-4c20-aa9e-ae77b5aa349d
PCF8574_out
adress
e1380d15-747b-4bfd-a458-65eaa6b5818a
Адрес устройства в десятичном формате
59759704-7e48-4ec1-a4b7-91ac5f72af5d
data
c2f661f0-657c-4692-8be8-bec0439cb228
9ff6970e-e820-4c26-8a2c-8aacb08b56c9
e4b15db8-6781-434e-b1bb-e80b1a8b8042
PCF8574_OUT
Wire.beginTransmission( adress ); // передача для устройства с адресом = adress
Wire.write( data ); // отправка байта data
Wire.endTransmission(); // передача данных
delay(500); // удалить или уменьшить, сделано для теста
249
Wire.begin();
15
#include
<Wire.h>
byte_in_1
byte_in_2
07590666-f10f-4f5b-9fb5-43191c8edcda
60997372-a994-422f-8c67-6669c48d4b87
int1
51886b53-bee7-4f31-ba4d-a8d84ecbff8d
0aa4860a-51cf-4d5a-839b-d0e10764387e
int2
3f38d478-79b7-44dd-b73e-6c1dac4264fe
4f3a4651-d7ec-4af6-8c1c-abcf7d2a254e
int3
77043a3c-0a2d-4396-8d2d-52d1d0386b9b
eee73eb1-5b58-413f-9a78-52b7c2d6841c
PCF8574
byte in
byte out
fc54e8c4-7781-4c72-86a7-929c4919d8e1
54869a33-dc5c-49e8-8d65-1bb2abd4cfc8
51a35c52-e17c-4d6e-8d44-8185a5a10417
PCF8574
byte out = read_write( adress, byte in);
Wire.beginTransmission( adress );
Wire.write( byte in );
Wire.endTransmission();
delay(1);
Wire.beginTransmission(adress);
Wire.write();
Wire.endTransmission();
Wire.requestFrom(adress, (uint8_t) 1);
return Wire.read();
250
byte
read_write
uint8_t
adress
uint8_t byte
in
byte_out
964ce2ea-1c2f-4d70-bc9d-71ecbc72aa13
24C32_Запись
Адрес для входа должен подаваться в виде байта(0-255), например: 3C= 3x16 + C = 48+12=60
Для работы в качестве ТОЛЬКО НА ВЫХОД(управляем нагрузками) сигнал byte_out не используется, на нём будет повтор входа. Физически работа выхода почти соответствует
схеме с открытым коллектором и по + питания токооганичивающий резистор(не более 100мкА). Снять логическую единицу с бОльшим током не получится.
Для работы ТОЛЬКО НА ВХОД(считываем входа) на вход необходимо подать byte 255. Поясню.
Сигналы принимаются только прижиманием к общему, поэтому необходимо перевести выводы в 1, внутренне подтянуть к +, ток очень мал - 100мкА: при помехах ДОПОЛНИТЕЛЬНО можно добавить внешние резисторы(20-4,7 кОм).
Для одновременной работы ВХОД/ВЫХОД необходимо так организовать подачу байта на вход, что-бы на выводах, подключенных для ввода присутствовали единицы.
Образно говоря, указанная микросхема принимает байт и распаковывает на биты, или считывая биты- упаковывает их в байт.
Данный блок представляет собой образец/шаблон работы с I2C.
1040
_adress
0x57
адрес микросхемы 24С32, вводить в виде 0x57, 0x56, 0x55
3a3e2005-ca6f-402a-9779-c3121d6edd20
d57893b6-fddf-4d72-8aa1-daa8e67f67db
byte_out = read_write( adress, byte_in);
Wire.beginTransmission((int) _adress);
Wire.write((int)( firstbyte >> 8));
Wire.write((int)( firstbyte & 0xFF));
Wire.write( byte_in_1 );
Wire.write( byte_in_2 );
Wire.write(* ((byte *)(& int1)));
Wire.write(* ((byte *)(& int1)+1));
Wire.write(* ((byte *)(& int2)));
Wire.write(* ((byte *)(& int2)+1));
Wire.write(* ((byte *)(& int3)));
Wire.write(* ((byte *)(& int3)+1));
Wire.endTransmission();
421
void
eeprom_i2c_write_block_8
unsigned int
firstbyte
37e4f055-e048-49ea-9b6e-71d16125d965
if ( record ) {
if (triger_01) { triger_1 = 0;}
else {triger_1 = 1; triger_01 = 1;}
}
else {triger_1 = 0; triger_01 = 0;};
if ( triger_1) {eeprom_i2c_write_block_8();}
174
#include
<Wire.h>
triger_1
= 0;
bool
triger_01
= 0;
bool
void
eeprom_i2c_write_block_8
При 1 происходит чтение.
910@370 corner: 930@390
910@390 corner: 930@410
sec
18.0d
1035.0d@380
1055.0d@380
24C32_Чтение
Firstbyte
byte_out_1
55b1ebcf-ade3-4c6b-805c-782e8d1c50e4
be7ef89e-c71c-4ca8-ad0e-e4d4ae1b18b2
byte_out_2
25fbb64f-7153-41dd-8e5e-5d0604675928
405bc6a0-482d-40da-ac7f-b1a640a230d0
int_out_1
5d69dea2-d27d-4c2c-afca-18bae25d6a30
35952e92-a16a-4804-90c9-2ad246f9326c
int_out_2
39a09941-8f0b-4d7d-9070-58c3cb61eaa0
182f056e-9a13-4215-af2e-8e4a574b3efd
int_out_3
b2520d52-914d-451d-a28c-9e891bc4ac61
a048e355-c9f8-49b1-bf08-ebb6bd30d909
502f02cd-cff0-45ff-b510-92eadf7de1ef
24C32_Чтение
if ( Reading )
{
Firstbyte *= 8;
eeprom_i2c_read_block_8( Firstbyte );
}
78
#include
<Wire.h>
Wire.beginTransmission((int) _adress);
Wire.write((int)( _firstbyte >> 8));
Wire.write((int)( _firstbyte & 0xFF));
Wire.write( byte_in_1 );
Wire.write( byte_in_2 );
Wire.write(* ((byte *)(& int1)));
Wire.write(* ((byte *)(& int1)+1));
Wire.write(* ((byte *)(& int2)));
Wire.write(* ((byte *)(& int2)+1));
Wire.write(* ((byte *)(& int3)));
Wire.write(* ((byte *)(& int3)+1));
Wire.endTransmission();
423
void
eeprom_i2c_read_block_8
unsigned int
_firstbyte
1035.0d@370 corner: 1055.0d@390
minute
34.0d
1035.0d@400
1055.0d@400
1035.0d@390 corner: 1055.0d@410
33
1300@390
1320@390 corner: 1360@430
1300@390 corner: 1380@430
1323.5d@403.5d
1300@410 corner: 1320@430
23
1530@360
1550@360 corner: 1590@460
1530@360 corner: 1610@460
1
read=
1530@390
1530@410
3
:
1530@430
4
1530@450
Datain4
1670@330
Lcd 2004 SR
вход текста для вывода на экран, первая строка
положение курсора первой строки, знак от 0 до 19
положение курсора верхней строки знак от 0 до 15
datain2
3dab2672-bf84-4d40-b19a-92183541021e
вход второй строки
995d8568-90b8-4e79-bf46-bc4699cbf523
znak2
f100b423-3346-45a4-a7f1-b50e54f24df8
положение курсора нижней строки от 0 до 15
363455f1-1649-4071-823b-92f4657c5696
cc7be027-0f42-4204-922b-399ce438a89c
lcd.begin(16,2);
lcd.setCursor(znak, 0);
lcd.print(Datain);
lcd.setCursor(znak2, 1);
lcd.print(datain2);
104
Datain2
вход текста для вывода на экран, вторая строка
положение курсора второй строки, знак от 0 до 19
Datain3
81a6229b-fd87-4156-b578-ffdd24b4697a
вход третья строка
e1eb6955-ffce-40f0-9f7c-4219f30262c1
znak3
7ac6a6e7-66ae-45f6-b2e2-f1f27c9e57e0
положение курсора третьей строки
37be95ee-bd6e-4f06-aa28-154b1275ed78
155c12a5-118e-4e8a-a69a-879674545840
вход четвертая строка
16d388f2-701c-462f-b261-781dc978321b
znak4
1922baf7-612b-48db-8865-064b5eefa785
положение курсора четвертой строки
a03bd090-60c0-41b8-a8a8-d07a7b286728
da7f9993-2ff5-48fe-b051-b7227924c40d
lcd 2004 74hc164
Тест подключения экрана 1602 через 74нс164
Требуестя установленная библиотека LiquidCrystal_SR.h
В параметрах пользователя указать цифровые выводы ардуино к которым подключены Clock и Data. По умолчанию Clock = 4, Data = 5.
Вход Datain - подать данные (или вставить константу) для отображения на первой (верхней) строке.
Вход znak - указание номера столбца, с которого начнется отображение данных для верхней строки. Если ничего не указывать, будет отображать с начала строки. Если вставить константу от 0 до 15, то соответственно выводимые данные будут начинаться с указанного знакоместа.
Datain2 и znak2 - все точно так же, только для второй (нижней строки).
662
вход Data
вход Clock
lcd.begin(20,4);
lcd.setCursor(znak, 0);
lcd.print(Datain);
lcd.setCursor(znak2, 1);
lcd.print(Datain2);
lcd.setCursor(znak3, 2);
lcd.print(Datain3);
lcd.setCursor(znak4, 3);
lcd.print(Datain4);
194
1610@330 corner: 1610@450
Q
1590@450
1610@450
2
1380@410 corner: 1380@420
Q
9.0d
1360@420
1380@420
1360@410 corner: 1380@430
1300@420
dec
I
1320@420
1055.0d@420 corner: 1055.0d@420
hour
23.0d
1035.0d@420
1055.0d@420
24C32_Чтение_4
Numblock
byte_out_1
byte_out_2
byte_out_3
c11eb454-dbe9-4699-a2b0-1bc1d6459498
9abc1622-0474-41fa-b6d0-6129cbc0463d
byte_out_4
7c9aef51-bf52-49c5-bb02-b0d4263d2662
94e73254-b361-4265-be78-879426ee1143
037e8096-a4c4-4b64-91d6-6423b3364682
24C32_Чтение_4
Тестовый блок считывания на 4 BYTE
На вход номера блока 0-1023
Автор: Sancho (omelchuk890)
90
if ( Reading )
{
Numblock *= 4; // размер блока в байтах
eeprom_i2c_read_block_4( Numblock );
}
109
byte* ptrint;
Wire.beginTransmission((int) _adress);
Wire.write((int)( _firstbyte >> 8));
Wire.write((int)( _firstbyte & 0xFF));
Wire.endTransmission();
Wire.requestFrom((int) _adress,8);
if (Wire.available()) byte_out_1 = Wire.read();
if (Wire.available()) byte_out_2 = Wire.read();
if (Wire.available()) byte_out_3 = Wire.read();
if (Wire.available()) byte_out_4 = Wire.read();
if (Wire.available()) *(ptrint+3) = Wire.read();
489
void
eeprom_i2c_read_block_4
unsigned int
_firstbyte
1035.0d@410 corner: 1055.0d@430
day
19.0d
1035.0d@440
1055.0d@440
1035.0d@430 corner: 1055.0d@450
mounth
37.0d
1035.0d@460
1055.0d@460
24C32_Read_Time
07eee375-d05d-4397-8c7e-91be0cfd9d6b
28458bb8-941b-492d-a2e8-79dbc38abdc4
rezerv
a7cedf6b-c226-4510-bf67-d19a1f24a9b4
261ee38e-4407-4748-b85d-3206a0c708be
2c623a4a-9d0e-474a-b4de-c4790f895675
24C32_Read_Time_4byte
if ( Reading )
{
Numblock *= 4; // размер блока в байтах
eeprom_i2c_read_block_4( Numblock );
sec = byte_out_1 >>2;
minute = byte_out_2 >>2;
hour = byte_out_3 >>2;
day = byte_out_4 >>2;
rezerv = ((byte_out_3 & 0x07) <<3) | ( byte_out_4 & 0x07);
}
270
#include
<Wire.h>
byte_out_1
;
byte
byte_out_2
;
byte
byte_out_3
;
byte
byte_out_4
;
byte
byte* ptrint;
Wire.beginTransmission((int) _adress);
Wire.write((int)( _firstbyte >> 8));
Wire.write((int)( _firstbyte & 0xFF));
Wire.endTransmission();
Wire.requestFrom((int) _adress,8);
if (Wire.available()) byte_out_1 = Wire.read();
if (Wire.available()) byte_out_2 = Wire.read();
if (Wire.available()) byte_out_3 = Wire.read();
if (Wire.available()) byte_out_4 = Wire.read();
440
1035.0d@450 corner: 1055.0d@470
30.0d
1035.0d@480
1055.0d@480
1035.0d@470 corner: 1055.0d@490
910@400
f766018e-37e2-4a30-9bdd-27a447db5a43
Тестовый блок считывания ВРЕМЕНИ в 4 BYTE
На вход номера блока 0-1023
Автор: Sancho (omelchuk890)
97
if ( Reading )
{
Numblock *= 4; // размер блока в байтах
eeprom_i2c_read_block_4( Numblock );
sec = byte_out_1 >>2;
minute = byte_out_2 >>2;
hour = byte_out_3 >>3;
day = byte_out_4 >>3;
mounth = ((byte_out_1 & 0x03) <<2) | ( byte_out_2 & 0x03);
rezerv = ((byte_out_3 & 0x07) <<3) | ( byte_out_4 & 0x07);
}
330
105.0d
930@400
910@530
930@530 corner: 1035.0d@710
910@530 corner: 1055.0d@710
935.0d@544.5d
19
800@550
820@550 corner: 873.0d@570
800@550 corner: 893.0d@570
824@564.5d
800@560
893.0d@560
recording
45.0d
9.0d
0.0d
873.0d@560
893.0d@560 corner: 893.0d@560
Record
910@560
930@560
При поступлении 1 в этом цикле происходит запись. Встроен R тригер. Что-бы не протереть дырку в памяти. :)
910@550 corner: 930@570
910@570 corner: 930@590
730@590
750@590 corner: 815.0d@610
730@590 corner: 835.0d@610
754@604.5d
730@600
835.0d@600
57.0d
9.0d
0.0d
815.0d@600
835.0d@600 corner: 835.0d@600
sec
910@600
930@600
максимальное число 63
910@590 corner: 930@610
minute
910@620
930@620
24C32_Запись_4byte
Numblock
Номер блока. Для 24С32 от 0 до 1023
byte_in_3
b288ab36-ac52-46be-b6bc-c2de5bdfe217
cd9b10d3-56b2-453b-a504-1f7fd2cf6966
byte_in_4
a8fd0cea-df6d-432a-8943-653856402fec
c7ea1750-162a-461e-8a9b-ca67abc3a4e4
cf95e30a-51fc-4035-85df-48e98626068c
24C32_Запись_4byte
Тестовый блок записи на 4 BYTE,блоком.
На вход номера блока 0-1023
Автор: Sancho (omelchuk890)
94
if ( Record ) {
if (triger_01) { triger_1 = 0;}
else {triger_1 = 1; triger_01 = 1;}
}
else {triger_1 = 0; triger_01 = 0;};
if ( triger_1)
{
Numblock *= 4; // размер блока в байтах
eeprom_i2c_write_block_4( Numblock );
delay (5); // если не будет немедленного обращения к чтению - можно удалить
}
310
Wire.beginTransmission((int) _adress);
Wire.write((int)( _firstbyte >> 8));
Wire.write((int)( _firstbyte & 0xFF));
Wire.write( byte_in_1 );
Wire.write( byte_in_2 );
Wire.write( byte_in_3 );
Wire.write( byte_in_4 );
Wire.endTransmission();
259
void
eeprom_i2c_write_block_4
unsigned int
_firstbyte
максимальное число 63
910@610 corner: 930@630
hour
910@640
930@640
902.0d@643.5d
максимальное число 31
910@630 corner: 930@650
day
910@660
930@660
максимальное число 31
910@650 corner: 930@670
mounth
910@680
930@680
24C32_Rec_TIME
3c3830a3-36fe-4f41-b277-d147a81c57f0
максимальное число 15
91938751-13cc-4358-8bea-73ffc20f549d
rezerv
65dff590-f6eb-4c67-99db-2df91740b205
максимальное число 63
1f8c1bf2-b27c-4a78-9de3-8a4c82fd09e7
e3857bc1-988d-46cb-ad2a-e24e39793ec7
24C32_Rec_TIME_4byte
if ( Record ) {
if (triger_01) { triger_1 = 0;}
else {triger_1 = 1; triger_01 = 1;}
}
else {triger_1 = 0; triger_01 = 0;};
if ( triger_1)
{
byte_1 = (sec <<2) | ( mounth >>2);
byte_2 = (minute <<2) | (mounth & 0x03);
byte_3 = ( day <<3) | (rezerv >>3) ;
byte_4 = ( hour <<3) | ( rezerv & 0x07);
Numblock *= 4; // размер блока в байтах
eeprom_i2c_write_block_4( Numblock );
delay (5); // если не будет немедленного обращения к чтению - можно удалить
}
471
#include
<Wire.h>
triger_1
= 0;
bool
triger_01
= 0;
bool
byte_1
;
byte
byte_2
;
byte
byte_3
;
byte
byte_4
;
byte
Wire.beginTransmission((int) _adress);
Wire.write((int)( _firstbyte >> 8));
Wire.write((int)( _firstbyte & 0xFF));
Wire.write(byte_1);
Wire.write(byte_2);
Wire.write(byte_3);
Wire.write(byte_4);
Wire.endTransmission();
235
910@670 corner: 930@690
910@700
930@700
910@690 corner: 930@710
910@580
24C32_Write_TIME
24460d5b-694f-4627-af57-1802bd90d519
24C32_Write_TIME_4byte
Тестовый блок записи ВРЕМЕНИ в 4 BYTE,блоком.
На вход номера блока 0-1023
резерв - максимум 63
Автор: Sancho (omelchuk890)
122
if ( Record ) {
if (triger_01) { triger_1 = 0;}
else {triger_1 = 1; triger_01 = 1;}
}
else {triger_1 = 0; triger_01 = 0;};
if ( triger_1)
{
byte_1 = (sec <<2) | ( mounth >>2);
byte_2 = (minute <<2) | (mounth & 0x03);
byte_3 = ( hour <<3) | (rezerv >>3) ;
byte_4 = ( day <<3) | ( rezerv & 0x07);
Numblock *= 4; // размер блока в байтах
eeprom_i2c_write_block_4( Numblock );
delay (5); // если не будет немедленного обращения к чтению - можно удалить
}
475
105.0d
930@580
600@260 corner: 600@580
620@260
640@260
620@250 corner: 640@270
680@250 corner: 700@270
700@260
9.0d
680@260
700@150 corner: 700@260
2
1340@150
1360@150
1420@150
9
9.0d
1400@150
1420@150 corner: 1420@160
1
1490@160
1510@160
1270@160
1290@160 corner: 1350@240
1270@160 corner: 1370@240
1304.0d@173.5d
0
1270@190
1290@190
1270@180 corner: 1290@200
1
READING
1270@210
1290@210
1216.0d@214.0d
1270@200 corner: 1290@220
13
1200@220
1220@220 corner: 1265.0d@240
1200@220 corner: 1285.0d@240
1224@234.5d
1200@230
1220@230
1200@220 corner: 1220@240
1265.0d@220 corner: 1285.0d@240
1285.0d@230
37.0d
9.0d
0.0d
1265.0d@230
1270@230 corner: 1270@230
S
1270@230
1290@230
1270@220 corner: 1290@240
1350@220 corner: 1370@240
1370@230
Q
9.0d
1350@230
1370@180 corner: 1370@230
2
1490@180
1510@180
20
1280@250
1300@250 corner: 1360@330
1280@250 corner: 1380@330
1314.0d@263.5d
1280@280
1300@280
REC
1280@300
1300@300
1251.0d@304.0d
21
1200@310
1220@310 corner: 1273.0d@330
1200@310 corner: 1293.0d@330
1224@324.5d
1200@320
1220@320
1200@310 corner: 1220@330
1273.0d@310 corner: 1293.0d@330
1293.0d@320
45.0d
9.0d
0.0d
1273.0d@320
1280@320 corner: 1280@320
1280@320
1300@320
1380@320
9.0d
1360@320
1380@200 corner: 1380@320
3
1490@200
1510@200
1570@200
9.0d
1550@200
1570@200 corner: 1570@250
1670@250
1670@270
начало второй строки, знак от 0 до 19
22
1520@270
1540@270 corner: 1580@330
1520@270 corner: 1600@330
real=
1520@300
31
1350@340
1370@340 corner: 1410@380
1350@340 corner: 1430@380
1373.5d@353.5d
24
1200@360
1220@360 corner: 1285.0d@380
1200@360 corner: 1305.0d@380
1224@374.5d
1200@370
1305.0d@370
57.0d
9.0d
0.0d
1285.0d@370
1305.0d@370 corner: 1305.0d@370
1350@370
1370@370
1430@370
9.0d
1410@370
1430@320 corner: 1430@370
1520@320
1600@320
1580@320
1600@290 corner: 1600@320
1670@290
1670@310
начало третьей строки
1670@350
начало четвертой строки
Lcd 2004 SR auto
Datain1
d79000f1-d622-4afe-8bae-910be0afbe07
lcd 2004 74hc164 v3 auto
Тест подключения экрана 2004 через 74нс164
Требуестя установленная библиотека LiquidCrystal_SR.h
В параметрах пользователя указать цифровые выводы ардуино к которым подключены Clock и Data. По умолчанию Clock = 4, Data = 5.
Вход Datain1 - подать данные (или вставить константу) для отображения на первой строке.
Вход znak1 - указание номера столбца, с которого начнется отображение данных для первой строки. Если ничего не указывать, будет отображать с начала строки. Если вставить константу от 0 до 19, то соответственно выводимые данные будут начинаться с указанного знакоместа.
Datain2 и znak2 - все точно так же, только для второй.
и так далее до четвертой строки.
Реализовано автоматическое очищение экрана при изменении длины строки.
741
if (Nadosteret) {lcd.clear(); Nadosteret= 0;}
dlinasrokiTemp1 = ((String(Datain1))).length();
if (starayaDlinasroki1 > dlinasrokiTemp1) {Nadosteret = 1;}
starayaDlinasroki1 = dlinasrokiTemp1;
dlinasrokiTemp2 = ((String(Datain2))).length();
if (starayaDlinasroki2 > dlinasrokiTemp2) {Nadosteret = 1;}
starayaDlinasroki2 = dlinasrokiTemp2;
dlinasrokiTemp3 = ((String(Datain3))).length();
if (starayaDlinasroki3 > dlinasrokiTemp3) {Nadosteret = 1;}
starayaDlinasroki3 = dlinasrokiTemp3;
dlinasrokiTemp4 = ((String(Datain4))).length();
if (starayaDlinasroki4 > dlinasrokiTemp4) {Nadosteret = 1;}
starayaDlinasroki4 = dlinasrokiTemp4;
lcd.setCursor(znak1, 0);
lcd.print((String(Datain1)));
lcd.setCursor(znak2, 1);
lcd.print((String(Datain2)));
lcd.setCursor(znak3, 2);
lcd.print((String(Datain3)));
lcd.setCursor(znak4, 3);
lcd.print((String(Datain4)));
861
lcd.begin(20,4);
17
#include
<Wire.h>
#include
<LiquidCrystal_SR.h>
lcd
(dat,clk,TWO_WIRE);
LiquidCrystal_SR
Nadosteret
;
boolean
dlinasrokiTemp1
= 0;
int
starayaDlinasroki1
= 0;
int
dlinasrokiTemp2
= 0;
int
starayaDlinasroki2
= 0;
int
dlinasrokiTemp3
= 0;
int
starayaDlinasroki3
= 0;
int
dlinasrokiTemp4
= 0;
int
starayaDlinasroki4
= 0;
int
96.0d
560@210 corner: 560@720
552@716.5d corner: 565.0d@723.5d
1655.0d@206.5d corner: 1668.0d@213.5d
L2
StrD-T
31.0d
530@720
550@720
530@710 corner: 550@730
A
A
187412621
92630732
18
DS3231
d-M-y, H:i:s
14
200@430
220@430 corner: 237.0d@450
200@430 corner: 257.0d@450
224@443.5d
11
260@430
280@430 corner: 325.0d@450
260@430 corner: 345.0d@450
284@444.5d
260@440
325.0d@440
345.0d@440
37.0d
9.0d
280@440
257.0d@440 corner: 257.0d@440
0.0d
243.0d@440
257.0d@440
243.0d@430 corner: 257.0d@450
4
50004099
9.0d
7.0d
200@490
220@490 corner: 236.0d@510
200@490 corner: 256.0d@510
224@503.5d
270@490
290@490 corner: 343.0d@510
270@490 corner: 363.0d@510
294@504.5d
270@500
343.0d@500
363.0d@500
45.0d
9.0d
290@500
256.0d@500 corner: 256.0d@500
0.0d
242.0d@500
256.0d@500
242.0d@490 corner: 256.0d@510
5
75375175
8.0d
7.0d
16
470@130
490@130 corner: 617.0d@170
470@130 corner: 637.0d@170
495.0d@144.5d
28
270@100
290@100 corner: 350@140
270@100 corner: 370@140
308.5d@113.5d
220@130
240@130 corner: 256.0d@150
220@130 corner: 276.0d@150
244@143.5d
276.0d@140
6
41677856
8.0d
7.0d
0.0d
262.0d@140
270@130 corner: 270@140
EN
270@130
290@130
270@120 corner: 290@140
350@120 corner: 370@140
370@130
1000
Q
9.0d
350@130
27
490@210
510@210 corner: 546.0d@230
490@210 corner: 566.0d@230
514@223.5d
490@210 corner: 510@230
490@220
13led
19338424
28.0d
7.0d
510@220
36
410@410
430@410 corner: 490@490
410@410 corner: 510@490
444.0d@423.5d
0
xxxxx
410@440
430@440
382.0d@442.5d
410@430 corner: 430@450
1
erase
410@460
430@460
384.0d@462.5d
410@450 corner: 430@470
410@470 corner: 430@490
Q
9.0d
490@480
510@480
490@470 corner: 510@490
410@480
S
430@480
370@130 corner: 370@480
CLeaR
470@160
490@160
24C32_Запись
record
c4a8464a-7a72-4793-a52b-b4e0f9698ce0
b22d5422-f403-475c-a799-a2faa73cc762
firstbyte
681a4a8c-aa3d-407c-aa5e-81da6f3c52b2
c2a5bc0c-8faf-4c20-aa9e-ae77b5aa349d
PCF8574_out
adress
e1380d15-747b-4bfd-a458-65eaa6b5818a
Адрес устройства в десятичном формате
59759704-7e48-4ec1-a4b7-91ac5f72af5d
data
c2f661f0-657c-4692-8be8-bec0439cb228
9ff6970e-e820-4c26-8a2c-8aacb08b56c9
e4b15db8-6781-434e-b1bb-e80b1a8b8042
PCF8574_OUT
Wire.beginTransmission( adress ); // передача для устройства с адресом = adress
Wire.write( data ); // отправка байта data
Wire.endTransmission(); // передача данных
delay(500); // удалить или уменьшить, сделано для теста
Wire.begin();
#include
<Wire.h>
byte_in_1
byte_in_2
07590666-f10f-4f5b-9fb5-43191c8edcda
60997372-a994-422f-8c67-6669c48d4b87
int1
51886b53-bee7-4f31-ba4d-a8d84ecbff8d
0aa4860a-51cf-4d5a-839b-d0e10764387e
int2
3f38d478-79b7-44dd-b73e-6c1dac4264fe
4f3a4651-d7ec-4af6-8c1c-abcf7d2a254e
int3
77043a3c-0a2d-4396-8d2d-52d1d0386b9b
eee73eb1-5b58-413f-9a78-52b7c2d6841c
PCF8574
byte in
byte out
fc54e8c4-7781-4c72-86a7-929c4919d8e1
54869a33-dc5c-49e8-8d65-1bb2abd4cfc8
51a35c52-e17c-4d6e-8d44-8185a5a10417
PCF8574
byte out = read_write( adress, byte in);
Wire.beginTransmission( adress );
Wire.write( byte in );
Wire.endTransmission();
delay(1);
Wire.beginTransmission(adress);
Wire.write();
Wire.endTransmission();
Wire.requestFrom(adress, (uint8_t) 1);
return Wire.read();
byte
read_write
uint8_t
adress
uint8_t byte
in
byte_out
964ce2ea-1c2f-4d70-bc9d-71ecbc72aa13
24C32_Запись
Адрес для входа должен подаваться в виде байта(0-255), например: 3C= 3x16 + C = 48+12=60
Для работы в качестве ТОЛЬКО НА ВЫХОД(управляем нагрузками) сигнал byte_out не используется, на нём будет повтор входа. Физически работа выхода почти соответствует
схеме с открытым коллектором и по + питания токооганичивающий резистор(не более 100мкА). Снять логическую единицу с бОльшим током не получится.
Для работы ТОЛЬКО НА ВХОД(считываем входа) на вход необходимо подать byte 255. Поясню.
Сигналы принимаются только прижиманием к общему, поэтому необходимо перевести выводы в 1, внутренне подтянуть к +, ток очень мал - 100мкА: при помехах ДОПОЛНИТЕЛЬНО можно добавить внешние резисторы(20-4,7 кОм).
Для одновременной работы ВХОД/ВЫХОД необходимо так организовать подачу байта на вход, что-бы на выводах, подключенных для ввода присутствовали единицы.
Образно говоря, указанная микросхема принимает байт и распаковывает на биты, или считывая биты- упаковывает их в байт.
Данный блок представляет собой образец/шаблон работы с I2C.
_adress
0x57
адрес микросхемы 24С32, вводить в виде 0x57, 0x56, 0x55
3a3e2005-ca6f-402a-9779-c3121d6edd20
d57893b6-fddf-4d72-8aa1-daa8e67f67db
byte_out = read_write( adress, byte_in);
Wire.beginTransmission((int) _adress);
Wire.write((int)( firstbyte >> 8));
Wire.write((int)( firstbyte & 0xFF));
Wire.write( byte_in_1 );
Wire.write( byte_in_2 );
Wire.write(* ((byte *)(& int1)));
Wire.write(* ((byte *)(& int1)+1));
Wire.write(* ((byte *)(& int2)));
Wire.write(* ((byte *)(& int2)+1));
Wire.write(* ((byte *)(& int3)));
Wire.write(* ((byte *)(& int3)+1));
Wire.endTransmission();
void
eeprom_i2c_write_block_8
unsigned int
firstbyte
37e4f055-e048-49ea-9b6e-71d16125d965
if ( record ) {
if (triger_01) { triger_1 = 0;}
else {triger_1 = 1; triger_01 = 1;}
}
else {triger_1 = 0; triger_01 = 0;};
if ( triger_1) {eeprom_i2c_write_block_8();}
#include
<Wire.h>
triger_1
= 0;
bool
triger_01
= 0;
bool
void
eeprom_i2c_write_block_8
При поступлении 1 в этом цикле происходит стирание. Встроен R тригер. Что-бы не протереть дырку в памяти. :)
470@150 corner: 490@170
24C32_Стирание по 16
f01f8b92-8901-4723-bdca-745671212b2a
24C32_Стирание по 16
Тестовый блок стирания. Не тестировался.
Автор: Sancho (omelchuk890)
68
if ( CLeaR ) {
if (triger_015) { triger_15 = 0;}
else {triger_15 = 1; triger_015 = 1;}
}
else {triger_15 = 0; triger_015 = 0;};
if ( triger_15)
{
eeprom_i2c_cler();
delay (5); // если не будет немедленного обращения к чтению - можно удалить
}
#include
<Wire.h>
triger_15
= 0;
bool
triger_015
= 0;
bool
for ( int i = 0; i < 256; i++){
delay(3);
Wire.beginTransmission((int) _adress);
Wire.write((int)( (i * 16) >> 8));
Wire.write((int)( (i * 16) & 0xFF));
for (byte rr = 0; rr < 16; rr++){
Wire.write(0);}
Wire.endTransmission();
}
240
void
eeprom_i2c_cler
820@690
820@690 corner: 893.0d@710.0d
left
Максимум 63
67.0d
3@12.0d
9.0d
820
(0 to: 820)
erase
dannie integ
9600
arduinoIDE
124
1024
4096
57
Arduino Nano(ATmega328)
71046910