Pages: [1] 2 3   Go Down
Author Topic: Anhand eines Tasters entweder I²C oder SPI Steuerung beginnen  (Read 2406 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo, als Erstes möchte ich mich bei euch bedanken für die vielen guten Tipps , die ihr mit gegeben habt, denn Sie haben sehr viel geholfen.

Nun habe ich erneut eine Frage und zwar, geht es darum, dass ich mit meinem Arduino Mega2560 I²C und SPI devices ansteuern möchte. nun möchte ich einen Taster am arduino anbringen, mit dem ich dem Arduino sage, dass er sich die Steuerparameter, die er von einer GUI empfängt aus der SD karte ausliest und diese den Devices sendet(ansteuern). Ich dachte mir, dass ich jeweils eine Datei für die I2C Steuerung und eine für die SPI Steuerung anlege, in der die Parameter gespeichert werden.
Nun die Frage, wie kann ich das so lösen, dass wenn ich den Taster drücke, dass arduino weiß, ob er nun aus Datei aus der I2c. datei oder spi.datei auslesen muss?

Mein Ansatz wäre 2 taster zu verwenden und dies ganz einfach über den Pin, an dem der Taster angeschlossen ist abzufragen oder gibt es eine bessere Variante?

Danke vielmals.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3039
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mein Ansatz wäre 2 taster zu verwenden und dies ganz einfach über den Pin, an dem der Taster angeschlossen ist abzufragen oder gibt es eine bessere Variante?

Kippschalter?

Ein Kippschalter würde sogar nach einem zwischenzeitlichen Stromausfall mit Neustart des Arduino seine Schaltstellung beibehalten, ohne dass sie irgendwo gespeichert werden müßte.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, wie frage ich ihn dann ab, hat er dann mehrere zustände`?
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bzw. wie müsste ich ihn anbringen (siehe vorwiderstand usw und kommt dieser an digitalPin oder analog)?
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3039
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, wie frage ich ihn dann ab, hat er dann mehrere zustände`?

Einen Kippschalter schließt Du genau so an und fragst Du genau so ab wie einen Taster.

Also entweder direkt und über pinMode INPUT_PULLUP mit dem eingebauten PullUp-Widerstand des Arduino oder mittels eines externen PullDown-Widerstands und pinMode INPUT und Abfrage mit digitalRead.

Der einzige Unterschied zum Taster ist, dass ein Kippschalter zwei stabile Schaltlagen hat, an und aus, während ein Taster immer wieder in die Ausgangslage zurückfedert.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, danke dir hab es verstanden smiley-grin. Doch noch eine frage, hat dieser Kippschalter drei zustände oder wieviele.

2.
Quote
Also entweder direkt und über pinMode INPUT_PULLUP mit dem eingebauten PullUp-Widerstand des Arduino oder mittels eines externen PullDown-Widerstands und pinMode INPUT und Abfrage mit digitalRead.

Warum input_pullup, um die internen pull_up widerstand zu aktivieren? Warum nicht  nur INPUT?
siehe hier link: http://playground.arduino.cc/Deutsch/Eingang

Und kann man die internen pull-up widrstände auf einen bestimmten Wert einstellen oder wie funktioniert das, nehmen die selbst einen geeigneten wert an ? Laut Atmel Datenblatt(20k - 50k)
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3039
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Warum input_pullup, um die internen pull_up widerstand zu aktivieren?

Weil Du damit ein Bauteil in der Schaltung einsparst.

Du sparst die Kosten für einen Widerstand. Und Du sparst Dir Zeit und Lötzinn zum Verdrahten eines Widerstands.

Brauchst Du natürlich nicht. Wenn Du gerne Widerstände verbastelst und gerne lötest, nimmst Du natürlich immer externe Widerstände extra und dann INPUT. Beides ist möglich.

Und kann man die internen pull-up widrstände auf einen bestimmten Wert einstellen oder wie funktioniert das, nehmen die selbst einen geeigneten wert an ? Laut Atmel Datenblatt(20k - 50k)

Nein, Aussuchen kannst Du Dir den Wert für die internen PullUp-Widerstände nicht.
Du kannst sie entweder benutzen. Oder Du kannst es bleiben lassen und externe Widerstände verbasteln, um einen Schalter auszuwerten.
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah jetzt verstehe ich es. d.h. wenn ich einen internen Widerstand verwende , reicht nicht pinMode(...,INPUT), sondern wenn dann pinMode(...,input_pullup).
Wenn es aber ein extern ist dann input , stimmst? Warum war es in dem link dann anders beschrieben?
Also und die andere frage ist, ist der interne pullup dann immer 20k oder 50? wie funktioniert das intern, nehmen die immer den gleichen wert an?
Logged

Offline Offline
Faraday Member
**
Karma: 120
Posts: 3981
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Doch noch eine frage, hat dieser Kippschalter drei zustände oder wieviele.
Kippschalter sind oft als Umschalter mit 3 Anschlüssen ausgeführt. Man schließt aber in diesem Fall nur zwei davon an und hat dann einen Öffner oder Schließer. Den gemeinsamen Anschluss musst du mit einem Ohmmeter rausmessen (oder eventuell ins Datenblatt schauen) und den an den Digitalpin anschließen - ist oft, aber nicht immer, in der Mitte. Der andere kommt auf Masse.

Die internen Pullups können schon etwas streuen, aber sie liegen alle um den gleichen Wert herum. Das ist in diesem Fall aber egal. So genau muss das hier nicht sein. Der ist hier nur zur Strombegrenzung da.
« Last Edit: June 29, 2013, 07:52:05 am by Serenifly » Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wäre es möglich vllt eine skizze zu bekommen, wie ich diesen kippschalter an dem arduino anschliessen kann?
Ja mir wäre es lieber das man 3 zustände hätte, da er nicht immer auslesen muss aus den dateien., wäre es möglich?
Wäre euch sehr dankbar, wenn jemand vllt eine skizze zur verfügung stellen könnte.

Danke sehr für eure tipps
« Last Edit: June 29, 2013, 07:48:45 am by milito » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3039
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah jetzt verstehe ich es. d.h. wenn ich einen internen Widerstand verwende , reicht nicht pinMode(...,INPUT), sondern wenn dann pinMode(...,input_pullup).

Korrekt. Mit INPUT_PULLUP wird der interne Pullup-Widerstand aktiviert. Der Widerstandswert wird vom Controller vorgegeben und kann von Dir nicht beeinflußt werden.

Mit INPUT wird der interne Pullup-Widerstand NICHT aktiviert und Du kannst wahlweise einen externen PullUp- oder PullDown-Widerstand verwenden. Mit Wahlmöglichkeit für die Ohm-Zahl.


Wenn es aber ein extern ist dann input , stimmst?

Ja, mit pinMode INPUT benötigst Du einen externen Widerstand in der Schaltung für einen Taster/Schalter, weil damit der interne PullUp-Widerstand eben NICHT AKTIVIERT wird und Du ja irgendwie den offenen Taster auf HIGH oder LOW ziehen mußt, damit eine digitale Schalter die Spannung am Pin korrekt auswerten kann.

Also und die andere frage ist, ist der interne pullup dann immer 20k oder 50? wie funktioniert das intern, nehmen die immer den gleichen wert an?

Auf den genauen Wert kommt es nicht an. Die internen PullUp-Widerstände sind so bemessen, dass sie ausreichend sind, um Taster und Schalter "mit kurzen Leitungen" anzuschließen und das Signal zuverlässig auszuwerten. Wenn Du den Taster einige Meter weiter an einer langen Leitung anschließen möchtest, nimmst Du besser einen externen Widerstand mit einer kleineren Ohm-Zahl (1K bis 4.7K).

Noch zu Deiner Frage vorher:
Ein einfach nur als "Kippschalter" bezeichnetes Bauteil hat normalerweise immer 2 Schaltstellungen. Allerdings gibt es diese Kippschalter manchmal zweipolig und manchmal dreipolig angeboten. Einen zweipoligen Kippschalter kann man als Ein/Aus Schalter verwenden und für die Auswertung in Digitalschaltungen reicht das. Einen dreipoligen Kippschalter kann man dagegen auch in analogen Schaltungen direkt als Umschalter zwischen zwei Funktionen benutzen (z.B. Heizung an / Kühlung an).
Logged

Offline Offline
Faraday Member
**
Karma: 120
Posts: 3981
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also der Schalter halt drei Anschlüsse und i.d.R einen Umschalter (die gibts aber auch anders. Das ist beim Einkauf aber angegeben). Das heißt in der einen Postion ist der eine Kontakt mit dem Gemeinsamen verbunden und in der anderen Position der andere. Den gemeinsamen Anschluss kann man mit dem Ohmmeter bestimmen wenn man misst welche Kontakte jeweils geschlossen sind.

Sieht man auch am Schaltzeichen:
http://grund-wissen.de/_images/schaltzeichen-schalter-wechselschalter.png

Der Gemeinsame kommt dann an den Digital-Eingang. Einer der anderen Anschlüsse kommt an Masse. Wenn der Schalter in der einen Position ist, liegt der Digital-Pin über den Pullup auf HIGH. Wenn du den Schalter auf Masse legst, ziehst du den Pin auf LOW runter. Wie herum der schaltet (d.h. ob du einen Öffner oder Schließer nimmst) ist in deinem Fall eigentlich egal, da man das im Programm entsprechend anpassen kann. Wegen dem Pullup brauchst du daher nicht den anderen Kontakt auf Plus zu legen!
« Last Edit: June 29, 2013, 08:25:22 am by Serenifly » Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok danke jurs und Serenifly, bei mir wäre aber ein dreipoliger doch besser, weil ich ja je nachdem entweder diie i2c oder die spi datei auslesen möchte und auch mal garnichts. Deshalb dachte ich an 3 zustände. z.b linksstellung = i2c, mitte=tue nichts und rechtsstellung= spi.
mit nur zwei zuständen, würde er doch immer auslesen, entweder SPI oder I2C oder nicht? Und das möchte ich vermeiden.
Wie werden überhaupt diese Stellungen vom kippschalter abgefragt, hat jede stellung seinen namen?
« Last Edit: June 29, 2013, 07:56:55 am by milito » Logged

Offline Offline
Faraday Member
**
Karma: 120
Posts: 3981
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du das willst musst du den Schalter an *zwei* Digital-Eingänge anschließen und dann abfragen welcher von den zwei LOW ist. Wenn beide HIGH sind ist er in Mittelstellung. Mit einem Eingang kannst du nur zwei Zustände abfragen (HIGH oder LOW).

Und Achtung: einen Schalter mit 3 Schaltstellungen nehmen! Die gibts auch. Aber normalerweise haben die nur 2. z.B. sowas:
http://www.reichelt.de/Kippschalter/MS-500C/3/index.html?;ACTION=3;LA=2;ARTICLE=13154;GROUPID=3275;artnr=MS+500C

Bei "Ausführung" steht da " EIN - AUS - EIN"

EDIT: Link angepasst. Das vorher war ein Taster mit 2 tastenden Positionen und fester Mittelstellung
« Last Edit: June 29, 2013, 08:26:12 am by Serenifly » Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn du das willst musst den Schalter an *zwei* Digital-Eingänge anschließen und dann abfragen welcher von den zwei LOW ist. Wenn beide HIGH sind ist er in Mittelstellung. Mit einem Eingang kannst du nur zwei Zustände abfragen (HIGH oder LOW).

Und Achtung: einen Schalter mit 3 Schaltstellungen nehmen! Die gibts auch. Aber normalerweise haben die nur 2. z.B. sowas:
http://www.reichelt.de/Kippschalter/MS-500E/3/index.html?;ACTION=3;LA=2;ARTICLE=13158;GROUPID=3275;artnr=MS+500E

Bei "Ausführung" steht da " (EIN) - AUS - (EIN)"

Danke sehr smiley-grin. so einen habe ich gesucht. Und das bedeutet also (EIN) links auf einem digitalpin , aus geht auf GND und (EIN) rechts auf ditialpin, stimmt so der anschluss?
Logged

Pages: [1] 2 3   Go Up
Jump to: