Hallo,
sorry dass ich mich so lange nicht gemeldet habe, ich war lange auf Urlaub.
Ich habe jetzt bei den Projekt weitergemacht, und mal mit dem Oszi gemessen.
Das Programm am Controller sendet alle 500ms eine Message mit 4 Byte Länge bei 125kBaud.
Die Lib die ich verwende ist von Kreatives Chaos: http://www.kreatives-chaos.com/artik...can-bibliothek
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "can.h"
#define SUPPORT_EXTENDED_CANID 1
/* Select if you want to use timestamps.
* Timestamps are sourced from a register internal to the AT90CAN.
* Selecting them on any other controller will have no effect, they will
* be 0 all the time.
*/
#define SUPPORT_TIMESTAMPS 0
int main(void)
{
DDRA&=~(1<<5);
can_init(BITRATE_125_KBPS);
sei();
// erzeuge eine Testnachricht
can_t msg;
msg.id = 0x123456;
msg.flags.rtr = 0;
msg.flags.extended = 1;
msg.length = 4;
msg.data[0] = 0xaa;
msg.data[1] = 0xbb;
msg.data[0] = 0xcc;
msg.data[1] = 0xdd;
while(1)
{
// Nachricht verschicken
can_send_message(&msg);
_delay_ms(500);
}
return 0;
}
Wenn ich mit dem Oszi direkt am AT90CAN128 zwischen CANRX und GND bzw. zwischen CANTX und GND messe habe ich ein Rechtecksignal mit 3,3V Pegel. Das sollte passen.
Danach habe ich noch zwei Messungen zwischen den Ausgängen CANH und CANL des SN65HVD232D gemacht:
1. SN65HVD232D mit dem CANUSB verbunden, aber CANUSB nicht aktiviert.
Das Oszibild sieht so aus:
Bei einer 0 sind CANH und CANL beide auf 2,5V. Bei einer 1 ist CANH auf 3V und CANL auf 1V.
Also 2V Differenz. Das sollte alles passen.
2. SN65HVD232D mit dem CANUSB verbunden, und CANUSB aktiviert.
Sobald man den CANUSB aktiviert leuchtet die Rote Error LED am CANUSB. Den Fehlercode kann man über ein Terminal auslesen, der ist 0x80, das bedeutet laut Datenblatt: "Bus Error (BEI), see SJA1000 datasheet". Im Datenblatt des SJA1000 hab ich aber nichts dazu gefunden.
So sieht jedenfalls das Oszibild aus:
Hier sieht man, dass CANH bei einer 1 kurzzeitig auf 3,5V gezogen wird, anstatt wie vorher auf 3V.
CANL ist auch nicht mehr so glatt wie vorher, aber noch immer bei 1V.
Das hat wahrscheinlich damit zu tun, dass der SN65HVD232D mit 3,3V läuft, und der CANUSB mit 5V. Aber kann darin der Fehler liegen?
Was mir noch aufgefallen ist: Ich sende ja nur alle 500ms. Der Bus ist aber dauernd belegt. Das Rechtecksignal, das auf den Oszibildern zu sehen ist, läuft kontinuierlich weiter - es gibt keine Sendepausen.
Ich habe das Kabel jetzt auf 20cm verkürzt, und die CANH und CANL Adern verdrillt. Das hat leider nichts gebracht. Langsam gehen mir die Ideen aus...
Habt ihr vielleicht noch welche?
lg
Christoph
EDIT:
Ich habe hier einen Forenthread gefunden, da hat der Ersteller das gleiche Problem wie ich: http://www.mikrocontroller.net/topic/166158
Bei ihm arbeiten aber Sender und Empfänger mit 5V.
Er hat das Problem dadurch gelöst, dass er die Spannung auf 5,3V erhöht hat, dann hat auf einmal alles funktioniert.
Ich habe aber genau 3,3V, und der Transceiver funktioniert bis 3V laut Datenblatt...
EDIT 2: Ich habe die Spannung bei meiner Schaltung auf 3,5V erhöht - das hat aber nichts gebracht. Weiter kann ich sie nicht mehr erhöhen, manche Bauteile halten nur 3,6V aus.
Lesezeichen