Besten mensen,

pas geleden heb ik dit http://www.olimex.com/dev/enc28j60-h.html bordje gekocht.

nu heb ik op mijn steekbordje een pic zitten en deze chip. voor de pic heb ik een gestabiliseerde 5v voeding(IC-7805-TO220) en achter die 5 v voeding ook een gestabiliseerde 3v voeding voor het enc28j60 bordje.

nu staat er in de datasheet van het bordje dat de plus 3v op pin 10 zit en de gnd op pin 9. maar als ik dit zo aansluit dan word mijn 5 volt regeling erg heet net als of het bordje kortsluiting maakt.

zie ik wat over het hoofd? of neem dat chipje zoveel stroom op??

met vriendelijk groet,

gerben

Indien actief trekt de ENC28J60 tegen de 200mA, dus als je geen goede koeling (en ook misschien nog een hoge ingangsspanning) hebt, kan de boel behoorlijk warm worden.
Is dat boardje eigenlijk wel geschikt om aan een 5v PIC te hangen? Ik zie n.l. nergens level-shifters, zoals bijv. op dit boardje. (Zit een 74LVC1T45 op voor 3.3 <-> 5.0v translation)

oke me ingangspanning is 18 volt gelijk op me 5 v regelaar. ik heb net een stroom gemeten van 130mA dus dat kan wel kloppen.

verder heb ik hem nog niet aangesloten op me PIC maar in deze datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/39662c.pdf staat 5V Tolerant Inputs maar heb ik dan toch zoon levelshifter nodig?

PS misschien maargoed dat ik hem dat nog niet een me pic heb aangeloten hahah

[Bericht gewijzigd door Henry S. op (38%)]

Het zou kunnen werken, maar ook niet. (zonder extra aanpassing)

VIH van een PIC SSP (S/T input) is 0.8*Vdd = 4v (5v PIC)
VOH van de ENC28J60 is Vdd-0.7 = 2.6v

Is natuurlijk wel worst-case, maar toch...

maar kan ik het risco lopen dat ik mijn enc28j60 chip stuk maak zonder shifter?

dus ik kan beter zoon lever shifter er tussen zetten, maar waar kan ik zoon levershifter kopen? ik heb al bij Voti en conrad gekeken maar die hadden beide niet.

Als de inputs 5v tolerant zijn, is er geen gevaar voor beschadigingen. Enige gevaar is dat de communicatie niet goed gaat, omdat de logische levels niet overeen stemmen...

Farnell heeft ze trouwens wel: http://nl.farnell.com/texas-instruments/sn74lvc1t45dckt/bus-transceive…

[Bericht gewijzigd door Arco op (30%)]

oke top! ik ga het gewoon even testen en werkt het niet koop ik van die levelshifters.

dan heb ik nog een heel klein vraagje hahahah met wat voor programmatje kan ik zien of er data van mijn enc28j60 binnen komt op mijn pc?

groetjes

Om te kijken of de data die je enc28j60 verstuurt op de pc binnen komt kun je wireshark gebruiken. Maar ik denk dat het verstandiger is om eerst de communicatie tussen pic en de enc28j60 te testen.

Ik ben zelf ook met het olimex bordje aan het spelen, en kwam er na 5 uur achter dat mijn SPI clock niet goed was.

Als je wilt heb ik een leuk stukje code om de leds te laten knipperen zodat je kunt zien dat je communicatie tussen ENC en PIC goed werkt.

[Bericht gewijzigd door Archer op (23%)]

oke dat zou heel mooi zijn als je die code wilt geven. dan weet ik zeker dat de hardware enzo goed is. maar heb jij tussen je pic en je enc28j60 level shifters zitten?

groetjes gerben

Ik had zoals je zelf ook aangaf in de datasheet gezien dat de enc28j60 5v tolerant is, dus ik heb er niets tussen zitten. Ik heb 3 olimex bordjes en op alle 3 werkt de "knipper code" zonder level shifting, dus ik denk dat het gewoon moet werken.

Hier is een deel van mijn driver in BoostC

void enc28j60_CTRL_W(char address, char data) {
  SPI_CS = 0;
  spi_transfer(WRITE_CONTROL_REGISTER | address);
  spi_transfer(data);
  SPI_CS = 1;
}

void enc28j60_bank2() {enc28j60_CTRL_W(ECON1,11010010b);} //Go to bank 2

void enc28j60_PHY_W(char address, char data1,char data0) {
  enc28j60_CTRL_W(MIREGADR,address);
  enc28j60_CTRL_W(MIWRL,data0);
  enc28j60_CTRL_W(MIWRH,data1);
  delay_us(12);	
}

void enc28j60_flash_leds()
{
  enc28j60_bank2();	

  enc28j60_PHY_W(PHLCON,10010000b,00111000b);
  delay_ms(100);

  enc28j60_PHY_W(PHLCON,10000000b,00111001b);
  delay_ms(100);
}

maak een while(1) loop en roep de flash_leds functie aan in de loop. Als het werkt gaan de leds knipperen.

succes

oke heren hartelijk dank voor de tijd en uitleg. dan ga ik eens verder proberen of ik het aan de gang krijg.

Met vriendelijke groet,

Gerben

sorry gerben, ik heb de code aangepast nadat ik de leds had laten knipperen waardoor de code niet meer werkt.

Je moet de binaire waardes omdraaien, zoals hier:

void enc28j60_flash_leds()
{
  enc28j60_bank2();	
 
  enc28j60_PHY_W(PHLCON,00111000b,10010000b);
  delay_ms(100);
 
  enc28j60_PHY_W(PHLCON,00111001b,10000000b);
  delay_ms(100);
}

Ik heb dit gedaan om de 16bits waarde makkelijker te lezen.

oke geeft niet hoor.ik programeer met proton maar als ik die bits wegstuur dan knipperd mijn groene led netjes dus. maar wat geven de 2 leds normaal gesproken aan? dat er data word verstuurd en ontvangen??

[Bericht gewijzigd door gerben_1988 op (32%)]

met mijn code zouden beide leds afwisselend moeten knipperen, maar als het werkt is het goed. Je kunt zelf instellen wat de leds moeten weergeven, maar standaard is groen de link status en oranje ontvangen data. (zie pagina 11 in de datasheet)

!!! YES !!!
Ik heb net mijn eerste pakketje verstuurt en ontvangen met wireshark. Het is wel een zeer minimaal pakketje, broadcast MAC en source MAC en daarna de text "HELLO WORLD ON ETHERNET". Wireshark zegt wel dat het pakket beschadigd is, maar de data komt aan.

oke dan denk ik dat er wat fout gaat bij mijn. die groen knipperd alleen.(als die verbonden zit met me pc) en die orane doet niks.

ik heb hem volgens dit schema aan gesloten http://members.home.nl/hobbycorner/images/schema_ds.gif

maargoed er zal miss nog wel ergens een foutje zitten in me code zitten vrees ik.

oke kijk dat is beter!!!

ik ben zelf bijna 5 uur bezig geweest om die leds te laten knipperen.

Het is normaal dat groen aangaat als je de kabel erin stopt. Het leuke van mijn code is juist dat het werkt zonder aangesloten kabel, dus ik denk inderdaad dat je code nog niet helemaal werkt.

een paar tips:

Ik weet niet welke PIC je gebruikt maar op de 16F72 gebruik ik deze instellingen voor hardware SPI:

  sspstat = 01000000b;
  sspcon  = 00100000b;

probeer ook eerst 0x55 naar een control register te schrijven en die uit te lezen, en gebruik een led om aan te geven of de uit gelezen waarde klopt. zet de led kort aan en lang uit als het niet klopt, en drie keer snel aan/uit als het wel klopt. Ik was echt zeer blij toen ik die led 3 keer zag knipperen :)

succes

ahaa ik zal die instellingen is proberen en me iets meer verdiepen is SPI want ik heb daar nog niet zo heel veel mee gewerkt dus.

maar ik gebruikt een pic 18f452.

maar als je daar lang mee bezig bent dan is het een hele opluchting ja als je de leds kunt laten knipperen.haha

dank voor de tips en uitleg

ben de hele middag al bezig geweest maar ik krijg die leds niet knipperend.:(

ik heb nu deze code.



DEVICE 18F452
XTAL = 20 
CONFIG_START
OSC   = HS  ; HS Oscillator
PWRT  = ON  ; Enabled
BOR   = OFF  ; Enabled
;BORV  = 42  ; 4.2V
WDT   = OFF ; Disabled
LVP   = OFF ; Disabled
DEBUG = OFF ; Disabled
CONFIG_END

ALL_DIGITAL = TRUE
        ;76543210
PORTA =   %000000                  ; hier..
PORTB = %00000000                  ; .....alle..
PORTC = %00000000                  ; ..........poorten..
PORTD = %00000000                  ; ..................eerst..
PORTE =      %000                  ; ........................laag maken.

;poorten 76543210
TRISA =   %000000                  ;hier..
TRISB = %11111111                  ;.....alle..
TRISC = %10010000                  ;..........poorten..
TRISD = %00000011                  ;..................instellen.
TRISE =      %000

;REGISTERS VOOR SPI
SSPSTAT = %01000000                ; Status register voor SPI instellen.
SSPCON1 = %00100000                ; Controlregister 1 voor SPI instellen.



;variabelen
SYMBOL CS       PORTE.2 'CS chip select
SYMBOL Mosi     PORTC.5 'SPI uit naar ENCJ60
SYMBOL Miso     PORTC.4 'SPI in van ENC26J60
SYMBOL SCLK     PORTC.3 'SPI clock 

CLEAR

DELAYMS 2000    ; alles tot rust laten komen.


WHILE 1=1

  CS = 0         
  SHOUT Mosi,SCLK,0,[00111000b,10010000b]

  DELAYMS 300

  SHOUT Mosi,SCLK,0,[00111001b,10000000b] 
  DELAYMS 300
  CS = 1
  
WEND
END

END

miss dat kan iemand vertellen of ik dat SPI gebeuren goed ingesteld heb?

alvast bedankt
Gerben

Ik denk dat je iets te snel wilt. Je moet eerst een functie/subroutine/gosub constructie maken die 1 command register beschrijft en een andere die het weer uitleest. zoals dit.

void enc28j60_CTRL_W(char address, char data) {
  SPI_CS = 0;
  spi_transfer(WRITE_CONTROL_REGISTER | address);
  spi_transfer(data);
  SPI_CS = 1;
}

char enc28j60_CTRL_R(char address) {
  char value = 0;

  SPI_CS = 0;
  spi_transfer(READ_CONTROL_REGISTER | address);
  value = spi_transfer(0x00);
  SPI_CS = 1;
	
  return value;
}

je kunt (zover ik weet) niet twee control registers beschrijven zonder opnieuw een chip select te doen.

De SPI instellingen die ik je gaf zijn voor de hardware SPI port, maar je gebruikt SHOUT en dat is een software SPI routine. Ik weet niet welke functie in Proton basic de Hardware port gebruikt, maar ik doet het zo:

char spi_transfer(char data)
{
  char SPI_IN;
  sspbuf = data;
  while (sspstat.0 == 0);
  SPI_IN = sspbuf;
  return SPI_IN;
}

Je zult deze voorbeelden moeten vertalen naar Proton Basic maar dan zal het een stuk makkelijker zijn denk ik.

dan vergeet ik nog te zeggen dat dit zo niet nooit zal gaan werken:

  CS = 0         
  SHOUT Mosi,SCLK,0,[00111000b,10010000b]
 
  DELAYMS 300
 
  SHOUT Mosi,SCLK,0,[00111001b,10000000b] 
  DELAYMS 300
  CS = 1

Ik denk dat je de datasheet (en mijn code) nog eens moet gaan bestuderen.

ja ik heb nu net het groene lampje knipperd met een voorbeeld code van iemand op het picbasic forum. ik moet nu alleen eerst die code eens goed bestuderen zodat ik het wel ga snappen. want ik heb SPI eigelijk nog nooit echt toegepast eigelijk.

heb je een link naar dat voorbeeld? dan kijk ik met je mee

in een standaard basic programma word er een file include gedaan en word er dit stukje programma aangeroepen. (helaas wel in ASM)



;******************************************************************************
;*	INITIALIZE ENC28J60 - Macro
;******************************************************************************
INIT_ENC28J60       MACRO                   
                    GOSUB INIT_ENC28J60_SUB
                    ENDM
INIT_ENC28J60_SUB:
                    BSF ETH_CS                                  ; start with SPI disabled
                    BCF ESTAT_CLKRDY                            ; clear ESTAT_CLKRDY bit so we can test it's value
                    WHILE ESTAT_CLKRDY = 0                      ; Loop until ESTAT_CLKRDY = 1
                          ESTAT = READ_ETH_REGISTER ADR_ESTAT   ; so we know that the PHY module is ready
                    WEND                                        ;
                    NIC_SOFT_RESET                              ; ENC28J60 need a Software Reset here
                    DELAYMS 10                                  ; 10ms delay after Software Reset as per datasheet     
                    CLRF ECON1                                  ; Clear the ECON1 register (variable .. copy) 
                    BSF ECON1_RXEN                              ; as we need to clear RXEN, TXRST, BSEL0 and BSEL1 bits,
                    BSF ECON1_TXRST                             ; we need to pass them as "set" to CLEAR_REGISTER_BIT Macro
                    BSF ECON1_BSEL0                             ;
                    BSF ECON1_BSEL1                             ;
                    CLEAR_REGISTER_BIT ADR_ECON1, ECON1         ; All Packets Rx'ed ignored and Tx Logic is Idle for now
                    NEXT_PACKET_POINTER = RX_BUF_START          ; Init next Rx Packet Buf Pointer to Rx Buffer Start Location
                    ; RX Buffer Init
                    WRITE_ETH_REGISTER ADR_ERDPTL,RX_BUF_START  ; Init Hardware Rx Buffer Pointer to the start of  
                    WRITE_ETH_REGISTER ADR_ERDPTH,RX_BUF_STARTH ; declared Rx Buffer value
                    WRITE_ETH_REGISTER ADR_ERXSTL,RX_BUF_START  ; Init Hardware RX Buffer START Location as per declares
                    WRITE_ETH_REGISTER ADR_ERXSTH,RX_BUF_STARTH ;
                    WRITE_ETH_REGISTER ADR_ERXRDPTL,RX_BUF_START  ; see section 7.2.4 "Freeing Receive buffer Space"
                    WRITE_ETH_REGISTER ADR_ERXRDPTH,RX_BUF_STARTH ;
                    WRITE_ETH_REGISTER ADR_ERXNDL,RX_BUF_STOP   ; Init Hardware Rx Buffer END Location as per declares
                    WRITE_ETH_REGISTER ADR_ERXNDH,RX_BUF_STOPH  ;
                    ; TX Buffer Init
                    WRITE_ETH_REGISTER ADR_ETXSTL,TX_BUF_START  ; Init Hardware TX Buffer START Location as per declares
                    WRITE_ETH_REGISTER ADR_ETXSTH,TX_BUF_STARTH ; 
                    ; MAC Init
                    CLRF MACON1                                 ; start with a clear MACON1 as we need to set some bits
                    BSF MACON1_MARXEN                           ; Enable packets to be received by the MAC
                    BSF MACON1_RXPAUS                           ; Inhibit transmissions when pause control frames are received 
                    BSF MACON1_TXPAUS                           ; Allow the MAC to transmit pause control frames
                    WRITE_ETH_REGISTER ADR_MACON1,MACON1        ; Init MACON1 register
	                ;WRITE_ETH_REGISTER ADR_MACON2,0            ; Init MACON2 -- no more in new datasheet
                    CLRF MACON3                                 ; start with a Clear MACON3 As we need To Set some bits
	                BSF MACON3_FRMLNEN                          ; Frame Length Checking Enable
                    BSF MACON3_TXCRCEN                          ; Transmit CRC Enable
                    BSF MACON3_PADCFG0                          ; All short frames zero padded to 60 bytes, andvalid CRC appended
	                ;bsf MACON3_PADCFG1                         ; change to suit your application need
                    ;bsf MACON3_PADCFG2                         ;
                    WRITE_ETH_REGISTER ADR_MACON3,MACON3        ; Init MACON3 register
                    ;clrf MACON4                                 ; start with a clear MACON4 as we need to set some bits
                    ;bsf MACON4_NOBKOFF                          ; No Backoff Enable bit (applies to half duplex only)
                    ;bsf MACON4_DEFER                            ; Defer Transmission Enable bit (applies to half duplex only)
                    ;WRITE_ETH_REGISTER ADR_MACON4,MACON4        ; Init MACON4 register
                    WRITE_ETH_REGISTER ADR_MAIPGL, $12          ; Configure the Non-Back-to-Back Inter-Packet GAP register
	                WRITE_ETH_REGISTER ADR_MAIPGH, $0C          ; For half duplex usage
	                WRITE_ETH_REGISTER ADR_MAMXFLL,MAXFRAME     ; Init the maximum permited frame lentgh for RX or TX
	                WRITE_ETH_REGISTER ADR_MAMXFLH,MAXFRAMEH    ;
	                WRITE_ETH_REGISTER ADR_MABBIPG, $12         ; Init MABBIPG with $15 for full-duplex
	                ; MY MAC ADDRESS
	                WRITE_ETH_REGISTER ADR_MAADR1, MYMAC_5      ; Init ENC28J60 board MAC Address
	                WRITE_ETH_REGISTER ADR_MAADR2, MYMAC_4      ;
	                WRITE_ETH_REGISTER ADR_MAADR3, MYMAC_3      ;
	                WRITE_ETH_REGISTER ADR_MAADR4, MYMAC_2      ;
	                WRITE_ETH_REGISTER ADR_MAADR5, MYMAC_1      ;
	                WRITE_ETH_REGISTER ADR_MAADR6, MYMAC_0      ; 
                    ; PHY Init   See section 6.6 on half or full-duplex. Also see sections 9.1 And 9.2
	                CLRF PHCON2                                 ; start with a Clear PHCON2 As we need To Set some bits
	                CLRF PHCON2H                                ;
                    BSF PHCON2_HDLDIS                           ; PHY Half-Duplex Loopback Disable
                    WRITE_PHY_REGISTER ADR_PHCON2, PHCON2       ; Init PHCON2 register
                    CLRF PHCON1                                 ; start with a Clear PHCON1 As we need To Set some bits
                    CLRF PHCON1H                                ; see section 6.6 On half Or full-duplex
                    WRITE_PHY_REGISTER ADR_PHCON1, PHCON1       ; and section 11.5 PHY Subsystem Reset. 
	                ; PHLCON - LED Status Init
                    CLRF PHLCON                                 ; start with a Clear PHLCON As we need To Set some bits
                    CLRF PHLCONH                                ;
                    ; LED Settings
                    ; Blink fast LEDA
                    BSF PHLCON_LACFG3                           ; 
                    BCF PHLCON_LACFG2                           ; 
                    BSF PHLCON_LACFG1                           ;     
                    BCF PHLCON_LACFG0                           ;      
                    ; Display Rx/Tx activity on Link
                    BSF PHLCON_LBCFG3                           ; display Link Status + Tx and Rx activity On LED B
                    BSF PHLCON_LBCFG2                           ; 
                    BCF PHLCON_LBCFG1                           ;      - " -
                    BSF PHLCON_LBCFG0                           ;      - " -
                    ;
                    BSF PHLCON_STRCH                            ; LED Pulse Stretching Enable
                    WRITE_PHY_REGISTER ADR_PHLCON, PHLCON       ; Init PHLCON register
                    ; Enable Packet reception
                    CLRF ECON1                                  ; Clear the ECON1 register (variable .. copy)
                    BSF ECON1_RXEN                              ; Normal reception enabled
                    SET_REGISTER_BIT ADR_ECON1, ECON1           ; Packet Reception Enabled from here on
                    BSF ETH_CS                                  ; disable SPI
                    RETURN
;******************************************************************************

als ik dit laad in me PIC dan knipperd netjes het groene lampje dus de harware zit igg goed aangsloten.

Dit heb ik net gevonden, iets makkelijker t elezen voor mijn:P. en hier word ook hardware SPI gebruikt en dat is indd een heel anders als dat ik heb hahah.

http://www.picbasic.org/forum/showthread.php?p=32821#post32821

gelukkig veel commentaar erachter, dus ik kan het wel volgen :) Als ik deze code even snel bekijk worden er een aantal MACRO's gebruikt die je kunnen helpen met je project. dan hoef je mijn functies niet te vertalen.

Wat je even kunt proberen om zeker te weten dat je hardware goed is:

Pas in de ASM code het volgende aan:

; LED Settings
 ; Blink fast LEDA
 BSF PHLCON_LACFG3                           ; 
 BCF PHLCON_LACFG2                           ; 
 BSF PHLCON_LACFG1                           ;     
 BCF PHLCON_LACFG0                         

naar deze code:

; LED Settings
 ; Blink fast LEDA
 BSF PHLCON_LACFG3                           ; 
 BCF PHLCON_LACFG2                           ; 
 BSF PHLCON_LACFG1                           ;     
 BSF PHLCON_LACFG0                         

Let op de laatste instructie. Opnieuw compileren en dan in je pic programmeren.

Want als het goed is knippert je groene led nu snel. Met de bovenstaande aanpassing zou hij langzaam moeten knipperen.

Ik heb nog een leuk youtube filmpje gevonden.

succes