www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Automatic Reply auf Remote Frame


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen

Ich benutze einen AT90CAN128 in einem CAN-Bus. Der soll von einem Master 
eine Nachricht mit Remote Frame erhalten und dann automatisch die 
gewünschte Antwort (mit gleicher ID) zurückgeben. Ich finde aber 
nirgends eine verständliche Beschreibung, wie man das in C 
implementieren kann. Aus dem Datenblatt des AT90 werd ich auch nicht 
ganz schlau.
Die CAN-Nachricht empfangen ist kein Problem. Es geht nur um die 
Antwort. Wie könnte sowas aussehen?

Danke für Eure Antworten

Gruss
Patrick

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiss denn wirklich niemand Rat?

Autor: klodeckel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..also ich weiß nix

ts

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hilft mir natürlich enorm weiter.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Ich benutze einen AT90CAN128 in einem CAN-Bus. Der soll von einem Master
> eine Nachricht mit Remote Frame erhalten und dann automatisch die
> gewünschte Antwort (mit gleicher ID) zurückgeben.


Die meisten Anwendungen haben ne Empfangsroutine und ne Senderoutine, 
fertich.
Das empfangene Paket wird ausgewertet und dann ein Sendepaket 
zusammengebastelt.

Daß man die Antwort auf ne Frage schon vorher weiß, dürfte ein seltener 
Spezialfall sein.
Erzähl dochmal wozu Du diesen Spezialfall unbedingt brauchst.

Außerdem müßte diese Antwort ja schon fix und fertig in einem 
Sendeobjekt stehen, d.h. den ID zu ändern geht eh nicht.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der AT90CAN128 wird verwendet, um einen Motor anzusteuern (Slave). Dabei 
empfängt er die Befehle für Vor, Zurück und Stop über CAN von einem 
anderen AT90CAN128 (2. Master). Gleichzeitig soll aber auch eine 
Controll Unit (1. Master) eine Statusanfrage senden können, die dann der 
AT90 ohne Interrupt mit "Motor vor" (1), "Motor zurück" (2), oder "Motor 
Stop" (0) beantwortet.
Im Datenblatt des AT90 steht was von Automatic Reply (19.5.1.4) und nem 
RPLV-bit, aber irgendwie peil ich das nicht.

Kannst Du mir helfen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs noch nie gebraucht, kann also nichts dazu sagen.

Ist denn der Interrupt so ein Problem ?

Vielleicht solltest Du mal die Programmstruktur überdenken, wenn nicht 
mal mehr ein Interrupt bearbeitet werden kann.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Interrupt hat das nichts zu tun. Es geht mir nur darum, dass er 
die Nachricht automatisch nach einem Remote Frame sendet.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn Niemand Erfahrung damit?

Autor: guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Remote-Frame ist ein Empfangsobjekt mit gesetztem Transmit-Request 
und
Datenlänge 0 Byte.

Das Remote-Objekt ist ein Sende-Objekt mit gelöschtem Transmit-Request.

so einfach!

guido

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag mir etwas, was ich noch nicht weiss. Es geht um die Automatic Reply 
Funktion des AT90CAN128.

Autor: guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ist einfach das Remote-Objekt. Anlegen und bei Nachfrage wird es
automatisch gesendet.

guido

Autor: Klaus Falser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit CAN nicht sehr aus, vor längerer Zeit habe ich das 
Datenblatt einmal kurz überflogen.

Der Controller verfügt über 15 Message Objects, die für die 
Kommunikation benötigt werden.
Wenn ich das richtig verstanden habe, musst Du so ein Object 
vorbereiten, welches dann vom Controller beim Eintreffen des Remote 
Frame automatisch verschickt wird.
Das Vorbereiten wird ähnlich erfolgen wie beim interrupt-gesteuerten 
Versenden, man wird aber die entsprechenden Remote Frame Bits setzen 
müssen.
Wenn Du einen Quellcode zum interrupt-gesteuerten Antworten hast, kannst 
du das sicher davon abkupfern.

Das ganze nur als kurzen Hinweis, weil sonst kaum einer geantwortet hat.

Klaus

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Anlegen und bei Nachfrage wird es automatisch gesendet.
Und wie anlegen? Kann ich da die Daten aktualisieren lassen, oder geht 
das nur einmal?

Autor: guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und wie anlegen? Kann ich da die Daten aktualisieren lassen, oder geht
>das nur einmal?

Wie ein ganz normales Sendeobjekt anlegen, nur die Flags entsprechend 
Datenblatt
anpassen. Wenn es abgerufen wird, wird nur das zugehörige Transmit-Flag 
gesetzt und
dadurch ev. ein Int. augelöst, es bleibt aber gültig.

Aktualisieren geht ganz normal: Objekt invalid erklären, Daten ändern 
und wieder
valid erklären.

guido

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus dem Datenblatt werd ich eben nicht schlau.
Ich hät vielleicht noch erwähnen sollen, dass das eins meiner ersten 
Projekte mit Mikrocontroller ist. Mein Wissen darüber ist 
dementsprechend (noch) etwas begrenzt.
Die CAN-Routine hier zu veröffentlichen wird wahrscheinlich auch 
problematisch sein, da ich sie von meinem Arbeitgeber von einem früheren 
Projekt übernommen hab.

Autor: guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anspruchsvolle Aufgabe für einen Anfänger!

Naja, die CAN-Routine wird wohl was wie "int Create_MessageObject(..."
sein. Die Flags müsste man am Namen erkennen, die Übersicht
ist in der Tabelle 19.5.2 auf S. 244 im Datasheet.

guido

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier doch mal ein kleiner Auszug:
CAN_TxNum = CAN128_CreateMOB(0, 0, 0, mmTxData);



//--- Create new Message Object
//--- id -> Message ID
//--- ext -> TRUE = Extended ID (29Bits) , FALSE = Standard ID (11Bits)
//--- dlc -> Data Length Code
//--- mode -> Mode of Message Object (enum MOBMode in can128.h)
extern uint8_t CAN128_CreateMOB (uint32_t id, uint8_t ext, uint8_t dlc, uint8_t mode){...}

Ist das der RTRTAG, den ich setzen muss?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde eben aus Absatz 19.5.1.4 (Automatic Reply) nicht ganz schlau. 
Wie funktioniert das mit dem RPLV?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:

> Ist das der RTRTAG, den ich setzen muss?

Würde ich auch so verstehen.

Es ist ein ganz normales Sendeobjekt mit gesetztem RTRTAG.

Der Interrupt kommt dann erst, nachdem es gesendet wurde.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie kann ich vorher noch die Daten aktualisieren?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Und wie kann ich vorher noch die Daten aktualisieren?

Garnicht, weil es ja automatisch gesendet wird. Du wolltest es ja so.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guido hat da aber was anderes erzählt.?

Guido wrote:
>Aktualisieren geht ganz normal: Objekt invalid erklären, Daten ändern und wieder 
>valid erklären.

Kannst Du mir das anhand der Flags erklären, die ich setzen oder löschen 
muss?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Guido wrote:
>>Aktualisieren geht ganz normal: Objekt invalid erklären, Daten ändern und wieder
>>valid erklären.

Ja, so gehts. Bloß wenn dann genau der Remote-Frame kommt, geht der ins 
Lehre.
Wenn man das oft macht, können viele Remote-Frames verschwinden.


Wenn man dagegen das Sendeobjekt reinstellt nach dem Empfang, klapts 
immer.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir denn keiner von euch konkret sagen, wie man das macht?

Autor: guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer langsam, erstmal Objekt anlegen und solange probieren,
bis dieses korrekt ankommt. Dann musst du die anderen
Funktionen erforschen, z.B. wäre es sinnvoll vor CreateMob
erstmal zu fragen ob noch ein Mob frei ist ....

>Ja, so gehts. Bloß wenn dann genau der Remote-Frame kommt, geht der ins
>Lehre.

Möglich aber unwahrscheinlich, gemessen an CAN geht das ja rasend
schnell. Ich wüsste auch ne grobe Methode das einfach zu umgehen.

guido

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>z.B. wäre es sinnvoll vor CreateMob erstmal zu fragen ob noch ein Mob frei ist 
....

Das wird in der CreateMob-Routine erledigt. Meine Frage ist, ob ich beim 
Tx-Objekt, das automatisch gesendet werden soll, irgendwelche bestimmte 
Flags aktivieren muss.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn wirklich noch niemand diese Funktion verwendet?

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.