Мусор в линии i2c. Появляется периодически на определенное время.
- Войдите на сайт для отправки комментариев
Втр, 10/12/2019 - 12:54
Связь между контроллерами по i2c. Master задает и контролирует параметры у 6 Slaves. При тестовом прогоне кода обнаружилась НЁХ.
Функция SetTemperatureToController возвращает false.
Похоже что линия i2c перестает работать с некоторой периодичностью.
В чем может быть проблема?
Спецом сделал очищенный скетч от всего лишнего и взял 2 чистые ардуины. Все то же самое. Периодически на Slave приходит мусор. Я даже скорость до 10к уменьшил.
Master:
#include <Wire.h> unsigned int Command = 0; char TwoBytes [2]; bool SetTemperatureToController (double TemperatureToSet, byte ControllerToSet) { //Отправить температуру Command = TemperatureToSet * 10; Wire.beginTransmission(ControllerToSet); Wire.write(Command >> 8); Wire.write(Command & 0xFF); Wire.endTransmission(); Serial.print("Sended: ");Serial.print(Command); //Команда на получение температуры Command = 3; Wire.beginTransmission(ControllerToSet); Wire.write(Command >> 8); Wire.write(Command & 0xFF); Wire.endTransmission(); Serial.print(" && ");Serial.println(Command); //Получить температуру Wire.requestFrom((int)ControllerToSet, (int)2); TwoBytes[0] = NULL; TwoBytes[1] = NULL; while (Wire.available()) { TwoBytes[0] = Wire.read(); TwoBytes[1] = Wire.read(); while (Wire.available()) { Wire.read(); } } Command = 0; Command = ((unsigned int)TwoBytes[0] << 8) + ((unsigned int)TwoBytes[1]); Serial.print("Receiv: ");Serial.print(Command); //Serial.print(TemperatureToSet); Serial.print(" == "); Serial.println((double)Command/10); //Проверка на успешное задание температуры if (TemperatureToSet == (double)Command/10){ Serial.println(" OK"); return true; } else{ Serial.println(" FALSE"); return false; } } void setup() { Serial.begin(115200); Wire.begin(); Wire.setClock(10000); for (double d = 10.0; d < 130.0; d+=0.5){ SetTemperatureToController (d, 1); delay(100); } } void loop() { }
Slave:
#include <Wire.h> unsigned int Command = 0; char TwoBytes [2]; bool SetTemperatureToController (double TemperatureToSet, byte ControllerToSet) { //Отправить температуру Command = TemperatureToSet * 10; Wire.beginTransmission(ControllerToSet); Wire.write(Command >> 8); Wire.write(Command & 0xFF); Wire.endTransmission(); Serial.print("Sended: ");Serial.print(Command); //Команда на получение температуры Command = 3; Wire.beginTransmission(ControllerToSet); Wire.write(Command >> 8); Wire.write(Command & 0xFF); Wire.endTransmission(); Serial.print(" && ");Serial.println(Command); //Получить температуру Wire.requestFrom((int)ControllerToSet, (int)2); TwoBytes[0] = NULL; TwoBytes[1] = NULL; while (Wire.available()) { TwoBytes[0] = Wire.read(); TwoBytes[1] = Wire.read(); while (Wire.available()) { Wire.read(); } } Command = 0; Command = ((unsigned int)TwoBytes[0] << 8) + ((unsigned int)TwoBytes[1]); Serial.print("Receiv: ");Serial.print(Command); //Serial.print(TemperatureToSet); Serial.print(" == "); Serial.println((double)Command/10); //Проверка на успешное задание температуры if (TemperatureToSet == (double)Command/10){ Serial.println(" OK"); return true; } else{ Serial.println(" FALSE"); return false; } } void setup() { Serial.begin(115200); Wire.begin(); Wire.setClock(10000); for (double d = 10.0; d < 130.0; d+=0.5){ SetTemperatureToController (d, 1); delay(100); } } void loop() { }
Master serial monitor:
Sended: 100 && 3 Receiv: 100 OK Sended: 105 && 3 Receiv: 105 OK Sended: 110 && 3 Receiv: 110 OK Sended: 115 && 3 Receiv: 115 OK Sended: 120 && 3 Receiv: 120 OK Sended: 125 && 3 Receiv: 125 OK Sended: 130 && 3 Receiv: 125 FALSE Sended: 135 && 3 Receiv: 125 FALSE Sended: 140 && 3 Receiv: 125 FALSE Sended: 145 && 3 Receiv: 125 FALSE Sended: 150 && 3 Receiv: 125 FALSE Sended: 155 && 3 Receiv: 125 FALSE Sended: 160 && 3 Receiv: 125 FALSE Sended: 165 && 3 Receiv: 125 FALSE Sended: 170 && 3 Receiv: 125 FALSE Sended: 175 && 3 Receiv: 125 FALSE Sended: 180 && 3 Receiv: 125 FALSE Sended: 185 && 3 Receiv: 125 FALSE Sended: 190 && 3 Receiv: 125 FALSE Sended: 195 && 3 Receiv: 125 FALSE Sended: 200 && 3 Receiv: 125 FALSE Sended: 205 && 3 Receiv: 125 FALSE Sended: 210 && 3 Receiv: 125 FALSE Sended: 215 && 3 Receiv: 125 FALSE Sended: 220 && 3 Receiv: 125 FALSE Sended: 225 && 3 Receiv: 125 FALSE Sended: 230 && 3 Receiv: 125 FALSE Sended: 235 && 3 Receiv: 125 FALSE Sended: 240 && 3 Receiv: 125 FALSE Sended: 245 && 3 Receiv: 125 FALSE Sended: 250 && 3 Receiv: 125 FALSE Sended: 255 && 3 Receiv: 125 FALSE Sended: 260 && 3 Receiv: 260 OK Sended: 265 && 3 Receiv: 265 OK Sended: 270 && 3 Receiv: 270 OK Sended: 275 && 3 Receiv: 275 OK Sended: 280 && 3 Receiv: 280 OK Sended: 285 && 3 Receiv: 285 OK Sended: 290 && 3 Receiv: 290 OK Sended: 295 && 3 Receiv: 295 OK Sended: 300 && 3 Receiv: 300 OK Sended: 305 && 3 Receiv: 305 OK Sended: 310 && 3 Receiv: 310 OK Sended: 315 && 3 Receiv: 315 OK Sended: 320 && 3 Receiv: 320 OK Sended: 325 && 3 Receiv: 325 OK Sended: 330 && 3 Receiv: 330 OK Sended: 335 && 3 Receiv: 335 OK Sended: 340 && 3 Receiv: 340 OK Sended: 345 && 3 Receiv: 345 OK Sended: 350 && 3 Receiv: 350 OK Sended: 355 && 3 Receiv: 355 OK Sended: 360 && 3 Receiv: 360 OK Sended: 365 && 3 Receiv: 365 OK Sended: 370 && 3 Receiv: 370 OK Sended: 375 && 3 Receiv: 375 OK Sended: 380 && 3 Receiv: 380 OK Sended: 385 && 3 Receiv: 65409 FALSE Sended: 390 && 3 Receiv: 65414 FALSE Sended: 395 && 3 Receiv: 65419 FALSE Sended: 400 && 3 Receiv: 65424 FALSE Sended: 405 && 3 Receiv: 65429 FALSE Sended: 410 && 3 Receiv: 65434 FALSE Sended: 415 && 3 Receiv: 65439 FALSE Sended: 420 && 3 Receiv: 65444 FALSE Sended: 425 && 3 Receiv: 65449 FALSE Sended: 430 && 3 Receiv: 65454 FALSE Sended: 435 && 3 Receiv: 65459 FALSE Sended: 440 && 3 Receiv: 65464 FALSE Sended: 445 && 3 Receiv: 65469 FALSE Sended: 450 && 3 Receiv: 65474 FALSE Sended: 455 && 3 Receiv: 65479 FALSE Sended: 460 && 3 Receiv: 65484 FALSE Sended: 465 && 3 Receiv: 65489 FALSE Sended: 470 && 3 Receiv: 65494 FALSE Sended: 475 && 3 Receiv: 65499 FALSE Sended: 480 && 3 Receiv: 65504 FALSE Sended: 485 && 3 Receiv: 65509 FALSE Sended: 490 && 3 Receiv: 65514 FALSE Sended: 495 && 3 Receiv: 65519 FALSE Sended: 500 && 3 Receiv: 65524 FALSE Sended: 505 && 3 Receiv: 65529 FALSE Sended: 510 && 3 Receiv: 65534 FALSE Sended: 515 && 3 Receiv: 515 OK Sended: 520 && 3 Receiv: 520 OK Sended: 525 && 3 Receiv: 525 OK Sended: 530 && 3 Receiv: 530 OK Sended: 535 && 3 Receiv: 535 OK Sended: 540 && 3 Receiv: 540 OK Sended: 545 && 3 Receiv: 545 OK Sended: 550 && 3 Receiv: 550 OK Sended: 555 && 3 Receiv: 555 OK Sended: 560 && 3 Receiv: 560 OK Sended: 565 && 3 Receiv: 565 OK Sended: 570 && 3 Receiv: 570 OK Sended: 575 && 3 Receiv: 575 OK Sended: 580 && 3 Receiv: 580 OK Sended: 585 && 3 Receiv: 585 OK Sended: 590 && 3 Receiv: 590 OK Sended: 595 && 3 Receiv: 595 OK Sended: 600 && 3 Receiv: 600 OK Sended: 605 && 3 Receiv: 605 OK Sended: 610 && 3 Receiv: 610 OK Sended: 615 && 3 Receiv: 615 OK Sended: 620 && 3 Receiv: 620 OK Sended: 625 && 3 Receiv: 625 OK Sended: 630 && 3 Receiv: 630 OK Sended: 635 && 3 Receiv: 635 OK Sended: 640 && 3 Receiv: 128 FALSE Sended: 645 && 3 Receiv: 133 FALSE Sended: 650 && 3 Receiv: 138 FALSE Sended: 655 && 3 Receiv: 143 FALSE Sended: 660 && 3 Receiv: 148 FALSE Sended: 665 && 3 Receiv: 153 FALSE Sended: 670 && 3 Receiv: 158 FALSE Sended: 675 && 3 Receiv: 163 FALSE Sended: 680 && 3 Receiv: 168 FALSE Sended: 685 && 3 Receiv: 173 FALSE Sended: 690 && 3 Receiv: 178 FALSE Sended: 695 && 3 Receiv: 183 FALSE Sended: 700 && 3 Receiv: 188 FALSE Sended: 705 && 3 Receiv: 193 FALSE Sended: 710 && 3 Receiv: 198 FALSE Sended: 715 && 3 Receiv: 203 FALSE Sended: 720 && 3 Receiv: 208 FALSE Sended: 725 && 3 Receiv: 213 FALSE Sended: 730 && 3 Receiv: 218 FALSE Sended: 735 && 3 Receiv: 223 FALSE Sended: 740 && 3 Receiv: 228 FALSE Sended: 745 && 3 Receiv: 233 FALSE Sended: 750 && 3 Receiv: 238 FALSE Sended: 755 && 3 Receiv: 243 FALSE Sended: 760 && 3 Receiv: 248 FALSE Sended: 765 && 3 Receiv: 253 FALSE Sended: 770 && 3 Receiv: 770 OK Sended: 775 && 3 Receiv: 775 OK Sended: 780 && 3 Receiv: 780 OK Sended: 785 && 3 Receiv: 785 OK Sended: 790 && 3 Receiv: 790 OK Sended: 795 && 3 Receiv: 795 OK Sended: 800 && 3 Receiv: 800 OK Sended: 805 && 3 Receiv: 805 OK Sended: 810 && 3 Receiv: 810 OK Sended: 815 && 3 Receiv: 815 OK Sended: 820 && 3 Receiv: 820 OK Sended: 825 && 3 Receiv: 825 OK Sended: 830 && 3 Receiv: 830 OK Sended: 835 && 3 Receiv: 835 OK Sended: 840 && 3 Receiv: 840 OK Sended: 845 && 3 Receiv: 845 OK Sended: 850 && 3 Receiv: 850 OK Sended: 855 && 3 Receiv: 855 OK Sended: 860 && 3 Receiv: 860 OK Sended: 865 && 3 Receiv: 865 OK Sended: 870 && 3 Receiv: 870 OK Sended: 875 && 3 Receiv: 875 OK Sended: 880 && 3 Receiv: 880 OK Sended: 885 && 3 Receiv: 885 OK Sended: 890 && 3 Receiv: 890 OK Sended: 895 && 3 Receiv: 895 OK Sended: 900 && 3 Receiv: 388 FALSE Sended: 905 && 3 Receiv: 393 FALSE Sended: 910 && 3 Receiv: 398 FALSE Sended: 915 && 3 Receiv: 403 FALSE Sended: 920 && 3 Receiv: 408 FALSE Sended: 925 && 3 Receiv: 413 FALSE Sended: 930 && 3 Receiv: 418 FALSE Sended: 935 && 3 Receiv: 423 FALSE Sended: 940 && 3 Receiv: 428 FALSE Sended: 945 && 3 Receiv: 433 FALSE Sended: 950 && 3 Receiv: 438 FALSE Sended: 955 && 3 Receiv: 443 FALSE Sended: 960 && 3 Receiv: 448 FALSE Sended: 965 && 3 Receiv: 453 FALSE Sended: 970 && 3 Receiv: 458 FALSE Sended: 975 && 3 Receiv: 463 FALSE Sended: 980 && 3 Receiv: 468 FALSE Sended: 985 && 3 Receiv: 473 FALSE Sended: 990 && 3 Receiv: 478 FALSE Sended: 995 && 3 Receiv: 483 FALSE Sended: 1000 && 3 Receiv: 488 FALSE Sended: 1005 && 3 Receiv: 493 FALSE Sended: 1010 && 3 Receiv: 498 FALSE Sended: 1015 && 3 Receiv: 503 FALSE Sended: 1020 && 3 Receiv: 508 FALSE Sended: 1025 && 3 Receiv: 1025 OK Sended: 1030 && 3 Receiv: 1030 OK Sended: 1035 && 3 Receiv: 1035 OK Sended: 1040 && 3 Receiv: 1040 OK Sended: 1045 && 3 Receiv: 1045 OK Sended: 1050 && 3 Receiv: 1050 OK Sended: 1055 && 3 Receiv: 1055 OK Sended: 1060 && 3 Receiv: 1060 OK Sended: 1065 && 3 Receiv: 1065 OK Sended: 1070 && 3 Receiv: 1070 OK Sended: 1075 && 3 Receiv: 1075 OK Sended: 1080 && 3 Receiv: 1080 OK Sended: 1085 && 3 Receiv: 1085 OK Sended: 1090 && 3 Receiv: 1090 OK Sended: 1095 && 3 Receiv: 1095 OK Sended: 1100 && 3 Receiv: 1100 OK Sended: 1105 && 3 Receiv: 1105 OK Sended: 1110 && 3 Receiv: 1110 OK Sended: 1115 && 3 Receiv: 1115 OK Sended: 1120 && 3 Receiv: 1120 OK Sended: 1125 && 3 Receiv: 1125 OK Sended: 1130 && 3 Receiv: 1130 OK Sended: 1135 && 3 Receiv: 1135 OK Sended: 1140 && 3 Receiv: 1140 OK Sended: 1145 && 3 Receiv: 1145 OK Sended: 1150 && 3 Receiv: 1150 OK Sended: 1155 && 3 Receiv: 643 FALSE Sended: 1160 && 3 Receiv: 648 FALSE Sended: 1165 && 3 Receiv: 653 FALSE Sended: 1170 && 3 Receiv: 658 FALSE Sended: 1175 && 3 Receiv: 663 FALSE Sended: 1180 && 3 Receiv: 668 FALSE Sended: 1185 && 3 Receiv: 673 FALSE Sended: 1190 && 3 Receiv: 678 FALSE Sended: 1195 && 3 Receiv: 683 FALSE Sended: 1200 && 3 Receiv: 688 FALSE Sended: 1205 && 3 Receiv: 693 FALSE Sended: 1210 && 3 Receiv: 698 FALSE Sended: 1215 && 3 Receiv: 703 FALSE Sended: 1220 && 3 Receiv: 708 FALSE Sended: 1225 && 3 Receiv: 713 FALSE Sended: 1230 && 3 Receiv: 718 FALSE Sended: 1235 && 3 Receiv: 723 FALSE Sended: 1240 && 3 Receiv: 728 FALSE Sended: 1245 && 3 Receiv: 733 FALSE Sended: 1250 && 3 Receiv: 738 FALSE Sended: 1255 && 3 Receiv: 743 FALSE Sended: 1260 && 3 Receiv: 748 FALSE Sended: 1265 && 3 Receiv: 753 FALSE Sended: 1270 && 3 Receiv: 758 FALSE Sended: 1275 && 3 Receiv: 763 FALSE Sended: 1280 && 3 Receiv: 1280 OK Sended: 1285 && 3 Receiv: 1285 OK Sended: 1290 && 3 Receiv: 1290 OK Sended: 1295 && 3 Receiv: 1295 OK
Slave serial monitor:
Receiv: 100 && 3 Sended: 100 Receiv: 105 && 3 Sended: 105 Receiv: 110 && 3 Sended: 110 Receiv: 115 && 3 Sended: 115 Receiv: 120 && 3 Sended: 120 Receiv: 125 && 3 Sended: 125 Receiv: 65410 && 3 Sended: 125 Receiv: 65415 && 3 Sended: 125 Receiv: 65420 && 3 Sended: 125 Receiv: 65425 && 3 Sended: 125 Receiv: 65430 && 3 Sended: 125 Receiv: 65435 && 3 Sended: 125 Receiv: 65440 && 3 Sended: 125 Receiv: 65445 && 3 Sended: 125 Receiv: 65450 && 3 Sended: 125 Receiv: 65455 && 3 Sended: 125 Receiv: 65460 && 3 Sended: 125 Receiv: 65465 && 3 Sended: 125 Receiv: 65470 && 3 Sended: 125 Receiv: 65475 && 3 Sended: 125 Receiv: 65480 && 3 Sended: 125 Receiv: 65485 && 3 Sended: 125 Receiv: 65490 && 3 Sended: 125 Receiv: 65495 && 3 Sended: 125 Receiv: 65500 && 3 Sended: 125 Receiv: 65505 && 3 Sended: 125 Receiv: 65510 && 3 Sended: 125 Receiv: 65515 && 3 Sended: 125 Receiv: 65520 && 3 Sended: 125 Receiv: 65525 && 3 Sended: 125 Receiv: 65530 && 3 Sended: 125 Receiv: 65535 && 3 Sended: 125 Receiv: 260 && 3 Sended: 260 Receiv: 265 && 3 Sended: 265 Receiv: 270 && 3 Sended: 270 Receiv: 275 && 3 Sended: 275 Receiv: 280 && 3 Sended: 280 Receiv: 285 && 3 Sended: 285 Receiv: 290 && 3 Sended: 290 Receiv: 295 && 3 Sended: 295 Receiv: 300 && 3 Sended: 300 Receiv: 305 && 3 Sended: 305 Receiv: 310 && 3 Sended: 310 Receiv: 315 && 3 Sended: 315 Receiv: 320 && 3 Sended: 320 Receiv: 325 && 3 Sended: 325 Receiv: 330 && 3 Sended: 330 Receiv: 335 && 3 Sended: 335 Receiv: 340 && 3 Sended: 340 Receiv: 345 && 3 Sended: 345 Receiv: 350 && 3 Sended: 350 Receiv: 355 && 3 Sended: 355 Receiv: 360 && 3 Sended: 360 Receiv: 365 && 3 Sended: 365 Receiv: 370 && 3 Sended: 370 Receiv: 375 && 3 Sended: 375 Receiv: 380 && 3 Sended: 380 Receiv: 129 && 3 Sended: 129 Receiv: 134 && 3 Sended: 134 Receiv: 139 && 3 Sended: 139 Receiv: 144 && 3 Sended: 144 Receiv: 149 && 3 Sended: 149 Receiv: 154 && 3 Sended: 154 Receiv: 159 && 3 Sended: 159 Receiv: 164 && 3 Sended: 164 Receiv: 169 && 3 Sended: 169 Receiv: 174 && 3 Sended: 174 Receiv: 179 && 3 Sended: 179 Receiv: 184 && 3 Sended: 184 Receiv: 189 && 3 Sended: 189 Receiv: 194 && 3 Sended: 194 Receiv: 199 && 3 Sended: 199 Receiv: 204 && 3 Sended: 204 Receiv: 209 && 3 Sended: 209 Receiv: 214 && 3 Sended: 214 Receiv: 219 && 3 Sended: 219 Receiv: 224 && 3 Sended: 224 Receiv: 229 && 3 Sended: 229 Receiv: 234 && 3 Sended: 234 Receiv: 100 && 3 Sended: 100 Receiv: 105 && 3 Sended: 105 Receiv: 110 && 3 Sended: 110 Receiv: 115 && 3 Sended: 115 Receiv: 120 && 3 Sended: 120 Receiv: 125 && 3 Sended: 125 Receiv: 65410 && 3 Sended: 125 Receiv: 65415 && 3 Sended: 125 Receiv: 65420 && 3 Sended: 125 Receiv: 65425 && 3 Sended: 125 Receiv: 65430 && 3 Sended: 125 Receiv: 65435 && 3 Sended: 125 Receiv: 65440 && 3 Sended: 125 Receiv: 65445 && 3 Sended: 125 Receiv: 65450 && 3 Sended: 125 Receiv: 65455 && 3 Sended: 125 Receiv: 65460 && 3 Sended: 125 Receiv: 65465 && 3 Sended: 125 Receiv: 65470 && 3 Sended: 125 Receiv: 65475 && 3 Sended: 125 Receiv: 65480 && 3 Sended: 125 Receiv: 65485 && 3 Sended: 125 Receiv: 65490 && 3 Sended: 125 Receiv: 65495 && 3 Sended: 125 Receiv: 65500 && 3 Sended: 125 Receiv: 65505 && 3 Sended: 125 Receiv: 65510 && 3 Sended: 125 Receiv: 65515 && 3 Sended: 125 Receiv: 65520 && 3 Sended: 125 Receiv: 65525 && 3 Sended: 125 Receiv: 65530 && 3 Sended: 125 Receiv: 65535 && 3 Sended: 125 Receiv: 260 && 3 Sended: 260 Receiv: 265 && 3 Sended: 265 Receiv: 270 && 3 Sended: 270 Receiv: 275 && 3 Sended: 275 Receiv: 280 && 3 Sended: 280 Receiv: 285 && 3 Sended: 285 Receiv: 290 && 3 Sended: 290 Receiv: 295 && 3 Sended: 295 Receiv: 300 && 3 Sended: 300 Receiv: 305 && 3 Sended: 305 Receiv: 310 && 3 Sended: 310 Receiv: 315 && 3 Sended: 315 Receiv: 320 && 3 Sended: 320 Receiv: 325 && 3 Sended: 325 Receiv: 330 && 3 Sended: 330 Receiv: 335 && 3 Sended: 335 Receiv: 340 && 3 Sended: 340 Receiv: 345 && 3 Sended: 345 Receiv: 350 && 3 Sended: 350 Receiv: 355 && 3 Sended: 355 Receiv: 360 && 3 Sended: 360 Receiv: 365 && 3 Sended: 365 Receiv: 370 && 3 Sended: 370 Receiv: 375 && 3 Sended: 375 Receiv: 380 && 3 Sended: 380 Receiv: 129 && 3 Sended: 129 Receiv: 134 && 3 Sended: 134 Receiv: 139 && 3 Sended: 139 Receiv: 144 && 3 Sended: 144 Receiv: 149 && 3 Sended: 149 Receiv: 154 && 3 Sended: 154 Receiv: 159 && 3 Sended: 159 Receiv: 164 && 3 Sended: 164 Receiv: 169 && 3 Sended: 169 Receiv: 174 && 3 Sended: 174 Receiv: 179 && 3 Sended: 179 Receiv: 184 && 3 Sended: 184 Receiv: 189 && 3 Sended: 189 Receiv: 194 && 3 Sended: 194 Receiv: 199 && 3 Sended: 199 Receiv: 204 && 3 Sended: 204 Receiv: 209 && 3 Sended: 209 Receiv: 214 && 3 Sended: 214 Receiv: 219 && 3 Sended: 219 Receiv: 224 && 3 Sended: 224 Receiv: 229 && 3 Sended: 229 Receiv: 234 && 3 Sended: 234 Receiv: 239 && 3 Sended: 239 Receiv: 244 && 3 Sended: 244 Receiv: 249 && 3 Sended: 249 Receiv: 254 && 3 Sended: 254 Receiv: 515 && 3 Sended: 515 Receiv: 520 && 3 Sended: 520 Receiv: 525 && 3 Sended: 525 Receiv: 530 && 3 Sended: 530 Receiv: 535 && 3 Sended: 535 Receiv: 540 && 3 Sended: 540 Receiv: 545 && 3 Sended: 545 Receiv: 550 && 3 Sended: 550 Receiv: 555 && 3 Sended: 555 Receiv: 560 && 3 Sended: 560 Receiv: 565 && 3 Sended: 565 Receiv: 570 && 3 Sended: 570 Receiv: 575 && 3 Sended: 575 Receiv: 580 && 3 Sended: 580 Receiv: 585 && 3 Sended: 585 Receiv: 590 && 3 Sended: 590 Receiv: 595 && 3 Sended: 595 Receiv: 600 && 3 Sended: 600 Receiv: 605 && 3 Sended: 605 Receiv: 610 && 3 Sended: 610 Receiv: 615 && 3 Sended: 615 Receiv: 620 && 3 Sended: 620 Receiv: 625 && 3 Sended: 625 Receiv: 630 && 3 Sended: 630 Receiv: 635 && 3 Sended: 635 Receiv: 384 && 3 Sended: 384 Receiv: 389 && 3 Sended: 389 Receiv: 394 && 3 Sended: 394 Receiv: 399 && 3 Sended: 399 Receiv: 404 && 3 Sended: 404 Receiv: 409 && 3 Sended: 409 Receiv: 414 && 3 Sended: 414 Receiv: 419 && 3 Sended: 419 Receiv: 424 && 3 Sended: 424 Receiv: 429 && 3 Sended: 429 Receiv: 434 && 3 Sended: 434 Receiv: 439 && 3 Sended: 439 Receiv: 444 && 3 Sended: 444 Receiv: 449 && 3 Sended: 449 Receiv: 454 && 3 Sended: 454 Receiv: 459 && 3 Sended: 459 Receiv: 464 && 3 Sended: 464 Receiv: 469 && 3 Sended: 469 Receiv: 474 && 3 Sended: 474 Receiv: 479 && 3 Sended: 479 Receiv: 484 && 3 Sended: 484 Receiv: 489 && 3 Sended: 489 Receiv: 494 && 3 Sended: 494 Receiv: 499 && 3 Sended: 499 Receiv: 504 && 3 Sended: 504 Receiv: 509 && 3 Sended: 509 Receiv: 770 && 3 Sended: 770 Receiv: 775 && 3 Sended: 775 Receiv: 780 && 3 Sended: 780 Receiv: 785 && 3 Sended: 785 Receiv: 790 && 3 Sended: 790 Receiv: 795 && 3 Sended: 795 Receiv: 800 && 3 Sended: 800 Receiv: 805 && 3 Sended: 805 Receiv: 810 && 3 Sended: 810 Receiv: 815 && 3 Sended: 815 Receiv: 820 && 3 Sended: 820 Receiv: 825 && 3 Sended: 825 Receiv: 830 && 3 Sended: 830 Receiv: 835 && 3 Sended: 835 Receiv: 840 && 3 Sended: 840 Receiv: 845 && 3 Sended: 845 Receiv: 850 && 3 Sended: 850 Receiv: 855 && 3 Sended: 855 Receiv: 860 && 3 Sended: 860 Receiv: 865 && 3 Sended: 865 Receiv: 870 && 3 Sended: 870 Receiv: 875 && 3 Sended: 875 Receiv: 880 && 3 Sended: 880 Receiv: 885 && 3 Sended: 885 Receiv: 890 && 3 Sended: 890 Receiv: 895 && 3 Sended: 895 Receiv: 644 && 3 Sended: 644 Receiv: 649 && 3 Sended: 649 Receiv: 654 && 3 Sended: 654 Receiv: 659 && 3 Sended: 659 Receiv: 664 && 3 Sended: 664 Receiv: 669 && 3 Sended: 669 Receiv: 674 && 3 Sended: 674 Receiv: 679 && 3 Sended: 679 Receiv: 684 && 3 Sended: 684 Receiv: 689 && 3 Sended: 689 Receiv: 694 && 3 Sended: 694 Receiv: 699 && 3 Sended: 699 Receiv: 704 && 3 Sended: 704 Receiv: 709 && 3 Sended: 709 Receiv: 714 && 3 Sended: 714 Receiv: 719 && 3 Sended: 719 Receiv: 724 && 3 Sended: 724 Receiv: 729 && 3 Sended: 729 Receiv: 734 && 3 Sended: 734 Receiv: 739 && 3 Sended: 739 Receiv: 744 && 3 Sended: 744 Receiv: 749 && 3 Sended: 749 Receiv: 754 && 3 Sended: 754 Receiv: 759 && 3 Sended: 759 Receiv: 764 && 3 Sended: 764 Receiv: 1025 && 3 Sended: 1025 Receiv: 1030 && 3 Sended: 1030 Receiv: 1035 && 3 Sended: 1035 Receiv: 1040 && 3 Sended: 1040 Receiv: 1045 && 3 Sended: 1045 Receiv: 1050 && 3 Sended: 1050 Receiv: 1055 && 3 Sended: 1055 Receiv: 1060 && 3 Sended: 1060 Receiv: 1065 && 3 Sended: 1065 Receiv: 1070 && 3 Sended: 1070 Receiv: 1075 && 3 Sended: 1075 Receiv: 1080 && 3 Sended: 1080 Receiv: 1085 && 3 Sended: 1085 Receiv: 1090 && 3 Sended: 1090 Receiv: 1095 && 3 Sended: 1095 Receiv: 1100 && 3 Sended: 1100 Receiv: 1105 && 3 Sended: 1105 Receiv: 1110 && 3 Sended: 1110 Receiv: 1115 && 3 Sended: 1115 Receiv: 1120 && 3 Sended: 1120 Receiv: 1125 && 3 Sended: 1125 Receiv: 1130 && 3 Sended: 1130 Receiv: 1135 && 3 Sended: 1135 Receiv: 1140 && 3 Sended: 1140 Receiv: 1145 && 3 Sended: 1145 Receiv: 1150 && 3 Sended: 1150 Receiv: 899 && 3 Sended: 899 Receiv: 904 && 3 Sended: 904 Receiv: 909 && 3 Sended: 909 Receiv: 914 && 3 Sended: 914 Receiv: 919 && 3 Sended: 919 Receiv: 924 && 3 Sended: 924 Receiv: 929 && 3 Sended: 929 Receiv: 934 && 3 Sended: 934 Receiv: 939 && 3 Sended: 939 Receiv: 944 && 3 Sended: 944 Receiv: 949 && 3 Sended: 949 Receiv: 954 && 3 Sended: 954 Receiv: 959 && 3 Sended: 959 Receiv: 964 && 3 Sended: 964 Receiv: 969 && 3 Sended: 969 Receiv: 974 && 3 Sended: 974 Receiv: 979 && 3 Sended: 979 Receiv: 984 && 3 Sended: 984 Receiv: 989 && 3 Sended: 989 Receiv: 994 && 3 Sended: 994 Receiv: 999 && 3 Sended: 999 Receiv: 1004 && 3 Sended: 1004 Receiv: 1009 && 3 Sended: 1009 Receiv: 1014 && 3 Sended: 1014 Receiv: 1019 && 3 Sended: 1019 Receiv: 1280 && 3 Sended: 1280 Receiv: 1285 && 3 Sended: 1285 Receiv: 1290 && 3 Sended: 1290 Receiv: 1295 && 3 Sended: 1295
ААА. Как отредаткировать пост? Перепутал код на Slave.
Вот код:
Не знаю, как это скажется на решении проблемы, но подумайте над этим фрагментом:
Допустим, что первое Wire.available() вернуло 1 байт в буфере...
В коде куча косяков, которые могут дать такой эффект - например проверка на равенство вещественных типов, что запросто может дать FALSE даже если температура принята правильно.
Ну а главное, на мой взгляд - строчки с 8 по 20 приемника. Что это за ерунда - зачем у вас три цикла while? -это получается рулетка, странно что вы вообще что-то получаете при таком коде...
Не знаю, как это скажется на решении проблемы, но подумайте над этим фрагментом:
Допустим, что первое Wire.available() вернуло 1 байт в буфере...
Эта часть эволюционировала од простого
Ничего не менялось.
Эта часть эволюционировала од простого
Ничего не менялось.
ну как хотите - в конце концов проблема у вас, а не у нас. На мой взгляд эта процедура - просто бредятина
Эта часть эволюционировала од простого
Ничего не менялось.
ну как хотите - в конце концов проблема у вас, а не у нас. На мой взгляд эта процедура - просто бредятина
Вернул к истокам. Все так же шлет мусор.
ну так теперь исправляйте другие ляпы. Вы посылаете в линию четыре байта, а читаете по два. Где гарантия, что прочитанные байты именно первый и второй или третий и четвертый? Как вы в коде отслеживаете вероятность прочитать например, второй байт из команды и первый из температуры?
Ну и еще куча мелких огрехов, которые простот режут глаз - Сравнение на равенство типов double. использование NULL вместо нуля и так далее - поправте хотя бы их, может ситуация станет лучше
CollSpack - подумайте над логикой приемника. Сейчас вы просто читаете из линии два байта и потом принимаете. что это температура. Это логически неверно.
Я бы сделал так - искал бы в принятом потоке комбинацию из 4х байт, первые два из которых - 0х00 0х03. Если таковые нашлись - значит следующие два (без перерывов) за ними - температура.
Сейчас вы просто читаете из линии два байта и потом принимаете. что это температура.
Даже не так - просто читается что-то, не глядя на: Stream.read() - The first byte of incoming data available (or -1 if no data is available).
Даже не так - просто читается что-то, не глядя на: Stream.read() - The first byte of incoming data available (or -1 if no data is available).
ооо, точно :) этот косяк я и не заметил...
ну тогда тем более :))))
Вообще, чтобы убедиться в том, что "мусора на линии нет", можно мастером слать значение нарастающего счётчика, а слейвом каждый принятый байт печатать (чтобы уж точно не ошибиться в алгоритме). Если вдруг следующий байт будет "непорядочным", то искать проблему в физике/библиотеке (всё же I2C не помехозащищённый протокол). В случае того, если всё будет ОК в простейшей приёмо-передаче, то однозначно - неправильно интерпретируете поступающие данные.
все, похоже ТС завис :)
ща опять нам скажут что тут "бесполезный форум" :)
Не завис, а покуриваю гугл работая на работе.
Блин. Ответ вроде бы под носом лежит но всеровно все одно и то же.
Мастер отсылает по очереди unsigned int Command = (100 - 10000) после отсылает unsigned int Command = 3. Команда 3 говорит что слейв при следующем запросе должен отправить температуру как unsigned int Command = (100 - 10000).
3 - всегда приходит! Без мусора! 100-10000 - приходит с переменным успехом. Не могу понять почему так сложно отправить 2 байта? И почему нету нормальных примеров и библиотек чтобы разобрать их и научиться! Откуда берется рассинхрон в передаче? Сначала все работает, потом перестает. Уже и аппаратно сделал так, что не приколупаешся.
На команды нужно именно 2 байта. В реальной программе будет много команд, которые вполне вмещаются в unsigned int. Передавать 4 байта? Чтоб мусора в 2 раза больше было?
У меня уже психоз начинается. =(
попробуйте все же подумать над тем, что написал вам садман41
Я вам чуть подскажу - вы читаете байты из шины, не проверяя, пришли ли они или нет. Если байты пришли - у вас читаетеся верно, а если еще нет - вы читаете из шины мусор (точнее. читаете число -1, но после преобразования в температуру получается мусор)
Отложите пока свою температуру, сделайте то, что вам посоветовали в сообщении #11. Когда наладите там прием без ошибок - расширите пример на свои данные
Вот же ж хрень такая! Решил посмотреть какие значения приходят.
1250 приходит как 0 и 7D, а 1300 приходит как 0 и FFFFFF82.
Поменял char TwoBytes [2]; на byte TwoBytes [2]; и проблемы как небыло!
Дело было в том что диапазон char -128 до 127, а unsigned char или byte 0 - 255. Собственно сама Wire.read() возвращает 0-255.
Может я чего-то не понимаю, но как char может принять в себя FFFFFF82?
Поменял char TwoBytes [2]; на byte TwoBytes [2]; и проблемы как небыло!
"Не обманывай себя, Маша!" (с)
Проблемы. о которых писали выше мы с Садманом - никуда не делись. Их все равно надо решать....