Modem Hayes con Arduino e modulo ethernet ENC28J60

Scritto il 24 marzo 2021 da

Avevo nel cassetto questo modulo ethernet ENC28J60, acquistato mesi fa e praticamente mai usato, così ho pensato di poterlo utilizzare per realizzare un modem Hayes-compatibile su rete cablata ethernet. Potrebbe essere una valida alternativa ai modem WiFi per ambienti in cui il segnale non arriva molto bene. Contribuisce anche a ricreare l’affollamento di cavi tipico degli anni passati.

Il chip ENC28J60 di Microchip viene utilizzato per dotare di interfaccia di rete ethernet un microcontrollore in grado di comunicare attraverso una connessione seriale standard SPI, come appunto l’ATMEGA328 di Arduino. Il chip da solo però non basta ed è necessario implementare lo stack TCP/IP tramite software per potersi connettere ad un altro computer attraverso la rete internet, per questo ho utilizzato la libreria UIPEthernet compatibile con l’ENC28J60.

L’emulazione dei comandi Hayes deriva direttamente dall’altro mio progetto WiFiModem con cui ho realizzato l’equivalente per moduli WiFi con ESP8266. Il codice è praticamente identico tranne qualche piccolo adattamento.

Per la connessione al PC ho inizialmente utilizzato la seriale hardware standard che sembrava funzionare correttamente quando Arduino non è collegato tramite USB, tuttavia testando il tutto con altri computer come RC2014 e il mio P8X180 è venuto fuori che, anche se non connesso, l’ATmega8U2 che realizza l’interfaccia USB-Seriale di Arduino, comunque interferisce in qualche modo rendendo la comunicazione impossibile. Ho perciò aggiunto una seriale software sui pin D2 e D3 per il collegamento al PC o retro-computer che non interferisce in alcun modo.

Lo sketch completo è disponibile su GitHub.

Cablaggio del modulo ethernet con Arduino UNO.

Il modulo ENC28J60 si collega ad Arduino tramite i pin associati all’interfaccia SPI. Essi sono disponibili sia sui connettori in linea standard che sul connettore ICSP a 6 pin posto al centro sul lato destro. Per comodità di rappresentazione ho scelto di collegare i pin sui connettori standard.

ArduinoUno_ENC28J60

ENC28J60 Arduino UNO
CS D10
SI D11
SO D12
SCK D13
RESET RESET
VCC 3.3V
GND GND

Il PC, o altro dispositivo analogo dotato di porta seriale TTL, da utilizzare con il modem, andrà collegato mediante il connettore a 6 pin standard visibile in basso a sinistra.

Serial Arduino UNO
DCE DTE
6 N.C. N.C.
5 D3 D2
4 D2 D3
3 5V (optional) 5V (optional)
2 N.C. N.C.
1 GND GND

Non è previsto l’utilizzo dei segnali di controllo di flusso hardware RTS/CTS. Il pin D4 viene posto a 1 quando il modem è collegato ad un server e può essere utilizzato come segnale DCD (Data Carrier Detect).

Il pin 3 può essere utilizzato per alimentare Arduino e il modulo ENC28J60 dal dispositivo seriale connesso o, viceversa, per alimentare il dispositivo seriale tramite Arduino. In entrambi i casi assicurarsi che venga erogata abbastanza corrente da sostenere tutti i dispositivi.

Il cablaggio DCE va utilizzato se il modem è connesso ad un PC tramite un adattatore USB-Seriale standard. Il cablaggio DTE va utilizzato per tutti quei dispositivi a cui normalmente viene collegato un adattatore USB-Seriale per PC (ad esempio il computer Z80 RC2014 è uno di questi). La differenza tra i due riguarda la direzione dei pin 4 e 5.

Galleria Immagini

Arduino-ENC28J60-1Arduino-ENC28J60-2
Arduino-ENC28J60-Minicom1Arduino-ENC28J60-Minicom2