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
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....
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.
>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"...
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.
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.
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.
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?
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.
> 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.
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?
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?
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?
>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.
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?
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.
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?
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...
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.
>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".
>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.
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.
>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. :(
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
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.
> 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 ???
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.
@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.
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?
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?