PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 und Raspberry Pi



xonic128
29.12.2013, 20:31
Hallo,

Ich möchte den Raspberry Pi mit dem RP6 verbinden und per Linux Konsole ansprechen.

Ich habe mir gedacht das ganze per USB schnittstelle zu verbinden, nur weiß ich dann nicht genau wie ich befehle über den raspberry an den rp6 sende und sensorwerte mit dem raspberry auslesen.

Hoffe mir kann einer Helfen.

Dirk
29.12.2013, 21:14
Ideen: z.B. hier (https://www.roboternetz.de/community/threads/62005-Raspberry-Pi-RP6-verkuppeln).

xonic128
29.12.2013, 21:36
jap genau das hab ich mir schon angeschaut.

Leider kann ich nirgend finden wie ich das ganze per linux konsole ansteuer bzw. auslesen kann =/

Hardware-Entwickler
30.12.2013, 13:08
Möchtest du mit deinem Desktop Linux den Raspberry Pi, der wiederrum mit dem RP6 verbunden ist, auslesen?
Oder meinst du direkt die Linux Konsole des RaspberryPi?
Welche Schnittstellen möchtest du verwenden?

Mit mehr Informationen kann man dir bestimmt helfen :cool:

xonic128
30.12.2013, 13:35
Ich möchte die Schnittstelle verwenden mit der es am einfachsten ist. :) (ich denke das ist die USB Schnittstelle oder?)

Ich möchte daten von dem Raspberry Pi zu meinem RP6 senden und ihn direkt zu steuern. (vor fahren, zurück fahren, LED's an/aus schalten usw.)

Desweiteren möchte ich mit dem Raspberry Pi die sensoren des RP6 auslesen. (IR Sensor, Bumper usw.)

Danke schon mal.

Dirk
30.12.2013, 14:06
Ich möchte daten von dem Raspberry Pi zu meinem RP6 senden und ihn direkt zu steuern. (vor fahren, zurück fahren, LED's an/aus schalten usw.)
Desweiteren möchte ich mit dem Raspberry Pi die sensoren des RP6 auslesen. (IR Sensor, Bumper usw.)
Dann ist die Verbindung über den I2C-Bus das Beste: Da gibt es schon ein fertiges Programm für den RP6 zum Steuern und zum Sensoren auslesen, so dass du nur noch die Raspberry Pi Seite programmieren must.

xonic128
30.12.2013, 16:48
I2C-Bus ist das beste? und nur weil es dafür schon ein Programm gibt? oder wie meinst du das?

Bin nicht der Fan von fertigen Programmen will mein zeugs selbst schreiben. =)

die eigentliche Frage ist wie lese ich die Sensoren vom RP6 mit dem Raspberry Pi aus?

Dirk
30.12.2013, 17:32
I2C-Bus ist das beste? und nur weil es dafür schon ein Programm gibt? oder wie meinst du das?
Ja, genau. Wenn du dich allerdings auf beiden Plattformen (Pi und RP6) völlig neu umtun willst und alles neu entwickeln willst, kannst auch UART, SPI oder auch einfach 2 GPIOs mit eigenem Protokoll nehmen.


Bin nicht der Fan von fertigen Programmen will mein zeugs selbst schreiben. =)
Sehr lobenswert!!


die eigentliche Frage ist wie lese ich die Sensoren vom RP6 mit dem Raspberry Pi aus?
Wie viel Erfahrung bringst du denn mit?
Die Grundvoraussetzung ist, dass sowohl der Pi, als auch der RP6 völlig eigenständige Microprozessor-Systeme sind.
Die Sensoren und Aktoren des RP6 sind somit mit dem µC des RP6 verbunden, also mit einem ATmega32.
Da auch der Pi ein eigenes µC-System ist, must du beide Systeme verbinden, wenn du Daten austauschen willst.
Daher entsteht also die Frage nach der Art der Verbindung, die du ja auch am Anfang gestellt hattest.

Was heißt also dann:

die eigentliche Frage ist wie lese ich die Sensoren vom RP6 mit dem Raspberry Pi aus?
???
Die Antwort ist:
Über die Verbindung/Schnittstelle zwischen Pi und RP6. Unabhängig von der Art der Schnittstelle brauchst du auf jeder Plattform (Pi & RP6) ein Programm, das über ein vereinbartes Protokoll (auch das must du selbst festlegen/programmieren) einen Datenaustausch ermöglicht.

xonic128
30.12.2013, 18:34
Sprich ich brauche ein Programm auf dem RP6 das mir die Sensoren ausliest und die werte über den I2C-Bus raus schickt.
Und auf dem Raspberry brauche ich ein programm das am I2C lauscht und die daten verarbeitet?

oder habe ich das falsch verstanden?

dann wäre noch die frage wie muss ich den I2C bus genau verbinden brauch ich wiederstände?

Dirk
30.12.2013, 19:01
Sprich ich brauche ein Programm auf dem RP6 das mir die Sensoren ausliest und die werte über den I2C-Bus raus schickt.
Und auf dem Raspberry brauche ich ein programm das am I2C lauscht und die daten verarbeitet?
oder habe ich das falsch verstanden?
Nein, im Prinzip ist das so. Allerdings kann das Senden und Empfangen über den I2C-Bus in beide Richtungen erfolgen, wobei ein Teilnehmer der "Master" ist (das wäre dann der Pi) und einer oder mehrere (RP6, weitere I2C-Sensoren/-aktoren) die "Slaves": I2C (http://www.rn-wissen.de/index.php/I2C)


dann wäre noch die frage wie muss ich den I2C bus genau verbinden brauch ich wiederstände?
1. GND des Raspberry Pi und des RP6 müssen verbunden werden.
2. SCL/SDA der beiden Systeme (= I2C-Bus) müssen über sog. Pegelwandler (http://www.watterott.com/de/Pegelwandler) miteinander verbunden werden.

fabqu
30.12.2013, 19:22
Wenn ich mich da mal einhaken dürfte:
Ohne dirk widersprechen zu wollen, will ich nur mal eben einen nachteil des I2C nennen:

Wie dirk bereits sagte, gibt es einen master (wird wohl dein pi) und einen oder mehrere slaves (rp6, vielleicht auch noch andere i2c-sensoren wie ultraschallsensoren srf02) .
und genau dort sehe ich dann das problem: wenn du i2c-sensoren wie die srf02 verwenden willst, darf diese nur der master (also der pi) abfragen, niemals ein slave.
wenn diese daten aber nur der slave braucht, dann gehen die daten vom sensor zum rp6 über den umweg des pi.

Sollte man wissen.
viel spaß beim projekt, klongt spannend!

Hardware-Entwickler
30.12.2013, 21:22
Ich würde die UART-Schnittstelle empfehlen. Der Zugriff vom RaspPi erfolgt dann über /dev/tty* mit einfachen Schreib- und Lesefunktionen (vgl. Dateizugriff).

Aber vielleicht solltest du dir kleinere Ziele für den Anfang setzen.
Oder wie gut bist du mit Programmierung auf Unix/Linux-Systemen vertraut?

xonic128
30.12.2013, 23:05
Danke schon mal für die vielen Vorschläge.

Mit der Programmierung habe ich keine Probleme.

Nur im elektrischen Teil (die Verbindung der Schnittstellen) da habe ich so meine Probleme.

Ich brauche bei jeder Methode einen Pegelwandler oder? Wenn Ja welchen brauche ich genau?
Kann mir evtl. jemand nen kleinen Schaltplan für die Verbindungen Zeichnen? ( würde mir glaub mehr Helfen =)

I²C kann ich jederzeit erweitern oder?
Bei UART habe ich diese Möglichkeit nicht oder hab ich da was übersehen?

Dirk
31.12.2013, 08:31
Hi xonic128,

Ich brauche bei jeder Methode einen Pegelwandler oder?
Ja, weil du immer ein 3,3V- mit einem 5V-System verbindest. Das klappt zwar (je nach µC) teils auch ohne Pegelwandler, aber sicherer ist der Pegelwandler.
Eine Bezugsquelle für einen günstigen Pegelwandler hatte ich dir ja verlinkt. Da ist auch ein Schaltplan, so dass du ihn selber bauen kannst. Ist kein großer Aufwand.
So einen 3,3V-5V-Pegelwandler brauchst du für alle Schnittstellen.
Ein Schaltplan ist simpel:
Pi --- RP6:
------------------------------------
GND --- GND
SCL --- Pegelwandler --- SCL
SDA --- Pegelwandler --- SDA

Der Pegelwandler braucht noch beide VCCs, also +3,3V vom Pi und +5V vom RP6.


I²C kann ich jederzeit erweitern oder? Bei UART habe ich diese Möglichkeit nicht oder hab ich da was übersehen?
Nein, I2C ist ein Bus und kann viele Teilnehmer haben, UART ist eine Point-to-Point Verbindung.
Bei I2C muss man nur beachten, wie fabqu geschrieben hat, dass man sich entscheiden muss, welches µC-System "den Hut auf hat", d.h. als Hauptsteuereinheit agiert. Da laufen dann alle Infos zusammen. Das System bekommt vom I2C-Bus dann auch alle Infos von weiteren Sensoren am Bus.
Wenn die "Zentrale" bei dir der Pi wird (macht ja Sinn), wäre der ATmega32 des RP6 nur ein "Sklave", der das ausführt, was der Pi will.

xonic128
31.12.2013, 10:44
OK.
Ich habe mir den Schaltplan von dem pegelwandler mal angeschaut.

Ich brauche also 4x 10k wiederstände
Und 2x BSS138 kann mir jemand sagen was und wofür das ist?

Danke

Dirk
31.12.2013, 12:30
Das ist der MosFet, der das Levelshifting macht: Datenblatt (http://www.diodes.com/datasheets/ds30144.pdf)

fabqu
31.12.2013, 12:49
Hi!
So einen I2C-Pegelwandler gibts übrigens auf unserer Multi-IO (https://www.roboternetz.de/community/threads/60892-Kleinserie-Multi-IO-Platine-f%C3%BCr-das-Forum?highlight=multi) fertig :D

Aber mal zurück zur Frage:
Der I2C-Bus funktioniert bidirektional, das heißt es sollen BEFEHLE und WERTE vom Master zum Slave und DATEN vom Slave zum Master kommen.
Der Master frägt im Bus jeweils nur eine Adresse ab (jeder Slave hat also eine eigene Adresse) woraufhin die genannte Adresse alle gewünschten Werte in einem Register übergibt. Oder der Master schickt Befehle durch ein Register an den Slave.

Das heißt, dass Signale mit 3,3V vom Master (RaspPi) an den Slave (RP6) "heraufgestuft" werden müssen zu 5V, ohne dass die Info (Nullen und Einsen) Verloren geht. Jede Null (0V) muss also 0V bleiben (dafür muss man nix weiter tun) , jede Eins (3,3V) muss also zu 5V werden.
Das erledigt dein MOSFET: Er shiftet dir 3,3V am "Eingang" zu 5V am "Ausgang".

Dann müssen die Signale (Nullen und Einsen) vom Slave von 5V auf 3,3V runtergeshiftet werden, wieder ohne Verlust der Info. Das geschieht über zwei Widerstände, die einen Spannungsteiler (http://de.wikipedia.org/wiki/Spannungsteiler)aufbauen. Aus den 5V werden also 3,3V gemacht, die übrigen 1,7V gehen auf GND, mal ganz salopp gesagt.

Und das ganze dann wieder vice versa. Daher zwei MOSFETs und vier Widerstände.

Grüße!

xonic128
01.01.2014, 10:24
Vielen Dank. Langsam versteh ich das ganze.

Es müssen aber mosfet bss138 sein oder kann ich da auch andere verwenden. Habe hier ein Paar rumliegen wo aber nicht bss138 drauf steht :-/

fabqu
01.01.2014, 11:13
Der bss138 ist ein n-channel mosfet im smd-format. Es tut an und für sich jeder n-channel mosfet, egal welche bauform.
es gibt auch p-channel mosfets, diese sind hier nicht geeignet. Einfach den code auf deinen mosfets googlen, dann weißt du, um welchen typ es sich handelt.
Das ist alles.