Forum: Mikrocontroller und Digitale Elektronik AT90CAN: Nur 15x senden und kein Empfang


von Jakob (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Elektronik-Begeisterte,

ich arbeite hier mit einem AT90CAN128 und der CAN-Lib von 
kreatives-chaos.com: 
http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek

Ich habe nun, wie scheinbar auch ein paar andere, das Problem, dass ich 
nur 15x senden kann und überhaupt nichts empfangen.

Eine Ursache für das Problem könnte wohl ein fehlerhafte Verbindung zum 
RXCAN-Pin des AT90CAN128 sein.

Ich habe die beiden Pins am Oszi gemessen (siehe Screenshot; gelb=TXCAN, 
magenta=RXCAN) und dies scheint nicht das Problem zu sein. Ist ist ja 
auch ein ACK zu sehen.

Ich habe auch den entsprechenden Pin PD6 (PXCAN) in einemn kleinen 
Programm erfolgreich auf Zustandsänderungen getestet. Es scheint also 
auch etwas im Controller anzukommen.

Ich betreibe den Controller an 3,3 V und benutze auch einen 3,3 V 
Bustreiber.
Da das senden geht (wenn auch nur 15x), würde ich den 3,3 V Bustreiber 
erstmal als Fehlerursache ausschließen. Die Pegal zwischen AT90CAN und 
dem Bustreiber sehen ja auch gut aus?!

Hat von euch jemand eine Idee wo das Problem liegen könnte?

Gruß
Jakob

von Jakob (Gast)


Angehängte Dateien:

Lesenswert?

... und beim Empfangen sieht es elektrisch doch auch OK aus (siehe 
Screenshot; gelb=TXCAN, magenta=RXCAN) !?

von Uwe Bonnes (Gast)


Lesenswert?

Der AT90CANxx hat 15 "Mailboxes". Fuers Empfangen muss man die Mailboxes 
konfigurieren. Es sieht aus, als ob etwas mit der Mailboxverwaltung 
nicht richtig ist...

von Jakob (Gast)


Lesenswert?

OK ... aber warum  kann ich nur 15 mal senden? Da scheint ja was mit dem 
ACK nicht zu stimmmen, oder?

von rudi (Gast)


Lesenswert?

Sendepuffer voll?

von Jakob (Gast)


Lesenswert?

Ja, die 15 Puffer werden voll sein, aber warum?
Nach erfolgreichem senden sollten sie doch wieder freigegeben werden?

von Wolf (Gast)


Lesenswert?

Poste mal deine Code.

von Jakob (Gast)


Lesenswert?

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdlib.h>
4
#include <util/delay.h>
5
#include <avr/wdt.h>
6
#include <string.h>
7
#include "can.h"
8
9
10
11
int main (void) {
12
13
14
  can_t msg;
15
  
16
  msg.id = 0x777;
17
  msg.flags.rtr = 0;
18
  
19
  msg.length = 4;
20
  msg.data[0] = 0xde;
21
  msg.data[1] = 0xad;
22
  msg.data[2] = 0xbe;
23
  msg.data[3] = 0xef;
24
25
can_init (BITRATE_250_KBPS);
26
can_disable_filter(0xff);
27
can_set_mode(NORMAL_MODE);
28
29
do{ 
30
31
can_send_message(&msg);
32
_delay_ms(500);
33
34
} while (1); 
35
36
return 0;
37
}

von Harald (Gast)


Lesenswert?

Das mit dem nur 15x Senden liegt doch meistens am nicht aktivierten 
Interrupt (sei()). Dann nämlich werden die Messageregister nicht mehr 
"freigeräumt".

von Jakob (Gast)


Lesenswert?

Harald sei() danke geht das senden jetzt! :)

Das Empfangen aber noch nicht :( Schau 'mer mal ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.