Forum: Projekte & Code Webserver MSP430 mit ENC28J60


von Andreas R. (i486)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

 dem ein oder anderen mag aufgefallen sein, dass man für kleine 
Webserver sehr häufig die Kombination aus Atmel-Mikrocontrollern und dem 
ENC28J60 findet, wohingegen Anwendungen mit dem TI MSP430 ausschließlich 
den CS8900A zu verwenden scheinen.

 Da ich als MSP430-Benutzer allerdings nicht auf Atmels umsteigen 
wollte, und mich durch andere Projekte schon mit dem ENC28J60 auskenne, 
habe ich mir mal die Mühe gemacht, einen "Treiber" zu schreiben, der mit 
dem MSP430 uIP Port zusammen läuft. Einiges konnte ich hierbei 
allerdings auch der Atmel-Version der Bibliothek (2005 von Pascal Stang) 
entnehmen.

 Ich habe bei meinem MSP430F1611 den USART1 verwendet, sprich Pins 
5.1-5.3 für die SPI-Signale, und Pin 4.6 für Chip-Select gewählt. Das 
lässt sich aber in der Header-Datei und der Methode init_spi() im c-Code 
ändern.

 In der main.c muss dann nur noch in allen Funktionsaufrufen das cs8900a 
durch ein enc28j60 ersetzt werden (ich weiß, ich weiß, man hätte das 
allgemeiner lösen können).

 Kleiner Tipp zu SPI: Es hat eine gute Weile gedauert, bis ich die 
Kommunikation zwischen Mikrocontroller und dem ENC28J60 stabil am laufen 
hatte, Problem hierbei waren Glitches auf dem SCK-Signal. Mit einem 
Kondensator von wenigen Picofarad war dem aber beizukommen.

Schöne Grüße,
Andreas

von Rainer W. (Firma: Student) (ba_brain)


Lesenswert?

Hi Andreas,

ich schreibe im Moment meine Diplomarbeit und arbeite dadurch auch mit 
dem ENC28J60. Ich habe bis jetzt schon einige Quelltexte des Treibers 
gesehen. Was mir dabei aufgefallen ist das fast alle ihren TX-Buffer auf 
Adresse 0x0000 legen. Ich hatte selber lange Zeit mit dieser Einstellung 
Probleme und es hat mir einige Zeit gekostet diesen Fehler zu finden. 
Keine Ahnung ob er bei jedem Auftritt, vorsichtshalber aber von mir mal 
ein kleiner Tip aus der Errata des ENC. Wie in der Errata des ENC28J60 
beschrieben kann es passieren, dass es beim Initialisieren zu einem 
Fehler kommt. Der interne Pointer auf das Leseregister(ERXST) des enc 
wird nicht immer auf die Speicheradresse die beim Initialisieren angeben 
gesetzt. Blöd an diesem Fehler ist das er es manchmal macht und manchmal 
nicht. Um dieses Problem aus dem Weg zu gehen solltest du den RX-Buffer 
auf 0x0000 legen und den TX-Register auf MaxRAM - 0x0600 setzten. Dann 
kommt dieser Fehler nicht vor.

MfG

ba_brain

von Andreas R. (i486)


Angehängte Dateien:

Lesenswert?

Hallo Rainer,

 ich habe bislang meine ENC28J60 sowohl mit dem RX-Buffer auf 
0x0000->0x19FF (wie in den Errata angegeben) als auch mit 0x0600->0x1FFF 
problemlos laufen lassen, daher hatte ich in der Header-Datei die Werte 
von Pascal Stang beibehalten. Habe es jetzt aber doch mal geändert, und 
auch in die C-Datei noch den Workaround #11 eingebaut (der Wert in 
ERXRDPT muss ungerade sein).

 Danke für den Hinweis und viel Erfolg noch bei deiner Diplomarbeit 
(worum gehts?)

Gruß, Andreas

von Rainer W. (Firma: Student) (ba_brain)


Lesenswert?

Hi,

Programmieren eines Webservers mit CGI-Schnittstelle auf einem TMS470 
von Texas Instrument mit ENC28J60 und FreeRTOS als OS. Treiber ist 
soweit fertig. Stack musste ich glücklicherweise nicht neu erfinden, 
sonst hätte es Zeitlich bestimmt nicht hingehauen. Ich habe mich für den 
lwip-Stack entschieden der auch schon auf dem Board rennt. Werde jetzt 
nächste Woche damit anfangen den Webserver zu machen. Bin mir aber immer 
noch nicht ganz sicher wie. Werde ihn warscheinlich so ähnlich aufbauen, 
wie er beim uIP-Stack dabei ist. Vielleicht hast du ja noch ein paar 
Tips für mich.

Gruß

Rainer

von Padu (Gast)


Lesenswert?

Hallo alle ich bin durch Google hier hin gelangt.
Ich bin dabei auf der Basis von MSP430 mit ENC28J60 eine Messfühler 
Board zu basteln, die Fühler sind über I2C Bus verbunden habe aber 
leider keine Erfahrung mehr mit "C" sondern bin ein Assembler Freak ;-) 
arbeite immer noch mit dem Uralt Tool von TI und Hitex weil es das 
einzige ist das ich kenne und eine "reell in der Schaltung" Emulation 
erlaubt, dabei auch noch die "Alten" P337 und P325 er unterstützt. 
Leider finde ich echt nur "C" Tools und Programme aber nix in Assembler.

Die Sache ist die das ich das Board über Ethernet ansprechen muss also 
in etwa mit "192.168.5.1" oder so ähnlich, und auch eventuelle 
Schaltvorgänge auslösen können (bspw. mit PCF8574). dazu habe ich eine 
HTML Seite wo ich einfach werte eintragen kann erstellt. Auf dem PC 
funst das wunderbar aber wie bringe ich das in den MSP430 unter?
Kann mir da wer Helfen?

von David B. (dave10)


Lesenswert?

Hi,
ich weis der Beitrag ist schon etwas älter, aber ich hab eine Frage: Ich 
verwende dein Prog für den ENC. Das funzt auch soweit, allerdings wenn 
ich eine Anwendung habe, welche mehr senden muss als der uip_buffer, 
funzt es nicht. Woran kann dies liegen?
Grüße David

von David B. (dave10)


Lesenswert?

Hab das Prob selber gefunden.
in der enc28j60.h muss bei der definition der maximalen Buffergröße 
stehen:
1
#define MAX_FRAMELEN  UIP_CONF_BUFFER_SIZE+4
Das wars und dann gehts auch.
Grüße David

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.