рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕реЗрдВрд╕рд░ рд╡рд╣рд╛рдВ рдЕрд▓рдЧ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ I2C рдмрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛, рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ, рдЙрдореНрдореАрдж рдХреЗ рдЭрдВрдбреЗ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА рдЬреЗрдбреА рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд▓рдЯрдХрд╛ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣реАрдВ рд╕реЗ рдмрд╡рд╛рд╕реАрд░ рдХреА рд╢реБрд░реБрдЖрдд рд╣реБрдИред рдореБрдЭреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдЖрдИ рд╡рд╣ рд▓рдЧрд╛рддрд╛рд░ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП
BMP085 рджрдмрд╛рд╡
рд╕реЗрдВрд╕рд░ рдХреЛ рдЗрд╕рдХреЗ EEPROM рд╕реЗ 11 рдЕрдВрд╢рд╛рдВрдХрди рд╕реНрдерд┐рд░рд╛рдВрдХ
рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдореИрдВ рдирд┐рд░реНрдгрдп рдкрд░ рдХреИрд╕реЗ рдЖрдпрд╛ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдХреНрд░рдо рдиреАрдЪреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред
рдЗрдВрддрдЬрд╛рд░ рдХреЗ рдЭрдВрдбреЗ
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
get_AC1, get_AC2, ..., get_MD ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ I2C рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EEPROM рд╕реЗрдВрд╕рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░рдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛рд╢реАрдЯ рд╕реЗ рдкрд╛рд░реНрд╕рд▓ рдкреНрд░рд╛рд░реВрдк:
рдФрд░
get_AC1 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреЛрдб:
get_AC1int get_AC1(void) { union { unsigned int Word; unsigned char Byte[2]; } AC1;
рдФрд░ рдпрд╣рд╛рдБ рдЙрд╕рдХреА рддрд░рдВрдЧ рд╣реИ:
рдПрд╕реА 1 рдХреЗ рд▓рд┐рдП рд╕рдВрдШ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдЗрдЯ рдХреНрд░рдо рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рд╣реИред TWI рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрдбрд╝рд╛-рдПрдВрдбрд┐рдпрди рд╣реИ, AVR рдХреЗ рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛-рдПрдВрдбрд┐рдпрди рд╣реИред
Get_AC2 рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓
SLA + W рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж
0xAA рдХреЗ рдмрдЬрд╛рдп рдмрд╛рдЗрдЯ
0xAC (рдбреЗрдЯрд╛рд╢реАрдЯ рдкрд░ рджреЗрдЦреЗрдВ) рднреЗрдЬрдиреЗ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд╛рд░реНрдп рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ
get_Data рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд░рдЬрд┐рд╕реНрдЯрд░ рдкрддреЗ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛:
get_Data int get_Data(unsigned char Register_adress) { union { unsigned int Word; unsigned char Byte[2]; } Data;
рдФрд░ рдлрд┐рд░ рдмрд╕:
struct { short AC1; short AC2; short AC3; unsigned short AC4; unsigned short AC5; unsigned short AC6; short B1; short B2; short MB; short MC; short MD; } BMP085_EEPROM; ... static void get_EEPROM(void) { BMP085_EEPROM.AC1 = get_Data(0xAA); BMP085_EEPROM.AC2 = get_Data(0xAC); BMP085_EEPROM.AC3 = get_Data(0xAE); BMP085_EEPROM.AC4 = get_Data(0xB0); BMP085_EEPROM.AC5 = get_Data(0xB2); BMP085_EEPROM.AC6 = get_Data(0xB4); BMP085_EEPROM.B1 = get_Data(0xB6); BMP085_EEPROM.B2 = get_Data(0xB8); BMP085_EEPROM.MB = get_Data(0xBA); BMP085_EEPROM.MC = get_Data(0xBC); BMP085_EEPROM.MD = get_Data(0xBE); }
рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рдо
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдСрдкрд░реЗрд╢рди рдХреА рдЕрд╡рдзрд┐
100 kHz рдХреА рдмрд╕ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП
488 ╬╝s рд╣реИ , рдЬреЛ
8 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░
3094 рдкреНрд░реЛрд╕реЗрд╕рд░
рдЪрдХреНрд░ рд╣реИ ред рдЦреИрд░ рдпрд╣ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рджреЛрд╕реНрддреЛрдВред рдмреЗрд╢рдХ, рдЖрдк рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
400 рдХрд┐рд▓реЛрд╣рд░реНрдЯреНрдЬрд╝ рдХреЗ рд▓рд┐рдП, рдЕрд╡рдзрд┐
128 ╬╝s рдпрд╛
1024 рдЪрдХреНрд░ рд╣реИрдЭрдВрдбреЗ рдХреЗ рдЙрдардиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдПрдХ рдСрдкрд░реЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред рд╣рдЬрд╛рд░реЛрдВ рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкрд░реНрдпрд╛рдкреНрдд рддрд░реАрдХрд╛ рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рдо
рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
struct { unsigned char SLA;
рдФрд░ рдЕрдм рд╣рдорд╛рд░рд╛
get_AC1 рдлрд╝рдВрдХреНрд╢рди:
unsigned char Register_address; ... void get_AC1(void) { Register_address = 0xAA;
рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдпрджрд┐
nW = n ,
nR = 0 , рдлреНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рд╣реИ:
рдпрджрд┐
nW = 0 ,
nR = m :
рдФрд░ рдЕрдЧрд░
nW = n ,
nR = m :
рд╡реИрд╕реЗ, рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдорд╢реАрди рддрд░реНрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреЗрд╡рд╛рд▓рд╛ ISR(TWI_vect) { static const void * const twi_list[] PROGMEM = {&&TWI_00, &&TWI_08, &&TWI_10, &&TWI_18, &&TWI_20, &&TWI_28, &&TWI_30, &&TWI_38, &&TWI_40, &&TWI_48, &&TWI_50, &&TWI_58, &&TWI_60, &&TWI_68, &&TWI_70, &&TWI_78, &&TWI_80, &&TWI_88, &&TWI_90, &&TWI_98, &&TWI_A0, &&TWI_A8, &&TWI_B0, &&TWI_B8, &&TWI_C0, &&TWI_C8, &&TWI_F8}; goto *(pgm_read_word(&(twi_list[TWSR>>3]))); TWI_00:
рдЦреИрд░, рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рд░рдирдЯрд╛рдЗрдо
488 ╬╝s рд╕реЗ рдмрдврд╝рдХрд░
538 ╬╝s рд╣реЛ рдЧрдпрд╛ ред рдпрд╣ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдФрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдкрд░ рдЬрдВрдк рдПрдбреНрд░реЗрд╕ рдХреА рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЫреЛрдЯреЗ рдлрд╝рдВрдХреНрд╢рди
get_AC1 рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдХреЗрд╡рд▓
3.5 ╬╝s рдпрд╛
28 рдШрдбрд╝реА рдЪрдХреНрд░ рддрдХ рд░рд╣рддрд╛
рд╣реИ , рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрдХреНрд░ рдореЗрдВ рдлрдВрд╕ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк
get_AC1 ,
get_AC2 , ...,
get_MD рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
рдХреЗрд╡рд▓ рдПрдХ рд╣реА
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛,
get_MD , рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐:
рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп SLA + W рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Register_address рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдФрд░
0-0BE рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг Register_address рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рдерд╛, рддреЛ рдпрд╣
get_AC5 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ
BMP085_EEPROM.MD рдореЗрдВ
рдмрд┐рд▓реНрдХреБрд▓ рд▓рд┐рдЦрд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо
AC1 рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо
AC5 рдХреЛ
MD рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд░
get_AC5 рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ SLA рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдПрдХ рд╣реЛрдЧрд╛, рддреЛ рд╣рдо рдПрдХ рдХрд╛ рдЖрдзрд╛ рдкрддрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдХрд╛ рджреВрд╕рд░рд╛ рдФрд░ NACK рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡реНрдпрд╡рдзрд╛рди рд╣реИрдВрдбрд▓рд░ рд╕реЗ рддрд░реНрдХ рдпрд╛ рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓реВрдк рдХрд░реЗрдВрдЧреЗ рдпрд╛ STOP рдлреЗрдВрдХ рджреЗрдВрдЧреЗред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рддрдм рддрдХ рди рдЪрд▓рд╛рдПрдВ рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдЫрд▓рд╛ рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред рдпрд╣реА рд╣реИ,
get_AC1 рдЪрд▓рд╛рдХрд░ рд╣рдо рдзреНрд╡рдЬ рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣реИрдВрдбрд▓рд░, STOP рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░ рджреЗрдЧрд╛ред рдФрд░
get_AC2 рддрдм рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЭрдВрдбрд╛ рд╕рд╛рдл рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рд╣рд╛рдВ, рдпрд╣ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 0% рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╣рддрд░ рдЭрдВрдбрд╛ рдорд╢реАрдиред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕реБрдВрджрд░ рдЙрдкрд╛рдп рд╣реИред
рдореНрдпреВрдЯреЗрдХреНрд╕ рдПрдирд╛рд▓реЙрдЧ
Get_AC1 , ...,
get_MD рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХрддрд╛рд░ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдХрд░ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
#define size 8 ... typedef struct { unsigned char SLA;
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм
get_AC1 рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛:
unsigned char buf[size]; ... void get_AC1(void) { volatile twi *pl;
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднреА, рдХреЗрд╡рд▓ рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдЯреЗрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо
рд╢реЗрдбреНрдпреВрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ
рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА
рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдореЗрдВ TWI рдлрд╝реНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ TWI [i] рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ 1 рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ; рдЕрдЧрд░ рдореИрдВ рд╕рд░рдгреА рдЖрдпрд╛рдо рд╕реЗ рдмрд╛рд╣рд░ рдЖрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕ рддрд░рд╣ рд╣рдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рдПрдХ рдкрд░рд┐рдкрддреНрд░ рдмрдлрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ;
- j рд╡реИрд░рд┐рдПрдмрд▓ рдЙрд╕ рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ 1 рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ; рдпрджрд┐ j рд╕рд░рдгреА рдХреЗ рдЖрдпрд╛рдо рдХреА рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рдпрд╣ рд░реАрд╕реЗрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ;
- рдЕрдЧрд░ рдореИрдВ j (рдХреНрдпреВ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣) рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рддрд╛ рд╣реВрдВ - рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ;
- рдзреНрд╡рдЬ рдЪрд░ рдХреЛ 0 рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЕрдЧрд░ рдореИрдВ j рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реВрдБ (рдХрддрд╛рд░ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ) рдФрд░ рдЭрдВрдбрд╛ = 0, рддреЛ рдЭрдВрдбрд╛ = 1, рд╕реНрдЯрд╛рд░реНрдЯ рдЕрд╡рд╕реНрдерд╛ рд╢реБрд░реВ рдХрд░реЗрдВ;
- рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо 1 рд╕реЗ j рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛;
- рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ j рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдореИрдВ j рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рд╣рдо STOP-START рдХреЛ рд╕реНрдерд┐рддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ STOP рдФрд░ рдзреНрд╡рдЬ = 0;
рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдКрдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯреА рдкреНрд░рд╕реНрддреБрддрд┐ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдЧрд╛:
рд╢реЗрдбреНрдпреВрд▓рд░ рд╢реЗрдбреНрдпреВрд▓рд░
рдлрд╝рдВрдХреНрд╢рди :
void Scheduler(twi *pl) { if (tail-head !=1 && head-tail != size-1)
рдЦреИрд░, рд╣реИрдВрдбрд▓рд░ рд╣реА:
рдмрд╛рдзрд┐рдд рд╣реИрдВрдбрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ ISR(TWI_vect) { twi *p = &TWI[tail]; static const void * const twi_list[] PROGMEM = {&&TWI_00, &&TWI_08, &&TWI_10, &&TWI_18, &&TWI_20, &&TWI_28, &&TWI_30, &&TWI_38, &&TWI_40, &&TWI_48, &&TWI_50, &&TWI_58, &&TWI_60, &&TWI_68, &&TWI_70, &&TWI_78, &&TWI_80, &&TWI_88, &&TWI_90, &&TWI_98, &&TWI_A0, &&TWI_A8, &&TWI_B0, &&TWI_B8, &&TWI_C0, &&TWI_C8, &&TWI_F8}; goto *(pgm_read_word(&(twi_list[TWSR>>3]))); TWI_00:
рдЦреИрд░,
get_AC1 рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рдЕрдВрддрднрд╛рд╖рдг
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЧрд░,
get_AC1 рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛,
get_AC2 рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ 2 рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдПрдХ рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ buf рдореЗрдВ рд╕рдВрдЪрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ [0]ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ buf [1] рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдФрд░ рдХрд┐рддрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╕рд╣реА рд╣реИ рдФрд░ рдХреБрдЫ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдлрдВрдХреНрд╢рди рдЗрд╕реЗ TWI рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЬрд╣рд╛рдВ рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛, рд╡рд╣рд╛рдВ рд╕реЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб:
рдХреЛрдб unsigned char bufTx[size]; unsigned char pos = 0; ... void get_AC1(void) { volatile twi *pl;
рддрд╕реНрд╡реАрд░ рдХреЛ рджреЗрдЦреЛ:рдХреГрдкрдпрд╛, рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЙрд╕реЗ рдмрддрд╛рдПрдВ, рдФрд░ рд╡рд╣ рдЖрдкрдХреЛ рдХрд╣рд╛рдВ рднреЗрдЬрддреА рд╣реИред рдЖрдк TWI рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВредрдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: head = (head+1)&(size-1); tail = (tail+1)&(size-1); pos &= size-1;
рдореИрдВ рдЗрд╕реЗ рддреЗрдЬ рдФрд░ рдХрдо рдХреЛрдб рдХрд╣реВрдВрдЧрд╛ред рдХреЗрд╡рд▓ рд╢рд░реНрдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рди 2 n рд╣реИ редрд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдпрд╣ TWI рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ ред рдпрджрд┐ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЦреЛ рджреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдореЗрд╢рд╛ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╕реЗ рдХрдо 1 рдЕрдзрд┐рдХ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ редрдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдПрд╕реА 1 рдФрд░ рдПрд╕реА 2 рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд┐рдЧ-рдПрдВрдбрд┐рдпрди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TWI рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПредрдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рдХреБрдЫ рд╢рдмреНрджред рдореЗрд░реА рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЯреАрдбрдмреНрд▓реВрдЖрдИ рдмрд╕ рдореЗрдВ 2 рд╕реЗрдВрд╕рд░, рджрдмрд╛рд╡, 1 рдЯрд╛рдЗрдо рдЪрд┐рдк рдФрд░ 1 рдореЗрдореЛрд░реА рдЪрд┐рдк рд╣реИрдВред рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкрд░рдорд╛рдгреБ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджрдмрд╛рд╡ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП:
рдпрджрд┐ рд╣рдо рдЕрд╕рдореНрдкреАрдбрд┐рдд рджрдмрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд░рдг рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрд╕рдореНрдкреАрдбрд┐рдд рддрд╛рдкрдорд╛рди рдХреЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, TWI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдореВрд▓ TWI [i] рдХреЛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЯрд╛рдЗрдк рдЯрд╡реА рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ, TWI [рдЯреЗрд▓] рд╕реЗ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░реЗрдВ, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХреЙрдкреА рдХреЛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рджреЗрдВред рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдореВрд▓ рд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдирд┐рд╖реНрдХрд░реНрд╖
рдХрдИ рд▓реЛрдЧ рдкреВрдЫреЗрдВрдЧреЗ: тАЬрдХреНрдпреЛрдВ? рджрд░рдЕрд╕рд▓, рд╕рдВрд░рдЪрдирд╛ рдХреЗ 16 рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 16 * (1 + 2 + 1 + 2 + 1) = SRAM рдХреЗ 112 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдЖрд░рдЯреАрдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЙрдиреНрд╣реЗрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ 1 рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА, рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЗрд╕рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо n рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВред тАЭрдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЗрд╕ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛? рдпрджрд┐ рд╣рдо рдХрддрд╛рд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓рд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди n ms рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рдкреВрд░рд╛ n * m ms рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдХреНрдпреЛрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдПрдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдХреЛ рднрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред рдФрд░ OS рдХрд░реНрдиреЗрд▓ рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрддрд╛рд░ рдореЗрдВ m * (m + 1) / 2 рдХрд╛рд░реНрдп рдирд╣реАрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИред