EasyTWI ein AVR Webserver in BASCOM![]() Die Teile werden von MCS Electronics vertrieben und können Online bestellt werden. Ich habe, mit Stand März 2007, für das NM7010A Modul 26,95 Euro, das Adapterboard für das NM7010A 5,95 Euro und für die EasyTWI Platine 9,95 Euro bezahlt. Dazu kommen dann noch paar Bauteile. Ich habe die Platine mit einem ATmega32 bestückt, aber es sind auch andere Prozessoren möglich (ATmege8, ATmege48, ATmege88, ATmege168, ATmega644,...). Der EasyTWI AVR Webserver von MCS Electronics war der einzige Webserver der auf Anhieb funktioniert hat. Also zusammengelötet Beispiel Software drauf und ging. Die Dokumentation ist zwar wie bei allen anderen Projekten unter aller ah Würde, aber zum Einen kann bei der Ansteuerung über die TWI (I2C) Schnittstelle nicht viel schief gehen. Und, obwohl ich Basic nicht wirklich gut finde hat es einen Riesenvorteil. Der Quellcode geht praktisch auf eine Seite, was ihn auch ohne Dokumentation überschaubar und selbst erklärend macht. Das EasyTWI Board mit ATmege32 ohne NM7010A hat bei mir eine Stromaufnahme von ca. 55mA und mit Netzwerkmodul NM7010A betrug der Stromverbrauch ca. 80mA mit angeschlossenem Netzwerkkabel erhöhte sich diese auf ca. 150mA. Mit einem 9V Steckernetzteil ergibt sich eine Leistungsaufnahme von ca. 1,5 Watt. Das EasyTWI und das NM7010A werden von MCS Elektronics www.mcselec.com vertrieben. Mehr Bilder kann man sich hier ansehen. Wie man auf dem Bild sehen kann, besitzt das EasyTWI Borad ein Patchfeld mit dem man einfach die entsprechenden Verbindungen herstellen kann. Auf dem Bild sieht man auch, dass ich den 28poligen Sockel für dem ATmega8 nicht bestückt habe. Da an dem ATmega8 Sockel aber auch parallel die Pins des ATmega32 anliegen, so wie Masse und Versorgungsspannung, habe ich ihn für die 1wire Schnittstelle missbraucht. Das EasyTWI Borad besitzt eine Schnittstelle für ein LCD Display, wie sie auch viele andere Systeme benutzen, wie das STK200, die SPS-Ctrl, die AVR-Ctrl und ich denke noch jede Menge andere. Damit ist es einfach möglich ein LCD Display an zu stecken und zu betreiben. Damit kann man sich sehr gut Status Informationen ausgeben, die bei der Fehler suche sehr hilfreich sind. Beim ersten Versuch habe ich in der oberen Zeile ein paar Status Informationen und die aktuelle Temperatur und in der unteren Zeile die IP von der aus auf den Server zugegriffen wurde ausgegeben. Im ersten Versuch wollte ich meine Außentemperatur im Internet zugänglich machen. Ich will mit dem Mikrocontroller keinen Webserver nach empfinden, sondern ihn nur die nötigste Arbeit machen lassen um mein Ziel zu erreichen. Den Mikrocontroller brauche ich um die Kosten im Dauerbetrieb, sprich den Stromverbrauch, gering zu halten. Ich will also nur die Daten, die "schöne Seite" baue ich auf meinem "richtigen" Webspace. Dazu habe ich die Bascom Beispielsoftware auf das nötige Minimum abgespeckt und frage so die Daten, sprich die Temperatur in Pirna, über einen Cronjob, in PHP, alle 15 Minuten ab und speichere die Daten in eine MySQL Datenbank. Das ganze kann man sich hier anschauen. Erster Test mit BASCOM Software![]() Ich habe eines der Beispielprogramme auf ein Minimum zusammen gestrichen, so dass es sich auch mit der Demo Version des BASCOM übersetzen lässt. Damit ist ein Erster Test möglich. In dem Beispiel hat der Webserver die IP-Adresse 192.168.0.200. Als erstes sollte man ein DOS oder Eingabefenster aufmachen und mit dem Kommandozeilembefehl PING 192.168.0.200 testen ob das Netzwerk funktioniert. Im nächsten Schritt gibt man im Internetexplorer die IP ein und eine Seite sollte angezeigt werden. Wichtig ist, das man sich dabei im selben Netzwerk befindet, d.h. der eigene Rechner muss eine Adresse in der Form 192.168.0.??? haben. $regfile = "m32def.dat" $crystal = 14318000 $baud = 19200 $hwstack = 64 $swstack = 64 $framesize = 200 Const Sock_stream = $01 Const Sock_dgram = $02 Const Sock_ipl_raw = $03 Const Sock_macl_raw = $04 Const Sel_control = 0 Const Sel_send = 1 Const Sel_recv = 2 Const Sock_closed = $00 Const Sock_arp = $01 Const Sock_listen = $02 Const Sock_synsent = $03 Const Sock_synsent_ack = $04 Const Sock_synrecv = $05 Const Sock_established = $06 Const Sock_close_wait = $07 Const Sock_last_ack = $08 Const Sock_fin_wait1 = $09 Const Sock_fin_wait2 = $0a Const Sock_closing = $0b Const Sock_time_wait = $0c Const Sock_reset = $0d Const Sock_init = $0e Const Sock_udp = $0f Const Sock_raw = $10 Enable Interrupts Config Tcpip = Int0, Mac = 12.128.12.34.56.78, Ip = 192.168.0.200, Submask = 255.255.255.0,_ Gateway = 0.0.0.0, Localport = 1000, Tx = $55, Rx = $55, Twi = &H80, Clock = 400000 Waitms 200 Print "MSC EasyTWI" Dim Tempw As Word Dim S As String * 140 , Sheader As String * 30 Dim Buf(120) As Byte At S Overlay Dim I As Byte , Bcmd As Byte Dim Wsize As Word I = 0 Do Tempw = Socketstat(i , 0) Select Case Tempw Case Sock_established Print "sock_est" Tempw = Socketstat(i , Sel_recv) If Tempw > 0 Then Bcmd = 0 Do Tempw = Tcpread(i , S) If Left(s , 3) = "GET" Then Bcmd = 1 End If Loop Until S = "" If Bcmd = 1 Then S = "<html><head></head>"_ + "<body style='border:2px solid #000000;background-color:#C0C0C0;'>"_ + "MCS EasyTWI Webserver</body></html>" Wsize = Len(s) Sheader = "Content-Length: " + Str(wsize) + "{013}{010}" Tempw = Tcpwrite(i , "HTTP/1.0 200 OK{013}{010}") Tempw = Tcpwritestr(i , Sheader , 255) Tempw = Tcpwrite(i , S , Wsize) End If Closesocket I End If Closesocket I Case Sock_close_wait Closesocket I Case Sock_closed I = Getsocket(0 , Sock_stream , 80 , 0) Socketlisten I End Select Loop End Hier gibts die Software für den Webserver zur Temperaturmessung >>>
© 04.12.2007 Hans-Jürgen Jacob (Pirna)
|
|