www.mikrocontroller.net

Forum: PC-Programmierung Mit VB 2005 Express einen AVR mit RTL8019AS steuern


Autor: Alex W. (a20q90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hoffe der Betreff ist nicht verwirrend!

Ich möchte in VB 2005 Express einen Befehl an meinen Einplatinen-Server 
senden. Das Problem dabei ist, das wenn ich einen Beispielcode nutze 
(winsock) mäckert er das es nicht deklariert ist. Ok, ich bin noch 
Anfänger in VB05Exp!

Benutzt soll das ganze mit meinem RTL8019AS-Webserver.

In Bascom gibt es eine NE2000 library, die allerdings garnicht
funktioniert! Eventuell hat die jemand schon zum laufen gebracht?

Weis eventuell jemand eine Möglichkeit den "Einplatinen-Webserver" zum 
COM-Port umzukonfigurieren? Warscheinlich benötige ich für den PC auch 
noch einen Treiber der sich mit dem Server verbindet. Gibts da was? Wäre 
prima, dann könnte ich einfach RS232 übers LAN machen und hätte mir 
viele Probleme gespart!

Grüße
Alex

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex W. wrote:
> Hallo,
>
> ich hoffe der Betreff ist nicht verwirrend!

Der Betreff ist vorbildlich und glasklar.

>
> Ich möchte in VB 2005 Express einen Befehl an meinen Einplatinen-Server
> senden. Das Problem dabei ist, das wenn ich einen Beispielcode nutze
                                                    ^^^^^^^^^^^^
Welchen?

> (winsock) mäckert er das es nicht deklariert ist. Ok, ich bin noch
                           ^^
Was?

> Anfänger in VB05Exp!
>
> Benutzt soll das ganze mit meinem RTL8019AS-Webserver.
>
> In Bascom gibt es eine NE2000 library, die allerdings garnicht
> funktioniert! Eventuell hat die jemand schon zum laufen gebracht?
>
> Weis eventuell jemand eine Möglichkeit den "Einplatinen-Webserver" zum
> COM-Port umzukonfigurieren? Warscheinlich benötige ich für den PC auch
> noch einen Treiber der sich mit dem Server verbindet. Gibts da was? Wäre
> prima, dann könnte ich einfach RS232 übers LAN machen und hätte mir
> viele Probleme gespart!
>
> Grüße
> Alex

Autor: Alex W. (a20q90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ok hier erstmal den Schaltplan des Webservers. Er basiert auf U.Radigs 
miniWebServer (RTL8019)

http://defencemercury1.dyndns.org/spasslex/fotos/w...

Als Code nutze ich den von Bascom :

$regfile = "m128def.DAT"
$crystal = 4000000
$baud1 = 9600
$baud = 9600

Config Porta = Output
'Define the pins used for network card.
'Define the pins used for network card.

Ne2000_a0_pin Alias Pinc.0
Ne2000_a1_pin Alias Pinc.1
Ne2000_a2_pin Alias Pinc.2
Ne2000_a3_pin Alias Pinc.3
Ne2000_a4_pin Alias Pinc.4
Ne2000_ior_pin Alias Pinc.5
Ne2000_iow_pin Alias Pinc.6
Ne2000_reset_pin Alias Pinc.7

Ne2000_a0 Alias Portc.0
Ne2000_a1 Alias Portc.1
Ne2000_a2 Alias Portc.2
Ne2000_a3 Alias Portc.3
Ne2000_a4 Alias Portc.4
Ne2000_ior Alias Portc.5
Ne2000_iow Alias Portc.6
Ne2000_reset Alias Portc.7


Ne2000_d0_pin Alias Pina.0
Ne2000_d1_pin Alias Pina.1
Ne2000_d2_pin Alias Pina.2
Ne2000_d3_pin Alias Pina.3
Ne2000_d4_pin Alias Pina.4
Ne2000_d5_pin Alias Pina.5
Ne2000_d6_pin Alias Pina.6
Ne2000_d7_pin Alias Pina.7

Ne2000_d0 Alias Porta.0
Ne2000_d1 Alias Porta.1
Ne2000_d2 Alias Porta.2
Ne2000_d3 Alias Porta.3
Ne2000_d4 Alias Porta.4
Ne2000_d5 Alias Porta.5
Ne2000_d6 Alias Porta.6
Ne2000_d7 Alias Porta.7

'Load the library.

$lib "ne2000.lbx"
$external Ne2000_init , Ne2000_poll , Ne2000_udp_tx

'Dimention some variables for the libary.
Dim Host_mac(6) As Byte
Dim Host_ip(4) As Byte
Dim Host_port As Word
Dim My_mac(6) As Byte
Dim My_port As Word
Dim My_ip(4) As Byte
Dim Udp_data(128) As Byte At &H270
'overlay the string s over the array Udp_data() just to make things easy later.
Dim S As String * 128 At &H270 Overlay

'helper varible
Dim X As Byte

Init:
' include the waitms 10 even if you don't have a LCD as the cls will load the required
' _waitms routine from the MCS.LBX

 Waitms 10

' Setup Our Ip Address.
 My_ip(1) = 192
 My_ip(2) = 168
 My_ip(3) = 1
 My_ip(4) = 102

'call the initilisation routine for the ne2000 card.
 Gosub Ne2000_init

Main:
' Poll the card to see if there is data for us.
' The Poll routine takes car of decoding to packets.
' It will automaticly reply to ARP requests. and Decode UDP data packets.
 Gosub Ne2000_poll


 S = "Hello World"
' and make the Network card send it.
 Gosub Ne2000_udp_tx
' the subroutine Ne2000_udp_rx must be ended with a return.
 Return


' Go back and do it all again
 Goto Main

'This is a subroutine that the Ne2000_poll routine calls when there is
'UDP data for us.
Ne2000_udp_rx:
' the array Host_mac() contains the PC's mac address this is needed if we
' want to send some data back.
 Print "Host ethernet address:";
 For X = 1 To 6
 Print Host_mac(x);
 Print " ";
 Next X
 Print
' the array Host_ip() contains the PC's IP address also needed if we
' want to send some data back.
 Print "Host IP address:";
 For X = 1 To 4
 Print Host_ip(x);
 Print " ";
 Next X
 Print
' the word Host_port is the IP port of the PC. Needed as well if we
' want to send some data back.
 Print "Host Port:";
 Print Host_port
' the array My_ip() contains the AVR's IP address also needed if we
' want to send some data back.
 Print "AVR's IP address:";
 For X = 1 To 4
 Print My_ip(x);
 Print " ";
 Next X
 Print
' the word My_port is the IP port of our AVR. Needed as well if we
' want to send some data back.
 Print "AVR Port:";
 Print My_port
' you can check My_port to see if it agrees with a predefined port if you like
 If My_port = 1234 Then
' so to get here the PC had to have the right IP address of our AVR and
' the right Port address too.
' the udp data is placed in the array Udp_data()
' we have overlayed the string s over the Udp_data() so that s will also contain
' the udp data but in a string format.
 Print S
 End If
' now lets send something back to the PC.
' fill the string s with some text.
 S = "Hello World"
' and make the Network card send it.
 Gosub Ne2000_udp_tx
' the subroutine Ne2000_udp_rx must be ended with a return.
 Return
'thats all
End

'The rest of this example is for Visual Basic.
'It shows how to interface with the AVR using
'the Microsoft Winsock Control.

'In VB place a Microsoft Winsock Control on your form called Winsock1.

'You then setup the Winsock Control with the remote host IP address and port.

'  Winsock1.Close
' Winsock1.Protocol = sckUDPProtocol
' Winsock1.RemoteHost = "192.168.254.102"
' Winsock1.RemotePort = "1234"

'To send a UDP packet to the host (AVR):

' Winsock1.SendData "What ever you want to send, up to 128 bytes"

'Data arrives back from the host (AVR) through an event:

' Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
' Dim strData As String
' Winsock1.GetData strData

'strData now contains the returned text / data
'bytesTotal is the length it should be 128

' End Sub


In VB2005 Express nutze ich (habs hinbekommen mit MS Winsock6. Zumindest 
hoffe ich das)
 Winsock1.SendData "What ever you want to send, up to 128 bytes"

Ich hab an dem WebServer 3 LEDs zusätzlich drann. Ich möchte über den 
WinSock.SendData-Befehl die LEDs erstmal steuern (damit ich überhaupt 
weis obs geht)

Zwischenzeitlich hab ich festgestellt das der AVR-Code einen 
Prozessorreset bewirkt (zumindest springt er immer von vorne los).

Fuses hab ich geprüft (jtag,xtal, m128-mode)

Ich weis einfach nicht weiter!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann bringe zunächst den Code auf dem AVR in Ordnung.

Vielleicht hilft es hier einen Webserver nach U.Radig-Nachbau zu suchen, 
der ebenfalls einen Atmega128 verwendet. Vorausgesetzt der angegebene 
Schaltplan ist kompatibel könntest du ein fremdes Programm übernehmen.

Wenn du den BASCOM Code debuggen musst, schau als erstes nach, ob es auf 
der Herstellerseite oder in der Cummunity Bugreports gibt. Dann versuche 
einzugrenzen, wo der Fehler passiert. Wahrscheinlich hast du den 
Sourcecode zu der Library wohl nicht und du kannst nicht viel machen. 
Mit den drei LEDs und Warteschleifen oder einer EIngabe kannst du dich 
aber vortasten und prüfen, welche der Unterfunktionen in der Library den 
Reset auslöst (init, poll, udp_tx).

Wenn das steht, kannst du probieren mit Standardtools vom PC aus mit dem 
AVR zu quatschen. Um Pakete über UDP an deinen AVR auf Port 1234 zu 
schicken und zu empfangen, kannst du z.B. die Freeware Hercules SETUP 
benutzen. http://www.hw-group.com/products/hercules/index_de.html

Erst anschliessend solltest du dich mit dem Unterschied zwischen VB und 
VB2005 befassen, um den für VB angegebenen Winsock-Kram hinzubekommen.

ADD:
Ich hätte mir nicht eine UART mit der LED zugebaut. DEr Atmega128 hat 
UARTs, da würde ich zumindest an einer eine Debugschnittstelle aufbauen, 
um mit einem RS232 Terminalprogramm eine weitere Spionagemöglichkeit in 
das Hirn des kleinen Kerls zu bekommen ;-)

Autor: Alex W. (a20q90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:
> Dann bringe zunächst den Code auf dem AVR in Ordnung.
>
> Vielleicht hilft es hier einen Webserver nach U.Radig-Nachbau zu suchen,
> der ebenfalls einen Atmega128 verwendet. Vorausgesetzt der angegebene
> Schaltplan ist kompatibel könntest du ein fremdes Programm übernehmen.
>

Die Soft von Ulrich läuft auf den Server! Hab ich schon getestet!

> Wenn du den BASCOM Code debuggen musst, schau als erstes nach, ob es auf
> der Herstellerseite oder in der Cummunity Bugreports gibt. Dann versuche
> einzugrenzen, wo der Fehler passiert. Wahrscheinlich hast du den
> Sourcecode zu der Library wohl nicht und du kannst nicht viel machen.
> Mit den drei LEDs und Warteschleifen oder einer EIngabe kannst du dich
> aber vortasten und prüfen, welche der Unterfunktionen in der Library den
> Reset auslöst (init, poll, udp_tx).

Der Reset wird bei Ne2000_init ausgelöst

>
> Wenn das steht, kannst du probieren mit Standardtools vom PC aus mit dem
> AVR zu quatschen. Um Pakete über UDP an deinen AVR auf Port 1234 zu
> schicken und zu empfangen, kannst du z.B. die Freeware *Hercules SETUP*
> benutzen. http://www.hw-group.com/products/hercules/index_de.html
>
> Erst anschliessend solltest du dich mit dem Unterschied zwischen VB und
> VB2005 befassen, um den für VB angegebenen Winsock-Kram hinzubekommen.

Danke! Referenzen die funktionieren sind wichtig! Ich werd das Programm 
mal testen!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann bist du in einer blöden Lage. Fehlerursachen in einer proprietären 
Library zu suchen, ist nicht wirklich spassig.

Wie geschrieben - vielleicht ist bereits der Fehler bekannt (und 
hoffentlich gefixt), oder er kann gemeldet werden.

Auch die Doku der Library peinlich genau lesen - vielleicht muss ein 
Parameter so und so eingestellt werden. An einer Stelle (beim poll) wird 
ja mit einer Userdefinierten Funktion gearbeitet - vielleicht gibt es 
für die init was ähnliches (vielleicht Fehlerbehandlung durch User 
ö.ä.).

Hast du einen Link zu der Doku der Ne2000 Library von BASCOM?

ADD:

Hab den Link: 
http://www.mcselec.com/index.php?option=com_conten...

Autor: Alex W. (a20q90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:

> http://www.mcselec.com/index.php?option=com_conten...

Genau diese benutz ich! Im MCS-Forum hab ich nix gefunden!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur ein Bauchgefühl:

Ich würde beim Debuggen an dieser Stelle anfangen:

Dim Udp_data(128) As Byte At &H270
'overlay the string s over the array Udp_data() just to make things easy later.
Dim S As String * 128 At &H270 Overlay


Der Democode ist für einen Atmega8535 (512 Bytes SRAM) geschrieben und 
du hast einen Atmega128 (4096 Bytes SRAM). Im Original ist statt der 
Adresse &H270 die Adresse &H79 angegeben.

Die Adresse muss bei der Portierung vom Atmega8535 zum Atmega128 
geändert werden, weil beim Atmega128 dort Register vom Timern liegen. 
Aber ist &H270 richtig? Wie kommst du auf die &H270?

Die zweite Frage - hat die Library die &H79 fix eincodiert oder kann die 
auf deine Änderung reagieren?

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.