Hallo,
ich hab mal eine ganz banale Frage, die mich aber schon länger beschäftigt.
Hat es einen Einfluss aufs Programm ob ich einen bestimmten pinMode einmal setze oder unendlich oft.
Hintergrund ist folgender:
Wenn ich einen Motor, eine Pumpe oder was auch immer schalte, kann ich ja mit Hilfe von flags z.B. nur einmal einschalten
oder einmal ausschalten.
Oder aber ich frage bei jedem Durchlauf (im Millisekundenbereich) ab und setze den pinMode bei jedem Durchlauf.
Ich hoffe ihr versteht was ich meine, ist irgendwie schwer zu erklären.
Gruß
Bernward
Verstehen tue ichs gerade nicht, aber pinMode bitte nur im setup und somit einmal auszuführen.
Warum sollte man beim pinMode ständig hin und her schalten? Mir fällt da nur ein Anwendungsfall ein, und der hat mit deinen genannten Motoren oder Pumpen nichts zu tun. Oder meinst du ein wechselndes HIGH und LOW bei digitalWrite()?
Ich verstehe nicht die Notwendigkeit in Deinem Fall pinMode() dauernd zu wiederholen. Wennschon digitalwrite().
Es ist kein Problem wenn Du pinMode() dauernd wiederholst Zb wenn Du eine Matrix in Charlyplexing ansteuerst, mußt Du 3 Zusände haben, HIGH. LOW und hochohmig (=EINGANG) und darum mußt Du dauernd herumschalten. In Deinem Beispiel verstehe ich aber den Sinn und die Notwendigkeit nicht.
Es ist auch kein Problem digitalwrite() dauernd zu wiederholen.
Grüße Uwe
Sorry, hab mich wohl völlig falsch ausgedrückt.
Gemeint war natürlich der Status HIGH und LOW.
Wenn ich eine Pumpe von 9 bis 10 laufen lassen will kann ich die ja auf zweierlei Art einschalten.
If ( time >= 9) flag = 1;
if (flag == 1){
digitalWrite(4,HIGH)
flag=2;
}
bedeutet ja der PIN wird nur einmal auf HIGH gesetzt.
Oder aber ich schreibe
if (time > 8 && time < 10) digitalWrite(4,HIGH)
das bedeutet ja der PIN wird eine Stunde lang immer wieder auf HIGH gesetzt.
Das war die Frage, hoffe jetzt kommt es besser rüber.
gruß
Funktioniert beides und beides gibt keine Probleme.
Die 2. Variante ist etwas langsamer.
Grüße Uwe
Die 2. Variante ist etwas langsamer.
Aber auf 100 Microsekunden genau kannst du sowieso nicht schalten ...
@ michael_x nein es geht absolut nicht ums genau schalten.
Es ging mir darum, ob das Einfluss auf die Geschwindigkeit oder Auslastung des Arduino hat.
Gruß
Wenn du unnötigerweise digitalWrite aufrufst, wird die Anwendung "ausgebremst"
Auf den Controllern muss man immer an ressourcen sparen.
Und digitalWrite ist nicht zu vernachlässigen !
Zitat von jurs:
digitalRead und digitalWrite sind relativ "langsame" Funktionen, jede braucht so ca. (hab die Zahl nicht im Kopf) 60 bis 70 Taktzyklen zur Ausführung.
Habe ich vorher auch nicht gewusst, dachte digitalWrite ist auch nicht viel langsamer als ein direkter Port Zugriff mit Bitmaske ]![]()
maverick1509:
@ michael_x nein es geht absolut nicht ums genau schalten.
Es ging mir darum, ob das Einfluss auf die Geschwindigkeit oder Auslastung des Arduino hat.
Gruß
Sehe ich auch so. Meistens ist es unwichtig aber für die wenigen male wo es darauf ankommt, weiß man's jetzt.
Natürlich gehts nicht ums genaue Schalten.
Aber das wäre der einzige Unterschied, den du theoretisch überhaupt merken könntest.
60 Zylen bei 16 MHz ist nun auch nicht die Welt. ( knapp 4 µs , also fast nicht messbar
)
Ich bin auch fürs Ressourcen Sparen, aber wenn man bei weitem nicht an irgend welchen Grenzen ist, macht es für den aktuellen Sketch nichts aus.
Andererseits, Libraries die unnötig int statt byte verwenden, sind einfach fehlerhaft.
Aber was solls, OpenSource hat einen Wert an sich.