Go Down

Topic: Arduino mit 10 Ultraschallsensoren + 10 Infrarotsensoren (Read 2058 times) previous topic - next topic

Mooo

Wie gesagt, den mcp habe ich bereits betreiben können mit high/low, leds usw, wie im tutorial.

Das soll der erste schritt sein um dpäter 10 statt 1 us Sensor anzuschließen.

HotSystems

#16
Jun 30, 2016, 09:08 am Last Edit: Jun 30, 2016, 09:12 am by HotSystems
Wie gesagt, den mcp habe ich bereits betreiben können mit high/low, leds usw, wie im tutorial.
Das soll der erste schritt sein um dpäter 10 statt 1 us Sensor anzuschließen.
Ein US-Sensor ist keine Led!

Das ändert ja nichts daran, dass du die Grundlagen verstehen musst und die Sensoren richtig anschließen musst. Verstehe es bitte.

So wie du es machen möchtest, funktioniert es nicht. Das ist halt so.

Hier findest du ein paar Grundlagen.

Und wenn das nicht reich, poste ich dir gern noch ein paar Links.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Mooo

Ich habe mir die Grundlagen durchgelesen, aber es gab nichts, was mir bei meinem Problem weiter helfen könnte. Ich habe gerade die Ultraschallsignale gemessen. Diese sind sehr klein (im mV-Bereich). Vermutlich werden sie vom Port-Expander nicht wahrgenommen.

HotSystems

#18
Jun 30, 2016, 10:45 am Last Edit: Jun 30, 2016, 10:47 am by HotSystems
Ich habe mir die Grundlagen durchgelesen, aber es gab nichts, was mir bei meinem Problem weiter helfen könnte. Ich habe gerade die Ultraschallsignale gemessen. Diese sind sehr klein (im mV-Bereich). Vermutlich werden sie vom Port-Expander nicht wahrgenommen.
Hast du es mal so programmiert, wie in meinem Beispiel in Post #8?
Wenn du das anders machst, kann ich dir nicht helfen.

Womit misst du ?

Ich hoffe mit einem Oszilloskop?
Und wenn die Signale, wie du sie gemessen hast, tatsächlich im mV-Bereich sind, könnte der Arduino direkt auch nichts damit anfangen. Also ist deine Messung grundsätzlich falsch!

Im übrigen sind das schnelle, digitale Signale!

Und die Grundlagen sind wichtig, um I2C zu verstehen. Wenn dir das nicht hilft, dann vergiss einfach I2C und mache es mit einem MEGA, der hat mehr Ports.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Mooo

Ja, das Beispiel in deinem Post #8 habe ich auch so im moment aufgebaut. Es funktioniert ja mit den LEDs, habe dazu allerdings einen anderen Code und eine andere Libary als dort vorgegeben.

Ich hatte grad wohl leider ein Denkfehler, natürlich misst man digitale Signale nicht mit einem Multimeter.

Ich habe zum I2C Folgendes verstanden. Es ist ein Bus, an dem sämtliche Leitungen angeschlossen werden können. Es muss eine Adresse des IC vorliegen, damit die Kommunikation stattfinden kann. Wenn A0-A2 mit GND verbunden werden, ist die Adresse eindeutig.

Jedoch wüsste ich nicht konkret, wie ich digitale Signale am MCP-Pin7 übertragen kann auf MCP-Pin8. Und später soll die Anzahl der Sensoranschlüsse erhöht werden. Weiß aber nicht, wie ich dies erst nur mit einem Sensor hinbekommen soll.

Soll ich dir den ganzen Code mit der Libary und den genauen Beschaltungsplan mit dem US-Sensor zuschicken?

Theseus

Ich habe zum I2C Folgendes verstanden. Es ist ein Bus, an dem sämtliche Leitungen angeschlossen werden können. Es muss eine Adresse des IC vorliegen, damit die Kommunikation stattfinden kann. Wenn A0-A2 mit GND verbunden werden, ist die Adresse eindeutig.
Hää?????? Was meinst du?

I2C ist fest an die PINs A4 und A5 des UNO gebunden. Über diese beiden Pins läuft grundsätzlich alle Kommunikation. Die Adresse des ICs wird im Programm und nicht durch die Beschaltung von Arduino-Pins vorgenommen. Manche I2C-ICs haben Pins über die man die Adresse des ICs ändern kann. Die werden dazu fest auf GND oder VCC gezogen.

Mit einem Mega hast du alle Probleme nicht. Dort kannst du alle Sensoren direkt anschließen und werden ohne Aufwand von den Üblichen Librarys angesprochen.


HotSystems

Ja, das Beispiel in deinem Post #8 habe ich auch so im moment aufgebaut. Es funktioniert ja mit den LEDs, habe dazu allerdings einen anderen Code und eine andere Libary als dort vorgegeben.
Wenn du einen anderen Code und eine andere Library verwendest, kann es nicht so funktionieren.

Quote
Ich hatte grad wohl leider ein Denkfehler, natürlich misst man digitale Signale nicht mit einem Multimeter.
Das befürchte ich auch. Aber du kannst ja dazu lernen. ;)

Quote
Ich habe zum I2C Folgendes verstanden. Es ist ein Bus, an dem sämtliche Leitungen angeschlossen werden können. Es muss eine Adresse des IC vorliegen, damit die Kommunikation stattfinden kann.
Völliger Quatsch. Wieso sämtliche Leitungen.
Du hast dir die Grundlagen nicht durchgelesen.
Am I2C-Bus benötigst du nur 2 Leitungen (A4 und A5 beim Uno), mehr nicht. Um den Bus zu nutzen, brauchst du I2C-Bausteine (wie den Port-Expander o. andere).
Und die Pullup-Widerstände nicht vergessen.

Quote
Wenn A0-A2 mit GND verbunden werden, ist die Adresse eindeutig.
Das sind die Adressleitungen auf den I2C-Modulen. Nur da werden die Adressen eingestellt. Auch bei anderen Einstellungen ist die Adresse eindeutig.
Wobei auch nicht an allen Modulen eine Adresse eingestellt werden kann. Da ist diese fest.

Und nochmal, lerne die Grundlagen (Arduino und I2C), so wird das nichts.


Quote
Jedoch wüsste ich nicht konkret, wie ich digitale Signale am MCP-Pin7 übertragen kann auf MCP-Pin8. Und später soll die Anzahl der Sensoranschlüsse erhöht werden. Weiß aber nicht, wie ich dies erst nur mit einem Sensor hinbekommen soll.
Auch hier muss ich mich wieder mal wiederholen. Du musst keine Signale von Pin 7 nach Pin 8 übertragen. Was soll das bringen?

Quote
Soll ich dir den ganzen Code mit der Libary und den genauen Beschaltungsplan mit dem US-Sensor zuschicken?
Nein, lerne erst mal die Grundlagen von I2C. Wenn du das verstanden hast, können wir weiter sehen.

Du hast doch im Post #2 einen Link gepostet, da ist alles sehr schön beschrieben.

Wenn du das durcharbeiten würdest, wüstest du wie I2C funktioniert.


Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

HotSystems

Hää?????? Was meinst du?

I2C ist fest an die PINs A4 und A5 des UNO gebunden. Über diese beiden Pins läuft grundsätzlich alle Kommunikation. Die Adresse des ICs wird im Programm und nicht durch die Beschaltung von Arduino-Pins vorgenommen. Manche I2C-ICs haben Pins über die man die Adresse des ICs ändern kann. Die werden dazu fest auf GND oder VCC gezogen.

Mit einem Mega hast du alle Probleme nicht. Dort kannst du alle Sensoren direkt anschließen und werden ohne Aufwand von den Üblichen Librarys angesprochen.
Wie recht du hast.

Der TO versteht es leider nicht.

Allerdings bekommt er mit dem Mega wohl neue Probleme. ;)
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Theseus

Am Mega sind die US-Sensoren jedenfalls Standardkram. Klar können da wieder andere Probleme auftauchen.

Da die US-Sensoren wirklich zeitkritisch sind und es auf ein Timing im Mikrosekundenbereich ankommt, finde ich das als I2C-Einsteiger-Projekt sehr anspruchsvoll. Hier könnte man sich Gedanken über die Interrupt-Funktionen des MCP machen. Das wären dann Pin 20 und 19 des MCP23017.

HotSystems

#24
Jun 30, 2016, 11:48 am Last Edit: Jun 30, 2016, 12:19 pm by HotSystems
Am Mega sind die US-Sensoren jedenfalls Standardkram. Klar können da wieder andere Probleme auftauchen.

Da die US-Sensoren wirklich zeitkritisch sind und es auf ein Timing im Mikrosekundenbereich ankommt, finde ich das als I2C-Einsteiger-Projekt sehr anspruchsvoll. Hier könnte man sich Gedanken über die Interrupt-Funktionen des MCP machen. Das wären dann Pin 20 und 19 des MCP23017.
Zeitkritisch ist es nicht (Ping senden, Ping empfangen), da ist der Expander allemal schnell genug. Die Hauptarbeit übernimmt ja die beiliegende Elektronik.

Und Interrupt brauchst du nicht, da die Steuerung vom Arduino aus geht. Von extern kommt da nichts aktiv rein.

Aber sicher, ist es mit dem Mega einfacher, zumal er den I2C-Bus nicht versteht.
Und er war sich so sicher, das es einfach ist.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Theseus

Zeitkritisch ist es nicht (Ping senden, Ping empfangen), da ist der Expander allemal schnell genug. Die Hauptarbeit übernimmt ja die beiliegende Elektronik.
Man muss für einigermaßen Genauigkeit auf kleiner 30µs den Abstand zwischen Echo und Ping bestimmen. 30µs ist ungefähr die Zeit, die der Schall für 1cm braucht. Wie lange braucht das Schreiben eines Registers und das Auslesen?

HotSystems

Man muss für einigermaßen Genauigkeit auf kleiner 30µs den Abstand zwischen Echo und Ping bestimmen. 30µs ist ungefähr die Zeit, die der Schall für 1cm braucht. Wie lange braucht das Schreiben eines Registers und das Auslesen?
Ok, jetzt versteh ich was du meinst.

Das kann aber nicht so kritisch sein, das es Tutorials und Anleitungen gibt, die sich genau hier drin unterscheiden.

Einige setzen "delayMicros" ein, wie auch in dem hier gezeigten Sketch und einige (meine Projekte bisher auch) setzen "delay(5)" in millis ein.

Daher meine bisherige Annahme, dies ist nicht "zeitkritisch".
Wie gesagt, die eigentliche Arbeit macht die anhängende Elektronik.

Evtl. kann ja noch hierzu eine erklärende Aussage folgen.
Ich bin da überfragt.


Aber dennoch hat das nichts mit dem Problem des TO zu tun, da er ja die Funktionsweise des I2C erst mal verstehen muss, oder besser auf einen anderen (MEGA) Arduino umsteigen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up