ЛР_5.Простой тестер кабелей RJ45. Простой тестер кабелей rj45
Скачать 334.26 Kb.
|
Простой тестер кабелей RJ45 При прокладке проводных сетей Ethernet зачастую необходимо быть уверенным в целостности кабеля и иметь возможность проверить эту целостность в случае потери связи и прочих нештатных ситуациях. Сегодня можно купить специальные тестеры для проверки кабелей RJ45, а можно и сделать самому, что выйдет значительно дешевле. Кроме того, благодаря развитию и популяризации платформы Arduino сделать тестер на базе Arduino не составляет проблем. Принцип работы такого проверочного устройства на Arduino довольно прост. На один конец кабеля посылаются сигналы с одних линий ввода/вывода Arduino, которые затем со второго конца кабеля считываются другими линиями ввода/вывода Arduino. Если отправленные и принятые данные совпадают, то это означает, что кабель целый, в противном случае кабель поврежден и нуждается в замене. Основная проблема в данном случае заключается в том, что у Arduino нет такого количества линий ввода/вывода, чтобы отправить сигналы на восемь контактов одного конца и принять сигналы с восьми контактов другого конца. Поэтому здесь необходимо использовать микросхему расширения выводов SN74HC595. Схема подключения представлена на изображении ниже. Код работы (скетч для Arduino) тестера Ethernet кабелей RJ45 приведен ниже. #include LiquidCrystal lcd( 4, 5, 6, 7, 8, 9); int latchPin = 12; int clockPin = 11; int dataPin = 13; byte pinOut = 0 int uscita = 0; int Lo1 = 0; int Lo2 = 0; int Lo3 = 0; int Lo4 = 0; int Lo5 = 0; int Lo6 = 0; int Lo7 = 0; int Lo8 = 0; int cavo = 0; int eth1 = 0; int eth2 = 0; int eth3 = 0; int eth4 = 0; int eth5 = 0; int eth6 = 0; int eth7 = 0; int eth8 = 0; int testeth1 = 0; int verifi1 = 0; int ethIn1 = 14; int ethIn2 = 15; int ethIn3 = 16; int ethIn4 = 17; int ethIn5 = 18; int ethIn6 = 19; int ethIn7 = 2; int ethIn8 = 3; void setup() { lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Cable Tester"); lcd.setCursor(4,1); lcd.print("Ethernet"); delay(3000); lcd.clear(); Serial.begin(9600); pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinOut = 0; pinMode(ethIn1, INPUT); pinMode(ethIn2, INPUT); pinMode(ethIn3, INPUT); pinMode(ethIn4, INPUT); pinMode(ethIn5, INPUT); pinMode(ethIn6, INPUT); pinMode(ethIn7, INPUT); pinMode(ethIn8, INPUT); } void loop() { Serial.print("----------Initialization-------------"); cavo = 0; Lo1 = 0; Lo2 = 0; Lo3 = 0; Lo4 = 0; Lo5 = 0; Lo6 = 0; Lo7 = 0; Lo8 = 0; lcd.clear(); lcd.print("Process: "); lcd.setCursor(0,1); for (int uscita=0; uscita<= 7; uscita++){ Serial.println(); Serial.print("Pin: "); Serial.print(uscita); //lcd.begin(16, 2); lcd.print(uscita + 1); pinOut = 0; bitSet(pinOut, uscita); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, pinOut); digitalWrite(latchPin, HIGH); int eth1 = digitalRead(ethIn1); int eth2 = digitalRead(ethIn2); int eth3 = digitalRead(ethIn3); int eth4 = digitalRead(ethIn4); int eth5 = digitalRead(ethIn5); int eth6 = digitalRead(ethIn6); int eth7 = digitalRead(ethIn7); int eth8 = digitalRead(ethIn8); int testeth1 = analogRead(ethIn1); if (uscita == 0 && eth1 == 1) { Lo1 = 1; } else { if (uscita == 0 && eth3 == 1) {Lo1 = 256 ; } } if (uscita == 1 && eth2 == 1) { Lo2 = 2 ; } else { if (uscita == 1 && eth6 == 1) {Lo2 = 512 ; } } if (uscita == 2 && eth3 == 1) { Lo3 = 4 ; } else { if (uscita == 2 && eth1 == 1) {Lo4 = 1024 ; } } if (uscita == 3 && eth4 == 1) { Lo4 = 8 ; } else { } if (uscita == 4 && eth5 == 1) { Lo5 = 16; } else { } if (uscita == 5 && eth6 == 1) { Lo6 = 32; } else { if (uscita == 5 && eth2 == 1) {Lo6 = 2024 ; } } if (uscita == 6 && eth7 == 1) { Lo7 = 64; } else { } if (uscita == 7 && eth8 == 1) { Lo8 = 128; } else { } Serial.println(); Serial.print("Status of ports: "); Serial.print(eth1); Serial.print(eth2); Serial.print(eth3); Serial.print(eth4); Serial.print(eth5); Serial.print(eth6); Serial.print(eth7); Serial.print(eth8); cavo = Lo1 + Lo2 + Lo3 + Lo4 + Lo5 + Lo6 + Lo7 + Lo8 ; Serial.println(); Serial.print("Founded value of sum: "); Serial.print(cavo); } if ( cavo == 255 ) { lcd.clear(); lcd.print("Quality of cable is ok"); delay(2000); } else { if (cavo == 3008 ) { lcd.clear(); lcd.print("cable is ok"); delay(2000); } else { lcd.clear(); lcd.print("cable is not ok"); lcd.setCursor(0,1); lcd.print("there is defect"); delay(1000); lcd.clear(); if ( cavo == 2496 ) { lcd.print("Pin 2 / 6 "); delay(2000); } else { } } } lcd.print("Begin checking"); delay(1000); lcd.clear(); lcd.print("out: "); lcd.setCursor(0,1); lcd.print("in : "); uscita = 0; for (int uscita=0; uscita<= 7; uscita++){ delay(250); pinOut = 0; bitSet(pinOut, uscita); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, pinOut); digitalWrite(latchPin, HIGH); int eth1 = digitalRead(ethIn1); int eth2 = digitalRead(ethIn2); int eth3 = digitalRead(ethIn3); int eth4 = digitalRead(ethIn4); int eth5 = digitalRead(ethIn5); int eth6 = digitalRead(ethIn6); int eth7 = digitalRead(ethIn7); int eth8 = digitalRead(ethIn8); Serial.println(); Serial.print("Resulting status of ports: "); Serial.print(eth1); Serial.print(eth2); Serial.print(eth3); Serial.print(eth4); Serial.print(eth5); Serial.print(eth6); Serial.print(eth7); Serial.print(eth8); if (eth1 == 1) { verifi1 = 1; } else { if (eth2 == 1) {verifi1 = 2; } else { if (eth3 == 1) {verifi1 = 3; } else { if (eth4 == 1) {verifi1 = 4; } else { if (eth5 == 1) {verifi1 = 5; } else { if (eth6 == 1) {verifi1 = 6; } else { if (eth7 == 1) {verifi1 = 7; } else { if (eth8 == 1) {verifi1 = 8; } else { } } } } } } } } lcd.setCursor(uscita+5,0); lcd.print(uscita+1); lcd.setCursor(uscita+5,1); lcd.print(verifi1); //delay(250); verifi1 = 0; } delay(2000); // } //} //} } |