Hallo
Ich möchte mit einem Atmega32L und dem Wiz830mj Modul einen Webserver
bauen. Es gibt im Netz sehr viel Informationen die mir auch schon sehr
viel weitergeholfen haben. Doch leider will es noch nicht so wie ich mir
das vorstelle.
Mein erstes Ziel ist es mein Board mit dem Wiznet Modul pingen zu
können.
Ich habe folgenden Code zur Initialisierung (Ich denke der müsste soweit
in Ordnung sein):
1 | void init_wiznet() {
|
2 | // Hardware reset
|
3 | WIZ_CONFIG |= RESET;
|
4 | _delay_ms(10);
|
5 | WIZ_CONFIG &= ~RESET;
|
6 | _delay_us(30);
|
7 | WIZ_CONFIG |= RESET;
|
8 | _delay_us(30);
|
9 | // register reset
|
10 | write_data_wiznet(MR0, 0x80);
|
11 | write_data_wiznet(MR1, 0x00);
|
12 | //Set gateway IP address
|
13 | write_data_wiznet(GAR0, 192);
|
14 | write_data_wiznet(GAR1, 168);
|
15 | write_data_wiznet(GAR2, 0);
|
16 | write_data_wiznet(GAR3, 254);
|
17 | //Set Subnet mask
|
18 | write_data_wiznet(SUBR0, 255);
|
19 | write_data_wiznet(SUBR1, 255);
|
20 | write_data_wiznet(SUBR2, 255);
|
21 | write_data_wiznet(SUBR3, 0);
|
22 | //Set MAC address
|
23 | write_data_wiznet(SHAR0, 0x00);
|
24 | write_data_wiznet(SHAR1, 0x10);
|
25 | write_data_wiznet(SHAR2, 0x20);
|
26 | write_data_wiznet(SHAR3, 0x30);
|
27 | write_data_wiznet(SHAR4, 0x40);
|
28 | write_data_wiznet(SHAR5, 0x50);
|
29 | //Set own IP address
|
30 | write_data_wiznet(SIPR0, 192);
|
31 | write_data_wiznet(SIPR1, 168);
|
32 | write_data_wiznet(SIPR2, 0);
|
33 | write_data_wiznet(SIPR3, 73);
|
34 | }
|
Ich denke das der Fehler schon bei der write_data_wiznet Funktion liegt.
Hier der Code:
1 | void write_data_wiznet(int registers, int value) {
|
2 | DATA_L_DDR = 0xFF; //setting as outputs
|
3 |
|
4 | ADDRESS_H |= getHighAddress(registers);
|
5 | ADDRESS_L = getLowAddress(registers);
|
6 | WIZ_CONFIG |= RD; // RD high setzen -> read disabled
|
7 | _delay_us(1);
|
8 | WIZ_CONFIG &= ~CS; // CS low setzen -> Wiznet enabled
|
9 | WIZ_CONFIG &= ~WR; // WR low setzen -> write enabled
|
10 | DATA_L = value;
|
11 | WIZ_CONFIG |= CS; // CS high setzen -> Wiznet disabled
|
12 | WIZ_CONFIG |= WR; // WR high setzen -> write disabled
|
13 | _delay_us(1);
|
14 | }
|
15 | //Hier die defines
|
16 | #define WIZ_CONFIG PORTD
|
17 | #define RD _BV(PD2)
|
18 | #define CS _BV(PD3)
|
19 | #define RESET _BV(PD4)
|
20 | #define WR _BV(PD5)
|
21 |
|
22 | #define DATA_L PORTA
|
23 | #define DATA_L_DDR DDRA
|
24 |
|
25 | #define ADDRESS_L PORTC
|
26 | #define ADDRESS_H PORTD
|
27 | #define ADDRESS_L_DDR DDRC
|
28 | #define ADDRESS_H_DDR DDRD
|
Für die Registernamen habe ich die Adressen aus dem Datenblatt genommen.
Immer wenn ich den Ping Befehl ausführe kommt die Meldung das die
Datenpakete nicht erfolgreich gesendet werden konnten.
Was habe ich falsch gemacht???
Hoffe mir kann jemand weiterhelfen!!
mfg