mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Can Controller "SJA1000" Probleme mit Register


Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann jetzt mit dem PEAK CAN Dongle die Botschaften empfangen.
Aber die Botschaft entspricht nicht dem was ich gesendet habe!
Ich habe mal jetzt jedes Register ausgelesen und auf dem Display
dargestellt.
Mir ist da folgendes ausgefall:
Rigster 5, 10, 11, 12, 13 lassen sich nicht beschreiben bzw denn
reingeschriebebeb Wert auslesen.
Die anderen Register da habe ich keine Probleme. Meine schreib und lese
Routinen funktionieren ja.
Wenn meine Routinen falsch währen, dann könnte ich ja gar nichts
schreiben bzw. auslesen.
Ich habe sogar mal einen zweiten SJA1000 eingebaut, da tritt dies
genauso auf!
Hmmm....was kann ich da noch tun????

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib doch mal bitte kurz, was das für Register sind, hab das
Datenblatt grad nicht zur Hand!

Patrick...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du eigentlich mal die dump-Routinen eingebaut?
Poste doch mal das, was Du laut dump sendest, und das, was Du
Empfängst.
Mit "es kommt nicht das an, was ich gesendet habe" kann man doch nur
sehr wenig anfangen. Höchstwarscheinlich kommt nämlich genau das an,
was Du gesendet hast! Bedenke, daß verschiedene Register bits haben,
die man geseondert setzen/lesen muss. Der SJA1000 hat ausserdem in den
verschiedenen Modi (BasicCan/PeliCAN) ein unterschiedliches
Registermapping.

Gruß,
Patrick...

Autor: Leo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dies Betrifft folgende Register:
5,10,11,12,13
Zum Beispiel habe ich in die Register den Wert (Daten) 0x11
reingeschrieben. Wenn ich anschließend die Werte auslesen will,
dann erhalte ich bei m Register 5 den Wert 96dez..
Bei den anderen Register bekomme ich nur NULL raus.
Ich habe den PELI Mode nicht in Benutzung.
Register 10 bis 19 sind für das Senden von Nachrichten zuständig
und Register 4 und 5 für den Akzeptanzfilter.

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir da noch einfällt.
Ich habe den Chip Select vom SJA1000 direkt auf Masse gelegt.
Vielleicht muss ich den Chip Select auch noch über einen Portpin
ansteuern??? Hmm...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die infos sind einfach zu Spärlich... Sorry, aber mit dem nassen Finger
debuggen bringts nicht!

Gruß,
Patrick...

Autor: Leo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Übersicht vom Aufbau

Autor: Leo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist die canreg_write und canreg_read Funktion

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist das Hauptprogramm.
In dem WOrd Doku befindet sich noch ein Bild.
(Bild -> Empfang PEAK CAN Dongle)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Bild immer noch repräsentativ für das, was Du empfängst, oder
hat sich das mittlerweile geändert?

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt mal folgendes gemacht


Die Nachricht ID 125h rtr=0 dlc=2 Byte0=10h und Byte1=20h senden

In der Funktion canreg_write habe ich jetzt malfolgendes eingefügt:
  canreg_write (10,0x24);
  canreg_write (11,0xA2);
  canreg_write (12,0x10);
  canreg_write (13,0x20);
  canreg_writte (1,0x01);

Auf dem Peak DOngle kann ich jetzt eine ID sehen bzw DLC und Daten.
Aber die empfangene Nachricht entspricht nicht der gesendeten
Nachricht.

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab sogar mal einen anderen SJA1000 eingebaut.
Immer noch das gleiche.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Auf dem Peak DOngle kann ich jetzt eine ID sehen bzw DLC und Daten.
>Aber die empfangene Nachricht entspricht nicht der gesendeten
>Nachricht.

Was kommt denn raus? Oder ist das Geheim?

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rauskommen müsste:
Die Nachricht ID 125h rtr=0 dlc=2 Byte0=10h und Byte1=20h

Die PEAK CAN Dongle Software zeigt mit einen riesen großen Identifier
an. Die Daten sind insgesamt 10 byte lang. Und bei der Datenläge
sehe ich 15.
Hab leider kein Bild dazu. Ich kann es heute abend mal ins Forum
reinstellen.
Hast du mal meine beiden Funktionen gesehen???
Was meinst du, wenn der Chip Select auf Masse liegt, beeinträchtigt
doch nicht meine Funktionen oder???

Autor: neo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt es für den SJA1000 einen richtigen hardware RESET? mal in der
initalisierung den richtigen mode (BASIC oder PeliCAN) setzen, da es
unterschiede in der addressmap gibt!

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In diesem Register habe ich nichts getan.
Im Datenblatt steht, ich muss bei BASIC CAn das 8Bit vom
Register 31 auf NULL setzten.
Vielleicht sollte ich da noch tun.

Muss man dieses Bit setzten???

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst die Bilder hier nicht reinstellen, schreib doch einfach
anstelle von "riesen groß" das, was da steht.
Ich versuche ja, Dir zu helfen, aber Du redest um den heissen Brei...
Hm, mal sehen, ob mir nicht zufällig doch noch was auffällt.
Bist Du denn sicher, daß der Controller im BasicCAN-Mode ist?

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab wie gesagt in diesem Register nichts getan.
Ist das erforderlich das das BIT 8 auf NULL stehen muss???
Was meinst du zu meinen Funktionen???

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach nem Reset ist der CAN-Controller "irgendwo" und MUSS
Initialisiert werden! Also auf jeden fall den Modus selektieren und
Akzeptanzmasken/Filter setzen, Baudrate einstellen usw...

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so ok!
Das CDR.7 Bit (Register 31) muss ich beim BASIC CAN auf NULL setzten.
Wie muss ich das Register maskieren. Hab voll die denkblokade,
so dass ich die anderen Bits nicht beeinflusse???

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Clear Bit (CBI) geht so:
sfr &= ~BITx

Set Bit (SBI) geht so:
sfr |= BITx

Wenn das Register also "CDR" heist, dann würde ein 'CBI CDR, 7' so
aussehen:
CDR &= ~BIT7

BIT0 bis BIT7 sollten in den headerfiles schon als Makrios definiert
sein, ansonsten:

#define BIT0 0x01
#define BITx 0x0x
..
#define BIT7 0x07

Hoffentlich klappts jetzt!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achtung, tpepiheflr:
BIT0 bis BIT7 sollten in den headerfiles schon als Makrios definiert
sein, ansonsten:

#define BIT0 0x01
#define BITx 0x0x
..
#define BIT7 0x07 <-- #define BIT7 0x08

...so muss es natürlich lauten!

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann es erst heute abend testen.
Ist dies wahrscheinlich der Fehler???
Das heisst wenn ich den Modus nicht auswähle, dann
befindet sich der CAN COntroller auf irgend einem Modús???
Angenommen: Ich tue den Mode nicht auswählen und
lese das register 31 aus. Dabei stelle ich fest dass das 8Bit auf
NULL steht, dann müsste sich doch der COntroller im BASIC CAN Modus
befinden oder nicht????

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der SJA1000 mit Spannung versorgt wird, dann
ist der MODUS Basic CAN aktiv. (laut Datenbank)
--> das Bit CDR.7 (Register31) wird automatisch auf 0 gesetzt.
Das heisst das nicht unbedingt es an dem liegt.

Autor: neo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie ist der RST pin des SJA1000 besachaltet ?

falls direkt mit Vcc dann wird kein richtiger Hardware-Reset
durchgeführt!

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Neo!

Ich habe den RST Pin über einen 10KOhm Widerstand an VCC angehängt.
Ist das falsch????
Wie müsste der Reset angeschlossen werden???

So hab jetzt mal den Basic Can Modus aktiviert. Leider
gibt es bei den Registern 5,10,11,12 immer noch Probleme

Autor: Leo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier habe ich mal das Bild vom PEAK Dongle gepostet.
Die empfangenen Botschaften sind unplausibel!

Autor: Leo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier stelle ich auch mal meine CAN.C Datei zur Verfügung.
Vielleicht ist da auch noch ein Fehler.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzige, was mir da jetzt so auf die Schnelle am Sonntag morgen
auffällt, ist, daß Du "Remote Request" frames schickst.

Werde nachher noch mal reinschauen...

Patrick...

Autor: LtData (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte mal ähnliche Probleme, aber im Peli CAN Mode. Es hat mich zum
verzweifeln gebracht, da ich einfach keinen Fehler in meinem Prog
finden konnte (hatte sogar auch deswegen hier mal gepostet, aber keiner
konnte helfen)
Irgendwann habe ich mal den Platz für den Stack vergrößert und siehe
da, es ging! Dämlicher Fehler! Vielleicht liegts bei dir auch daran,
bei mir wurde teilweise ne komplette CAN Msg auf dem Stack gesichert
und die bestehen ja bekanntlich aus einigen Bytes (besonders im Peli
CAN Mode, die sind ja noch länger). Dann noch ein oder 2
Funktionsaufrufe geschachtelt und das hat den Stack dann wohl
gesprengt. Lustigerweise ist der MC nicht abgeschmiert, sondern immer
brav weitergelaufen - sonst wäre ich vielleicht schon eher drauf
gekommen.

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab es endlich geschaft.
Ich kann jetzt Botschaften senden und empfangen!
Hab noch ne kleine Frage:
Was bedeutet eigentlich REMOTE REQUEST???
(bzw. Remote Betrieb)
Kann mir da jemand ein Beispiel dazu geben???

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre ganz nett, wenn Du mal beschreibst, woran es lag!

Gruß,
Patrick...

Autor: neo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beschaltung reset pin siehe datenblatt, lohnt sich übrigens immer ganz
zu lesen!

neo

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War das jetzt die Lösung?
Irgendwie steh ich da grad auf der Leitung :)

Patrick...

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Reset PIN vom SJA1000 über einen 10KOhm Widerstnd
an VCC (+5V) angehängt. Das reicht aus!
So habe ich es auch beim AVR gemacht.
Es lag an der Funktion can_ini().
Ich Poste mal den Code!

hat jemand eine Ahnung was Remote Betrieb bedeutet??

Autor: Leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiss jemand wie ich den ISA Slot per Software ansteuern kann???
(Windows2000).
Da müsste es doch eine DLL geben oder???

Autor: LtData (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Remote TRansmission Request... Also ich hole mal nen bisschen aus:
Das Design vom CAN sieht eigentlich so aus, daß jeder Controller
eigenständig arbeitet und die anderen Controller nicht braucht. Er
sendet nur Nachrichten unter SEINER ID auf den Bus die auch andere
Controller interessieren (eigentlicht NICHT um anderen Befehle zu
senden) könnten. Jeder Controller den die Message interessiert, kann
daraufhin irgendwas tun.
Man sendet also NICHT "Relias 0x00FF einschalten" sondern "Taster
0xAA gedrückt" und Controller A empfängt dies und entscheidet VON SICH
AUS, daß das Relias geschaltet werden muss. Andere Controller fangen
mit dieser Information ggf ganz was anderes an.
Temperatursensoneren senden nach dieser Methode z.B. nur wenn sich der
Temperaturwert mal ändert (oder z.B. alle 10 Minuten) und informiert so
die anderen Controller darüber.
Und jetzt kommt Remote Transmission Request ins Spiel: Braucht jetzt
nen anderer Controller sofort den aktuellen Temperaturwert, sendet er
einen Remote Transmission Request, daß den anderen Controller an dem
der Temp Sensor hängt dazu auffordert seine Statusmeldung auf den Bus
zu senden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.