Forum: Mikrocontroller und Digitale Elektronik Mit der Butterfly an den CAN Bus?


von Stephan (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Projekt und möchte mit der AVR Butterfly an den CAN 
Bus. Kann mir jemand sagen ob ich zusätzliche Bauteile benötige, oder ob 
die Butterfly schon aussreicht um Daten (z.B. Geschwindigkeite des 
Fahrzeuges) auszulesen?

Vielen Dank.

Stephan

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Zumindest brauchst Du einen Treiberbaustein und eventuell einen 
Pegelkonverter, da DER Butterfly (Schmetterling) mit 3V läuft.

von Stephan (Gast)


Lesenswert?

Treiberbaustein heißt zum Beispiel das CANDIP/AVR1 Modul ?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Naja, ein Differentialtreiber-Baustein (IC mit Leitungstreiber und 
-empfänger, welches Differenzsignale ausgibt und empfängt und mit TTL 
angesteuert wird bzw. TTL ausgibt) mit mindestens 1Mbit/s würde ja schon 
erst mal reichen. Googelst Du....

von A.K. (Gast)


Lesenswert?

CAN direkt an den Pins ist mehr was für Igor. Normale Menschen nehmen 
CAN-Controller. Hier sinnvollerweise den MCP2515, und Tranceiver 
SN65HVD23x. Beide können 3,3V. Per USI anzuschliessen. Soweit also kein 
Problem.

Etwas ärgerlicher ist, dass der Schmetterling keinen verwertbaren 
Interrupt-Eingang hat.

von Stephan (Gast)


Lesenswert?

Also bringt mir der Schmetterling erstmal gar nichts?
Ich schau mir den MCP2515 und SN65HVD23x mal an.

von fieser Rahul (auch Oskar genannt) (Gast)


Lesenswert?

>Also bringt mir der Schmetterling erstmal gar nichts?

Doch: als Meister des MCP2515...

von Stephan (Gast)


Lesenswert?

Ich habe jetzt gehört das der MCP2515 anscheind sehr fehlerhaft wäre und 
ich auf den SJA1000 setzen sollte.
Stimmt das?

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>Ich habe jetzt gehört das der MCP2515 anscheind sehr fehlerhaft wäre und
>ich auf den SJA1000 setzen sollte.
>Stimmt das?

Ich habe es nicht gehört...
Für solche Fälle gibt es "Errata sheets"...

von Stephan (Gast)


Lesenswert?

Okay. Dann bestell ich mir jetzt den SN65HVD231D und den MCP2515

von Stephan (Gast)


Lesenswert?

Also ich habe jetzt meine Bauteile bekommen.

Den MCP2515 und den SN65HVD231D.
Ich bräuchte jetzt evtl. ein bisschen Hilfe mit dem Schaltplan zwischen 
dem Schmetterling, CAN-Controler und CAN-Tranciever.

Könnt ihr mir da vielleicht helfen?

Spontan hätte ich gesagt, dass ich die beiden Bauteile auf eine neue 
Platine setzen muss und diese dann über Strippen mit dem Schmetterling 
verbinde.

von Sebastian Strunck (Gast)


Lesenswert?

http://www.kreatives-chaos.com/artikel/can

Also da ist schonmal alles fertig.
Dieser Link ist aber auch schon hier im Wiki unter CAN-Bus, bzw da 
MCP2515 zu finden.

von A.K. (Gast)


Lesenswert?

Alternativen:

1: Du verwendest Software-SPI und nimmst dafür die 4 Pins vom 
JTAG-Anschluss - JTAG geht dann natürlich nicht mehr und muss per Fuse 
abgeschaltet werden.

2: Willst du JTAG retten, dann geht auch der normale SPI-Anschluss an 
Port B, an dem auch das Dataflash hängt. Da dessen SS deshalb verbrannt 
ist, muss ein anderer Pin das CS-Signal bedienen. Am einfachsten ist es 
(weil am gleichen Anschluss), du verzichtest auf die Tröte, lötest die 
Brücke R202 aus und verwendest PB5 als CS-Signal für den MCP.

3: USI als SPI. Dem Anschluss fehlt ebenfalls das CS-Signal. Viele freie 
Pins gibt's allerdings nicht. Da wäre beispielsweise der LDR-Pin, der 
bei neueren Lieferungen mangels Fotowiderstand unbenutzt ist. Allerdings 
muss du den vom Board fischen, an Steckern findet sich der nicht.

Der MCP braucht dann noch einen Takt (Quarz+Kondensatoren) und der 
Transceiver ist trivial.

Auf einen Interrupt wirst du m.E. verzichten und mit Polling arbeiten 
müssen. Der einzige externe INT vom Mega169 hängt am LCD und wie/ob sich 
das vereinbaren liesse, ist mir unklar.

von A.K. (Gast)


Lesenswert?

PS: In den Varianten 1 und 3 ist ein RC-Glied für den Reset vom MCP2515 
ausreichend. In Variante 2 muss man einen Konflikt mit dem ISP 
verhindern, indem entweder das Reset-Signal vom Butterfly benutzt wird, 
oder dem CS-Pin vom MCP einen Pullup-Widerstand (10K) spendiert wird.

von Stephan (Gast)


Lesenswert?

Also irgendwie hab ich das Gefühl, dass ich mit dem Schmetterling ein 
Griff ins Klo gemacht habe.

Wenn ich dieses JTAG nicht brauche, dann scheint das für mich die 
einfachste Variante zu sein?

von A.K. (Gast)


Lesenswert?

Wenn du ohne JTAG-debugging auskommst, ja. Ich benötige JTAG nur selten. 
Ausserdem ist dann das USI für irgendwelche I2C-Peripherie frei.

Griff ins Klo würde ich nicht sagen. Ist nur nicht der eleganteste Weg 
zu CAN. Mich hatte der fehlende Interrupt davon abgehalten, das Modul 
als Datenlogger zu verwenden. Alles andere hätte gepasst.

von Stephan (Gast)


Lesenswert?

Was hättest du genommen?

Ich glaub ich hab noch nicht ganz raus, was das für mich bedeutet mit 
dem fehlenden Interrupt.

von A.K. (Gast)


Lesenswert?

> Was hättest du genommen?

MegaX plus MCP2515 plus Dataflash.

Anonsten hängt das von den Randbedingungen ab. Verwendet habe ich dann 
den LPC2119. Nicht weil das die effizienteste Lösung war, sondern weil 
mir im Rahmen des Projektes die diversen AVRs langsam zu Hals raus 
hingen und ich mal was anderes bauen wollte. Der Butterfly hätte mich 
dagegen aufgrund seiner Miminalistik wieder gereizt.

von Stephan (Gast)


Lesenswert?

Alles klar...
.. hab jetzt spontan noch Fragen:

Gibt es irgendwie die Möglichkeit online fertig geätzte Platinen zu 
bestellen?

Wie nennt man diese kleinen Stecker für einzelne Pins, damit ich die 
Kabel nicht auf den Schmetterling löten muss sondern einfach son Pin 
auflöte und die Kabel draufstecke?

von A.K. (Gast)


Lesenswert?


von Stephan (Gast)


Lesenswert?

Mit welchen Pins muss ich denn am OBD2 Stecker arbeiten?

06 - CAN_Hi
14 - CAN_Low
05 - Signal_Ground

Das heißt ein Kabel mit 4 Adern würde mir vollkommen ausreichen vom OBD2 
zum mController?

von Stephan (Gast)


Lesenswert?

Nächste Frage. Ich möchte so langsam anfangen das Programm zu schreiben. 
Empfehlt ihr mir hierzu BASCOM oder eher C ?

In Bascom müsste ich mich kurz einarbeiten, C wäre evtl. für mich 
leichter, da ich C++ behersche (mehr oder weniger).

Wenn Ihr mir BASCOM rät, könnt ihr mir dann sagen, welche die aktuelle 
Version ist?

von Rahul, der Trollige (Gast)


Lesenswert?

>In Bascom müsste ich mich kurz einarbeiten, C wäre evtl. für mich
>leichter, da ich C++ behersche (mehr oder weniger).

Und wenn du mit Bascom "arbeitest" gehst du uns damit auf den Keks...

Da du C++-Kenntnisse hast, solltest du sie nutzen.

von Stephan (Gast)


Lesenswert?

Okay, dann nutze ich die.
Dann ergibt sich aber meine nächste Frage :)

Ich habe bisher noch nicht für mikrocontroler programmiert. Für meine 
C++ Programme habe ich meistens Dev-C++ benutzt oder MS Visual Studio 
2005.

Wenn ich jetzt nicht mit AVR Bascom arbeite, wie connecte ich dann zum 
Schmetterling und lade die Daten rüber?

von A.K. (Gast)


Lesenswert?

Steht im Handbuch von dem Teil ausdrücklich drin (=> Bootloader).

von Stephan (Gast)


Lesenswert?

Habe auch mitlerweile etwas auf der Homepage hier gefunden :)

Im Netz habe ich folgendes Dokument zur Geschwindigkeit gefunden.

ID: 0x741
0x09 0x31 0x03 0x61 0x00 0x0B

Für die Umrechnung der Geschwindigkeit in einen realen Wert gilt das 
gleiche wie bei der
Drehzahl, mit Ausnahme des Umrechnungsfaktors. In einem Forum [2] haben 
wir gelesen,
dass dieser 1/128 sei, was sich allerdings als falsch herausstellte. 
Nach ein paar
Überlegungen sind wir auf 1/96 gekommen. Mit diesem Faktor kommt der 
Wert dem Tacho
sehr nahe.
0x0931 / 96D =
2353D / 96D = 24,5 km/h

Was sagt mit das 0x09, 0x31, usw.

von Stephan (Gast)


Lesenswert?

Mir ist aufgefallen, dass ich ein kleines Problemchen mit der verbindung 
zwischen Butterfly, MCP2515 und dem SN65HV231D habe.

http://87.230.7.215/digifahrt/schaltplan.jpg

So sieht das momentan aus. Wie bau ich den MCP da rein?

von Rahul, der Trollige (Gast)


Lesenswert?

Du brauchst entweder das SPI des ATmega169 (PortB0..3) oder irgendwelche 
sonstigen Portpins. Wenn du das SPI benutzen kannst (Bootloaderbetrieb), 
dann hast schon Hardware, die grösstenteils die Kommunikation für dich 
übernimmt. Wenn du "irgendwelche" Portpins benutzt, muß du das SPI in 
Software nachbilden (auch nicht so schwierig).
Du brauchst 4-5 Pins: MOSI (Daten zum MCP2515), MISO (Daten vom 
MCP2515), SCK (Takt), /SS (Chipselect-Signal, damit der MCP2515 
feststellen kann, dass er gemeint ist) und vielleicht noch eine 
Interruptleitung vom MCp2515 zum AVR - das ist aber optional...

von Stephan (Gast)


Lesenswert?

Generell kann ich das nehmen, was der Schmetterling mir zur Verfügung 
gibt. Es ist ja nur dieses Projekt, dass ich mit dem realisieren möchte.
Wenn du mir empfiehlst den SPI zu nehmen, dann mach ich das auch so :)

Wobei dein Vorredner vom JTAG gesprochen hat.

von Stephan (Gast)


Lesenswert?

Okay, also ich habe den Schaltplan etwas ergänzt. Ist das soweit 
korrekt?
Jetzt habe ich nur noch Schwierigkeiten zwischen Controller und 
Tranciever.

von Stephan (Gast)


Lesenswert?


von Rahul, der Trollige (Gast)


Lesenswert?

>Wobei dein Vorredner vom JTAG gesprochen hat.

Ich bin von deinem Schaltplan ausgegangen.
Das Butterfly-Board kenne ich nicht weiter.
Wenn da noch mehr am SPI hängt, musst du dem MCP2515 eine eigene 
/SS-Leitung spendieren.

>Jetzt habe ich nur noch Schwierigkeiten zwischen Controller und
>Tranciever.

Am MCP2515 gibt es die Pins "TXCAN" und "RXCAN".
"D" des SN65hvd231 kommt an "TXCAN" und "R" an "RXCAN".

von Stephan (Gast)


Lesenswert?

>Ich bin von deinem Schaltplan ausgegangen.
>Das Butterfly-Board kenne ich nicht weiter.
>Wenn da noch mehr am SPI hängt, musst du dem MCP2515 eine eigene
>/SS-Leitung spendieren.

Ich habe das ganze jetzt mal so abgeändert:
http://87.230.7.215/digifahrt/schaltplan.jpg

Hier ne grafische Beschreibung vom Schmetterling:
http://elmicro.com/images/pf-atavrbfly.jpg

Dank euch hätte ich dann soweit schonmal das Kabelzeug, sofern ihr mich 
jetzt auf die richtigen Pins am Schmetterling lenkt.

Ich muss - und will - mich wirklich schonmal bei euch bedanken. Ohne 
eure Hilfe wäre ich noch lange nicht soweit.

von A.K. (Gast)


Lesenswert?

Dass CAN Controller und Transceiver Strom brauchen, ist hoffentlich nur 
zwecks Vereinfachung des Schaltbildes nicht eingezeichnet.

Dem MCP muss man zusätzlich auch noch Takt beibringen, und ein RC-Glied 
für  Reset. Das steht freilich alles im Datasheet.

von Stephan (Gast)


Lesenswert?

>Dass CAN Controller und Transceiver Strom brauchen, ist hoffentlich nur
>zwecks Vereinfachung des Schaltbildes nicht eingezeichnet.

Ja, das wäre bei meiner Zeichnung zu unübersichtlich geworden.

>Dem MCP muss man zusätzlich auch noch Takt beibringen, und ein RC-Glied
>für  Reset. Das steht freilich alles im Datasheet.

Ich muss ehrlich gesagt zugeben, dass ich da noch nicht so ganz 
durchsteige. :(

von Martin Thomas (Gast)


Lesenswert?

Eigentlich wurde weiter oben schon auf so ziemlich alles Beachtenswerte 
hingewiesen...
- AVR SPI Schnittstelle ist wenn recht erinnert nicht so wie im 
Schaltplan gezeichnet an J400 herausgeführt. Vgl. Schaltpläne in 
Butterfly User Guide
- Ist geplant CS des MCP2515 mit dem /SS-Pin des AVR zu verbinden? Der 
AVR-/SS_Pin ist bereits durch Chipselect des Dataflash-Speichers belegt. 
Anderen AVR-Pin nutzen (verfügbare s.o.). Vgl. ATmega169 Datenblatt, 
Dataflash-Datenblatt und auch Schaltplan im BF user guide: PB0/Dataflash 
select und PE7/Dataflash reset.
- Butterfly soll nicht mit 5V betrieben werden (s.o.), der genutzte 
CAN-Transceiver ist aber wenn recht erinnert ein 5V-Typ. Werden zwei 
Spannungen (5V für Transceiver und 3,x für BF) bereitgestellt? Evtl. 3V 
CAN-Transceiver nehmen (vgl. z.B. www.ti.com). Bei "mixed voltage" evtl. 
Pegelanpassung erforderlich (s.o.).
- Falls Stromversorgung über Auto-Bordnetz: DSE-FAQ beachten.
- Falls der MCP2515 beim AVR einen Interrupt ausloesen soll: 
Interrupt-Leitung des MCP z.B. mit einem der Pins des USI-Connectors 
verbinden (in Software dann per Pin-Change auswerten). Interrupt muss 
nicht sein, man kann den MCP auch stetig abfragen ("pollen") (s.o.).

Das Projekt lässt sich mit einem Butterfly+MCP2515+CAN-Transceiver 
realisieren. Aber vielleicht erstmal ein wenig mit dem Butterfly alleine 
herumspielen und Datenblätter/User Guide lesen. Mit dem vorhandenen 
Dataflash kann sich auch mit der SPI-Funktionaliät vertraut machen. 
Später MCP2515 per SPI ankoppeln und im Loopback-Mode CAN-Nachrichten 
senden/empfangen "üben".

Martin Thomas

von A.K. (Gast)


Lesenswert?

SN65HVD231 ist ein 3,3V-Typ. Das passt schon.

Der Anschluss an den JTAG-Stecker bietet den Vorteil, dass alle zwingend 
benötigten Pins am gleichen Stecker sind, also nicht erst eingesammelt 
werden müssen. Nur läuft das dann halt nicht als Hardware-SPI, sondern 
als Software-SPI.

@Stephan:

Software-SPI = SPI via expliziter Programmierung der einzelnen Portpins 
ohne Benutzung des SPI-Moduls des Controller, Bit für Bit, Zustand für 
Zustand. Ist eigentlich kinderleicht - vorausgesetzt man versteht die 
entsprechenden Signaldiagramme vom Datasheet.

Wenn du nicht in der Lage bist, im Datasheet vom MCP2515 die Schaltungen 
für den Quarzoszillator und für Reset zu finden, dann füchte ich du hast 
mit diesem Projekt ein bis zwei Nummern zu hoch gegriffen und sollest 
erst einmal mit den Grundkenntnissen in (a) Elektronik 
(http://www.elektronik-kompendium.de/) und (b) Controllerprogrammierung 
(http://www.mikrocontroller.net/articles/AVR-Tutorial) anfangen.

von Martin Thomas (Gast)


Lesenswert?

>SN65HVD231 ist ein 3,3V-Typ. Das passt schon.
Hoppla. Sorry. Merci für die Korrektur. Meine Anmerkung diesbezüglich 
also streichen.

von Fritz (Gast)


Lesenswert?

> Etwas ärgerlicher ist, dass der Schmetterling keinen verwertbaren
> Interrupt-Eingang hat.

@A.K.
Verstehe ich nicht. PB und PE bieten doch PCINT und der analog 
Komparator würde sich auch noch anbieten ???

von A.K. (Gast)


Lesenswert?

Die Pins vom analog comparator sind vom Joystick belegt.

Stimmt, PCINT könnte man verwenden. Low-pegel- statt beiderseits 
flankengetriggert ist zwar angenehmer, aber es geht auch so.

von Stephan (Gast)


Lesenswert?

@A.K.

>Wenn du nicht in der Lage bist, im Datasheet vom MCP2515 die Schaltungen
>für den Quarzoszillator und für Reset zu finden, dann füchte ich du hast
>mit diesem Projekt ein bis zwei Nummern zu hoch gegriffen und sollest
>erst einmal mit den Grundkenntnissen in (a) Elektronik
>(http://www.elektronik-kompendium.de/) und (b) Controllerprogrammierung
>(http://www.mikrocontroller.net/articles/AVR-Tutorial) anfangen.

Ich glaube das mitlerweile auch, dass dieses Projekt etwas zu hoch war. 
Dachte das wird wesentlich einfacher.
Leider werde ich nicht genügend Zeit haben, um mich allgemein in die 
Materie einarbeiten zu können.
Muss das irgendwie auf das Projekt bezogen machen. Ich hatte ja auch 
schon 1 Jahr Digitaltechnik in der Schule, von daher sollte ich einwenig 
Basis wissen mitbringen können, was ich allerdings auffrischen muss.

von Stephan (Gast)


Lesenswert?

Folegndes:
Ich habe jetzt das AVR Studio und will so langsam anfangen den Code 
zusammen zu bekommen.
Was ist denn die einfachere Variante, muss nicht zwigend die säuberste 
sein. Das System muss nur laufen.

Ich habe gesehen, dass ich beim AVR Studio die "Debug platform" angeben 
muss.
Was soll ich dor einstellen?

von Stephan (Gast)


Lesenswert?

Sofern ich hier noch irgendwie Hilfe bekomme, dann folgendes:

Wegen dem Software-SPI. Ich habe mich da einwenig eingelesenm und musste 
feststellen, dass der Aufbau der so aussieht:

CONFIG SPI = Soft, Din = Pinb.7, Dout = Pinb.6, SS = None, Clock = 
Pinb.5

Sind das nur diese 4 Variablen, mit denen ich Arbeite?

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.