Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi / GPIO / I2C Zugriff?


von Manuel S. (doc-snyder)


Lesenswert?

Hallo,

ich habe mir eben das Raspberry Pi gekauft.

Jetz würde mich mal interessieren wie das mit dem I2C Bus läuft. Am Ende 
muss ja ein abgespecktes Debian drauf. Ich habe schon Erfahrungen mit 
Atmels Atmega32 und der Ansteuerung des I2C gemacht. Dabei habe ich 
direkt auf Register zugegriffen. Aber mit dem RasPi bin ich dann ja 
bereits im OS.
Wie gehe ich die Sache dann an? Kann ich dann immernoch auf Register 
zugreifen? Oder bietet Linux da eine API?
Ich habe viele Tutorials gesehen in denen alles mit Python läuft. 
Allerdings hasse ich Python (ingesamt alle Skriptsprachen) und würde 
sehr gerne in C schrieben.
Hat schon jemand Erfahrungen damit gesammelt? Habt ihr Tipps / 
Referenzen für mich?

Gruß Manuel

von BT (Gast)


Lesenswert?

Hallo,

unter:

http://elinux.org/RPi_Low-level_peripherals#GPIO_Driving_Example_.28C.29

findest du Beispielcode in C. Es werden direkt die entspr. Register 
beschrieben.

Gruß
BT

von Jason (Gast)


Lesenswert?

Google ist dein Freund:
http://quick2wire.com/category/raspberry-pi/
Da steht alles mögliche über den RaspberryPi drinnen, auch wie man die 
GP-IOs und den I2C ansteuert.

von Manuel S. (doc-snyder)


Lesenswert?

Oha vielen Dank für die schnellen Antworten!
Das grenzt ja an Spaceball's wahnsinnige Geschwindigkeit :-D

Ich werd reinschauen solbald ich Zeit hab. Jetz erst mal lernen :-/

Gruß

von Der H. (picasso323)


Lesenswert?

Hallo Leute,
ich bin seit Kurzem auch glücklicher Besitzer eines Raspberry Pi, und 
der verfügt auf seinem GPIO Connector zum Glück über I²C/SMBUS. Ich 
konnte auch schon verschiedene I²C Chips erfolgreich mit Python und dem 
mudul "smbus" ansprechen (z.B. SAA1064 und ADS1110).
Ich habe aber leider den Eindruck dass das Linux SMBUS Protokoll nur 
einen relativ "starren" Funktionsumfang bietet und viele Anwendungsfälle 
nicht umgesetzt werden können, jedenfalls wenn ich mir diese 
Beschreibung ansehe:

http://www.kernel.org/doc/Documentation/i2c/smbus-protocol

Zum Beispiel:
- Wie kann man ein "Restart" machen bevor ein "Stop" gesendet wird?
- Wie kann man "nur" lesend adressieren und z.B. 2 Byte lesen ohne 
"Stop" dazwischen und OHNE vorher einen Adresspointer zu setzen?

Die Funktion i2c_smbus_read_word_data() hat ja eine relativ starre 
Syntax:
<start> Chip-Addr <write> [Ack] <daten> [Ack] <start> Chip-Addr <read> 
[Ack] [DataLow] <ack> [DataHigh] <nack> <stop>

Beim AtMega kann man das alles selbst "zusammensetzen". Oder habe ich da 
einfach noch etwas übersehen

Habt ihr da schon Erfahrungen machen können?

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.