Forum: Mikrocontroller und Digitale Elektronik MCP2515 Bitrate


von Mario (Gast)


Lesenswert?

Hallo

Ich versuche mich am CAN - Testboard von kreatives-chaos.
Habe es soweit am laufen.
Nun stelle ich mich an. Das Ding läuft mit dem Beispielcode auf 125 
kbps.
Das sieht in der Konfiguration dann so aus:

spi_putc((1<<PHSEG21)); // Bitrate 125 kbps at 16 MHz  CNF 3
spi_putc((1<<BTLMODE)|(1<<PHSEG11)); //CNF 2
spi_putc((1<<BRP2)|(1<<BRP1)|(1<<BRP0)); //CNF 1

Das sollte in hex
CNF1 = 7
CNF2 = 90
CNF3 = 2
bedeuten wenn ich mich nicht irre.

Ich bin zu blöd es mit 100 kbps in die Reihe zu bekommen.
Das müsste in hex dann so aussehen
CNF1 = 9
CNF2 = 91
CNF3 = 1

Ich bekomme einfach nicht die drei Zeilen "spi_putc" zustande.
Ich denke mal CNF 1 sollte so aussehen
spi_putc((1<<BRP3)|(1<<BRP0)); //CNF 1
Aber der Rest ?? :-((

Wäre über einen kleinen Anschubser sehr dankbar

Gruß Mario

von ich (Gast)


Lesenswert?

Wenn du sowieso schon Hardware von Creatives Chaos nutzt, dann schau dir 
doch mal die CAN-Bibliothek von denen an. Vielleicht findest du dort 
Denkanstöße bzw. sogar die Lösung.
Oder alternativ kannst du ja auch die Bibliothek nutzen, falls du es 
nicht unbedingt selbst programmieren willst.

Hier die Bibliothek:
http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek

von H.Joachim S. (crazyhorse)


Lesenswert?

Du hast also die korrekten Werte schon "ausgerechnet"?
Dann wirst du ja wissen, wie du das gemacht hast, oder?

spi_putc (0x01); //CNF 3
spi_putc (0x91); //CNF 2
spi_putc (0x09);  //CNF 1

Sollte dann ja erst mal funktionieren :-)
Kannst dir ja hinterher die passenden Bits noch heraussuchen, damit es 
wieder lesbar wird.

von Mario (Gast)


Lesenswert?

Danke euch erst mal für die schnellen Antworten. Ich hab mich natürlich 
auf der Seite umgesehen.Die Werte hab ich dort gefunden.Komme mit dieser 
Bitumrechnung nicht klar.Wenn ich die Werte in hex übertragen möchte 
meckert mein Compiler.

von H.Joachim S. (crazyhorse)


Lesenswert?

Glaub ich nicht, warum sollte er das tun?
Und was meckert er?

von Mario (Gast)


Lesenswert?

Das kann ich Dir jetzt gar nicht genau sagen.Hab wahrscheinlich zu viel 
rum gemehrt.Ich benutze sonst immer Codevision.Da ist ja doch einiges 
anders.Habe dafür leider kein passendes Beispiel gefunden.Den 90can128 
habe ich mit 100 kbps sendemäßig am laufen.Aber mit GCC stelle ich mich 
an.Ich werde es morgen mit den hex Werten noch mal versuchen.Vielen Dank 
erst einmal.

von ich (Gast)


Lesenswert?

Mario schrieb:
> meckert mein Compiler.

Was sagt er denn genau?
Denn eine Zeile wie

spi_putc(0x09);  //CNF 1

ist für den Compiler genau das gleiche wie

spi_putc((1<<BRP3)|(1<<BRP0)); //CNF 1


Ich habe die anderen Bitwerte mal nachgeschaut.
spi_putc(0x91); //CNF 2
mußte dann lauten:
spi_putc((1<<BLTMODE) | (1<<PHSEG11) | (1<<PRSEG0));

spi_putc (0x01); //CNF 3
müßte so aussehen:
spi_putc(1<<PHSEG20);

Das nur mal so auf die Schnelle. Schau mal ins Datenblatt. Ab Seite 42 
stehen die Register- und Bitbeschreibungen für die Bit Timing Registers.

Aber nochmal die Frage: Was kommt für eine Fehlermeldung, wenn du beim 
spi_putc() eine Zahl angibst? Das wundert mich doch sehr...

von Mario (Gast)


Lesenswert?

Ich glaube ich weiss warum er gemeckert hat.
Ich bab es so geschriebenen
spi_putc = (0x91);

Aber ich versuche es morgen noch mal.Hab mich erst mal geerdet.

von ich (Gast)


Lesenswert?

Mario schrieb:
> Ich glaube ich weiss warum er gemeckert hat.
> Ich bab es so geschriebenen
> spi_putc = (0x91);
>
> Aber ich versuche es morgen noch mal.Hab mich erst mal geerdet.

Ah, na dann kann es nicht klappen. Okay, viel Erfolg morgen!

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.