Hallo alle, ich weiss, dass es hiewr schon etliche male diskutiert wurden ist, aber ich habe zugegebenermaßen leider noch keine passende antwort bekommen. Ich suche eine Möglichkeit, an den AT90CAN128 die CAN-Datenleitung anzuschließen. ICh weiss jetzt nicht, ob ich einen CAN-Transreciever oder sowas brauche. BEi Reichelt habe ich u.A. sowas: SN 65HVD251D (Best-Nr.) gefunden. KAnn ich das benutzen oder brauche ich etwas anderes?
Du brauchst auf jeden Fall einen Transceiver. Dein 65HVD251D müsste gehen. Ich nehme immer den PCA 82C251 T. Vref unconnected und RSlope mit Widerstand gegen Masse. Welcher Widerstand kommt auf die CAN Geschwindigkeit an. RX und TX an den Atmel.
na das nenne ich mal eine superschnelle und qualifizierte Antwort! Danke! Hast Du auch ein fundamentales Beispiel mit Schaltung und GCC-Code? Bei diesen ganzen Beispielprojektem im Netz finde ich mich als Anfänger nicht zurecht.... Trotzdem Danke!
@nene Auch wenn das jetzt ganz böse klingt, aber das Schaltungsbeispiel findest Du im Datenblatt des 65HVD251D beachten (Spanungsbereich beachten!) und die Software empfehle ich dringend selber zu schreiben. Der Grund warum die Beispiele im Internet so komplex und unverständlich sind ist, dass, das der Can-Bus etwas komplizierter ist, als die USART-Schnittstelle mit zahllosen Einstellungen für Timing, Timing-Tolleranz usw. By the Way Ich habe kein Beispiel im Internet gefunden, dass funktioniert hätte. Wenn der Compiler nicht schon mit zig Fehlermeldungen abbrach lief spätestens nach dem Ausspielen nix mehr. Und viele Sachen die da mit eingebunden und benutzt werden braucht man nicht unbedingt.
Im wesentlich einverstanden mit der Antwort - muehsam. Lies doch den ausgezeichneten Artikel von Fabian Greif: http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 Auch wenn er fuer andere Hardware geschrieben ist, er ist eine ausgezeichnete Einfuehrung. Ich halte die Dokumentation des AT90CANxxx im Bereich CAN fuer aeusserst duerftig, die des mcp2515 ist viel besser. Viele Eigenschaften des AT90CAN habe ich erst aus Extrapolieren vom mcp2515 verstanden, ganz abgesehen von den Erklaerungen im Dokument von Fabian Greif. Noch ein paar Bemerkungen: ich bin vom mcp2515 auf den AT90CAN umgestiegen weil der SPI Zirkus zum internen Verschieben der Daten unnoetige Komplexitaet und Aufwand schafft, nicht unproblematisch in einer interruptgesteuerten Echtzeitanwendung. Auch hat der AT90CAN in seinen Spezifikationen viele Vorteile (z.B. Vielfalt der MoBs), auch die Architektur ist sauberer (trotz der Verschleierung durch unsaubere Dokumentation) - bleib bei der Wahl des AT90CAN! Ich habe mir auch die Bibiliotheksvariante der erwaehnten Software und ihre AT90CAN Variante angeschaut, gleiche Meinung wie schon ausgesprochen: interessant als Anregung, aber zweifelhaft als Schablone zum einfach Kopieren - der erwaehnte Artikel ist eine glueckliche Ausnahme. Ehe Du anfaengst zu programmieren: die Beispiele sind verhaeltnismaessig leicht uebertragbar wenn Du ohne Interrupts arbeitest, mit Interrupts brauchst Du erst ein Konzept ueber die Echtzeitumgebung (falls benoetigt, meiner Meinung nach einfachstes: Idle Loop + Signalisierung von den Interrupt Handlern + Callback Handler von der Idle Loop zu den Anwendungen). Mir hat bei der Entwicklung der AT90CAN Software geholfen, dass ich schon laufende MCP2515 Module hatte, und die Funktion der neu entwickelten AT90CAN Bausteine im Dialog mit den funktionierenden Moduln pruefen konnte - ein aehnliches Vorgehen koennte auch woanders helfen (und den MCP2515 nach Vorlage zum Laufen bringen ist eine gute Uebung zum Anfangen).
@Juergen Harms: Gibt es auch keine nützliche, leicht übertragbare Bibliotheken, mit dem ich einfach ein PDO(ID, LEN, Data[0]...Data[7]) uebertragen kann? Mehr will ich eigentlich gar nicht machen. Achso, und die Baudrate muss ich auf 500 stellen. ID-zuweisung ich denke ich auch ganz sinnvoll.
Ich habe keine gefunden. Der Grund ist wohl, dass jeder der in solch ein Abenteuer einsteigt den AT90CAN fuer ein wohl eher komplexes und fuer ihn spezifisches Projekt braucht, das Ganze (oh deutsche Rechtschreibung!) fuer "Einsteiger" zu vereinfachen und banalisieren ist dann ein erheblicher Mehraufwand. Florian Greif hat das im wesentlichen mit seinen Kollegen (Aachener Chaos Klub - Roboterklub?, oder irgend sowas, ich habe mir die Referenz nicht aufgehoben) getan, aber das Resultat ist in meinen Augen zu komplex. Aehnlicher Schluss bei den Bibliotheksprozeduren bei http://www.chip45.com/, fuer mich auch nicht das Gelbe vom Ei. Ich haette Lust meine Bibliothek einmal aus ihrer Anwendung herauszuloesen und in ein paar einfache Demo Beispiele einzugliedern. Mit dem dazu gehoerigen Begleittext schaetze ich das auf eine Woche Arbeit - vielleicht im Winter.
Ja, das wäre sehr schön. Mir geht es in erster Linie nur um das Senden und Empfangen von PDO's ohne viel schnickschnack drumherum.. ;-)
Es ist ja nicht so, dass wir Dir die Sachen vorenthalten wollen, aber das Problem ist eben, dass Du es damit nicht zum laufen bringst, obschon es eben bei uns super läuft.
1 | #define init_mob_rx_0 init_mob_rx(0,8192,536862720);
|
2 | |
3 | void Can_bit_timing (void) |
4 | {
|
5 | CANBT1= 0x08; |
6 | CANBT2= 0x6C; |
7 | CANBT3= 0x37; |
8 | }
|
9 | |
10 | void can_init (void) |
11 | {
|
12 | Can_bit_timing(); |
13 | Can_clear_all_MOB(); |
14 | setbit(CANGCON,1); |
15 | init_mob_rx_0; |
16 | }
|
17 | |
18 | void can_send_time_date (void) |
19 | {
|
20 | char sendcode[8]="00000000"; |
21 | sprintf(sendcode,"%02d%02d%02d",stunde,minute,sekunde); can_send_mg (sendcode,Controller_ID + 8192,14,0); |
22 | }
|
23 | |
24 | |
25 | void can_send_mg (char *sendstring, long msid, int m_box,int remote) |
26 | {
|
27 | CANPAGE = (m_box << 4); |
28 | CANIDT4 = (uint8_t)((msid<<3) & 0xFF); |
29 | CANIDT3 = (uint8_t)((msid>>5) & 0xFF); |
30 | CANIDT2 = (uint8_t)((msid>>13) & 0xFF); |
31 | CANIDT1 = (uint8_t)((msid>>21) & 0xFF); |
32 | CANSTMOB = 0x00; |
33 | CANCDMOB = 80 + (strlen(sendstring)); //0x58; // 80 + for (int counter = 0; counter < (strlen(sendstring)); counter++) |
34 | {
|
35 | CANMSG = sendstring[counter]; |
36 | }
|
37 | }
|
Ging schneller, als ich dachte. Hier ist der Artikel [[CAN Bibiliothek für AT90CAN Prozessoren]] (Links zur Software liegen am Ende des Textes). Ich nehme an, dass der Betrieb mit Interrupts zum "Schnuppern" nicht ganz ideal ist - bin aber ueberzeugt, dass eine Anwendung, die CAN sinnvoll einsetzt, ohne Interrupts kaum zu denken ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.