Jump to content
reaper7

[Energia Library] EtherEncLib for ENC28J60

Recommended Posts

Hi! - I don't know how to help You,

a good choice is to buy a simple logic analyzer.

 

Do You have any message on serial console?

Try to "enable" debug message from lib -> EtherEncLib.h change DEBUGLIB value from 0 to 1 (line 40)

 

You must know how to check process step by step,

simplest method is inserting something like this Serial.println("i'm here"); in different library places (like begin, available etc) called from sketch.

 

You must be like a Herlock Sholmes ;)

Share this post


Link to post
Share on other sites
Hello,

I managed to install and make the examples work on my MSP430, good stuff!

I got one question:

I'm trying to set a MSP430 pin as an output, and control the logic value of this pin using my Browser, having the MSP430 as an web server, for example. Could anyone give me a good start on this? Thanks!

Share this post


Link to post
Share on other sites

The following concerns Energia 0101E0017 on Windows 10 and EtherEncLib-0.4.2

Launchpad MSP-EXP430G2 with a MSP430G2553

 

Hi Reaper,

thanks a lot for the library.

However, I had a bad start. To begin with, I was not able to get the smallest answer from it. Of course, I suspected the SPI interface, but was barking up the wrong tree. Not until I began to dig into the library I stroke gold.

 

The first problem was a function "F" used in print context like e.g.

? Serial.println(F("Text to print"))

 

I never encountered this function bevor with MSP430G2553, I do not know what it does, but it compiles. However, after replacing all occurrences of this function , oh wonder, nearly everything worked!

 

The second hickup I encountered, was the chip (or slave, CS or SS) select pin (in my case pin 10) in the examples. Although the sketch sets this to output mode, it does not set it to "LOW". Without setting this pin to low, I did not receive any answer from the library.  I think the SPI started up in "slave" mode.

 

This CS pin is rather finicky, I fail to understand it. The pin reference in "energia.nu" for MSP430G2553 specifies that the SPI library uses P2.0 as CS, but this dos not work, neither does P2.1. However P2.2 works, why?

 

It would interesting if you could comment.

cheers, Daniel

Share this post


Link to post
Share on other sites

@DanielPHuber

 

1. "F" is declared in ...cores/msp430/WString.h and generally refers to strings stored in flash memory.

If You can know more, read about FlashStringHelper and PSTR

 

2. This lib uses "user defined" CS pin and control it from library, not from msp hardware

of course You can change it to other pin but remember, that You must change this in two places:

- in Your sketch, through properly set pin mode eg:  pinMode(10,OUTPUT)

- in enc28typedef.h inside this library folder: #define ENC28J60_CONTROL_CS    10

At this moment personally I use pin 13 and it works too

 

 

so...I can move CS pin mode initialization to library (remove pinMode from user sketch),

this is almost done but at this moment this mod is commented and I want to maintain the highest compliance with the original library.

Share this post


Link to post
Share on other sites

Hi Reaper,

thanks a lot, I learned a thing ot two.

There is nothing wrong with the library, I must have fooled myself yesterday. Anyway, today the library works with F(..).

However, I do not yet understand fully what F(..) does on the MSP430.

 

On the Arduino we have a Harvard architecture, that means separate address spaces for code and data. Therefore before using "print " to print a string in code segment, we must trick "print" into fetching the string from code and not data space. must first be copied into data segment. Here F(..) makes sense.

 

However, MSP430 is von Neuman, that means there is only one single address space for both data and code. Therefore there is no problem accessing something in the code segment. What does F(..) in this case?

Is F(..) on the MSP430 superfluous? Does it add superfluous code?

 

thank's for the teaching, Daniel

Share this post


Link to post
Share on other sites

@@chicken - as I wrote above F("zzz") is declared in WString.h as:

#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

@@DanielPHuber - I don't know if F is necessary for MSP and even I don't go deep into it (FlashStringHelper or PSTR) if the library compiled and works :)

I don't know too how (or even) this affects performance and/or memory usage.

 

Can You tests memory usage and performance with and without "F" ?

Share this post


Link to post
Share on other sites

@@reaper7 A sorry, didn't pay attention to the whole thread.

 

PSTR is Atmel's way to identify pointers to program memory. Energia has a define somewhere to ignore PSTR. So F() in the end does nothing to the string pointer. It doesn't have to, thanks to MSP430's sane memory model.

 

F() can safely be left away for MSP430.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×