Předpokládané schéma je:
Kód: Vybrat vše
R1 ___
1 ---[___]---+
|
2 -----------+
R2 ___ |
3 ---[___]---+
R3 ___ |
4 ---[___]---+
R1=1k8, R2=12k6, R3=780Ω
Moderátor: Moderátoři
Kód: Vybrat vše
R1 ___
1 ---[___]---+
|
2 -----------+
R2 ___ |
3 ---[___]---+
R3 ___ |
4 ---[___]---+
Kód: Vybrat vše
|
---
Kód: Vybrat vše
unsigned char jht_crc_table[]={
0x00, 0x02 ,0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18,
0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32,
0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C,
0x4E, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66,
0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E, 0x80,
0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9A,
0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2, 0xB4,
0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8,
0xEA, 0xEC, 0xEE, 0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x19, 0x1B,
0x1D, 0x1F, 0x11, 0x13, 0x15, 0x17, 0x09, 0x0B, 0x0D, 0x0F, 0x01, 0x03, 0x05,
0x07, 0x39, 0x3B, 0x3D, 0x3F, 0x31, 0x33, 0x35, 0x37, 0x29, 0x2B, 0x2D, 0x2F,
0x21, 0x23, 0x25, 0x27, 0x59, 0x5B, 0x5D, 0x5F, 0x51, 0x53, 0x55, 0x57, 0x49,
0x4B, 0x4D, 0x4F, 0x41, 0x43, 0x45, 0x47, 0x79, 0x7B, 0x7D, 0x7F, 0x71, 0x73,
0x75, 0x77, 0x69, 0x6B, 0x6D, 0x6F, 0x61, 0x63, 0x65, 0x67, 0x99, 0x9B, 0x9D,
0x9F, 0x91, 0x93, 0x95, 0x97, 0x89, 0x8B, 0x8D, 0x8F, 0x81, 0x83, 0x85, 0x87,
0xB9, 0xBB, 0xBD, 0xBF, 0xB1, 0xB3, 0xB5, 0xB7, 0xA9, 0xAB, 0xAD, 0xAF, 0xA1,
0xA3, 0xA5, 0xA7, 0xD9, 0xDB, 0xDD, 0xDF, 0xD1, 0xD3, 0xD5, 0xD7, 0xC9, 0xCB,
0xCD, 0xCF, 0xC1, 0xC3, 0xC5, 0xC7, 0xF9, 0xFB, 0xFD, 0xFF, 0xF1, 0xF3, 0xF5,
0xF7, 0xE9, 0xEB, 0xED, 0xEF, 0xE1, 0xE3, 0xE5, 0xE7};
Kód: Vybrat vše
unsigned char jht_crc( unsigned char buffer[], int len )
{
unsigned char i,crc = 0;
for(i=0;i<len-1;i++){
crc = jht_crc_table[crc];
crc ^= buffer[i];
}
return crc;
}
Kód: Vybrat vše
0x11 0x00 << crc: 0x-1
0x88 0x00 0x18 0x00 0x23 0x01 0xEC 0x64 0x00 0x00 0x10 0x00 0xC0 0x80 0x00 0x80 0x00 0x80 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0xD6 0x00 << crc: 0xD6
0x88 0x00 0x34 0x00 0x28 0x01 0x56 0x01 0x56 0x80 0x00 0x00 0x03 0x00 0x00 0x01 0x68 0x00 0x00 0x05 0x00 0xFC 0x00 << crc: 0xFC
0x12 0x00 << crc: 0x-1
Kód: Vybrat vše
clear;
data_in = csvread("jht100k.csv");
out_file_name = "out.txt";
bit_period = 0.1037e-3;
since = 0;
data_in_x = data_in(:,1);
data_in_y = data_in(:,2);
N = length(data_in_x);
last_val = data_in_y([1]);
j = 1;
k = 1;
l = 1;
m = 1;
state = 'ws';
for i=1:N-1
if (data_in_x([i]) >= since)
break;
endif
end
frame_time = data_in_x([i]);
for i=i:N-1
while (data_in_x([i+1]) > frame_time)
switch (state)
case 'ws'
%printf("wait for start bit\n");
if (data_in_y([i]) == 0)
frame_time = data_in_x([i]) + 1.5*bit_period;
uart_out = 0;
bit_num = 0;
state = 'fb';
else
break;
endif
case 'fb'
%printf("first bit\n");
bit_num++;
sample_time([l]) = frame_time;
sample_time_y([l++]) = 0.9;
if (data_in_y([i]) > 0)
uart_out = uart_out/2;
uart_out += 128;
else
uart_out = uart_out/2;
endif
frame_time += bit_period;
if (bit_num >=8)
state = 'br';
endif
case 'br'
%printf("%x\n", uart_out);
data_out([m++]) = uart_out;
uart_out = 0;
if (data_in_y([i]) > 0)
state = 'st';
else
sample_time([l]) = frame_time;
sample_time_y([l++]) = 0.95;
frame_time += bit_period;
state = 'fs';
endif
case 'fs'
if (data_in_y([i]) > 0)
%printf("synchronization\n");
data_out([m++]) = 512;
state = 'st';
else
state = 'fe';
endif
case 'fe'
%printf("frame error\n");
state = 'st';
case 'st'
%printf("stopbit\n");
sample_time([l]) = frame_time;
sample_time_y([l++]) = 0.97;
if (data_in_y([i]) > 0)
state = 'ws';
endif
break;
endswitch
endwhile
data_disp_x([j]) = data_in_x([i]);
data_disp_y([j]) = last_val;
j++;
data_disp_x([j]) = data_in_x([i]) + 0.0000000001;
data_disp_y([j]) = data_in_y([i]);
j++;
last_val = data_in_y([i]);
end
plot(((data_disp_x)*1000), data_disp_y, 'linewidth', 2, sample_time*1000,
sample_time_y, '+', 'linewidth', 5);
xlim([since*1000 since*1000+40]); ylim([0 4]);
function crc = jht_crc (data)
jht_crc_table=[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,26, 28, \
30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, \
60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, \
88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, \
114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, \
136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, \
158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, \
180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, \
202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, \
224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, \
246, 248, 250, 252, 254, 25, 27, 29, 31, 17, 19, 21, 23, \
9, 11, 13, 15, 1, 3, 5, 7, 57, 59, 61, 63, 49, 51, 53, 55, \
41, 43, 45, 47, 33, 35, 37, 39, 89, 91, 93, 95, 81, 83, \
85, 87, 73, 75, 77, 79, 65, 67, 69, 71, 121, 123, 125, \
127, 113, 115, 117, 119, 105, 107, 109, 111, 97, 99, 101, \
103, 153, 155, 157, 159, 145, 147, 149, 151, 137, 139, \
141, 143, 129, 131, 133, 135, 185, 187, 189, 191, 177, \
179, 181, 183, 169, 171, 173, 175, 161, 163, 165, 167, \
217, 219, 221, 223, 209, 211, 213, 215, 201, 203, 205, \
207, 193, 195, 197, 199, 249, 251, 253, 255, 241, 243, \
245, 247, 233, 235, 237, 239, 225, 227, 229, 231 ];
N = length(data);
crc = 0;
for i=1:N
crc = jht_crc_table([uint8(crc) + 1]);
crc = bitxor(uint8(crc), uint8(data([i])));
end
endfunction
fid = fopen(out_file_name, 'w');
j = 1;
for i=1:length(data_out)
if (data_out([i]) > 255)
if ((i - 3) >= (j + 1))
crc = jht_crc(data_out([(j + 1):(i - 3)]));
else
crc = -1;
endif
fprintf(fid, "<< crc: 0x%02X\n", crc);
%printf("<< crc: 0x%02X\n", crc);
j = i;
else
fprintf(fid, "0x%02X ", data_out([i]));
%printf("0x%02X ", data_out([i]));
endif
end;
fclose(fid);
Kód: Vybrat vše
0x88 0x00 0x18 0x00 0x23 0x01 0xEC 0x64 0x00 0x00 0x10 0x00 0xC0 0x80 0x00 0x80 0x00 0x80 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0xD6 0x00