Gast
#135105
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.