> hat einer von euch schon mal ein CANopen Bus im Assambler
> Programmiert ?
Was suchst du genau, CAN-Bus oder CANopen? Letzteres ist ein höheres
Kommunikationsprotokoll (Schicht 7), was auf ersterem (Kommunikations-
schichten 1 und 2) abläuft.
CANopen ist meiner Meinung nach etwas zu komplex, um es in Assembler
zu programmieren. Von mehreren Firmen werden für einiges Geld
entsprechende Bibliotheken angeboten. Die sind aber praktisch alle in
C und für die Einbindung in C-Programme implementiert. Es gibt auch
eine freie Bibliothek, ebenfalls in C: http://www.canfestival.org
> Brauche das für ein Privates Projekt.
Benutzt du in deinem Projekt Komponenten, die per CANopen angesprochen
werden? Wahrscheinlich eher nicht. Dann würde ich auf CANopen
verzichten und die Kommunikation über das "normale" CAN-Bus-Protokoll
abwickeln, das größtenteils bereits in der CAN-Hardware implementiert
und deswegen relativ leicht (auch in Assembler) zu programmieren ist.
> Das programm soll nix anderes machen als, das wenn auf port 1.1 eine
> Spannung anliegt das in ein CANopen Protokoll zu verpacken, das dann
> von einem anderen µC sendet der dann das Protokoll aufnimmt
> verarbeitet und dann an z.B. an port 5.2 einen ausgang schaltet!
Dann pack die Information, die du übertragen willst, in eine normale
CAN-Nachricht, verpasse ihr einen geeigneten Identifier und schicke
sie auf den Bus. Eine CAN-Nachricht kann bis zu 8 Datenbytes
enthalten, was für die von dir beschriebene Anwendung locker
ausreichen sollte.
Das zu programmieren ist nicht schwer, wenn du die CAN-Grundlagen und
die von dir eingesetzte CAN-Hardware verstanden hast. Zu CAN im
Allgemeinen gibt es Infos im Netz (ich würde vielleicht bei Wikipedia
anfangen), zu deiner CAN-Hardware gibt es ein Datenblatt.
Die eigentliche Programmierung besteht dann im Wesentlichen aus den
folgenden Schritten:
- Initialisierung der CAN-Hardware (Einstellen der Bitrate,
Konfiguration des Nachrichtenfilters usw.)
- Füllen der Sendedaten in einen von der Hardware zur Verfügung
gestellten Puffer
- Absenden der Nachricht
- Abfrage, ob eine Nachricht empfangen wurde (ggf. durch
Interrupthandler)
- Auslesen der Nachricht aus Hardwarepuffer
Alles andere wie z. B. Fehlererkennung, die automatische Wiederholung
fehlerhaft übertragener Nachrichten usw. macht die Hardware für dich.