Hallo, meine Can-Bus Kommunikation hat zwischen dem TMS320F2812 uhatte funktioniert. Nun musste ich noch einen Busteinehmer hinzufügen, der nur mit Standard Protokoll (11-Bit Identifier) arbeitet. Ich habe dann alle Bus-Teinehmer auf Standard Protokoll umgestellt. Trotzdem kann der TMS320F2812 nun keine Daten mehr empfangen. (Baud-Rate und ID sind natürlich auch richtig eingestellt) Muss ich noch was umstellen oder was könnte der Grund für dieses Fehlverhalten sein? danke Gruss Samuel
Hallo samuel, Ich hab' leider keine Ahnung wie Dein Problem zu lösen ist. Aber ich habe eine Frage zum CAN stack. Hast Du den selber programmiert oder hast da eine library gefunden. Ich hab' nen CANopen Mikrocontrollerprogramm basierend auf einen CANopen library programmiert. Für zukünftige Projekte möchte ich auf DSPs von TI umsatteln. Sorry für die Gegenfrage, bluemole
Hallo, ich hab leider deine Frage nicht ganz verstanden. Versteh ich es richtig, dass du die Eingangsdaten die am Can Bus ankommen, puffern willst? gruss Samuel
Hallo, ich meinte nur, ob du eine "normale" CAN Kommunikation oder eine CANopen Kommunikation programmiert hast. Im falle einer CANopen Kommunikation würde mehr wirklich sehr interessieren, ob Du die Funktionen für das CANopen Kommunikationsprotokoll selbst programmiert hast oder ob Du eine Library dafür gefunden hast. MfG bluemole
Hallo Samuel, hast Du auch das IDE bit in der Akzeptanzmaske gelöscht, damit Std IDs durchkommen? Gruß Patrick
Hallo, bin auch grad an CAN Bus dran. Hast denn den Bus mit Abschlußwiderständen richtig terminiert? Könnte ein Problem sein wenn du ein 3. Gerät anstöpselst. Stimmen denn die Buspegel?
Ich versuche mich gerade etwas in CAN einzuarbeiten. Das mit dem Identifier ist mir in soweit klar, dass in Abhängigkeit der Nummer die Priorität gesetzt ist. Was mir unklar ist, wie diese gesetzt wird. Ich habe auch irgendwo gelesen, dass es keine Addressierung gibt sondern die Knoten Namen haben. Sprich ASCII. Kann mir da jemand etwas mehr Klarheit geben?? Danke
Hallo Ralf, ich glaube du hast das Prinzip der Kommunikation auf dem CAN Bus noch nicht verstanden. Ein Knoten hat keinen Namen, sondern er lauscht die ganze Zeit auf dem Bus, wertet alle ankommenden Id's aus und wenn die richtige dabei ist fischt er sie raus und schreibt sie in seinen Puffer (bei full CAN). Der CAN Bus ist ein Nachrichtenbasierter Bus und ist Multimasterfähig. D.h. das Jede Nachricht eine ID bekommt und jeder Busteilnehmer Daten auf den Bus legen kann ohne vorher bei einem Master um erlaubnis zu fragen. Die Datenkollisionserkennung erledigt dabei der CAN Controller selbstständig. Das nennt sich dann Arbitrierung. Bei diesem Vorgang wird auch auf die Priorität der Nachricht geachtet, wie du schon richtig beobachtet hast. Viel Spass noch mit CAN. Tipp: Bei Wikipedia gibt es eine kurze einführung in CAN Gruß Rainer
stimmt, ich blicke noch nicht ganz durch. ok, dass jeder einem eine Nachricht schicken kann sobald es für ihn ist ist mir klar. was mir noch nicht klar ist ist können mehere can-schreiber oder empfänger die gleiche id sprich priorität haben? wenn ja kann es doch zu problemen kommen und wie weis man ob die nachricht auch angekommen ist? wei weis ein Controller ob die nachricht für ihn ist. Sprich gibt es ausser der id noch ein anders merkmal. sprich woher weis der controller an welchen Baustein hinter agesprochen werden soll um dort zum beispiel ein Datum zu schicken oder was anzusteuern?
Hy, ja, es können mehrere CAN Teilnehmer die gleiche ID versenden. Wenn dies auch noch zur gleichen zeit geschieht, wird dies mit der Arbitrierung gelöst, in diesem falle gewinnt der erste. Wenn die Nachricht dann losgeschickt worden ist und ein Teilnehmer der meinung ist das die Nachricht für ihn bestimmt ist, empfängt er diese und schickt ein Bit "Nachricht vollständig empfangen". Damit ein Controller weis welche Nachrichten er empfangen soll muss natürlich der CAN Buffer initialisiert werden. Hier steht dann drin welche id / ID-Gruppe er empfangen soll, welchs Nachrichtenformat (Extended Identifier), Daten Länge... Des weiteren besteht bei CAN die möglichkeit der Anforderung einer Botschaft. Auf dem CAN werden normalerweise die Botschaften zyklisch versendet, d.h. immer in einem festen vorher definierten Zeitraster. Dies verringert den aufwand erst einmal nach daten fragen zu müssen. Viel Spass noch mit CAN Gruß
> es können mehrere CAN Teilnehmer die gleiche ID versenden. Wenn > dies auch noch zur gleichen zeit geschieht, wird dies mit der > Arbitrierung gelöst, in diesem falle gewinnt der erste. Naja, wenn die (CAN-)ID gleich ist, dann kann das Problem nicht durch die Arbitrierung gelöst werden! Erst der Datenteil der CAN-Nachricht unterscheidet sich dann und das führt zu einem Busfehler (da nur die CAN-ID zur Arbitrierung verwendet wird). Die Nachricht wird verworfen und muss erneut gesendet werden. Wenn jetzt beide Sender wieder die gleiche Botschaft schicken, krachts erneut... solange, bis beide im passiven Modus sind (bus-passive). Gleichzeitig mehrfaches Versenden der gleichen CAN-ID sollte man unbedingt vermeiden, z.B. indem man jede ID nur einmal vergibt.
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.