Forum: Mikrocontroller und Digitale Elektronik mcp2515 probleme am SPI


von norpo (Gast)


Angehängte Dateien:

Lesenswert?

Ich versuche mit einem CAN-Controller MCP2515 über den SPI-Bus zu
Kommunizieren um damit später einen CAN-Hausbus aufzubauen.
Ich habe als Controller einen AVR Mega8 und benutze BascomAVR zur
Programmierung. C liegt mir nicht und Pascal war mir zu teuer.
Mein Problem: Ich komme mit der Konfiguration des MCP nicht zurecht.
Ich habe mal ein kleines Testprogramm geschrieben um den Baustein
anzusprechen, aber ich erhalte nur 00 oder FF als Rückmeldung.
Wäre prima wenn mir jemand mal die genaue Abfolge der Befehle zur
Konfiguration des Bausteins sagen könnte.
Mein bisheriger Spaghetticode is mal angefügt.

Norbert

von Frnak Meißner (Gast)


Lesenswert?

Hi, ich habe ein ähnliches Problem. Ich bekomme gar keine Rückmeldung.
Kannst du mir mal dein Code schicken?
cu.

von Aleksej Kiselev (Gast)


Lesenswert?

Ich habe mit mcp2515 ein bisschen rumgespielt, und die Kommunikation hat
doch geklappt, wie ich mich daran erinnere. Ich versuche morgen das
Programm noch mal finden. Schreib mich an

von Michael B. (mi,bu(at)web,de) (Gast)


Angehängte Dateien:

Lesenswert?

im Anhang ist mein Testcode. Die Kommunikation steht auf jeden Fall.
Zumindest kann ich die Oszillatorfrequenz (den Teiler) ändern. Eine
wirkliche Kommunikation via CANbus hab ich allerdings (auch aus
zeitgründen) noch nicht hinbekommen.

Gruss, Michael

von Poison Angel (Gast)


Lesenswert?

Hm.... Danke erstmals, auch wenn ich aus dem SourceCode nicht ganz
schlau werde... (Meine Basic tage sind schon lange her)

Eigentlich sollte es doch so sein:
1. RESET schicken (0xC0 an SI senden)
2. jetzt sollte ich doch auf die Register des MCP zugriff haben oder
nicht?
 also zum Beispiel das auslesen des CANCTRL Register (0x030F an SI
senden)
3. nach dem senden des letzten Adressbits solten die Daten auf SO
liegen

Oder liege ich hier total falsch?????

von ElMachel (Gast)


Lesenswert?

Servus,

ich kenne leider die BASCOM Syntax nicht, kann daher sein das ich mich
täusche.
Also falls diese Zeile
Spiout Cmd(1) , 2
heißt, dass er über SPI die ersten beiden Bytes vom Cmd-Array  ( bei
dir: Read-Kommando und Adresse von CANSTAT) senden soll, dann fehlt
noch ein drittes Bytes, das sog. dummy-Byte, das man noch an den
MCP2515 senden muss, damit der MCP2515 den Registerinhalt auf MISO
legt.
Im Klartext funktioniert das auslesen eines Register des MCP2515 so:
1. cs low
2. read befehl senden
3. Registeradresse senden
4. Dummy-Byte senden (zeitgleich legt der Controller seine Daten an
MISO)
5. cs high

mfg
Christian

von Poison Angel (Gast)


Lesenswert?

Hi,
Und genauso mache ich es:
1. CS auf low
2. Read,Registeradresse und 2 Dummybytes
  (ich lege einen 32 bit Wert auf SI)
3. CS auf HIGH

Und trotzdem bekomme ich keine Antwort vom MCP2515

von ElMachel (Gast)


Lesenswert?

Hi

@Poison Angel:
Überdenk noch mal deine Registeradressen, bei mir ist die  CANCTRL
bestenfalls auf 0x0F nicht 0x030F.

gruß
Christian

von Poison Angel (Gast)


Lesenswert?

Hi
0x030F: 0x03 -> lese Register
        0x0F -> Registeradresse.
Man legt doch 0x030F auf SI oder nicht?
Oder vielleicht:
1. CS->low
2. 0x03 auf SI
    1ms warten
3. 0x0F auf SI
4. 0xFF auf SI
5. CS -> high??

cu.

von ElMachel (Gast)


Lesenswert?

hi

so hab ichs oben schon mal hingeschrieben. Die 1ms warten kannst du dir
sparen, da man beim schreiben in das SPDR-Register normalerweise wartet
bis SPIF gesetzt ist, (steht aber alles im Datenblatt, sogar mit
c-beispiel).
Bevor du aber irgendein SPI Kommando an den MCP2515 sendest, solltest
su schon ein bisschen warten (siehe MCP2515 Datenblatt 8.1)

von Poison Angel (Gast)


Lesenswert?

Danke, das hat geholfen...
cu.

von Marko (Gast)


Lesenswert?

hallo, ich hole mal wieder den Uraltthread heraus,
aber ich hab da mal ne Frage dazu, und zwar:

Woher kommt die 0x80 für den RTS als Basisadresse,
ich kann das im Datenblatt leider nicht finden,
hat da jemand nen Tip für mich?

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
Noch kein Account? Hier anmelden.