TESTER ETHERNET

Descriere Proiect

Teste Ethernet: Verificare daca este buna cablarea si eventual afisarea pe un LCD a rezultatului verificarii si tipul acesteia: straight, crossover sau rollover. Afisarea a 10 tipuri diferte de teste pe LCD

Testele implementate in proiect

1) Testerul va afisa pe ecran firele asa cum sunt conectate intre cele doua mufe.

2) Se afiseaza daca un fir este corect conectat. In caz ca nu avem conexiune corecta se va desena o linie intrerupta si mufa la care s-a detectat eroarea.

3) Se afiseaza daca un cablu este intrerupt.

Teste pentru 3 tipuri de cablu:

      4) straight-through
      
      5) crossover
      
      6) rollover
      

7) Afiseaza lungimea cablului.

8) Trimite un numar egal de pachete pe fiecare fir si contorizeaza la celalat capat ⇒ afiseaza procentajul de pachete care au ajuns la destinatie pentru tot cablul (eventual pentru fiecare din cele 8 fire in parte)

9) Calculeaza lungimea cablului

10) Verificarea conditiilor pentru CAT5 respectiv CAT5e <sau alternativ> voi implementa teste pentru attenuation, crosstalk (inca nu stiu exact cum)

Hardware Design

Design ENC28J60 - controller Ethernet cu interfata SPI

Software Design

Pentru comunicrea cu LCD-ul am folosit API-ul definit in laboratorul de PM:

/************************************************************************ 
 * DEFINE-uri pentru parametrizarea modulului LCD
 ************************************************************************/
#define LcdDATA_DDR		DDRA			// Portul pe care conectam firele de date la LCD-ul
#define LcdDATA_PORT		PORTA
#define LcdDATA_PIN		PINA
 
#define LcdCMD_DDR		DDRA	        // Portul pe care conectam firele de comenzi la LCD
#define LcdCMD_PORT		PORTA
#define LcdCMD_PIN		PINA
 
#define LcdD4			 PA0		// Pin-ul pentru firul de date D4 de pe LCD
#define LcdD5			 PA1		// Pin-ul pentru firul de date D5 de pe LCD
#define LcdD6			 PA2		// Pin-ul pentru firul de date D6 de pe LCD
#define LcdD7			 PA3		// Pin-ul pentru firul de date D7 de pe LCD
 
#define LcdRS			 PA4	        // Pinul pentru selectare operatie (LCD)
#define LcdRW			 PA5		// Pinul pentru Read/ Write (LCD)
#define LcdE			 PA6		// Pinul de Enable (LCD)
 
#define LCD_INSTR_4wire 		0x28 	// 4 fire date, font 5x8
#define LCD_INSTR_display 		0x0C 	// Display On, Cursor On, Blinking On ( 1 Display Cursor Blink )
#define LCD_INSTR_clearDisplay  	0x01 	// Clear Display
#define LCD_INSTR_returnHome		0x02 	// Return Cursor and LCD to Home Position
#define LCD_INSTR_nextLine 		0xC0 	// Return Cursor and LCD to Home Position
#define LCD_INSTR_gotoCGRAM		0x40	// go to Character Generator RAM
 
/*************
 * API LCD   *
 *************/
void LCD_init();                                        // Initializare modul LCD.Trebuie apelata inainte de a se face orice operatie cu LCD-ul
void LCD_writeInstruction(unsigned char _instruction);	// Trimite o instructiune catre lcd (vezi datasheet)
void LCD_writeData(unsigned char _data);		// Trimite date catre LCD pentru afisare
void LCD_write(unsigned char _byte);			// trimite un bute catre LCD la modul general (nu conteaza daca e instructiune sau date)
void LCD_waitNotBusy();					// Asteptam pana cand lcd-ul devine disponibil pt o noua comanda
void LCD_waitInstructions(unsigned char _instructions);	// Asteapta un numar de cicli de ceas.
void LCD_print(char* _msg);				// Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere)
void LCD_print2(char* _msg1, char* _msg2);		// Afisare pe 2 lini pe LCD
void LCD_printDecimal2u(unsigned int _n);		// Afisare numar in baza 10 pe LCD
void LCD_printHexa(unsigned int _n);			// Afisare numar in baza 16 pe LCD

Pentru programarea: Design ENC28J60 - controller Ethernet cu interfata SPI, am folosit functiile:

    // SPI operation codes
#define ENC28J60_READ_CTRL_REG       0x00
#define ENC28J60_READ_BUF_MEM        0x3A
#define ENC28J60_WRITE_CTRL_REG      0x40
#define ENC28J60_WRITE_BUF_MEM       0x7A
#define ENC28J60_BIT_FIELD_SET       0x80
#define ENC28J60_BIT_FIELD_CLR       0xA0
#define ENC28J60_SOFT_RESET          0xFF

     // functions
extern uint8_t enc28j60ReadOp(uint8_t op, uint8_t address);
extern void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data);
extern void enc28j60ReadBuffer(uint16_t len, uint8_t* data);
extern void enc28j60WriteBuffer(uint16_t len, uint8_t* data);
extern void enc28j60SetBank(uint8_t address);
extern uint8_t enc28j60Read(uint8_t address);
extern void enc28j60Write(uint8_t address, uint8_t data);
extern void enc28j60PhyWrite(uint8_t address, uint16_t data);
extern void enc28j60Init(uint8_t* macaddr);
extern void enc28j60PacketSend(uint16_t len, uint8_t* packet);
extern uint16_t enc28j60PacketReceive(uint16_t maxlen, uint8_t* packet);
extern uint8_t enc28j60getrev(void);

Rezultate Obţinute

Bibliografie/Resurse

pm/prj2010/pgp/tester_ethernet.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0