Forum: Mikrocontroller und Digitale Elektronik I2C BeginnerFrage


von Julian M. (julianm94)


Lesenswert?

Hallo Community,
ich starte derzeit mein erstes Projekt mit I2C. Jedoch habe ich ein 
Problem, dass mein Sensor nicht erkannt wird vom Raspberry PI. Jetzt 
wollte ich einfach in einer While Schleife im Abstand von 0.1ms das 
Acknowledge des Sensores überprüfen. Dass ich mit dem Oszilloskop messen 
kann ob der Sensor funktioniert. Der Sensor hat die Adresse 0x78. Leider 
finde ich im Internet nichts dazu, wie man dies realisieren kann, da das 
Problem wohl zu einfach ist. Ich arbeite mit der Programmiersprache C. 
Vielleicht hat ja hier jemand einen BeispielCode, den ich mir mal 
anschauen könnte. Schonmal danke im Vorraus.

MfG Julian

von Benedikt S (Gast)


Lesenswert?

Hast du an die pullup Widerstände gedacht ?

von Joachim B. (jar)


Lesenswert?

Julian M. schrieb:
> Der Sensor hat die Adresse 0x78

da gehts schon los, die Adressenbetrachtung ist ziemlich individuell

der eine betrachtet nur die rechts geshifteten Bits 1-7, der andere nur 
die ungeschifteten Bits 1-7 ausgeklammert das R/W Bit

solange du nicht weisst welche Guckweise und in der Software vorliegt 
hilft dir die Angabe nix.

Aber am PI war mir so das der nur bis 0x75 in seiner LIB schaut, du 
müsstest die Adresse nach unten verschieben oder einen I2C Controller 
per SPI zwischenschalten

http://www.forum-raspberrypi.de/Thread-i2c-adresse-0x78-ansprechen
http://www.roboternetz.de/community/threads/46616-Problem-mit-I2C-Sensor-DRMOD-I2C-RVI
http://www.instructables.com/id/Raspberry-Pi-I2C-Python/

 on the Pi, and I was using his code ... larger flexible UI system I'm 
working on, which will allow i2c GPIO expander classes to be assigned to 
.... 0x62, 0x92, 0x92, 0x94, 0x78,


!!!!!!!!!!!

und keine 5V I2C an den PI

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Hat der auch wirklich die Adressen: 0111.1000 und 0111.1001?
Oder sind es 1111.0000 und 1111.0001?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Amateur schrieb:
> Hat der auch wirklich die Adressen: 0111.1000 und 0111.1001?
> Oder sind es 1111.0000 und 1111.0001?

 0xF0 und 0xF1 sind es bestimmt nicht, es ist (wie allgemein üblich)
 die Adresse 0x78 gemeint.

 Damit du es auch zukünftig weisst:

 0b1111 0xxx ist für 10 bit adressierung reserviert...

 Und Adresse wird immer als 8 bit angegeben, aber bit 0 ist R/W
 bit, somit ist lesen immer auf ungeraden und schreiben immer auf
 geraden Adressen.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Marc V. schrieb:
>  Und Adresse wird immer als 8 bit angegeben

Ich habe schon I2C Code in beiden Varianten gesehen.

: Bearbeitet durch User
von Julian M. (julianm94)


Lesenswert?

Erstmal danke für die schnellen Antworten. Pullups habe ich hinzugefügt. 
Diese betragen 1,7kOhm wie vom Hersteller empfohlen. Wenn ich Durchmesse 
haben auch sda scl und vcc die richtige Spannung von 5V. Jetzt wollte 
ich testen ob wenn ich direkt etwas auf die Adresse 0x78 sende die 
Spannung bei SDA und SCL abfällt. Jedoch weiß ich leider nicht wie ich 
etwas auf eine Adresse senden kann. Da ich schauen will ob der Sensor 
überhaupt funktioniert.

von (prx) A. K. (prx)


Lesenswert?

Julian M. schrieb:
> ich starte derzeit mein erstes Projekt mit I2C. Jedoch habe ich ein
> Problem, dass mein Sensor nicht erkannt wird vom Raspberry PI.

Per i2cdetect?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Marc V. schrieb:
>>  Und Adresse wird immer als 8 bit angegeben
>
> I2C-Libs halten es mal so mal so.

 Ja, aber im Prinzip ist es so:

 Adresse wird als 8 bit angegeben, davon sind die oberen 7 bit die
 tatsächliche Adresse und bit 0 ist R/W.

 Nun kamm irgendein Schlaukopf auf die Idee, da nur 7 bit gebraucht
 werden, warum auch nicht die Adresse als 7 bit darstellen ?
 Die oberen 7 bits prompt 1 Stelle nach rechts geschoben und
 rausposaunt, dass er jetzt etwas revolutinäres erfunden hat.

 Dass er dann beim lesen oder schreiben wieder nach links schieben
 muss, hat er in seinem Anfall von Genialität vergessen...

 Auch die anderen Genitalien aus demselben Verein haben das ohne
 viel nachzudenken übernommen und so geistert es heute noch unter
 uns...

von Joachim B. (jar)


Lesenswert?

Julian M. schrieb:
> Pullups habe ich hinzugefügt.
> Diese betragen 1,7kOhm wie vom Hersteller empfohlen. Wenn ich Durchmesse
> haben auch sda scl und vcc die richtige Spannung von 5V

was hast du an:

Joachim B. schrieb:
> !!!!!!!!!!!
>
> und keine 5V I2C an den PI

nicht verstanden? der PI ist nicht 5V tolerant, ja man kannn den sogar 
an den Ports mit 5V killen, wenn das dein Ziel ist brauchen wir über 
dein I2C nicht mehr zu schreiben!

von (prx) A. K. (prx)


Lesenswert?

Zwischen den RPi-Generationen hatte sich die Zuordnung der Pins zur 
Nummer der I2C-Schnittstelle geändert (/dev/i2c-0 und /dev/i2c-1). Nicht 
dass du dauernd durchs falsche Fenster guckst.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

A. K. schrieb:
> Nicht dass du dauernd durchs falsche Fenster guckst.

 Ich glaube, dass er momentan an die Wand guckt und erst mal
 entdecken muss, wo die Fenster überhaupt sind.

Julian M. schrieb:
> Acknowledge des Sensores überprüfen. Dass ich mit dem Oszilloskop messen
> kann ob der Sensor funktioniert. Der Sensor hat die Adresse 0x78. Leider
> finde ich im Internet nichts dazu, wie man dies realisieren kann, da das
> Problem wohl zu einfach ist. Ich arbeite mit der Programmiersprache C.

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
> Ich glaube, dass er momentan an die Wand guckt

Das glaube ich aber auch

Julian M. schrieb:
> Der Sensor hat die Adresse 0x78. Leider
> finde ich im Internet nichts dazu

komisch ich finde verdammt viel zu PI und Sensor und 0x78

von coder (Gast)


Lesenswert?

Joachim B. schrieb:
> komisch ich finde verdammt viel zu PI und Sensor und 0x78

vielleicht das Ding hier: 
Beitrag "I2C Sensor Probleme"

von Julian M. (julianm94)


Lesenswert?

ja, ich benutze i2cdetect -a 1 um bis 0x7F alle zu sehen.
ich schaue durch das Fenster /dev/i2c-1.
Einen anderen Sensor der die Adresse 0x77 hat kann ich auch ohne 
Probleme auslesen, jedoch ist dies auch ein 3,3V Sensor. Wenn ich das 
nun richtig verstanden habe, kann ich also einen 5V Sensor gar nicht mit 
dem Raspberry Pi verwenden?

von (prx) A. K. (prx)


Lesenswert?

Wenn der 5V-Sensor mit dem High-Pegel von 3.3V-I2C zufrieden ist, dann 
brauchst du nur Pullups auf 3,3V. Wenn nicht, dann einen Pegelwandler: 
https://www.mikrocontroller.net/articles/Pegelwandler#I2C-Bus:_gemeinsam_3.3V_und_5V

PS: Ist der Sensor irgendwas obzönes, oder warum dürfen wir den nicht 
kennen?

: Bearbeitet durch User
von Julian M. (julianm94)


Lesenswert?

Der Sensor ist von der Baureihe AMS5812. Es ist ein Absolutdrucksensor.
Hier ist das Datenblatt:
http://www.amsys.de/sheets/amsys.de.ams5812.pdf

Mein Raspberry ist von der Baureihe PI 3 mit Rasbian.

von (prx) A. K. (prx)


Lesenswert?

Mindestpegel für I2C Eingang 90% Vs. Das ist ungewöhnlich restriktiv. 
Ohne Pegelwandler wird das nichts.

: Bearbeitet durch User
von Julian M. (julianm94)


Lesenswert?

Habe das Problem nun gelöst indem ich einen 3,3V Sensor genommen habe. 
:)  Habe mir aber den Thread zu den Pegelwandler durchgelesen, wenn ich 
es richtig verstanden habe könnte ich mithilfe eines 74hct125 einfach 
den 5V Sensor an einem Raspberry verwenden oder?

von Joachim B. (jar)


Lesenswert?

Julian M. schrieb:
> könnte ich mithilfe eines 74hct125 einfach
> den 5V Sensor an einem Raspberry verwenden oder?

am I2C? ich wüsste nicht wie, der ist bidirektional und ein 74hct125 
offensichtlich nur unidirektional.

Es gibt Mosfet Levelshifter aber mit denen habe ich noch nie was 
gemacht.

http://elinux.org/RPi_GPIO_Interface_Circuits
Classic MOSFET level shifter

: Bearbeitet durch User
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.