mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mcp2515 probleme am SPI


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

Bewertung
0 lesenswert
nicht 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

Autor: Frnak Meißner (Gast)
Datum:

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

Autor: Aleksej Kiselev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (mi,bu(at)web,de) (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Poison Angel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?????

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Poison Angel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

gruß
Christian

Autor: Poison Angel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ElMachel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Poison Angel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das hat geholfen...
cu.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

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.