mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Wiz830MJ


Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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):
void init_wiznet() {
   // Hardware reset
   WIZ_CONFIG |= RESET;
   _delay_ms(10);
   WIZ_CONFIG &= ~RESET;
   _delay_us(30);
   WIZ_CONFIG |= RESET;
   _delay_us(30);
   // register reset
   write_data_wiznet(MR0, 0x80);
   write_data_wiznet(MR1, 0x00);
   //Set gateway IP address
   write_data_wiznet(GAR0, 192);
   write_data_wiznet(GAR1, 168);
   write_data_wiznet(GAR2, 0);
   write_data_wiznet(GAR3, 254);
   //Set Subnet mask
   write_data_wiznet(SUBR0, 255);
   write_data_wiznet(SUBR1, 255);
   write_data_wiznet(SUBR2, 255);
   write_data_wiznet(SUBR3, 0);
   //Set MAC address
   write_data_wiznet(SHAR0, 0x00);
   write_data_wiznet(SHAR1, 0x10);
   write_data_wiznet(SHAR2, 0x20);
   write_data_wiznet(SHAR3, 0x30);
   write_data_wiznet(SHAR4, 0x40);
   write_data_wiznet(SHAR5, 0x50);
   //Set own IP address
   write_data_wiznet(SIPR0, 192);
   write_data_wiznet(SIPR1, 168);
   write_data_wiznet(SIPR2, 0);
   write_data_wiznet(SIPR3, 73);
}

Ich denke das der Fehler schon bei der write_data_wiznet Funktion liegt.
Hier der Code:
void write_data_wiznet(int registers, int value) {
   DATA_L_DDR = 0xFF;   //setting as outputs
   
   ADDRESS_H |= getHighAddress(registers);
   ADDRESS_L = getLowAddress(registers);
   WIZ_CONFIG |=  RD;  // RD high setzen -> read disabled
   _delay_us(1);
   WIZ_CONFIG &= ~CS; // CS low setzen -> Wiznet enabled
   WIZ_CONFIG &= ~WR;  // WR low setzen -> write enabled
   DATA_L = value;
   WIZ_CONFIG |= CS; // CS high setzen -> Wiznet disabled
   WIZ_CONFIG |= WR;  // WR high setzen -> write disabled
   _delay_us(1);
}
//Hier die defines
#define WIZ_CONFIG  PORTD
#define RD         _BV(PD2)
#define CS         _BV(PD3)
#define RESET      _BV(PD4)
#define WR         _BV(PD5)

#define DATA_L       PORTA
#define DATA_L_DDR   DDRA

#define ADDRESS_L       PORTC
#define ADDRESS_H       PORTD
#define ADDRESS_L_DDR   DDRC
#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

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Beispielcode von Wiznet verwendet, das hat mir geholfen. 
Der Code findet sich hier: 
http://www.wiznet.co.kr/UpLoad_Files/ReferenceFile...

Autor: asdffdsa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Super danke ich werde mir das gleich mal anschauen!!

mfg

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es Dich interessiert, kann ich Dir auch meinen Code schicken. Er 
implementiert:

- Flash file System (primitive Variante)
- eeprom Anbindung (wegen Konfiguration)
- Webserver mit CGI
- DHCP

Was genau hast Du vor?

Autor: asdffdsa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das wäre sehr nett.
Primärziel ist einfach mal eine Verbindung zwischen PC und Board 
herzustellen (Im CMD mit ping Befehl)
Wenn das mal funktioniert möchte ich Messdaten in den Controller 
einlesen, die ich dann vom PC aus über den Browser abrufen kann.
Später soll dann auch vom Browser aus zum Beispiel eine LED ein bzw 
ausgeschalten werden.

zu dem Bespielcode: Ich habe den Code jetzt mal grob überflogen aber ich 
verstehe nicht ganz wie der die Daten vom Controller zum W5300 schickt. 
Da sind ja nirgends Ports oder dergleichen definiert? oder hab ich etwas 
übersehen?
Ich sehe wie jedes Register definiert wird und jedes einzelne Bit der 
jeweiligen Register.
In der init Funktion wird zwar ein Softwarereset durchgeführt aber der 
muss ja die Daten und die Adressen mit einem bestimmten Timing (steht im 
Datenblatt vom W5300) über irgendwelche Ports vom Controller (in meinem 
Fall zB Atmega32) zum W5300 bringen. Oder stehe ich da jetzt grad auf 
der Leitung??

mfg

Autor: asdffdsa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aja und einen EEprom (I2C) möchte ich auch an den Atmega anschließen.

Autor: Daniel H. (dewy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
so habe mich da jetzt mal angemeldet.

Ich bin gerade dabei den Beispielcode durchzugehen. Mich verwirrt ein 
bisschen die Addressvergabe für die Register des W5300.
Es wird das Register MR (_DEF_IINCHIP_MAP_BASE_) mit dem Wert 
0x08000000 definiert aber laut Datenblatt sollte das Register doch mit 
dem Wert 0x08000 definiert werden oder??

Danke schon im Voraus

mfg

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel H. schrieb:
> Es wird das Register MR (DEF_IINCHIP_MAP_BASE) mit dem Wert
> 0x08000000 definiert aber laut Datenblatt sollte das Register doch mit
> dem Wert 0x08000 definiert werden oder??

Wie hast Du den Chip denn angebunden? An den Adressbus? Wenn ja, dann 
liegt er ja in einem bestimmten Adressbereich und nicht notwendigerweise 
auf Adresse 0. Diese Adresse muss ja als Offset irgendwo definiert 
werden.

Des weiteren habe ich nicht genau den gleichen Chip benutzt, wie Du. Ich 
habe den W5100 im Einsatz

Autor: Daniel H. (dewy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe jetzt nicht ganz was du meinst??
Das Wiz830mj hat 2 Steckerleisten(jeweils 2 20polige Stecker). Da gibt 
es 10 Pins für den Adressbus und 8/16 Pins für den Datenbus. (ich 
verwende nur den 8bit breiten Daten Bus). So diesen Datenbus habe ich an 
den PortA des Atmega gelegt. Den 10 poligen Adressbus auf den PortC und 
B.

So jetzt verstehe ich das Datenblatt folgendermaßen:
Wenn ich einen Wert in das Mode Register MR0 senden will, dann muss ich 
über den Adressbus die Adresse des MR0 Registers (laut Datenblatt 
0x08000) zum W5300 senden. Jetzt weiß der W5300 das ich einen WErt in 
das MR0 Register senden will. ALso sende ich über den Datenbus die Daten 
zum W5300.

Jetzt verstehe ich aber nicht wie der in dem Beispielcode das macht??

Im Datenblatt auf der Seite 120 sieht man das Timing Diagramm, wann man 
welche Steuerpin (CS,WR,RD,RESET) schalten muss, damit der die Adresse 
bzw die Daten von den jeweiligen Bus richtig einliest. Ich denke das der 
Fehler irgendwo liegt.

mfg

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise geht das auch so. Aber richtiger ist, den externen 
Adress- und Datenbus des Prozessors dazu zu benutzen. Ich weiß nicht, ob 
Dein Prozessor so etwas hat, aber ich habe einen atMega128 verwendet, 
und der hat so etwas.

Dann liegt der Wiznet im Adressraum des Prozessors und Du kannst auf die 
Register genauso zugreifen, wie auf den internen Speicher des 
Prozessors.
Das wird dann auch vernünftig schnell. Wenn Du das quasi "zu Fuß" mit 
Port Zugriffen "rausklickern" willst, dann dauert das ja ewig.

Autor: Daniel H. (dewy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaaa alles klar jetzt verstehe ich was du meinst. Aber der Atmega32 hat 
soetwas leider nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.