AT90CAN128 nach 15 CAN-Nachrichten ist schluss

OP #1142004
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.
1
#include "can.h"
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6

7
// ----------------------------- MAIN ------------------------------------
8

9

10
int main (void) {
11

12

13
// ---- CAN original ----
14

15

16
    // initialisieren des MCP2515
17
    can_init(BITRATE_125_KBPS);
18
   
19
    // erzeuge eine Testnachricht
20
    can_t msg;
21
   
22
    msg.id = 0x123456;
23
    msg.flags.rtr = 0;
24
    msg.flags.extended = 1;
25
   
26
    msg.length = 4;
27
    msg.data[0] = 0xde;
28
    msg.data[1] = 0xad;
29
    msg.data[2] = 0xbe;
30
    msg.data[3] = 0xef;
31
   
32
    // Nachricht verschicken
33
    for(int i = 0; i < (10); i++){
34
          can_send_message(&msg);
35
      _delay_ms(100);
36
    }
37

38
    can_init(BITRATE_125_KBPS);
39

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

Ohne den
1
 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
Moderator (Firma: Titel) Persönliche Seite
> 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?
OP
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 ...
Gast
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
OP
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.