www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik mcp2515 probleme am SPI

Autor: norpo (Gast)
Datum: 03.11.2004 16:53
Dateianhang: cantest-1.bas (1,7 KB, 229 Downloads)

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: 19.01.2005 15:38

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: 19.01.2005 16:25

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: 19.01.2005 18:27
Dateianhang: mcp2510.bas (3,3 KB, 318 Downloads)

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: 19.01.2005 19:17

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: 19.01.2005 20:06

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: 19.01.2005 20:28

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: 19.01.2005 20:43

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: 19.01.2005 20:49

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: 19.01.2005 21:03

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: 19.01.2005 21:26

Danke, das hat geholfen...
cu.
Autor: Marko (Gast)
Datum: 07.05.2007 02:57

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net