Forum: Mikrocontroller und Digitale Elektronik Atmega16 über Internet steuern


von Willi S. (father_smu)


Lesenswert?

Hallo liebe User,

Bisher habe ich ein funktionierendes System (Ein Bedienungsboard für 4 
Schrittmotoren mit Tastern, LED´s, LCD Display,...)
Habe den Atmega16 µC mit einem STK500 Board Programmiert und es 
funktioniert alles 'Einwandfrei'.
So, nun möchte ich das Projekt gerne über Internet ansteuern, d.h. eine 
Lösung wäre vllt. das ich die Kommunikation mit einem 
http://elmicro.com/de/foxboard.html Linux Board erstelle und dort über 
den vorhandenen Webserver den Atmega16 flashe.
Nun stellt sich mir die Frage wie ich das flashen von dem Webserver aus 
starten kann?
Kann ja die AVR Studio.exe nicht einfach auf den mini chip laufen 
lassen.

Gibts da shcon welche Ansätze, oder embedded flash tools für Atmega16 
chips?

MFG Willi

von Oliver J. (skriptkiddy)


Lesenswert?

Was genau hast du vor?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

avrdude arbeitet mit allen möglichen programmieradaptern zusammen und 
läuft unter so ziemlich allen linuxen:
http://www.nongnu.org/avrdude/

von Willi S. (father_smu)


Lesenswert?

Kann ich dieses Programm auf den Webserver laden?
Ich möchte den Atmega nämlich von jedem beliebigen PC flashen können 
ohne das der jeweilige PC irgend ein Flashprogram auf der Festplatte 
hat.
D.h. das das flashprogramm das C-Code in Maschinen-Code umsetzt und in 
die jewieligen Register des Atmega16 lädt, auf dem Webserver installiert 
sein muss und von dort aus starten sollte.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Willi S. schrieb:
> Kann ich dieses Programm auf den Webserver laden?

Klar, aber bin mir immer noch nicht sicher, was du vorhast. AVRDude kann 
nicht kompilieren, sondern nur programmieren. Du bräuchtest also einen 
Satz von vorgefertigten HEX files , die du dann per CGI oder PHP 
entfernt startest . AVRDude muss also auf der Maschine laufen, die den 
AVR programmieren soll und per Programmierer ( schlimmstenfalls PonyProg 
oder ne ähnlich simple Lösung) auf den AVR zugreift.

Da der AVR sich nur ca. 10000 mal programmieren lässt, solltest du evtl. 
auch ein Passwort vorsehen :)

von Karl H. (kbuchegg)


Lesenswert?

Bist du sicher, dass du tatsächlich ein komplett neues Steuerprogramm in 
den AVR geladen haben willst (wegen zb C-Programmierer Ausbildung) und 
nicht einfach nur das auf dem AVR laufende Programm mit zb neuen 
Bahndaten füttern willst, welche die Schrittmotoren abfahren.

Im ersten Fall musst du flashen, im zweiten Fall ist das aber einfach 
nur eine Datenübertragung und das auf der Steuerung laufende Programm 
muss sich die Bahnkoordinaten irgendwo zwischenspeichern.

Für den ersten Fall (also neues Programm flashen) wäre eventuell auch 
ein Bootloader eine Alternative.

von Willi S. (father_smu)


Lesenswert?

@Karl Heinz Buchegger

Ok du hast recht ich muss nicht unbedingt das komplette Programm frisch 
drauf flashen, ich müsste nur einige Parameter ändern können über den 
Webserver, wie z.B. die Drehrichtung des Stepmotors ändern oder die 
Phasenverschiebung der einzelnen Rotoren.
Wie meinst du dann das mit "nur eine Datenübertragung"?
Meinst du ich sollte das komplette Programm auf dem Atmega16 laufen 
lassen und die Parameter dann über ne SD Karte oder der gleichen 
Speichern die ich dann über den Webserver beschreiben könnte und dieser 
dann von dem µC als eingang der Parameter, oder besser gesagt 
auslagerungsspeicher der Parameter dient?
Ist das möglich? Und wenn ja was von den beiden Sorten ist die schönste?

Ein fertigen Bootloader wird es wohl nicht geben oder?

von Karl H. (kbuchegg)


Lesenswert?

Willi S. schrieb:

> Ok du hast recht ich muss nicht unbedingt das komplette Programm frisch
> drauf flashen,

dachte ichs mir doch.

> ich müsste nur einige Parameter ändern können über den
> Webserver, wie z.B. die Drehrichtung des Stepmotors ändern oder die
> Phasenverschiebung der einzelnen Rotoren.
> Wie meinst du dann das mit "nur eine Datenübertragung"?

Na ja Datenübertragung halt. So wie man das zb mit einer UART macht:
PC schickt Kommandos über die serielle Schnittstelle und das Programm am 
µC wertet sie aus.

> Meinst du ich sollte das komplette Programm auf dem Atmega16 laufen
> lassen und die Parameter dann über ne SD Karte oder der gleichen
> Speichern die ich dann über den Webserver beschreiben könnte und dieser
> dann von dem µC als eingang der Parameter, oder besser gesagt
> auslagerungsspeicher der Parameter dient?

Es dürfte wohl schwer werden, einen SD-Speicher so zu verdrahten, dass 
sowohl PC als auch µC gleichzeitig darauf zugreifen können. Und wenn du 
die Karte händisch umstecken musst, kannst du die ganze Sache mit 
Web-Zugriff auch gleich vergessen.

Nein, ich meine eine ganz normale Datenübertragung, so wie sie in jedem 
mittelmässigen Tutorial gelehrt wird.
Serielle Schnittstelle vom µC wird an den PC angestöpselt, dort ein 
Terminalprogramm aufgemacht und wenn du an diesem Terminal eintippst:
S1,50;
wird vom µC-Programm die S_peed vom Motor _1_ auf _50 gesetzt (was 
immer dann auch 50 sein soll).
Und wenn du
D1,-;
einstippst, veranlasst das µC Programm, dass der Motor rechts rum dreht, 
und bei
D1,+;
lässt es ihn links rum drehen.

Der PC schickt über die Serielle Schnittstelle zb Texte zum µC, die der 
in seinem Programm als Kommandos auffasst und ausführt. So wie du zu 
Hause anrufst und deiner Freundin/Frau sagst: mach das Fenster zu. Und 
die macht das dann.

> Ein fertigen Bootloader wird es wohl nicht geben oder?

vergiss den Bootloader. Der wäre zum flashen eines Progammes gedacht 
gewesen. Hat mit Datenübertragung nix zu tun.

von Albert .. (albert-k)


Lesenswert?

Ich denke Karl Heinz Buchegger meinte es so das du mitels Ethernet die 
Daten an den Webserver überträgst. Und dieser leitet dann bsw. per 
USART, SPI, sonstige freie Schnittstelle die Daten an den uC weiter. im 
uC werden dann die empfangenen Daten bsw. in globale Variablen 
geschrieben (einfachste Variante) und dann im eigentlichen programm 
verwendet.

von Karl H. (kbuchegg)


Lesenswert?

Albert ... schrieb:
> Ich denke Karl Heinz Buchegger meinte es so das du mitels Ethernet die
> Daten an den Webserver überträgst. Und dieser leitet dann bsw. per
> USART, SPI, sonstige freie Schnittstelle die Daten an den uC weiter. im
> uC werden dann die empfangenen Daten bsw. in globale Variablen
> geschrieben (einfachste Variante) und dann im eigentlichen programm
> verwendet.

Ganz genau.
Wobei noch nicht klar ist, ob der Webserver jetzt ein hochgeladenes File 
an den µC weitergibt, oder ob er eine Web-Site mit Buttons drauf anzeigt 
und beim Drücken eines Buttons wird dann ein entsprechendes Kommando an 
den µC geschickt.
Das hängt dann davon ab, was der TO konkret machen will.

von Willi S. (father_smu)


Lesenswert?

Albert ... schrieb:
> Ich denke Karl Heinz Buchegger meinte es so das du mitels Ethernet die
>
> Daten an den Webserver überträgst. Und dieser leitet dann bsw. per
>
> USART, SPI, sonstige freie Schnittstelle die Daten an den uC weiter.

Ganz genauso hät ichs gern. Ich kann mir nur noch nicht vorstellen wie 
die normale kommunikation zwischen Webserver und µC ablaufen soll.

Karl Heinz Buchegger schrieb:
> Wobei noch nicht klar ist, ob der Webserver jetzt ein hochgeladenes File
>
> an den µC weitergibt, oder ob er eine Web-Site mit Buttons drauf anzeigt
>
> und beim Drücken eines Buttons wird dann ein entsprechendes Kommando an
>
> den µC geschickt.

Es soll im Endprodukt eine Web-Site sein bei denen ich Häckchen oder 
Buttons hab.
Ich kann also dem µC über bestimmte Ports einfach Integerwerte vom 
Webserver übergeben oder wie soll ich mir das vorstellen?

von Karl H. (kbuchegg)


Lesenswert?

Willi S. schrieb:

> Ich kann also dem µC über bestimmte Ports einfach Integerwerte vom
> Webserver übergeben oder wie soll ich mir das vorstellen?

Du kannst zb in PHP eine serielle Schnittstelle aufmachen und dort zb 
Texte ausgeben.

Für den µC spielt es keine Rolle, wer am anderen Ende der Leitung sitzt. 
Ob das ein Web-Server ist, der ihm da einen Text zuschanzt oder ob das 
ein Benutzer ist, deran einem Terminal sitzt und vor sich hintippt oder 
ob das ein Visual Basic Programm ist welches die serielle Schnittstelle 
füttert, das alles ist dem µC völlig schnurz.
Der sieht einfach nur, dass an seiner UART ein Text reinkommt, den er 
als Befehl auffassen und ausführen soll.

von Rolf N. (rolfn)


Lesenswert?

Auf der folgenden Seite gibt es das Gewünschte oder zumindest viele 
Anregungen: 
http://mikrocontroller.heldt.eu/index.php?page=enc28j60-io-webserver 
(Platinen usw. werden ebenfalls angeboten.)

...Rolf

von Willi S. (father_smu)


Lesenswert?

Ich überlege gerade welche Ports ich zur Komunikation zwischen µC und 
Webserver benutzen sollte.

Am einfachsten ginge das ja über den USART, da aber meine beiden Sende- 
und Empfangs-PINS PD0 und PD1 leider schon in meinem Programm zur 
Ansteuerung der Schrittmotoren belegt sind und die Platine schon geätzt 
und gelötet ist kann ich die Pinbelegung schlecht ändern.

Ich lese soeben das ich mit Port A als Ausgang externe Speicher 
ansprechen kann, da ich ja nur die Parameter über den Webserver ändern 
möchte wäre dies doch eine Möglichkeit oder?

PS: Die Ports B und C sind auch schon voll belegt.

von Volkmar D. (volkmar)


Lesenswert?

Du kannst auch einen UART in SW implementieren... Dann kann das mit 
jedem beliebigen Portpin erfolgen.

von Willi S. (father_smu)


Lesenswert?

Entschuldigung Volkmar, aber was meinst du mit "SW"?

von Oliver J. (skriptkiddy)


Lesenswert?

Software.

von Karl H. (kbuchegg)


Lesenswert?

SW ... in Software

D.h. du programmierst dir die Bitbehandlung deiner UART selber anstatt 
das die Hardware machen zu lassen.

> und die Platine schon geätzt und gelötet ist kann ich die
> Pinbelegung schlecht ändern.

Es gibt nichts, was man nicht mit einem scharfen Teppichmesser und ein 
bischen Draht auftrennen bzw. umlöten könnte.
Würde ich in deinem Fall machen.
An die Platine musst du sowieso ran, wenn du eine UART nachrüsten 
willst. Irgendwie musst du ja auch den MAX232 bzw. die RS232 Buchse 
anschliessen. Selbst wenn du die beiden Komponenten auf eine 
Huckepackplatine gibst, musst du sie ja immer noch mit dem µC 
verdrahten.

Hake es als Lehrgeld ab, dass man vor dem Ätzen der Platine überlegt, 
welche Komponenten gebraucht werden und im Prototypen einer Platine 
Hardware-Änderungen ganz normal sind.

Schaltpläne gleich aktualisieren und bei der Version 1.1 der Platine ist 
dann wieder alles sauber.

von Willi S. (father_smu)


Lesenswert?

Ja gut ihr habt ja recht, ich dachte das ich meine vorhandene Platine zu 
Testzwecken missbrauchen könnte aber so wenig Schaden wie möglich 
verursachen möchte da diese noch gebraucht wird.
Mit der Version 1.1 werd ich dann natürlich eine neue Platine ätzen 
lassen da wie du ja sagtest noch ein MAX232 zwischen mein RS232 und die 
Pins geklemmt werden sollte.
Dachte eben ich könnte den die PINS PD0 und PD1 für 2 verschiedene 
zwecke nutzen aber das wird dann vllt to much.
Also nutze ich jetzt einfach PD0 und PD1 in Zukunft als Autobahn für die 
Parameter ablage auf dem Webserver zum µC.

von Karl H. (kbuchegg)


Lesenswert?

Willi S. schrieb:
> Ja gut ihr habt ja recht, ich dachte das ich meine vorhandene Platine zu
> Testzwecken missbrauchen könnte aber so wenig Schaden wie möglich
> verursachen möchte da diese noch gebraucht wird.

Na, ja der Schaden hält sich in Grenzen.

Die Leiterbahnen in der Nähe der Pins D0 und D1 mit dem Messer 
unterbrechen. Die jetzt in der Luft hängen Leitungen zu den Motoren vom 
Lötstopplack befreien (mit dem Messerchen runterschaben) und mittels 
Draht (Fädeldraht geht da ganz ausgezeichnet) quer über die Platine mit 
2 Pins vom Port A verbinden. Programm ändern - fertig. Die Pins D0 und 
D1 sind jetzt frei und man kann mit Draht dort andere Komponenten 
anschliessen. Die Drähte noch ein wenig gegen unabsichtliches 
Herunterreißen sichern. (Tropfen Klebstoff)

Die ganze Hardwareaktion dauert normalerweise keine halbe Stunde und du 
hast die Pins frei.

von Willi S. (father_smu)


Lesenswert?

Ok danke dir, werd mein bestes versuchen ;)

von Willi S. (father_smu)


Lesenswert?

Ich habe jetzt diesen XPORT von Lantronix gefunden 
http://www.lantronix.com/device-networking/embedded-device-servers/xport.html

Der kann wie ich sehe eigentlich schon so gut wie alles was ich brauche,
Preis spielt auch keine Rolle.
Ich möchte den XPORT 1. benutzen um die Schnittstelle übers Internet mit 
meinem µC herzustellen und 2. den Webserver des XPORT als Terminal zur 
veränderung bestimmter Variablen nutzen.
Nun weis ich noch nicht so genau wie das wirklich von statten geht.

Also ich stell mir das so vor:
Über die IP Adresse komme ich über den Explorer auf den Webserver des 
XPORT, dort kann ich dann beliebige Variabeln ändern.
Muss ich nun den Webserver als externen Speicher von sicht des µC sehen 
oder soll der Webserver Daten an den µC schicken und die Werte im 
internen µC-Programmspeicher ändern (fals das überhaupt möglich ist).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.