RasPi und HDMM01

24/09/2012 - 21:34 von Josef Moellers | Report spam
Hi,

Ich bin seit einigen Tagen stolzer Eigentümer eines Raspberry Pi.

Damit das Teil mehr ist als ein kleiner Rechner wollte ich mal ein Geràt
an den I²C-Bus hàngen und da lag dieser HDMM01 von Pollin, ein Kompaß-Modul.
Flugs das Teil an den Stecker adaptiert:
3.3V, SDA, SDC und Gnd
keine Pull-Ups oder -Downs, denn lt.
<http://elinux.org/RPi_Low-level_peripherals> gibt es da schon Pull-Ups.

Wenn ich das Modul 'draufstecken habe, erkennt "i2cdetect 1" ein Geràt
auf Adresse 0x30, ziehe ich es ab, ist das Geràt fort, also vermute ich,
daß das Modul tatsàchlich antwortet, obwohl der lt. Handbuch die Adresse
0x60 haben sollte ...

Auch wenn ich ein kleines Testprogramm mit dieser Adresse verwende,
bekomme ich Fehlermeldungen, wenn das Modul nicht steckt (mal ohne
Fehlerbehandlung).

Das Testprogramm macht i.W.

fd = open("/dev/i2c-1", O_RDWR);
ioctl(i2c, I2C_SLAVE, 0x30UL);

und schickt dann mit "write(i2c, cmd, 1)" Kommandos wie
04 RESET
02 SET
01 TM
Aber, egal was ich mache, ich bekomme nach eine TM nie irgendetwas, was
sich àndert, wenn ich den RasPi mit dem Modul aufnehme und drehe.

Hat jemand das schon mal gemacht? Die Beschreibung von Pollin ist ja
alles andere als lesbar. Vermutlich, wenn man es versteht, ergibt es
einen Sinn, aber wenn man, wie ich, nicht so richtig weiß, wie's geht,
hilft die Beschreibung auch nicht wirklich.

Das ist so frustig!

Josef
 

Lesen sie die antworten

#1 Frank Buss
24/09/2012 - 21:53 | Warnen spam
Josef Moellers wrote:

Wenn ich das Modul 'draufstecken habe, erkennt "i2cdetect 1" ein Geràt
auf Adresse 0x30, ziehe ich es ab, ist das Geràt fort, also vermute ich,
daß das Modul tatsàchlich antwortet, obwohl der lt. Handbuch die Adresse
0x60 haben sollte ...



Das klingt schonmal nicht so gut, wie wenn ein Bit zuviel gesendet wird,
was aber auch wieder merkwürdig wàre, da dann das Acknowledge nicht
funktionieren würde. Ist das Kabel zu lang? Hast du ein Link zu einem
Datenblatt?

Auch wenn ich ein kleines Testprogramm mit dieser Adresse verwende,
bekomme ich Fehlermeldungen, wenn das Modul nicht steckt (mal ohne
Fehlerbehandlung).

Das Testprogramm macht i.W.

fd = open("/dev/i2c-1", O_RDWR);
ioctl(i2c, I2C_SLAVE, 0x30UL);

und schickt dann mit "write(i2c, cmd, 1)" Kommandos wie
04 RESET
02 SET
01 TM
Aber, egal was ich mache, ich bekomme nach eine TM nie irgendetwas, was
sich àndert, wenn ich den RasPi mit dem Modul aufnehme und drehe.



Was für ein Datentyp ist cmd? Wenn das z.B. ein char ist (was ich wegen
der 1 annehme), dann musst du natürlich &cmd schreiben. Generell immer
mit "-Wall" compilieren und versuchen alle Warnungen zu beheben.

Wenn du mehr als ein Byte zwischen Start/Stop schicken willst, musst du
ein Array nehmen. Auf meiner Webseite für meinen IO-Expander habe ich
verschiedene Beispiele, u.a. in C, was auf dem Raspberry Pi làuft (klar,
denn am Linux-Treiber habe ich ja mitentwickelt, bin jetzt sogar im
Linux-Kernel verewigt :-)
https://github.com/raspberrypi/linu...-bcm2708.c
) , ebenso wie das Python-Beispiel, um einen PCA9555 anzusprechen:

http://www.frank-buss.de/io-expander/

Frank Buss, http://www.frank-buss.de
electronics and more: http://www.youtube.com/user/frankbuss

Ähnliche fragen