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 :(
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ß.
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.
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.
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ß.
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.
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?
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?
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 :(
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?
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.
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.
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).
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.