Hoi,

Ik heb deze schakeling nagenoeg nagebouwd (pagina 2):

http://www.mikroe.com/eng/downloads/get/552/nl_article_c_pic_02_09.pdf

De enige verschillen zijn:

Als PIC heb ik een 18F4550 gebruikt, zodat ik de MCU via USB kan programmeren. Er zit dus ook een self-powered USB circuit bij. De SPI pinnen zitten ook elders, maar dat moet niet uitmaken. Wegens een vermeende silicon bug in de ENC28J60 gebruik ik een 20 MHz kristal ipv 8 MHz en schaal ik intern naar 32 MHz als Fosc. SPI draait op Fosc/4 = 8 MHz, wat volgens het erratum binnen de spec moet zijn (tussen 8 en 10 MHz SPI SCK). Ik heb dit nagemeten met Logic Analyzer (LA) en krijg 8.33 MHz (120 ns voor een klokpuls).

Verder heb ik als level shifter een BS170 MOSfet gebruikt, zoals beschreven in deze appnote, sectie 2.3 / pag. 10 (geweldige oplossing voor 3v3 naar 5v level shifting, heeft me al vaak geholpen, dus bedankt Herman Schutte van NXP/Philips!):

http://www.kip.uni-heidelberg.de/lhcb/Publications/external/AN97055.pd…

Deze BS170 heeft als switching characteristics een on time van 10 ns, en ook een off time van 10 ns max. 1 klokpuls = 1 x aan en 1 x uit, dus de MOS kan max 20 ns switchtimes op een kloklijn aan. Dat is 50 MHz, en mijn SPI klok komt op 8.33 MHz, dus moet kunnen. De 100 ohm weerstanden op de '5V tolerant' lijnen zijn bij mij 47 ohm, hoewel ook dat niet kritiek zou mogen zijn.

Allereerst heb ik de schakeling op breadboard gebouwd en aan mijn labvoeding gehangen. Deze werkte eigenlijk gelijk prima. Ik heb in de PIC een voorbeeldprogramma van MikroElektronika (in MikroC) gezet, en ik kan mijn kersverse 'webserver' bereiken via een browser. Daarna heb ik de schakeling op een experimenteerprint gesoldeerd. Letterlijk component voor component overgenomen. Maar die schakeling werkt niet!

Ben nou al een dag bezig met vergelijken wat ik anders heb gedaan of had moeten doen, maar ik kom er niet uit. Enige echte verschil is de voeding op de print: Als voeding gebruik ik een 7805 (5V) met propere buffer / ontkoppeling en daar direct achter in cascade een LD1117AV33 (3V3), met daarachter ook weer ontkoppeling. Deze heb ik al losgehad en direct de print aan de labvoeding: maakte niet uit, dus dat is het niet denk ik.

Alles doorgemeten, spanningen gecontroleerd, geen onregelmatigheden geconstateerd, PIC werkt ook gewoon, want ik kan er een bootloader opzetten en de print via USB aan de PC hangen en hem dan gewoon programmeren, dus alles lijkt prima. Ethernetlampjes gaan branden en de SPI geeft een LA trace die er zowel op breadboard als print ongeveer hetzelfde uitziet, zie hier:

http://www.gieling.nu/dl/LAtrace.png

Ik denk dat SDO iets te vroeg komt en dat SDI ronduit weird is, maar het ziet er op het breadboard hetzelfde uit en daar werkt het wel!

In welke hoek moet ik gaan zoeken? EMI, HF ringing / reflecties (maximale spoorafstand is een paar cm), Ground problemen (heb alle ground aan elkaar met zo groot mogelijk oppervlak), propagation delay, noise, etc. Ik heb naar een aantal van deze zaken al gekeken, maar ik heb nog niks kunnen vinden dat de doorslag gaf. Wat is er zo anders aan een breadboard dat het daarop wel werkt?

Jullie reacties worden op prijs gesteld!

Op 11 mei 2011 17:35:51 schreef BigDaddy:
Wegens een vermeende silicon bug in de ENC28J60 gebruik ik een 20 MHz kristal ipv 8 MHz en schaal ik intern naar 32 MHz als Fosc. SPI draait op Fosc/4 = 8 MHz, wat volgens het erratum binnen de spec moet zijn (tussen 8 en 10 MHz SPI SCK). Ik heb dit nagemeten met Logic Analyzer (LA) en krijg 8.33 MHz (120 ns voor een klokpuls).

De enc heeft toch een 25MHz kristal nodig?

Hey, bedankt voor je reactie!

Uiteraard heeft de ENC 25 MHz nodig, en dat heeft die ook. Ik doelde op de PIC, die in het bijgevoegde schema een 8 MHz kristal heeft. Daar heb ik 20 van gemaakt. Dan met de CFG bits div5 = 4 MHz PLL input, PLL doet 'maal 24' = 96 MHz PLL output en die dan enerzijds div 2 voor USB (48 MHz full speed USB) en anderzijds div 3 voor de CPU clock = 96/3 = 32 MHz. Van die 32 MHz maakt de SPI CLK: Fosc / 4 = 32 / 4 = 8 MHz, wat in de praktijk om onduidelijke redenen 8.33 MHz wordt als ik het nameet. Voor zover ik ze verder kan nameten kloppen deze klokken allemaal.