www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Webserver mit ATmega128 und ISA Netzwerkkarte Davicom dm9008


Autor: Thomas T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

vielleicht kann mir hier im Forum jemand helfen.

Ich habe das tolle Webserver Projekt entdeckt und bin recht
begeistert.

Benutze einen ATmega128 mit 16 MHz und möchte die ISA Netzwerkkarte,
Chip Davicom dm9008, verwenden. (SW 1.38)

Der Aufbau ist in Anlehnung an die Anleitung von Herrn Radig.
(Vielen Dank auch an dieser Stelle.)

Das Problem liegt nun an der Netzwerkkarte, diese ist nach dem
Datenblatt voll NE2000 kompatibel. Aber die Verbindung klappt noch
nicht.

Hat schon jemand mit dieser Netzwerkkarte Erfahrungen machen können?

Der Ping wird nicht beantwortet, die Link LED an der N.-Karte blinkt
kurz auf, das wars.
Am Switch wird der Link als aktiv angezeigt, sollte doch dann gehen
oder nicht?

Grüße
thomas t.

Autor: bjoern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe auch diese NIC und bin auch dabei gescheitert damit einen Webserver
auf die Beine zu stellen. Wenn du etwas rausfindest schreibe es bitte
hier ins forum

Autor: Thomas T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bjoern,

kein Problem.
Denke das es an der Karte/Interrupt liegt, der Ping scheint ja an
der Karte anzukommen. Wird nur noch nicht beantwortet. :-)

Hab dem Herrn Radig auch geschrieben vielleicht meldet er sich noch?

Grüße
thomas t.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert bei UM9008/DM9008 und BC912 nur, wenn man das
ISA-Bus-Signal IOCHRDY anschliesst und die R/W-Routinen entsprechend
modifiziert.

Das könnte auch auf andere NE2000-er zutreffen, anders als
beispielsweise 3COMs arbeiten die NE2000-er per Design stark mit diesem
Signal. Realtek 8019 ist insofern wohl eher die Ausnahme davon, dort
kommt man mit ein bischen Timing-gebossel offenbar auch ohne aus. Nicht
immer, will mir jedoch scheinen, ich habe da bei IRQ-Polling auch öfter
mal Dreck gelesen.
void WriteRTL (unsigned char rtl_addr,unsigned char rtl_data)
{
    AddrRTL(rtl_addr);
    RTL_WR_OFF();
    DATA_PORT_RLT_WRITE = rtl_data;  // anstatt NOPs
    DATA_DIR_RLT = OUTPUT;
    while (!RTL_READY())
      ;
    RTL_WR_ON();
    DATA_DIR_RLT = INPUT;
}

uint8_t ReadRTL (unsigned char rtl_addr)
{
    AddrRTL(rtl_addr);
    DATA_DIR_RLT = INPUT;
    RTL_RD_OFF();
    nop(); nop();      // 2 NOPs nötig!
    while (!RTL_READY())
      ;
    rtl_addr = DATA_PORT_RLT_READ;  
    RTL_RD_ON();  
    return (rtl_addr);
}

Autor: Thomas T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.,
danke für den Hinweis, ich habe darüber schon etwas gesehen gehabt.
leider nicht so richtig verstanden, sorry.

Wo sollte man ISA-Bus-Signal IOCHRDY anschliessen? Interrupt/Port?
Ist ja das Signal welches für die "wait states" auf dem ISA Bus
zuständig ist. (Low active)

Grüße
thomas t.

Autor: thomas t. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.,

kannst du mir vielleicht deine Sourcen mal schicken?

Wie hast du die Anbindung von "I/O CHANNEL READY" gemacht?

Danke im vorraus.

mfg
thomas t.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Signal an einen beliebigen freien Pin vom AVR anschliessen und wie
gezeigt in den R/W-Routinen abfragen. In der Initialisierung sollte der
interne Pullup des Pins aktiviert werden.

Im obigen Source ist RTL_READY() ein Macro, der den Zustand dieses Pins
wiedergibt (z.B. PINC & 1<<PC0). Der relevante Teil der Sourcen steht
oben. Evtl. kann auch eine vergleichbare Abfrage im Block-Datentransfer
nützlich sein, aber da klappt's evtl. auch ohne.

Den Sourcecode kann ich zur Verfügung stellen, aber da ich den
teilweise deutlich umgebaut habe, wird das weniger helfen als der
Auszug oben.

Dieses Signal ist active high. Die Karte zieht es runter, wenn sie auf
einen Transfer noch nicht rechtzeitig reagieren kann (not ready), zieht
es wieder hoch wenn sie dann soweit ist (ready).

Einfach die R/W-Zyklen zu verlängern funktioniert nicht.

Autor: thomas t. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.
danke für deine Hilfe, werds mal umsetzen.


Mit Macros hab ich noch nichts gemacht, gehen folgende Codezeilen
in der rtl8019.h :

#define DDRC  &= ~(1<<DDC0);  //PINC 0 als Eingang
#define PORTC |= (1<<PC0);    // interner Pull-Up an PC0 aktivieren
#define RTL_READY()   PINC & 1<<PC0


Grüße
Thomas t.

PS: Wenn es keine Umstände macht würde ich mich über deine Sourcen
freuen.

Autor: A.K. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> #define DDRC  &= ~(1<<DDC0);  //PINC 0 als Eingang
> #define PORTC |= (1<<PC0);    // interner Pull-Up an PC0 aktivieren

So wird das natürlich nix. Bischen C Kenntnisse sollten schon da sein.

Source anbei.

Autor: thomas t. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja hast Recht.

Hab meine Fehler auch schon unter die Nase gerieben bekommen. :-)

In main.c

DDRB  &= ~(1<<DDB6);  //PINB 6 als Eingang
PORTB |= (1<<PB6);    // interner Pull-Up an PB6 aktivieren

in rtl8019.h

#define RTL_READY()   PINB & 1<<PB6

und die Karte blinkt schon mal heftigst. :-)

Danke für deine Sourcen.

Grüße
thomas t.

Autor: BennyS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigt wenn ich diesen alten Thread wieder ausgrabe.
Ich hab mir auch das ISA-CTRL Board zusammen gebaut und verwende dafür
eine DM9008F, diese wird nach den änderungen :
void WriteRTL (unsigned char rtl_addr,unsigned char rtl_data)
{
    AddrRTL(rtl_addr);
    RTL_WR_OFF();
    DATA_PORT_RLT_WRITE = rtl_data;  // anstatt NOPs
    DATA_DIR_RLT = OUTPUT;
    while (!RTL_READY())
      ;
    RTL_WR_ON();
    DATA_DIR_RLT = INPUT;
}

uint8_t ReadRTL (unsigned char rtl_addr)
{
    AddrRTL(rtl_addr);
    DATA_DIR_RLT = INPUT;
    RTL_RD_OFF();
    nop(); nop();      // 2 NOPs nötig!
    while (!RTL_READY())
      ;
    rtl_addr = DATA_PORT_RLT_READ;  
    RTL_RD_ON();  
    return (rtl_addr);
}

und

in der Init. der Netzwerkkarte
DDRD  &= ~(1<<6);
PORTD |= (1<<6);

auch immer erkannt. (Sourcen 1.38 / 1.39)

Auch die LED an der Karte leuchtet und Blinkt wenn Vehrkehr im Netzwerk
herscht. (ISA-CTRL<->Fritz Box 7050<->(WLAN)<->PC)

Allerdings lässt die Karte sich nicht anpingen und nach kurzer Zeit
erscheint "Overrun" im Terminal.

Mit einen Netzwerksniffer zeigt er mir auf den ARP Request "Who Has
192.168.1.66" keine Antwort an.

Hat irgendjemand eine Idee? A.K. vielleicht?

PS: Hab beim kompilieren USE MMC, FTPD, TELNET auf 0 gesetzt
MyMAC gelassen wie es ist und MYIP aud 192.168.1.66 eingestellt

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.