www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN: Senden mit AT90CAN128


Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich studiere im Moment dir Doku zum AT90CAN128. Was sich mit dabei 
einfach nicht erschließen will, ist, wie ich den CAN-Kontroller dazu 
veranlassen kann, ein bestimmtes MOb zu senden bzw. welche Registerbits 
dafür zuständig sind.
Könt ihr mit mal auf die Sprünge helfen?

TIA,
Harald

Autor: Rene Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schaust du bitte da: Beitrag "AVR GCC CAN Library"

Gruß Rene

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das hatte ich bereits gefunden. Was mit bei dem Ganzen allerdings noch 
nicht so richtig klar wurde, ist eben, welche Aktion genau denn nun das 
Senden eines Frames veranlasst (D.h., welches Bit wo gesetzt wird etc.(. 
Da werden irgendwelche MAkros und Funktionen aufgerufen, die ich 
teilweise auch nicht vollständig zurückverfolgen kann.

Gruß,
Harald

Autor: Michael S. (mst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also ich geh jetzt mal von C aus, da gehts eigentlich ganz einfach... 
data[ i ] ist ein Array in einer Struct wo meine Datenbytes drin stehen, 
also auch nichts Hexerisches... .-)

Wo genau ist den dein Problem?

// Datenbytes in die Mailbox stecken
for( unsigned char i = 0; i < 8; i++ ){
   CANMSG = pmsg->data[ i ];
}
  
// CAN Frame verschicken
CANCDMOB |= ( 1 << CONMOB0 );
  
// Warten bis Frame verschickt ist
while( !( CANSTMOB & ( 1 << TXOK ) ) );
  
// TX Falg zurücksetzten
CANSTMOB &= ~( 1 << TXOK );

Das wars eigentlich, genauere Erläuterungen zu den einzelnen Bits stehen 
im Datenblat... zu finden bei atmel.com... :-) fg

Gruß Micha,

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Micha,

vielen Dank für Deine Antwort. Hilft schon mal weiter.

> Wo genau ist den dein Problem?

Vermutlich durchblicke ich dei Zugriffsmechanismen
auf die einzelnen MOb-Pages noch nicht ganz.

<code>

// Datenbytes in die Mailbox stecken
for( unsigned char i = 0; i < 8; i++ ){
   CANMSG = pmsg->data[ i ];
}

</code>

Ich verstehe das jetzt folgendermaßen:
Das AINC-Bit in CANPAGE wurde auf 0 gesetzt;
daher schaltet der Controller nach jedem Schreibzugriff
CANMSG auf das nächste Byte in der MOb-Page.
Am Ende habe ich in der Page also ein Set aus 8
Nutzdatenbytes abgelegt. Habe ich das so richtig
verstanden?

Frage: Wodurch werden die Daten einem der 15 MObs
nub zugeordnet?

<code>

// CAN Frame verschicken
CANCDMOB |= ( 1 << CONMOB0 );

</code>

Hallelujah! Genau das wollte ich die ganze Zeit wissen:
Wenn also die Steuerbits in CANCDMOB entsprechend gesetzt
werden, dann leitet das die physikalische Datenübertragung ein.
Aber auch hier wieder die Frage: Wie wird festgelegt,
von welchem MOb das Telegramm abstammen soll?

<code>

// Warten bis Frame verschickt ist
while( !( CANSTMOB & ( 1 << TXOK ) ) );

// TX Falg zurücksetzten
CANSTMOB &= ~( 1 << TXOK );

</code>

Das ist dann soweit klar.
Besten Dank!

Gruß,
Harald

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die MOBs musst Du in einer speziellen Reihenfolge beschreiben.

Glaub IDs, Masken Datefeld und dann zum Schluss das Register mit dem CAN
DLC. Wenn Du das beschreibst und dort wird glaub auch festgelegt, ob es 
ein RX oder TX MOB ist, dann wird automatisch ein Bit gesetzt glaub in 
MOBCON
oder CONMOB oder so ähnlich (Ist ne Weile her bei mir).

Ist das Bit in dem Connect Register gesetzt, dann sendet der CAN Teil 
das Mob automatisch bei der nächsten Gelegenheit! (Glaub auch solange, 
bis ein ACK
kommt)

Achtung ein Warnhinweis: Der DLC kann nur einmal festgelget werden, da 
beim
Überschreiben das MOB automatisch aktiviert wird! (siehe Datenblatt)
Das passiert jedes Mal wenn Du das Register mit dem DLC beschreibst.

(bin ich mal drüber gestolpert)

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
die message objects sind "ge-shadowed" (arme deutsche sprache)

auswahl mittels des CANPAGE-registers. also vorher setzen, dann hast du 
zugriff auf eben das MOb.

hth,
bye kosmo

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

besten Dank! Das waren genau die Sachen, die ich irgendwie
im Handbuch nicht in dieser Deutlichkeit finden konnte.

Gruß,
Harald

Autor: Michael S. (mst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald, ich sags mal so...

Ich brauchte auch eine "kleine Weile" bis mir die CAN-Engine so wirklich 
geheuer war... :-)

Zumal, als ich mit dem CAN128 eingestiegen bis, hatte ich damals noch 
ein silicon-release mit fehlern und das Datenblatt hatte noch 
preliminary Status...

Einige Zeit, Revisions und Errata's später hat dann auch die CAN-Engine 
funktioniert und das Datenblatt war auf heutigem Stand... .-

Aber falls du nun noch hilfe brauchst, bescheid geben!

Gruß Micha,

Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

an alle in herzliches Dankeschön, hat mir alles sehr geholfen.
Werde auf diech zurückkommen, Michael

Gruß,
Harald

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.