Show Posts
Pages: 1 ... 74 75 [76] 77 78 ... 94
1126  International / Deutsch / Re: Stromversorgung über Akkus und Displays verwenden? on: March 30, 2012, 12:05:07 pm
Gar kein so schlechtes Angebot für eine Einsteiger-Set. Auch wenn nochmal 19% Einfuhrsteuer drauf kommen sind es knapp 35 Euro.
1127  International / Deutsch / Re: Gute Seiten für Einsteiger? (mit Tutorials, Erklärungen, Beispiele, etc) on: March 30, 2012, 09:10:49 am
Zur Programmierung findest Du hier eine gute Einführung:
http://www.freeduino.de/books/arduino-programmier-handbuch
Als PDF auch hier: http://www.netzmafia.de/skripten/hardware/Arduino/Arduino_Programmierhandbuch.pdf
Ansonsten bietet http://arduino.cc/playground/ schon jede Menge Tutorials und Hinweise zur Programmierung und zum Verwenden jeder Art von Hardware am Arduino.
1128  International / Deutsch / Re: Potentiometer digital steuern? on: March 30, 2012, 06:45:41 am
Gibt's auch zum drehen:
http://www.reichelt.de/6mm-Potis-stereo/RK27112MC-LIN10K/index.html?;ACTION=3;LA=444;GROUP=B254;GROUPID=3136;ARTICLE=73907;START=0;SORT=artnr;OFFSET=500
1129  International / Deutsch / Re: Potentiometer digital steuern? on: March 30, 2012, 06:44:29 am
Wie wäre es mit sowas:
http://www.reichelt.de/Schiebepotis/RSA0N11M9-LIN10K/index.html?;ACTION=3;LA=444;GROUP=B28;GROUPID=3713;ARTICLE=73884;START=0;SORT=artnr;OFFSET=500
Ist halt zum schieben, nicht zum drehen. Aber zumindest motorisiert.
1130  International / Deutsch / Re: Drehzahlmessung - ich bekomme keine vernünftigen Werte errechnet on: March 29, 2012, 02:01:12 pm
Ok, die Gefahr besteht doch nicht. Leider ist das aus der Beschreibung unter http://arduino.cc/en/Reference/PulseIn nicht wirklich ersichtlich.
Im Code selbst sieht man das aber:
Code:
        // convert the timeout from microseconds to a number of times through
        // the initial loop; it takes 16 clock cycles per iteration.
        unsigned long numloops = 0;
        unsigned long maxloops = microsecondsToClockCycles(timeout) / 16;

        // wait for any previous pulse to end
        while ((*portInputRegister(port) & bit) == stateMask)
                if (numloops++ == maxloops)
                        return 0;

        // wait for the pulse to start
        while ((*portInputRegister(port) & bit) != stateMask)
                if (numloops++ == maxloops)
                        return 0;

        // wait for the pulse to stop
        while ((*portInputRegister(port) & bit) == stateMask) {
                if (numloops++ == maxloops)
                        return 0;
                width++;
        }

        // convert the reading to microseconds. The loop has been determined
        // to be 20 clock cycles long and have about 16 clocks between the edge
        // and the start of the loop. There will be some error introduced by
        // the interrupt handlers.
        return clockCyclesToMicroseconds(width * 21 + 16);
Es wird also erst gewartet, bis ein gerade laufender Puls beendet ist, um dann den nächsten vollständigen zu messen.
Spannend ist auch, das die Funktion nicht mit Zeiten arbeitet, sonder anhand der verbrauchten Taktzyklen die Zeit berechnet. Damit ist die Funktion sehr genau.
Offensichtlich kann man die Genauigkeit noch ein wenig steigern, wenn man vor dem Aufruf noch die Interrupts verbietet. Damit sollte man aber vorsichtig sein, da damit diverse Sachen wie z.b. Timer nicht weitergezählt werden. Jenachdem wie lang die gemessenen Pulse sind, kann man sich hier die nächsten Fallen bauen :-)
1131  International / Deutsch / Re: Drehzahlmessung - ich bekomme keine vernünftigen Werte errechnet on: March 29, 2012, 01:33:12 pm
Besteht bei pulseIn() nicht die Schwierigkeit, erstmal den "Gegenteiligen" Zustand am Pin zu treffen?
Also wenn ich z.b. die Dauer eines HIGH-Impulses messen will, sollte ich pulseIn() aufrufen, wenn gerade LOW am Pin anliegt, damit die Funktion den Anfang des HIGH-Impulses nicht verpasst.
Rufe ich pulseIn() einfach ohne Prüfung auf, kann es ja sein, das mein Pin gerade HIGH ist (irgendwie klingt das komisch, wenn ein Pin HIGH ist  smiley-wink ) und es wird ein zu kurzer Impuls gemessen.
1132  International / Deutsch / Re: Nahezu gleiche zeitungenauigkeit auf zwei verschiedenen Arduinos on: March 29, 2012, 06:48:39 am
Also die time-Lib macht auch nichts anderes als intern die Sekunden zu zählen. Dabei wird bei jedem Aufruf von "time_t now()" der aktuelle millis()-Wert verwendet, um die seit dem letzten Aufruf vergangenen Sekunden zu zählen und die Zeit zu aktualisieren. Da hier immer auf glatte 1000er geprüft wird, kannst Du schon an dieser Stelle mit einem Fehler von einer Sekunde (genauer 0,999 Sekunden) rechnen. Dieser Fehler ist aber konstant und summiert sich nicht auf.
Sowohl die time-Lib als auch Dein Code verwendet recht häufig die Funktion millis(), was im Prinzip auch nicht schlimm ist. Das hat aber auch Auswirkungen, denn die Werte die von millis() und micros() zurückgeliefert werden, werden intern über timer-interrupts gezählt.
Die Funktion millis() sieht aber vom Code wiefolgt aus:
Code:
unsigned long millis()
{
        unsigned long m;
        uint8_t oldSREG = SREG;

        // disable interrupts while we read timer0_millis or we might get an
        // inconsistent value (e.g. in the middle of a write to timer0_millis)
        cli();
        m = timer0_millis;
        SREG = oldSREG;

        return m;
}
Man sieht, das vor dem Kopieren des Wertes von timer0_millis die Interrupts abgeschaltet werden und danach wieder angeschaltet. Während dieser, zugegeben, recht kurzen Zeitspanne werden keine Interrupts mehr verarbeitet. Es kann also durchaus vorkommen, das ein "Zählimpuls" des Timers verpasst wird. Je häufiger millis() verwendet wird, desto größer ist die Wahrscheinlichkeit, das sowas passiert.
"delay()" verwendet intern übrigens aus micros() zum "zählen", es hilft also auch nix, mit einem großen delay() die Zahl der millis() aufrufe "pro Tag" zu reduzieren.
Um das Ganze zu testen, wäre es z.B. möglich, einfach nur "dumme", geschachtelte Zählschleifen zu Verzögerung zu verwenden, die die keinen Einfluss auf die timer-Interrupts haben.
Also
1) Zeit syncen und einmal ausgeben (millis() Wert merken)
2) Zählschleifen, die 10 Stunden o.ä. beschäftigt sind laufen lassen
3) millis() Wert erneut merken und ausgeben
4) gemessenen millis() Wert mit aktueller Zeit vergleichen.
Ist die Abweichung geringer, dann hast Du Deine Fehlerquelle.
1133  International / Deutsch / Re: Nahezu gleiche zeitungenauigkeit auf zwei verschiedenen Arduinos on: March 29, 2012, 05:47:13 am
Wo stammt denn die Time.h Library her? Evtl. liefert das einen Ansatz, wo die fehlenden Sekunden bleiben. Geht die Uhr eigentlich immer vor, oder nach?
1134  International / Deutsch / Re: Arduino UNO Problem mit LCD Shield on: March 29, 2012, 04:12:33 am
Trotzdem wäre es evtl. gut, den Händler auf die eventuelle Fälschung hinzuweisen. Vermutlich weiss der noch nicht mal, das er ein gefälschtes Produkt verkauft. (Sollte man zumindest erstmal annehmen). Arduino erlaubt ausdrücklich den Verkauf von Arduino-Clonen, solange nicht der Name Arduino verwendet wird. Auch das Design ist ja offen verfügbar. Es gibt also im Prinzip keinen Grund für Produktpiraterie.
Nur wenn bei dieser vermutlichen Fälschungen auch noch die Qualität schlecht ist, gibt es im schlimmsten Fall eine Menge Leute die bei ihren Projekten Probleme haben, weil irgendwelche Pins einen Masseschluss haben.
Mario.
1135  International / Deutsch / Re: Zeitschaltuhr on: March 29, 2012, 03:21:58 am
Etwas mehr Infos über die Hardware wären gut. Hast Du z.B. ein RTC Breakout für die Uhrzeit. Welches LCD-Display hast Du und wie willst Du es ansteuern?
Dein Arduino hat keine interne Uhr, er zählt nur die seit dem Start vergangene Zeit in Mikro- und Millisekunden mit, die aber nach einer bestimmten Zeit auch wieder bei "0" anfangen.
Es reicht dann also ein Stromausfall oder ein kurzes Stecker ziehen und Deine Uhrzeit ist dahin. Von daher verwendet man in der Regel für solche Projekte eine "externe" Uhr die Batterie gepuffert ist. Z.B. folgendes: http://www.komputer.de/zen/index.php?main_page=product_info&cPath=22&products_id=131.
Empfehlenswert ist z.B. evtl. auch das LCD-Shield (Bsp. http://www.komputer.de/zen/index.php?main_page=product_info&cPath=30&products_id=170), da hast Du auch gleich einige Taster drauf für die Eingabe.
1136  International / Deutsch / Re: Wert auf 2 Sekunden hochzählen ? on: March 28, 2012, 11:35:00 pm
Das Problem bei diesem Code ist, das Du nie weisst ob das gemessene "HIGH" Signal schon ein neuer Impuls ist, oder noch der alte, den Du bereits gezählt hast. Ich würde immer auf einen Wechsel von LOW nach HIGH testen, um sicher zu sein, das es ein neuer Impuls ist, den ich zähle. Bei jedem erkannten Flankenwechsel von LOW zu HIGH wird dann der aktuelle Wert von millis() gespeichert (long last = millis()). Wenn der nächste Flankenwechsel erkannt wird, kann man den gespeicherten Wert mit dem aktuellen vergleichen. Die Differenz aus beiden Werten ist dann die vergangene Zeit zwischen 2 Impulsen (millis() - last).
Mario.
1137  International / Deutsch / Re: Brauche schnelle Hilfe ... Weiß nicht weiter! ( RPM auslesen) on: March 28, 2012, 11:28:49 pm
Ich verstehe nicht, wazu Du einen Timer brauchst? Du hast ein Eingangssignal, das periodisch auftritt und das Dir sagt, wenn eine vollständige Umdrehung abgeschlossen ist. Das einzige was Du machen musst, ist die Zeit zwischen zwei Impulsen messen und daraus dann die Umdrehungsgeschwindigkeit ableiten. Dazu brauchst Du keinen Timer, denn was nützt Dir dieses regelmäßige "Timing", wenn vorher klar ist, das es nicht zum gemessenen Wert passt.
Die Logik wie Du das umsetzen kannst, wurde hier schon mehrfach beschrieben.
1138  International / Deutsch / Re: Hilfe für Ausstellungsprojekt gesucht! on: March 28, 2012, 12:20:53 pm
Und welche Rolle spielt ein Arduino bei dem Projekt? Das wird nämlich nicht wirklich klar aus der Webseite.
1139  International / Deutsch / Re: Arduino 10 x 12V, 10Watt LEDs steuern on: March 28, 2012, 05:42:06 am
Besser noch für Software PWM: http://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation
Mario.
1140  International / Deutsch / Re: Arduino 10 x 12V, 10Watt LEDs steuern on: March 28, 2012, 05:33:56 am
Du brauchst pro LED-Lampe einen Transistor, allerdings nur eine Spannungsversorgung. Ein 12V Netzteil ist schon mal eine gute Idee. Da Deine Lampen 10W haben, sprechen wir von knapp 1A pro Lampe (genauer 834mA bei 12V), Du musst also ein Netzteil haben das im Ernstfall 10A liefern kann, wenn alle Lampen mit 100% leuchten.
Die TIP120 sollten verwendbar sein (NPN Darlington Treiber, 60V, 5A und 5V Basis-Emitter Spannung), in der Regel wird ein 1kOhm Widerstand zwischen Basis und Arduino geschaltet. (siehe hier http://ctheds.wordpress.com/2007/10/30/tip-120/)
Wichtig ist, das Du die Masseleitungen des Arduino und des externen Netzteils verbindest, wie auch in den verschiedenen Beispielen angegeben.
Wenn Dein Arduino nicht viel mehr machen muss als die Lampen steuern, sollte sogar ein Arduino reichen, da Du ein PWM-Signal auch per Software auf den "normalen" Output Pins erzeugen kannst.
Siehe hier: http://effluviaofascatteredmind.blogspot.com/2010/02/arduino-pwm-on-all-pins.html
Mario.
Pages: 1 ... 74 75 [76] 77 78 ... 94