AT90CAN128 nach 15 CAN-Nachrichten ist schluss

#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
#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
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren