Modulo Eth ENC28J60

Ciao a tutti, questo è il mio secondo post.

Ho un scheda Arduino Uno rev3 originale(ATmega 328P con microcontrollore lungo con i piedini) e un paio di cinesi con atmega328 smd.

Solitamente faccio le prove con le cinesi e poi riverso sull'italiana per utilizzare i miei progetti.

Per tutti i compenenti/sensori utilizzati finora mai avuto problemi tranne adesso con il modulo eth ENC28J60

sto testanto questo sketch da diversi giorni. (ma anche con altri stesso errore)

Dopo aver cambiato ponticelli, pin, schede ecc, ho scoperto che:

Con la scheda originale tutto funziona al primo colpo, con quelle cinesi restituisce errore "Failed to access Ethernet controller
"

Non dovrebbero essere identiche? Potrebbe cambiare qualcosa nella libreria? O davvero è colpa dei cinesi? collegato su pin 13 12 11 e 8.

Io utlizzo questa libreria GitHub - njh/EtherCard: EtherCard is an IPv4 driver for the ENC28J60 chip, compatible with Arduino IDE

Grazie

Devi aggiungere il pin a cui hai collegato il CS

if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0)

Posta anche una foto del modulo che stai usando. L'ENC, come l'ESP8266, va alimentato a 3.3V ma consuma parecchio, più di quanto il regolatore montato su Arduino è in grado di fornire. Probabilmente il regolatore dell'Arduino originale è di qualità migliore e riesce a fornire più corrente degli altri, per cui la scheda "funzionicchia", ma la soluzione vera è una di quelle che si usano sull'ESP, vedi la mia guida in firma, solo per la parte di alimentazione.

Non è invece necessario adattare i segnali, in quanto l'ENC è 5V-tolerant.

Ottima guida...grande!

Penso sia come dici tu. Non basta la corrente. Siccome dovrò aggiungere al progetto anche un lettore RFID in futuro ed essendo tutti e due 3.3volt opterò per un alimentatore esterno.

In allegato i 2 moduli che ho testato. Entrami funzionano con originale e non con cinese.

20180421 153427 hosted at ImgBB — ImgBB

ti terrò aggiornato...appena avrò alimentatore tra le mani.

grazie

Ok, non vedo regolatori su nessuno dei due, per cui dovrai pensarci tu.

brunello22:

Devi aggiungere il pin a cui hai collegato il CS
if (ether.begin(sizeof Ethernet::buffer, mymac, 8) == 0)

Scusate, ma alla fine quell'8 va messo oppure no ?

acik:
Scusate, ma alla fine quell'8 va messo oppure no ?

... hai letto il post di Brunello ... o hai guardato solo la riga del codice ?

brunello22:

Devi aggiungere [b]il pin a cui hai collegato il CS[/b]

Guglielmo

Caro Guglielmo,
ovviamente ho letto tutto il thread, poi mi sono letto la sua pagina:

Dove non e' stato coretto il codice come ha detto brunello22.

A questo punto la domanda sorge spontanea... (Visto che molte librerie, se non specificato, prendono i valori di default)

... non ho capito che dubbio hai ::slight_smile:

Se vai alla libreria indicata dal OP, ovvero QUESTA, nel file EtherCard.cpp, alla linea 405 c'è il metodo begin che, appunto, prevede tale pin e NON ha un valore di default:

uint8_t EtherCard::begin (const uint16_t size,
                          const uint8_t* macaddr,
                          uint8_t csPin) {

Cosa non ti quadra ?

Guglielmo

gpb01:
Cosa non ti quadra ?

Non quadra il fatto che funziona anche senza. :wink:

Provato adesso.

Il valore di default è nel file .h.

SukkoPera:
Il valore di default è nel file .h.

Aha ... nascosto :smiley: :smiley: :smiley:

Guglielmo

Veramente il C++ ti obbliga a fare così ;).

SukkoPera:
Veramente il C++ ti obbliga s fare così ;).

Sai bene che sono un "purista" del "ANSI C" :smiley: :smiley: :smiley:

Guglielmo