www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90CAN128 nach 15 CAN-Nachrichten ist schluss


Autor: Kristof Koch (tigerfisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich verwende den AT90CAN128 mit dem Bustreiber ATA66660
Ausserdem die CAN.lib von www.kreatives-chaos.com

Als Empfänger dient ein CAN-USB-Adapter von PEAK. Der funktioniert 
fehlerfrei. Eine Andere Platine mit ATmega8 und MCP2515 läuft mit der 
Bibliothek einwandfrei

Der AT90CAN128 verschickt nicht mehr als 15 Nachrichten ... Wenn ich Ihn 
neu initialisiere schickt er auch weitere Nachrichten. Aber wieder nur 
maximal 15, bis ich Ihn wieder initialisiere.
#include "can.h"

#include <avr/io.h>
#include <util/delay.h>


// ----------------------------- MAIN ------------------------------------


int main (void) {


// ---- CAN original ----


    // initialisieren des MCP2515
    can_init(BITRATE_125_KBPS);
   
    // erzeuge eine Testnachricht
    can_t msg;
   
    msg.id = 0x123456;
    msg.flags.rtr = 0;
    msg.flags.extended = 1;
   
    msg.length = 4;
    msg.data[0] = 0xde;
    msg.data[1] = 0xad;
    msg.data[2] = 0xbe;
    msg.data[3] = 0xef;
   
    // Nachricht verschicken
    for(int i = 0; i < (10); i++){
          can_send_message(&msg);
      _delay_ms(100);
    }

    can_init(BITRATE_125_KBPS);

    for(int i = 0; i < (10); i++){
          can_send_message(&msg);
      _delay_ms(100);
    }
   return 0; 
}    // main(void) - Schleife

Ohne den
 can_init(BITRATE_125_KBPS); 
 zwischendurch schickt er nur 15, statt 20.

Hat jemand Erfahrung oder Tipps was ich falsch machen könnte? Ich würde 
es immer wieder neu initialisieren ... das wäre aber sehr unschön.

mfg
Kristof

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn Deine "can.h" aus? Original ist sie ja nicht mehr (schon 
an "can_t msg" zu sehen).

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat jemand Erfahrung oder Tipps was ich falsch machen könnte? Ich würde
> es immer wieder neu initialisieren ... das wäre aber sehr unschön.
Überrennst du den Puffer?
Was passiert denn, wenn du statt dem 2. can_init() abwartest (mit wait() 
bzw. sleep()), bis die erten 10 Msgs gesendet sind?

Autor: Kristof Koch (tigerfisch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe sie mal angefügt.

meinst du wegen dem can_t ?

Wie es auf kreatives Chaos dargestellt war geht es nicht. Es muss can_t 
sein.

Autor: Kristof Koch (tigerfisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:

> Überrennst du den Puffer?

Ja es scheint so. ich kann es mir aber nicht erklären. Weil es sonst ja 
anscheint keiner hat.

> Was passiert denn, wenn du statt dem 2. can_init() abwartest (mit wait()
> bzw. sleep()), bis die erten 10 Msgs gesendet sind?

Ich warte ja schon nach jeder Nachricht 100ms ...

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst jede Box nach jedem senden und nach jedem Empfang neu 
initialisieren.
Da Dein CAN128 nur 15 Boxen hat sind nach 5 Sendungen alle in Gebrauch 
gewesen und müssen neu initialisiert werden. Ist etwas anders als USART

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sind nach 15 Sendungen...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich warte ja schon nach jeder Nachricht 100ms...
Oh, wo ist meine gepunktete Binde, mein Stock und der Hund? :-)

Was macht can_send_message()? Welche Register werden beschrieben?

Autor: Kristof Koch (tigerfisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:
> Was macht can_send_message()? Welche Register werden beschrieben?

Ich habe keine Schimmer, dazu müsste ich mir die lib noch genauer 
ansehen ... möchte ich aber garnicht. Ich will das Rad benutzen und 
nicht wissen wie es funktioniert :-)

Mit der init Lösung kann und werde ich wohl erstmal leben müssen ... 
vielen Dank :-)

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.