Forum: Mikrocontroller und Digitale Elektronik PIC18 XC8 W5500 Fehler


von PicUser (Gast)


Lesenswert?

Hallo,

versuche mich daran, das Ethernet-Modul WIZ550io an einem PIC zum laufen 
zu bekommen. Ich habe mir bei Wiznet die ioLibrary geladen und in mein 
Projekt eingefügt. Soweit so gut. Comilieren ließ sich das ganze schon 
dann mal ohne Fehler.

Nun wollte ich das DHCP Example implementieren. Nun scheitert es schon 
bei einem Struct:

Laut dem Beispiel in der main eingefügt:
1
#include <xc.h>
2
#include <string.h>
3
#include <stdio.h>
4
#include "mcc_generated_files/mcc.h"
5
#include "lcd.h"
6
#include "Ethernet/socket.h"
7
#include "Internet/DHCP/dhcp.h"
8
9
wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef},
10
                            .ip = {192, 168, 1, 2},
11
                            .sn = {255, 255, 255, 0},
12
                            .gw = {192, 168, 1, 1},
13
                            .dns = {0, 0, 0, 0},
14
                            .dhcp = NETINFO_DHCP };

Nun meckert der Compiler:
main.c:64: error: (195) expression syntax
main.c:65: error: (285) no identifier in declaration
main.c:65: error: (314) ";" expected
main.c:65: error: (285) no identifier in declaration
main.c:65: warning: (374) missing basic type; int assumed
main.c:66: error: (285) no identifier in declaration
main.c:66: error: (314) ";" expected
main.c:66: error: (285) no identifier in declaration
main.c:66: warning: (374) missing basic type; int assumed
main.c:67: error: (285) no identifier in declaration
main.c:67: error: (314) ";" expected
main.c:67: error: (285) no identifier in declaration
main.c:67: warning: (374) missing basic type; int assumed
main.c:68: error: (285) no identifier in declaration
main.c:68: error: (314) ";" expected
main.c:68: error: (285) no identifier in declaration
main.c:68: warning: (374) missing basic type; int assumed
main.c:69: error: (285) no identifier in declaration
main.c:69: error: (314) ";" expected

Die Zeilen betreffen das Struct. Diese ist im File wizchip_conf.h 
definiert und wird socket.h eingebunden:

/**
 * @ingroup DATA_TYPE
 *  Network Information for WIZCHIP
 */
typedef struct wiz_NetInfo_t
{
   uint8_t mac[6];  ///< Source Mac Address
   uint8_t ip[4];   ///< Source IP Address
   uint8_t sn[4];   ///< Subnet Mask
   uint8_t gw[4];   ///< Gateway IP Address
   uint8_t dns[4];  ///< DNS server IP Address
   dhcp_mode dhcp;  ///< 1 - Static, 2 - DHCP
}wiz_NetInfo;

Wo liegt der Fehler?

Gruß Sascha

von holger (Gast)


Lesenswert?

>Wo liegt der Fehler?

Vieleicht kann der Compiler die Methode der Initialisierung der Struktur 
nicht.

Dann musst du das irgendwo ungefähr so machen:
1
wiz_NetInfo gWIZNETINFO;
2
3
//Irgendwo in einer Initialisierungsroutine dann:
4
gWIZNETINFO.mac[0] = 0x00;
5
gWIZNETINFO.mac[1] = 0x08;
6
gWIZNETINFO.mac[2] = 0xdc;
7
//usw...
8
gWIZNETINFO.ip[0] = 192;
9
//usw...

von Volker S. (vloki)


Lesenswert?

Probier mal:
1
wiz_NetInfo gWIZNETINFO = {{0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef},  //.mac
2
                              {192, 168, 1, 2},  // .ip
3
                              {255, 255, 255, 0},
4
                              {192, 168, 1, 1},
5
                              {0, 0, 0, 0},
6
                              NETINFO_DHCP };

von PicUser (Gast)


Lesenswert?

Hallo,

danke euch beiden. Beide Varianten funktionieren.

Gruß Sascha

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

hi,
es geht auch ohne änderungen, wenn du die letzte version nimmst und 
unter project config/compiler den standard c99 definierst!

mt

von Manuel M. (hutschafu)


Lesenswert?

Hallo,
hat mir jemand ein komplettes Beispiel- Projekt mit einem PIC + dem
W5500 Chip. Ich brauch irgend etwas zum Einstieg.
Wäre super wenn mir jemand ein simples Projekt als C-Code hätte. Das 
Ziel wäre mit einem PIC18F4550 über den W5500 Chip Modbus (TCP) Befehle 
an einen Slave zu schicken.
Ich hoffe ihr helft mir beim Einstieg 👍
Danke euch

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Manuel M. schrieb:

> Ziel wäre mit einem PIC18F4550 über den W5500 Chip Modbus (TCP) Befehle
> an einen Slave zu schicken.

Das ist eine blöde Kombination. Der PIC18F4550 läuft erst ab 4V, der 
W5500 ist aber ein 3.3V Chip. Der W5500 wird die 5V vom PIC vertragen, 
der PIC aber möglicherweise die 3.3V-Signale vom W5500 nicht richtig 
erkennen.

Du solltest tunlichst einen PIC18F45K50 verwenden. Der ist 
pinkompatibel, aber neuer, wahrscheinlich billiger, hat einige Features 
mehr und Bugs weniger, und er läuft auch mit 3.3V. Wenn das gesamte 
System mit einer Betriebsspannung läuft, hast Du erstmal weniger 
Fehlerquellen.

Ich habe für Ethernet und PIC immer PIC18F67J60 verwendet. Dafür hat 
Microchip komplette Bibliotheken am Start.

fchk

von Manuel M. (hutschafu)


Lesenswert?

Hallo Frank,
vielen Dank für den Input, den PIC18F67J60 schau ich mir in jedem Fall 
an.
Für den Anfang möchte ich jedoch beim WIZNET W5500 Ethernet SPI Adapter 
Modul mit dem bereits existierenden 18F4550 Eval Board bleiben um 
grundsätzliches in Sachen Modbus Kommunikation zu lernen. Mit einem 
Level-Shifter dazwischen sollte es ja gehen.
Mir scheint das Thema Ethernet und Modbus TCP doch recht komplex ich 
hoffe immer noch auf ein minimalistisches Projekt zum Einstieg.
Grüße

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.