Acolo am învățat cum să realizăm un cablu UTP pentru rețele Ethernet,
Procesul poarta numele de sertizare.
După realizarea cablului, acesta trebuie verificat ca functioneaza corect - adică dacă are continuitate.
Testarea se face folosind un dispozitiv dedicat.
De aici a pornit ideea proiectului meu: realizarea propriului meu tester RJ45,
caruia i-am adus o serie de îmbunătățiri.
Care este scopul proiectului?
Dispozitivul proiectat permite testarea cablurilor de rețea de tip RJ45, oferind feedback vizual și auditiv privind corectitudinea conexiunilor dintre pini.
Prin simpla apăsare a unui buton, utilizatorul poate selecta tipul de cablu testat:
Straight-through - pentru conectarea dispozitivelor aflate pe layere diferite (ex: PC – switch)
Crossover - pentru conectarea dispozitivelor de același layer (ex: PC – PC)
Rollover (numit si cablu de consola) - pentru a conecta un dispozitiv la un echipament de retea si pentru a avea acces direct la CLI
După selectare, pe ecranul principal (128×160 SPI) este afișată o imagine cu ordinea corectă a firelor pentru tipul respectiv de cablu.
Ce face?
Se folosesc 2 socketi: unul dedicat pentru sender, iar celălalt pentru receiver
Fiecare soclu RJ-45 are 8 pini
Fiecărui pin RJ-45 îi este asociat un LED de culoare verde care se va aprinde atunci când semnalul transmis/primit pe pinul respectiv este de 1 logic.
În momentul în care socket-ul de receiver recepționează 1 logic, buzzer-ul va emite un beep scurt
Testarea efectivă presupune 2 verificări:
Se vor trimite semnale, secvențial, iterând pinii sender-ului unul câte unul, cu mici pauze între transmisii,
urmând un test final în care se vor activa simultan toți pinii sender-ului
Testarea poate fi oprită forțat, în orice moment, prin apăsarea unui buton.
În timp ce display-ul pe SPI (de rezoluție mai mare) afișează ordinea firelor în mufa RJ-45, LCD-ul cu modul I2C va scrie pe ecran tipul de cablu straight-through\crossover\rollover și indexul pinului de pe sender de pe care se trimit semnale (ex: Testing pin 1…8), sau mesajul Testing all pins.
De ce este util?
Consider că folosirea ecranelor face diferența dintre un tester RJ-45 obișnuit și acest dispozitiv.
Practic, este un instrument „2 în 1”: tester + ghid de conectare.
Sper ca dispozitivul pe care îl proiectez (îmi propun să îi fac și un PCB compact) să ajungă în mâinile laboranților de RL/CCNA1. Acolo își va atinge adevăratul potențial.
Size matters: cele de 22 AWG se conecteaza cel mai bine in breadboard
Calalalt tip de fire (silicon - multifilar): sunt bune de lipit, dar in niciun caz nu se pot infige intr-un breadboard
Schema electrica
Pin configurations
Arduino
Pin Arduino
Corespondent
D2
Butonul albastru (BTN1)
D3
Butonul rosu (BTN2)
D4
Butonul alb (BTN3)
D5
Buzzer pasiv
D6
Data OUT 74HC595 (SER)
D7
Latch 74HC595 (RCLK)
D8
Clock 74HC595 (SRCLK)
D9
RS-Display
D10
CS-Diplsay
D11
(SPI) MOSI
D12
(SPI) MISO
D13
(SPI) SCK
D14 (etichetat A0)
Data IN 74HC165
D15 (etichetat A1)
PL 74HC165
D16 (etichetat A2)
CLK 74HC165
A4
(I2C) SDA
A5
(I2C) SCL
160x128 Display (pe SPI)
Denumire pin
Descriere
Vcc
GND
Ground
NC
Not Connected (nu se conecteaza la nimic)
CLK
Clock
SDA
este pinul de MOSI (foarte confuz ca au scris SDA in loc de MOSI)
RS
Register Select
RST
Reset
CS
Chip Select
Pinul RS (Register Select) este cunoscut si sub numele de DC (Data Command).
Acest pin indica daca datele trimise pe SPI sunt:
comenzi (e.g.: seteaza pozitia cursorului)
date (e.g. afiseaza pixeli pe ecran)
Pinul are urmaoare functionalitate:
Daca RS/DC = 0 → comanda
Daca RS/DC = 1 → date
Pin Display SPI
Corespondent
Vcc
5V
GND
GND
NC
nu se conecteaza la nimic
CLK
Arduino D13 (SPI SCK)
SDA
Arduino D11 (SPI MOSI)
RS
Arduino D9
RST
Arduino RESET
CS
Arduino D10
74HC595 shift register
Shift register-ul 74HC595 are o singura intrare si 8 iesiri paralele.
Index pin 74HC595
Denumire pin 74HC595
Corespondent
15
QA
LED 1 (cel mai de sus) & pin 1 socket RJ-45 sender
1
QB
LED 2 (al doilea cel mai de sus) & pin 2 socket RJ-45 sender
2
QC
LED 3 & pin 3 socket RJ-45 sender
3
QD
LED 4 & pin 4 socket RJ-45 sender
4
QE
LED 5 & pin 5 socket RJ-45 sender
5
QF
LED 6 & pin 6 socket RJ-45 sender
6
QG
LED 7 & pin 7 socket RJ-45 sender
7
QH
LED 8 & pin 8 socket RJ-45 sender
8
GND
GND
9
!QH
nu este conectat
10
!SRCLR
5V
11
SRCLK
Arduino D8
12
RCLK
Arduino D7
13
!OE
GND
14
SER
Arduino D6
16
Vcc
5V
LED-ul la care fac referire aici sunt cele din partea stanga, asociata sender-ului.
74HC165 shift register
Shift register-ul 74HC165 are o singura iesire si 8 intrari paralele.
Index pin 74HC165
Denumire pin 74HC165
Corespondent
7
!QH
nu este conectat
9
QH
Arduino D14 (etichetat A0)
1
SH/!LD
Arduino D15 (etichetat A1)
2
CLK
Arduino D16 (etichetat A2)
8
GND
GND
16
Vcc
5V
10
SER
GND
15
CLK INH
GND
11
A (out1)
LED 1 (cel mai de sus) & pin 1 socket RJ-45 receiver
12
B (out1)
LED 2 (al doilea cel mai de sus) & pin 2 socket RJ-45 receiver
13
C (out1)
LED 3 & pin 2 socket RJ-45 receiver
14
D (out1)
LED 4 & pin 3 socket RJ-45 receiver
3
E (out1)
LED 5 & pin 4 socket RJ-45 receiver
4
F (out1)
LED 6 & pin 5 socket RJ-45 receiver
5
G (out1)
LED 7 & pin 6 socket RJ-45 receiver
6
H (out1)
LED 8 & pin 7 socket RJ-45 receiver
LED-ul la care fac referire aici sunt cele din partea dreapta, asociata receiver-ului.
Debounce butoane: Filtru trece-jos
Pentru a trata debounce-ul butoanelor exclusiv din hardware,
m-am gandit sa introduc in circuit un filtru trece-jos,
punand cate un condensator ceramic in paralel cu fiecare buton.
Butonul rosu - intreruperea INT1 - opreste fortat rularea testului
Butonul alb - intreruperea PCINT20 (din PCINT2_vect) - porneste algoritmul de testare:
Descrierile functiilor:
ISR(INT0_vect):
rutina de tratare a intreruperii, generata la apasarea butonului albastru (schimba tipul de cablare)
Marcheaza flag-ul volatile bool pressedBTN1
ISR(INT1_vect):
rutina de tratare a intreruperii, generata la apasarea butonului rosu (oprirea fortata a algoritmului de testare)
Marcheaza flag-ul volatile bool pressedBTN2
ISR(PCINT2_vect):
rutina de tratare a intreruperii, generata la apasarea butonului alb (pornirea algoritmului de testare)
Marcheaza flag-ul volatile bool pressedBTN3
void beep_okay():
controleaza buzzer-ul sa emita bazait scurt, in semn ca totul este in regula
void beep_not_okay():
controleaza buzzer-ul sa emita un semnal sonor de eroare
void cable_type_first_line_lcd():
scrie tipul de cablare pe prima linia a LCD-ului de rezolutie 16×02
void cable_mode_full_lcd():
scrie pe textul “Mode:” pe prima linia a display-ului secundar (cel pe I2C, de 16×02),
iar pe a doua, tipul de cablare
void force_stop_handler():
Functia este apelata in urma apasarii butonului rosu.
Opreste fortat algoritmul de testare,
dar nu inainte de a afisa pe ecranul LCD pe I2C un mesaj sugestiv in acest sens: lcd.print(“Force stop!”);
void write_to_sender_socket():
Variabila bool pinsSenderSocket[8] retine starea pinilor din mufa RJ-45 de transmisie
Functia scrie valorile din bool pinsSenderSocket[8] in shift register-ul 74HC595,
Scrierea (chiar si pe un singur pin) al socket-ului sender presupune scrierea tuturor celor 8 valori catre shift register, in ordine inversa (intrucat acesta foloseste MSB: prima valoare primita va fi asociata ultimului pin)
void init_sender_pins():
Este apelata la pornirea micro-controler-ului
pentru a trata starea initiala indefinita
(uneori LED-uri se pot aprinde aleator, fara ca eu nici macar sa fi scris ceva in shift register)
a shift register-ului 74HC595, asociat socket-ului sender.
void fetch_receiver_socket():
Citeste valorile de pe shift register-ul 74HC165 (asociat socket-ului receiver)
si le scrie in variabila bool pinsReceiverSocket[8];
bool is_correct_wiring(int pin_index):
Apeleaza is_correct_wiring pentru a citi semnalele de pinii socket-ului receiver
Si verifica daca valorile corespund unei cablari corecte, in raport cu indexul pinului activat pe mufa RJ-45 de transmisie
int test_individual_rj45_pins():
Algoritmul propriu zis de testare
Parcurge iterativ, de la 1 la 8, toti pinii socket-ului sender si
Scrie pe ecranul secundar (16×02): modul de cablare, indexul pinului RJ-45 de transmisie si indexul corect pe care se asteapta sa primeasca semnal de pe pinul RJ-45 de receptie
Scrie “1 logic” in iesirea (shift register-ului) 74HC595 corespunzatoare pinului ales: lucru care va produce aprinderea unui LED
Ruleaza un mic delay() pentru a ma asigura ca semnalul are timp sa ajunga de la un capat la altul
Apeleaza functia is_correct_wiring pentru a afla daca semnalul ajuns unde trebuie:
Daca da, va scrie in “OK” in coltul dreapta-jos al display-ului secundar si va emite un bapait scurt
Altfel, va scrie “NOK” pe LCD si va produce un sunet de avertistment
Functia verifica constant daca butonul rosu a fost apasat (flag-ul pressedBTN2 a fost setat), caz in care opreste fortat algorimul de testare, apeland force_stop_handler() in cod
Dat fiind faptul ca nu am avut succes la afisarea pe ecranul 160×128 a unor imagini .bmp luate de pe un card microSD, a trebuit sa renunt complet la modulul microSD
In alta ordine de idei, pentru a desena modul de cablare, am mers pe o idee mai programatica, EGC-style: m-am apucat si am desenat eu dreptunghiuri pe ecran, colorandu-ule corespunzator. Rezultatul final cred ca este mult mai bun decat daca as fi transformat niste screen-shoot-uri la imagini .bmp de rezolutie joasa
Cateva probleme pe care le-am intampinat in timpul acestui proiect au fost create de shift register-ul 74HC595 (cel cu 8 iesiri paralele):
Are o stare initiala random (am rezolvat scriind 0 logic pe toate iesirile)
Exista un delay (am observat ca este undeva la 200-300 ms) din momentul in care dau o valoare inspre shift register si momentul in care semnalul iese corect din acesta