Arduino und CAN-Shield

Hallo Forum,

ich hab ein Arduino Uno und das Sparkfun CAN Shield und würde gern die Geschwindigkeit des Wagens und Drehzahl des Motors (Audi, BJ 2008) auslesen.
Ich hab CAN High, Can Low, 5V und GND hinterm Navi.

Verbinde ich jeden der Pins vom Shield mit den jeweiligen Pins auf dem Arduino? Dann ist der Uno nämlich komplett voll und ich muss mindestens ein, besser ein paar mehr Pins frei haben für ein paar kontroll LEDs. Braucht das Shield immer alle Pins oder kann man die ggf noch anders benutzen, falls sie das Shield nicht braucht ?

Dann die wichtige Frage:
Wie kriege ich die Drehzahl und die Geschwindigkeit aus dem CAN ausgelesen?

#include <Canbus.h>
if(Canbus.init(CANSPEED_500)) den Can Chip initialisieren

und dann mit Canbus.ecu_req(VEHICLE_SPEED,buffer) in einen puffer schreiben ?
Ich hätte am liebsten so eine funktion wie

int rpm=Can.lese_rpm();

Ich wär für eine keine Hilfestellung dankbar!

VG
Daniel

ich kenne das Shield nicht aber vll hilft dir dieser Link weiter.
http://code.google.com/p/mechanic/

Gruß

Danke für den Tip,

es läuft schonmal so weit, über den Seriellen Port kann ich alles auslesen. Aber was, wenn ich jetzt das auf dem LC Display anschließen will? Ich hab noch nie gesehen, dass ein LCD mit nur 3 Pins angesteuert wird, ich kenn nur den 4 und 8 bit Modus.

Wie krieg ich das LC Display angeschlossen ?

ps: Sorry kp warum das Forum das Bild in Originalgröße anzeigt ...
Hier die Direktlinks :
http://s7.directupload.net/images/140320/b5ya66i3.jpg
http://s14.directupload.net/images/140320/k6lg8ym3.jpg

Hier das LCD und das Shield:

ps: Sorry kp warum das Forum das Bild in Originalgröße anzeigt ...

VG
Daniel

BesterMann:
Ich hab noch nie gesehen, dass ein LCD mit nur 3 Pins angesteuert wird, ich kenn nur den 4 und 8 bit Modus.

Parallel ja. Da ist 4 Bit üblich.

Es gibt aber auch LCDs für die serielle Schnittstelle (was das in dem Link haben wird), oder noch besser I2C (die haben einfach einen Adapter, der auf das normale Display aufgelötet wird).

Für parallele Displays, siehe hier z.B.:
http://arduino.cc/en/Tutorial/LiquidCrystal

Du wirst halt Kabel ans Shield anlöten müssen. Und Pins verwenden die nicht vom Shield belegt sind!

Danke für die Hilfe!

Ja da hab ich auch drüber nachgedacht, nur wie finde ich heraus, welche Ports vom Shield belegt sind und welche nicht? Nicht, dass sie in irgendeiner internen Routine doch verwendet werden, ich das nicht weiß und sie versehentlich benutze? Auf der Webseite hab ich nichts dazu gefunden.

MFG
Daniel

edit: hab es doch gefunden:

Jetzt ist das Problem, dass ja sicher noch Pins verwendet werden, die das sLCD in Anspruch nimmt. Nehme ich das sLCD nicht in Anspruch und will ein "normales" LCD anschließen, könnte ich diese ja anders belegen, da sie gar nicht aufgerufen werden. Nur wie soll ich das raus kriegen?

Ich glaube dass es D13-D11 ist, da die bezeichnungen ja für ein serielles interface stehen. Lieg ich da richtig?

Du musst dir den Schaltplan vom Shield anschauen, den findet man auf der Homepage.
Frei sein sollten D3, D4 und D5. D6 wäre für das LCD, wenn du ein anderes Display anschliesst könntest du den Ausgang hierfür aber auch verwenden. D9 ist für die SD-Karte, wenn du keine nutzt wäre der auch frei. Hat bei mir mit diesen 5 Ausgängen problemlos funktioniert.

Kurze Frage, welche Library nutzt du mit dem Shield?

Hallo!
Steht alles im Datenblatt..

// Atmega 168/328 pin mapping
//#define P_MOSI B,3 // pin 11
//#define P_MISO B,4 // pin 12
//#define P_SCK B,5 // pin 13
//#define MCP2515_CS B,2 // pin 10
//#define MCP2515_INT D,2 // pin 2
//#define LED2_HIGH B,0 // pin 8
//#define LED2_LOW B,0 // pin 8

// Pins remapped to Arduino Mega 2560
#define P_MOSI B,2 // pin 51
#define P_MISO B,3 // pin 50
#define P_SCK B,1 // pin 52
#define MCP2515_CS B,0 // pin 53
#define MCP2515_INT E,4 // pin 2
#define LED2_HIGH H,5 // pin 8
#define LED2_LOW H,5 // pin 8

ein I2C LCD würde sich da anbieten

mfg Martin

Spexx:
Du musst dir den Schaltplan vom Shield anschauen, den findet man auf der Homepage.
Frei sein sollten D3, D4 und D5. D6 wäre für das LCD, wenn du ein anderes Display anschliesst könntest du den Ausgang hierfür aber auch verwenden. D9 ist für die SD-Karte, wenn du keine nutzt wäre der auch frei. Hat bei mir mit diesen 5 Ausgängen problemlos funktioniert.

Kurze Frage, welche Library nutzt du mit dem Shield?

Bist du dir ganz sicher mit den Ausgängen? Denn hier Arduino Shield List: Sparkfun CAN-Bus Shield hab ich was anderes gefunden. Hast du vielleicht einen Link von der betreffenden Stelle auf der Homepage? War da wie gesagt nicht fündig.

Ich nutze die Canbus (Canbus.h) Library von Sukkin Pang (2010). Sollte ich besser eine andere verwenden bzw welche hast du verwendet ?

MFG
Daniel

Wasjetzt:
Hallo!
Steht alles im Datenblatt..

// Atmega 168/328 pin mapping
//#define P_MOSI B,3 // pin 11
//#define P_MISO B,4 // pin 12
//#define P_SCK B,5 // pin 13
//#define MCP2515_CS B,2 // pin 10
//#define MCP2515_INT D,2 // pin 2
//#define LED2_HIGH B,0 // pin 8
//#define LED2_LOW B,0 // pin 8

ein I2C LCD würde sich da anbieten

mfg Martin

Hallo Martin, besten Dank!
Ich gehe davon aus, dass nicht aufgeführte Pins auch nicht verwendet werden.
Die LED kann ich ja auch raus kicken . Pin 11 bis 13 sind die serielle Kommunikation für das LCD oder für die SD Karte oder für noch etwas anderes? Ich muss gestehen effektiv 2 Pins fände ich recht wenig als Verbindung zum Arduino.

Das ist doch dieses Shield hier oder nicht:

Auf der Sparkfun-Seite gibt es dazu auch einen Schaltplan:

Wenn ich das richtig interpretiere, wäre zu den von mir bereits genannten Pins auch noch A0 frei verwendbar. Habe mein LCD-Display an folgenden Pins angeschlossen: A0, D3, D4, D5, D6, und D9. Einfacher wäre vermutlich über I2C, dann wären noch Pins für andere Sachen frei.

Hatte mal verschiedene Bibliotheken probiert, die ich entweder über Google oder hier im Forum gefunden habe. Die meisten haben aber nicht richtig funktioniert. Daher rein interessehalber die Frage, mit welcher du arbeitest :wink:

Es gibt noch zwei andere Möglichlkeiten mit dem LCD einmal hier
http://www.instructables.com/id/Hookup-a-16-pin-HD44780-LCD-to-an-Arduino-in-6-sec/?lang=de
Da kann man ein LCD mit einem Schieberegister ansteuern oder ein I2C Display
http://garagelab.com/profiles/blogs/tutorial-lcd-using-only-2-arduino-pins-with-pcf8574-and-i2c
man muss nur darauf achten auf dem Shield sind die Joystick-Kontakte auf den A4+A5 (der internen I2C Schittstelle des Aduinos.
Gruß
Der Dani