AT90CAN128 nach 15 CAN-Nachrichten ist schluss

OP #1142004
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.
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
OP #1142043
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 ...
Gast #1142118
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
OP #1143124
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

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.

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.