Profibus / CAN-Bus mit AVR Controller

Hallo, ich hoffe ich bin mit meinem Problem im richtigen Forum.

Ich möchte ein Modul basteln das als Slave mit den Profibus kommunizieren kann. Ich habe mal gehört das ginge mit einem AVR Controller. Über den Profibus weiss ich nur, dass er elektrisch wie eine RS485-Schnittstelle funktioniert.
Wie sieht das Protokoll aus?
Wie bringe ich den Slave an eine Siemens S7-SPS (normalerweise braucht man da doch eine GSD-Datei)?
Wie komme ich auf 12Mbit?
Weiss jemand mehr darüber? Gibt es schon Lösungen mit AVR-Basic oder wieder nur mit C und Assembler?

Wie geht das eigentlich mit dem CAN-Bus?
Wie ist der elektrisch spezifiziert?
Wie sieht das Protokoll aus?
Mit welcher Übertragungsrate geht er?
Gibt es hier schon Lösungen mit AVR-Basic oder auch wieder nur mit C und Assembler?

Vielen Dank schon mal für die Antworten.

hallo.

was heißt hier „nur mit c oder assembler“? bei nem 8bittigen avr kriegst du mit assembler wohl am ehesten 12Mbit hin, würd ich mal sagen… ansonsten dürften c-compilate auch etwas effizienter sein als solche aus basic.

zum can-bus: soweit ich weiß, gehen die übertragungsraten bis 1Mbit… eine spec findest du hier http://www.microcontrol.net/download/can2spec.pdf

mit nem avr dürftest dir schwer tun, eine can-schnittstelle von grund auf zu implementieren. was natürlich nicht heißt, daß es nicht geht. siehe z.b.:
http://www.kernelconcepts.de/products/mcan/m-can.shtml
oder
http://www.sander-electronic.de/es0013.html

bei letzterem werden sogar basic-tools angeboten.
wenn du das ganze zeuch selber programmieren willst, würd ich aber lieber einen µC nehmen, der schon ein can-interface drin hat…

gruß

michael

Hallöchen :smile:

Hallo, ich hoffe ich bin mit meinem Problem im richtigen
Forum.

Weis ich net … bin auch erst heute gejoint :smile:

Ich möchte ein Modul basteln das als Slave mit den Profibus
kommunizieren kann. Ich habe mal gehört das ginge mit einem
AVR Controller. Über den Profibus weiss ich nur, dass er
elektrisch wie eine RS485-Schnittstelle funktioniert.
Wie sieht das Protokoll aus?

Ursprünglich unterscheidet man wohl 3 Arten Profibus…

  • Profibus FMS (umfangreiches Protokoll)
  • Profibus DP (schneller Datenaustausch Master/Slave)
  • Profibus PA (ex. Geschüzt anderer Physical Layer)

Angewendet wird das „Token Passing“-Verfahren für die Kommunikation im Multimaster-System.

Profibus ist eine Deutsche Norm in mehreren Teilen (mitlerweile wohl auch EN-Normen aber zum Einstieg reicht es)
DIN 19245-1 beschreibt Layer 1 und 2
DIN 19245-2 beschreibt Layer 7 der Profibus FMS
DIN 19245-3 beschreibt Layer 7 der Profibus-DP
DIN 19245-4 beschreibt einen alternativen physikal Layer, der im Ex Bereich von Profibus-PA eingesetzt wird.

Wie bringe ich den Slave an eine Siemens S7-SPS (normalerweise
braucht man da doch eine GSD-Datei)?

Die GSD-Datei musst du dann selber schreiben, das Tool Com-Profibus von Siemens stellt das glaube ich zur verfügung eigenen gsd-dateien zu machen

Wie komme ich auf 12Mbit?

Einfach einstellen ? Die Hardware (Der/die Bus-Master) und der gesamte Bus (slaves) muss natürlich auf 12MBit laufen.

Weiss jemand mehr darüber? Gibt es schon Lösungen mit
AVR-Basic oder wieder nur mit C und Assembler?

was ist AVR überhaupt ? Ich kenne nur ASIC-Controller die schon eine Schnittstelle für Profibus oder Can implementiert haben … und dann mit c oder so programmiert werden…

Wie geht das eigentlich mit dem CAN-Bus?
Wie ist der elektrisch spezifiziert?
Wie sieht das Protokoll aus?

Der CAN-Bus ist in verschiedenen Normen beschrieben.
Die wichtigste ist:
Din ISO 11898: Can layer 1 und 2

Mit welcher Übertragungsrate geht er?
Gibt es hier schon Lösungen mit AVR-Basic oder auch wieder nur
mit C und Assembler?

Versteh ich noch nicht was du meinst, aber zum Einstieg sollte die o.g. Info reichen !??

Vielen Dank schon mal für die Antworten.

Öh, desweitern würde ich mal bei den Nutzerorganisationen von CAN und Profibus umschauen. Googel dich dahin … ich hab selber keine Links dahin …

Öh, generell ist eine Implementierung von CAN oder Profibus in einen Mikrocontroller alleine fast unmöglich (schätze ich ).
Das Profibus-Protokoll ist zu umfangreich.
Beim Can-Bus könnte ich mir das schon eher vorstellen aber eigentlich verschwendete Zeit, da es schon sehr billige Microcontroller mit entsprechender Schnittstelle gibt.

Bin mal gespannt was AVR-Basic is :smile:

Gruss
Gobo

Hallo Schmic20,
wenn du Infos zum Telegrammaustausch auf dem Profibus suchst, dann kannst du mal auf meiner homepage http://www.12move.de/home/hanskrause vobeischauen. Dort findest du eine kurze Einweisung, eine detaillierte kann ganze Bücher füllen.
Dort findest du auch Programme, mit denen du ein Profibusnetz mit Hilfe von PC’s simulieren kannst (Master,Slave) und ein Monitorprogramm, mit dem du den Datenverkehr auf dem Profibus mitprotokollieren kannst. Alles natürlich mit der PC-üblichen und auch Profibus-konformen Baudrate von 19,2 kBaud.

Ich möchte ein Modul basteln das als Slave mit den Profibus
kommunizieren kann. Ich habe mal gehört das ginge mit einem
AVR Controller.

Diese Idee hatte ich auch, bin aber noch nicht dazu gekommen.

Über den Profibus weiss ich nur, dass er
elektrisch wie eine RS485-Schnittstelle funktioniert.

Richtig!

Wie sieht das Protokoll aus?

Siehe auf meiner homepage nach.

Wie bringe ich den Slave an eine Siemens S7-SPS (normalerweise
braucht man da doch eine GSD-Datei)?

Eigentlich nicht. Die GSD-Datei ist nur eine Hilfestellung um der Steuerung beizubringen, wie sie mit dem Slave zu kommunizieren hat. Ohne GSD-Datei muss man lediglich die Einstellungen alle von Hand machen. Und wenn man nur einen Fehler macht, geht gar nichts.

Wie komme ich auf 12Mbit?

Da sehe ich allerdings ein Problem. Der ATMega kann Baudraten bis 1 MBaud. Die 12 Mbaud werden mit ihm aber nicht zu schaffen sein. Also für die grossindustrielle Anwendung muss man schon die angebotenen Profibus-Chipsätze verwenden. Da du aber von „basteln“ sprichst, tun es ja vielleicht auch die 1 MBaud.

Gibt es schon Lösungen mit
AVR-Basic oder wieder nur mit C und Assembler?

Not yet

Wie geht das eigentlich mit dem CAN-Bus?
Wie ist der elektrisch spezifiziert?

CAN ist ein differentieller 2-Leiter-Bus nach ISO 11898. CAN-Bus Treiber haben als Besonderheit, dass sie die Signale, die sie senden, auch gleichzeitig „mithören“. Der RS-485 Treiber kann entweder hören oder senden, aber nicht beides gleichzeitig. Mit dem gleichzeitigen mithören auf dem Bus werden Bus-Kollisionen aufgelöst. Denn die CAN-Struktur ist keine Master-Slave sondern eine Peer-to-Peer (Gleicher unter Gleichen) Struktur, bei der der Teilnehmer mit der kleinsten Adresse die höchste Kommunikationspriorität besitzt.

Wie sieht das Protokoll aus?

Jetzt wird’s mir auch zu kompliziert und ich sage mal, informiere dich aus einer anderen Quelle.

Mit welcher Übertragungsrate geht er?

CAN geht bis 1 Mbaud besitzt aber im unteren Bereich so PC-unübliche Baudraten wie 10 kBaud, 20 kBaud, 50 kBaud…

Gibt es hier schon Lösungen mit AVR-Basic oder auch wieder nur
mit C und Assembler?

Da findest du jede Menge im Net, wenn du mit „CAN AVR“ mal googelst. Eine Interessante Adresse ist z.B. http://www.canathome.de

mfG
Hans

Hallo Hans,

vielen Dank, das war sehr aufschlussreich. Ich habe Deine Homepage besucht und finde sie sehr interessant.

mfg
Michael

Hallo Gobo,

vielen Dank für Deine Antwort. Jetzt weiss ich mehr.

Hier ist auch die Antwort auf Deine Frage

Bin mal gespannt was AVR-Basic is :smile:

Gruss
Gobo

AVR-Basic ist ein Basic-Compiler für Microcontroller von der Firma AVR/ATMEL. Ich finde es gut, weil ich nur Pascal und Basic kann und nicht unbedingt C erlernen wollte. So wie es aussieht werde ich aber nicht darum herumkommen.

mfg
Michael

Hallo Michael hier auch Michael,

hallo.

was heißt hier „nur mit c oder assembler“? bei nem 8bittigen
avr kriegst du mit assembler wohl am ehesten 12Mbit hin, würd
ich mal sagen… ansonsten dürften c-compilate auch etwas
effizienter sein als solche aus basic.

Du hast ja recht. Mir ist schon klar dass C und Assembler effizienter sind, aber Assembler ist aufwändig und C kann ich nicht und da gibt es eben diesen Basic-Compiler der die Sache etwas vereinfacht (für mich jedenfalls).

zum can-bus: soweit ich weiß, gehen die übertragungsraten bis
1Mbit… eine spec findest du hier
http://www.microcontrol.net/download/can2spec.pdf

mit nem avr dürftest dir schwer tun, eine can-schnittstelle
von grund auf zu implementieren. was natürlich nicht heißt,
daß es nicht geht. siehe z.b.:
http://www.kernelconcepts.de/products/mcan/m-can.shtml
oder
http://www.sander-electronic.de/es0013.html

Deinen Links bin ich gefolgt und ich habe dadurch nun eine ganze Menge Informationen erhalten. Vielen Dank.

bei letzterem werden sogar basic-tools angeboten.
wenn du das ganze zeuch selber programmieren willst, würd ich
aber lieber einen µC nehmen, der schon ein can-interface drin
hat…

Kannst Du mir einen oder mehrere µC nennen? Wie werden die programmiert? Was brauche ich dazu?

gruß

michael

Viele Grüße
ebenfalls Michael

hallo.

Kannst Du mir einen oder mehrere µC nennen? Wie werden die
programmiert? Was brauche ich dazu?

da gibt’s auch welche von atmel. z.b. den AT89C51CC03, T89C51CC02 oder T89C51CC01. die bieten auch ein can-demoboard an. zum rumprobieren find ich sowas auf jeden fall empfehlenswert.

ob’s für o.g. µCs basic-compiler gibt, weiß ich allerdings nicht. am besten mal bei atmel nachfragen.

was assembler angeht, hast du natürlich recht. is ne fehlerträchtige arbeit. aber kein compiler is perfekt, und es ist -war jedenfalls für mich vor zwei jahren- erstaunlich, was man selbst gegenüber einem teuren c-compiler noch rausholen kann, wenn man’s geschickt anstellt.

und c lernen… geht schon :smile: wenn du einigermaßen fit in basic bist, sollte der umstieg nicht so schwer fallen.

gruß

michael

Hallo Michael,

vielen Dank für die Info. Ich werde mich mal schlau machen.

Viele Grüße
Michael

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]