SJA1000 - dauerhaft High an TX0

Hallo zusammen,

Ich bin dabei einen SJA1000 zusammen mit einem PCA82C250 und einem =B5C zu konfigurieren. Das Initialisieren des SJA1000 funktioniert problemlos (=DCberpr=FCfung durch R=FCcklesen der Register), doch leider ist der TX0 Ausgang dauerhaft High (Als Push-Pull Ausgang konfiguriert).

Ich habe auch das Verschicken einer Nachricht versucht zu testen (ohne Busteilnehmer) mit Hilfe eines Oszis an diesem Ausgangspin TX0. Keinerlei =C4nderungen :(

W=FCrde mich =FCber Tipps freuen.

MfG Friedrich G=F6ppert

Reply to
Friedrich
Loading thread data ...

snipped-for-privacy@trash-mail.de schrieb:

(Name im Absender wäre nett.)

Wie (genau) hast Du den SJA1000 denn konfiguriert?

Dauer-High ist der normale inaktive Zustand (die Low-Impulse sind der dominante Pegel). Bist Du sicher, daß Du überhaupt etwas abschickst? Ohne weitere Busteilnehmer müßte es dann andauernde Signale auf TX0 geben (da der SJA1000 ohne ACK-Puls von anderen Teilnehmern das Telegramm ständig wiederholt).

Ich vermute (mindestens) einen Fehler bei der Konfiguration.

--
Dipl.-Ing. Tilmann Reh
http://www.autometer.de - Elektronik nach Maß.
Reply to
Tilmann Reh

Tilmann Reh schrieb:

Der Controller l=E4uft im BasicCAN Modus. Ich habe beim Bustiming testweise mal nen Wert reingeschrieben, der sp=E4ter aber auf jedenfall ge=E4ndert wird.

Hier die Registerwerte:

CLKDIVIDER_REG, 0x00 OUTPUTCTRL_REG, 0x1A ACCEPTMASK_REG, 0xFF ACCEPTCODE_REG, 0xFF BUSTIMING0_REG, 0x31 BUSTIMING1_REG, 0x1C

Ich musste gerade feststellen, dass wenn ich Acceptmask/code Register auslese, andere Werte zur=FCckgegeben werden als ich reingeschrieben habe. Die anderen Register liefern den korrekten Wert zur=FCck. Finde ich jetzt doch sehr merkw=FCrdig.

Gibt es was etwas besonderes zu beachten beim Schreiben der Register?

Sobald ich was abschicke habe ich im Statusregister ein Error-Flag (Was ja richtig ist ohne 2. Busteilnehmer).Ich denke er hats zumindest versucht.

Danke f=FCr die Antwort.

Gru=DF

Reply to
Friedrich

snipped-for-privacy@trash-mail.de schrieb:

(Ein Name wäre hier immer noch sinnvoll)

Ich verwende folgende Einstellungen (z.B. bei 16 MHz und 250 kB/s):

ClockDiv 40h AcceptCode 0 AcceptMask FFh Timing0 41h Timing1 1Ch OutputControl FAh

Einen direkten Fehler sehe ich in Deinen Daten auf die Schnelle nicht, aber Du kannst ja mal mit meinen experimentieren.

Sobald das Teil im "Operating Mode" ist, kann man die Konfigurationsregister nicht mehr auslesen (man bekommt nur noch FFh). Das betrifft aber alle Konfig-Register, nicht nur die vom Filter.

Ja, man kann die Konfiguration nur im "Reset Mode" setzen/ändern. Und man muß beim Wechsel der Betriebsart (Reset/Operating) das entsprechende Steuerbit rücklesen und ggf. solange die Umschaltung wiederholen, bis der SJA1000 wirklich Vollzug meldet.

Nicht unbedingt. Vielleicht war auch der Sendebefehl einfach unzulässig. Wie schon erwähnt: wenn etwas versucht wird zu senden (auch und gerade ohne andere Teilnehmer), sieht man das dauernd auf der Busleitung.

--
Dipl.-Ing. Tilmann Reh
http://www.autometer.de - Elektronik nach Maß.
Reply to
Tilmann Reh

Also ich lese die Register im Reset Modus aus (nachdem ich sie gesetzt habe). Dort sind alle Register korrekt gesetzt bis auch die ACCEPT Register. Und dies verwundert mich sehr.

Ok dann muss wohl was bei Initialisierung schief laufen.

Gru=DF Friedrich G=F6ppert

Reply to
Friedrich

Hallo!

Ja, hast du denn nach der Initialisierung das Reset Bit im Controlregister gecleared? Ich verwende diese Init Routine mit nem AVR Controller:

SJA_INIT: ldi TEMP,0x01 ;reset mode sts SJA_CONTROL,TEMP lds TEMP,PORTG ;Enable Transceiver cbr TEMP,0x08 sts PORTG,TEMP ldi TEMP,0x80 ;Bus Timing 0 12MHz (89h for 1.2 MHz -> 100KBaud) sts SJA_BUST_0,TEMP ldi TEMP,0x27 ;Bus Timing 1 (1+8+3) -> 1000KBaud sts SJA_BUST_1,TEMP ldi TEMP,0x40 ;Set to normal CAN mode and disable RX Comparator (external Transceiver) sts SJA_CLK_DIV,TEMP ldi TEMP,0x1A ;Set Push-Pull non-inverted normal Output Mode for TX0 sts SJA_OUTPUT_CONTROL,TEMP ldi TEMP,0x50 ;Acceptance Code (Relevant first 8 Bits) sts SJA_ACCEPT_CODE,TEMP ldi TEMP,0x00 ;Acceptance Mask (all Bits relevant) sts SJA_ACCEPT_MASK,TEMP ldi TEMP,0x02 ;Set to normal operating mode and enable interrupts (Receive) sts SJA_CONTROL,TEMP ret

Reply to
Michael Dreschmann

Danke f=FCr deine Antwort. Mein Ablauf der Initialisierung sieht wie folgt aus:

// Reset Modus outportb(CONTROL_REG, 0x01 );

outportb(ACCEPTCODE_REG, 0xFF); outportb(ACCEPTMASK_REG, 0xFF); outportb(BUSTIMING0_REG, 0x31); outportb(OUTPUTCTRL_REG, 0x1A); outportb(CLKDIVIDER_REG, 0x00);

// Funktion zum Auslesen der Register GetStatus();

// Operation Modus outportb(CONTROL_REG, 0x00);

Die Konfigurationsregister werden erst beschrieben wenn der Controller wirklich im Reset-Modus ist.

Gru=DF Friedrich G=F6ppert

Reply to
Friedrich

Hallo,

Beschreibst du das Bus Timing Register 1 nicht? Wie setzt du eine TX Nachricht ab? Mal das Statusregister angeschaut, nachdem du einen TX Request abgesetzt hast?

Michael

Reply to
Michael Dreschmann

Leider habe ich das wohl beim Kopieren vergessen. Ich beschreibe nat=FCrlich beide Bus Timing Register.

Direkt nach der Initialisierung habe ich im Operation Mode folgendes Statusregister: Transmission Com. :1 " Buf. :1 Rest :0

Nach dem Verschicken der ersten Nachricht (mit offenem Ausgang): Alle : 0

Nach dem Verschicken der zweiten Nachricht (mit offenem Ausgang): Transmission Buf. :1 Rest :0

Versende ich danach weiter, bekomme ich ab und zu das Error Flag gesetzt und ab uns zu kein Flag gesetzt.

Ich verschicke folgenderma=DFen: In einer Schleife schreibe ich die TX Regsiter. Danach setzte ich im Command Register das Transmit Request Bit.

Zum Thema ACCEPT Register. Ich denke ich habe eine M=F6gliche Ursache entdeckt. Nach dem Einschalten des Systems bekommt der Can Controller kein Hardware Reset (Ist an Reset des =B5C angeschlossen). Bet=E4tige ich aber nach Einschalten der Systeme die Reset-Taste und lasse danach die Initialisierung laufen sind in den beiden ACCEPT Register genau die Werte, die ich reingeschrieben habe. K=F6nnte es am Hardware Reset liegen?

Danke an Alle.

MfG Friedrich G=F6ppert

Reply to
Friedrich

snipped-for-privacy@trash-mail.de schrieb:

(Ein Name im Absender wäre immer noch nett.)

Ja, durchaus.

--
Dipl.-Ing. Tilmann Reh
http://www.autometer.de - Elektronik nach Maß.
Reply to
Tilmann Reh

So. Nun dachte ich das w=E4re die Ursache der falsch ausgelesenen Register. Nun musste ich aber feststellen, dass wenn ich das ganze im PeliCAN Modus teste, ich trotz HardwareRreset wieder falsche Registerwerte f=FCr die ACCEPT Register bekomme. Die restlichen Register beinhalten merkw=FCrdigerweise wieder die korrekten Werte. Ich kann mir das leider nicht erkl=E4ren :(

Gru=DF=20 Friedrich G=F6ppert

Reply to
Friedrich Göppert

Hi,

PeliCAN hab nich noch nie benutzt. Aber die ACCEPT Register spielen doch beim Versenden eh keine Rolle. Ob man diese Register auslesen kann oder nicht spielt doch keine Rolle, wenn der Rest funktioniert. :) Kannst du nach einem Hardware Reset und erfolgreicher (Normalmode) Initialisierung eine CAN Botschaft senden? Also Tx Register vollschreiben und dann TX Request Command absetzten?

Michael

Reply to
Michael Dreschmann

Danke f=FCr deine Antwort. Ich hatte einen Fehler in der Software (wieso findet man die immer erst nach hundert mal dr=FCberlesen?). Die ACCEPT register lassen sich nun auch korrekt auslesen. Ich konnte nun den SJA1000 erfolgreich im local Self-Test Mode testen (Es wird die Nachricht ohne andere Teilnehmer direkt in den Empfangspuffer geschrieben). Nun muss ich den Controller noch =FCberreden auch wirklich was aus dem TTL Ausgang zu schicken. Das will er leider noch nicht.

Reply to
Friedrich Göppert

um nicht den gleichen Fehler zu machen... hättest Du ein Code-Schnippelchen zum Bestaunen? Ich bin, sobald der Testaufbau von der PCB-Firma kommt auch gezwungen, mich mit dem SJA1000 zu beschäftigen. Gerne auch per PM, Addy ist reply-fähig.

Tnx, Heinz

Reply to
Heinz Liebhart

Gerne kann ich meinen Code zur Verf=FCgung stellen. Ich empfehle auf jedenfall das App-note AN97076 von Phillips:

formatting link
durchzulesen. Dort wird alles ausf=FChrlich erkl=E4rt (Auch mit Codebeispielen). Leider will mein SJA1000 trotz Ber=FCcksichtigung des Dokumentes nicht senden im BasicCAN Modus. Im PeliCAN Modus sendet er mit der gleichen Routine wie bei BasicCAN (nat=FCrlich mit den entsprechenden =C4nderungen der Registeradressen und dem Nachrichtenformat).

Reply to
Friedrich Göppert

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.