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
Zumindest brauchst Du einen Treiberbaustein und eventuell einen Pegelkonverter, da DER Butterfly (Schmetterling) mit 3V läuft.
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.
Also bringt mir der Schmetterling erstmal gar nichts? Ich schau mir den MCP2515 und SN65HVD23x mal an.
Ich habe jetzt gehört das der MCP2515 anscheind sehr fehlerhaft wäre und ich auf den SJA1000 setzen sollte. Stimmt das?
>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.
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.
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? Ich glaub ich hab noch nicht ganz raus, was das für mich bedeutet mit dem fehlenden Interrupt.
> 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?
Steht im Handbuch von dem Teil ausdrücklich drin (=> Bootloader).
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.
Okay, also ich habe den Schaltplan etwas ergänzt. Ist das soweit korrekt? Jetzt habe ich nur noch Schwierigkeiten zwischen Controller und Tranciever.
>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.
>SN65HVD231 ist ein 3,3V-Typ. Das passt schon.
Hoppla. Sorry. Merci für die Korrektur. Meine Anmerkung diesbezüglich
also streichen.
> 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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.