Hallo! Ich versuche immer noch erfolglos einen SJA1000 CAN-Controller direkt an einen AVR (Mega16) zu bekommen. Ich habe A0-A7 vom SJA1000 an PORTA, und die übrigen Steuerleitungen an PORTD angeschossen. Wenn ich nun anhand der Timing-Tabelle im Datasheet des SJA1000 versuche ein paar register auszulesen, bekomme ich nur Müll. Dann habe ich die internen Pull-Up Widerstände des AVR deaktiviert, und externe PULL-Down Widerstände angeschlossen. Laut Osszi sehen die gesendeten Signale gut aus, nur reagiert der SJA1000 nicht und sendet keine Daten. Der Quarz des SJA1000 läuft mit 20 MHZ und schwingt auch schön. Ich habe nach langem gegoogle folgendes Posting gefunden, aber ehrlich gesagt verstehe ich den Inhalt nicht genau: "The CAN controller supports a multiplexed address/data bus architecture and hence interfaces to the 80C186's address/data bus. The addresses are de-multiplexed in the controller using the processor's ALE strobe. This architecture creates a subtle problem as the 80C186 expects all byte addressable peripherals to be on even address boundaries ( A(0) always '0' ) with data transferred on data bits <7:0>. As AD(0) must always be '0' during the address phase this cannot be used by the SJA1000 as an address bit. For this reason AD<8:1> is used instead. However, now that AD(0) is not connected to the SJA1000 all data to and from the SJA1000 must be re-aligned to the data bus bits <8:1>." Also Anscheinend kann ich die Register des SJA1000 nicht einfach mit 0x00 für Register 0, 0x0A für Register 10 usw. ansteuern, sondern muss das anders machen. Aber wie? Ich habe keine Erfahrungen mit externen Bussen, und habe bisher meine externen Chips seriell, oder direkt angesteuert (z.B. einen FTDI USB-Chip). Es gibt viele Hits zum thema SJA1000, aber die bezogen sich auf Produkte wie CANDIP, oder auf andere MCUs. Vielen Dank schonmal für das lesen meines langen Postings :o) Wolfgang P.S.: Ich programmiere in AVRGCC. Falls jemand ein AVR+SJA1000+GCC Beispiel mit Schaltplan für mich hätte wäre ich überglücklich.
Hallo Wolfgang, der Text beschreibt das Anbinden eines 16-bittigen µC an den SJA1000. Ein 16bit µC gibt nur gerade Adressen(even address) an seinem Bus aus, da ein Prozessorbefehl in diesem Fall 2byte sind. Die Adresse A0 bleibt immer inaktiv auf 0. Deshalb emphiehlt der Text das Verschieben der Adressen um ein Bit nach oben (also nicht AD<7:0>, sondern AD<8:1>). Da du aber einen 8bit µC verwendest, sollte dich das eigentlich nicht kümmern, da dieser auf jeden Fall ungerade Adressen erlaubt. Entweder hast du beim Beschalten des SJA noch einen Fehler gemacht (Mode, Reset-Beschaltung, ALE-Timing für die Adressen richtig?) oder du hast vielleicht nicht die richtigen Adressen für die Register genommen (-->Datenblatt). Gruss Andreas
Vielen Dank für die Info! Ich hatte mich auch schon gefragt, aber die 128 Register sollten eigendlich von 0x00 bis 0x80 gehen. Aber der Chip ragiert einfach nicht. Ich denke ich versuche mal mein Glück mit einem Mega128 mit integriertem CAN-Controller.
Hab mal in den Anhang einen Codeschnipsel eingestellt. Damit solltest du den sja1000 ansprechen können. Ich habe aber den SJA1000 auf den Müll geschmissen, weil er mir zu viele Ports belegt und im Handling zu kompliziert ist. Dagegen ist der Umgang mit dem MCP2515 geradezu einfach. Er läuft am SPI, ist deutlich billiger, hat nur 20PINs und kommt mit wenigen Befehlen aus. Ausserdem lässt er ein wesentlich einfacheres Platinenlayout zu. Gruß Norbert
Den SJA1000 sollte man vorzugsweise an MCs mit externem Memorybus anschließen, wie z.B. Mega8515, Mega162, Mega128. Dann wird nämlich die Ansteuerung popeleinfach, da sämtliche Register Memory mapped sind, d.h. einfach direkt über ihre Adresse ansprechbar sind wie z.B. die Timer, die UART usw. Peter
Das fürchte ich auch :-( Ich werde mir mal ein paar samples für den AT90CAN128-16AI schicken lassen, aber ich bin mittlerwiele auch mehr auf der Schiene die Sensoren und Aktoren unseres Roboterprojektes hier an der Uni per USB anzuschliessen. Die Chips von FTDI laufen wirklich problemlos. Vielen Dank für den Code norpo, aber das n C zu übersetzen wäre auch wieder eine grosse Fehlerquelle...
@Norbert Hallo Kann man von dir mehr Informationen in Bezug auf die BASCOM Ansteuerung mit ISP bekommen. Ich suche gerade etwas um den CAN mit BASCOM anzusteuern zu können. Gruß
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.