Show Posts
Pages: 1 ... 68 69 [70] 71 72 ... 217
1036  International / Deutsch / Re: Division ergibt falsches ergebnis on: March 17, 2014, 04:27:11 pm
int bildanzahl = 0;
int zeit = 0;

Abgesehen vom Problem "Division durch 0" bei bildanzahl=0, was mathematisch nicht definiert ist, hast Du also 16-Bit Integer-Variablen.

Wertebereich int: −32.768 bis +32.767
Keine Zahl darf bei so definierten Variablen größer oder kleiner sein.
Ist das erfüllt?

Wenn ja, dann wäre noch zu beachten, dass Du eine Integer-Ganzzahl-Division machst, also Divisionsreste unter den Tisch fallen.

Beispiel:
int zeit = 500;
int bildanzahl = 23;
500/23 = 21
1037  International / Deutsch / Re: Division ergibt falsches ergebnis on: March 17, 2014, 04:05:22 pm
    delays = zeit / bildanzahl;
...
Kann mir jemand erzählen was ich falsch mache?

Deklaration der Variablen "delays" ==> nicht angegeben
Deklaration und Inhalt der Variablen "zeit" ==> nicht angegeben
Deklaration und Inhalt der Variablen "bildanzahl" ==> nicht angegeben

Dein Problem wird wohl irgendwas mit dem zu tun haben, was Du bei Deiner Frage nicht angegeben hast.
1038  International / Deutsch / Re: chinesisches hall sensor module on: March 17, 2014, 02:32:47 pm
ob das modul ein open collector ist weiss ich nicht, ich bin elektronik neuling und wollte lediglich eine art drehzahlmesser bauen.

Erstmal ein Tipp: Kaufe Dir keine Hardware, zu der Du keine technischen Angaben, keine Datenblätter und keine Programmierbeispiele finden kannst!

Wenn Dein Sensor mit 5V Betriebsspannung arbeitet (steht das irgendwo?) und wenn er einen Open-Collector Ausgang hat, dann müßtest Du in Deiner Schaltung wenigstens noch einen PullUp-Widerstand am Digitalpin verwenden. Notfalls zum Ausprobieren erstmal den internen PullUp aktivieren, statt:
Code:
pinMode(sensorPin, INPUT); 
setze:
Code:
pinMode(sensorPin, INPUT_PULLUP); 

Auf den PullUp muss nur dann verzichtet werden, wenn der Ausgang des Sensors ein Push-Pull-Ausgang ist.
Welcher Art der Ausgang des Moduls ist, sollte aus der Schaltung, Dokumentation oder dem Datenblatt hervorgehen.

Geht denn die "Sensor" LED auf dem Modul an, wenn Du einen starken Magneten nah am Sensor vorbeiführst?

BTW: Testen von Hardware in Unkenntnis des Datenblatts: Immer auf eigene Gefahr des Experimentators!
1039  International / Deutsch / Re: Intervalschaltung - alle X Minuten für Y Sekunden ein on: March 17, 2014, 01:13:00 pm
Ich würde gerne eine Intervalschaltung machen, in der ich alle 10 Min ein Relais für 40 Sekunden schalten lasse,
der restliche Code müsste aber weiterlaufen, also ohne delay().

Manche Themen kommen hier im Forum gefühlt jede Woche einmal vor.
http://forum.arduino.cc/index.php?topic=224649.0
1040  International / Deutsch / Re: Poblem mit V-Plotter und GRBL on: March 17, 2014, 11:37:36 am
Allerdings bekomme ich das Bild nie so "gedruckt", wie ich es auf dem Monitor sehe. Es ist nicht ganz rund, sondern Oval
und im Winkel verschoben.

Das ist doch eigentlich völlig logisch: Ein V-Plotter hat ja eine ganz andere Kinematik als eine XY-CNC Fräse.

Während bei einer XY-CNC Maschine die X- und Y-Achse immer einen rechten Winkel zueinander bilden, bildet Dein V-Plotter mit den beiden Seil-Achsen einen V-Winkel, den Du zwar an einem einzigen Punkt auf 90° einstellen kannst, aber sobald am Seil-V auf der einen Seite Seil nachgegeben und auf der anderen Seite Seil eingeholt wird, ändern sich die Winkelverhältnisse und die beiden Achsen stehen nicht mehr senkrecht zueinander.

Die Steuerung kann dann nur verzerrt werden.

Ich sehe an Deinem Projekt nirgends, dass Du den Zwischenschritt machst, um die XY-Steuerbefehle, die für rechtwinklige CNC-Achsen gelten, auf die Kinematik Deines V-Plotters mit im Betrieb veränderlichen Achsenwinkeln umzurechnen.
1041  International / Deutsch / Re: Bei LCD 2004 Farbe der Hintergrundbeleuchtung austauschen? on: March 17, 2014, 10:42:33 am
Klar, kann man das lesen. Das ist nicht das Problem. Wenn es danach ginge, würde ich Grün/Gelb wählen. Ich brauche aber zwingend rot.

Für Leute mit ganz speziellen Anforderungen insbesondere an die Backlight-Farbe gibt es auch noch die Displays mit RGB-Backlight, da kannst Du Dir die Backlight-Farbe serienmäßig ganz nach Wunsch im laufenden Betrieb einstellen:
https://www.adafruit.com/products/499

Damit kannst Du dann z.B. Überwachungsanzeigen realisieren, die "im grünen Bereich" ein grünes Backlight haben, im "gelben Bereich" gelb sind und "im roten Bereich" der angezeigten Werte mit rotem Backlight anzeigen.

[Edit] Gerade erst gesehen: Wurde ja schon in Reply #6 gepostet.
1042  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 17, 2014, 10:25:44 am
vorher war die Sketchgröße  bei 28890 Bytes und freeRAM Anzeige bei 5483.

Dann habe ich alle reinen Textausgabe mit (F ...)  modifiziert.
Danach war die Sketchgröße  bei 28974 Bytes und freeRAM Anzeige bei 6193.

Dann hast Du ja noch satt RAM-Speicher frei von den vorhandenen 8192 Bytes RAM auf einem MEGA.
An RAM-Speichermangel kann es dann nicht liegen.

Dann habe ich prevMillis von -1000 auf 0 gesetzt.
Danach war die Sketchgröße  bei 28970 Bytes und freeRAM Anzeige blieb bei 6193.
Und der Text MEGA oben links wurde wieder mit 0:00 überschrieben auf dem Display.

Tja, da läuft dann wohl was schief.

Wenn Du wegen der geänderten Initialisierung von prevMillis den nachfolgenden Code beim ersten Aufruf der Funktion nicht durchläufst, versuchst Du eine (nicht ausgelesene) RTC-Zeit auf dem LCD-Display auszugeben. Bei der Ausgabe machst Du:
Code:
 int Jahr = jahre-2000;     // küzt die Jahreszahl auf 2 Stellen
allerdings ohne zu prüfen, ob "jahre" überhaupt über 2000 ist. Ich schätze mal, wenn Du "jahre" nicht ausgelesen hast, ist es 0 und wenn Du 2000 davon abziehst, dann gibst Du ein Datum vom 0.0. im Jahr -2000 auf dem Display aus. Dann dürfte eine Ausgabezeile länger werden als das Display Zeichen in der Zeile hat und je nach internem Aufbau des Displays rutschen dann Zeichen in eine andere Zeile rüber.

Dein Programm ist teilweise sehr unübersichtlich.
Und von einer Jahreszahl 2000 abzuziehen, ohne vorher zu prüfen, ob die Zahl überhaupt über 2000 ist, ist fehleranfällig. Vielleicht wäre eine Prüfung besser:
Code:
int Jahr=0;
if (jahre>=2000) Jahr= jahre-2000;     // küzt die Jahreszahl auf 2 Stellen

Wenn Du 100 Fehleranfälligkeiten im Programm drin hast und 100 Änderungen am Code machst, geht garantiert irgendwann irgendwas schief, was so nicht beabsichtigt ist. Deshalb mußt Du für ein leicht wartbares Programm entweder "narrensicher programmieren" oder "übersichtlich programmieren". Am besten beides gleichzeitig.
1043  International / Deutsch / Re: Atmega328P Standalone mit LiPo on: March 17, 2014, 04:54:19 am
Ist es ein Problem wenn ich den Atmega einfach direkt mit dem LiPo verbinde? Oder gibt es da Probleme?
Soweit ich weiß verringert sich die maximal Taktfrequenz, allerdings betreibe ich den Atmega eh mit dem Internen 8Mhz.

Laut Datenblatt für den Atmega328 http://www.atmel.com/Images/doc8161.pdf in Kapitel "28.3 Speed Grades
Maxi" beträgt die Mindestspannung bei 4 MHz 1,8V und bei 10 MHz 2.7V, mit linearem Verlauf dazwischen.

Die sichere Mindestspannung für den Betrieb bei 8 MHz beträgt demnach:
Umin= 1.8+ ( 2.7-1.8 ) * ( 8-4 ) / ( 10-4 ) = 2.4 Volt
1044  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 17, 2014, 04:02:28 am
Wenn ich hier die static prevMillis auf 0 setze, dann verschiebt sich meine Anzeige auf dem Display. Normalerweise steht oben links wie eingemeißelt "MEGA". Und in der letzten Zeile steht das Datum und Uhrzeit ohne Sekunde. Dafür mit blinkenden Doppelpunkt.
Setzte ich die static prevMillis auf 0, dann wird MEGA it 0:00 überschrieben. Aus unbekannten Gründen, so scheint es, schreibt die letzte Funktion noch eine 0:00 hinten ran. Da das Display zu Ende ist, fängt es oben links wieder an. Nur warum?

Kann es sein, dass Du mit Deiner RAM-verbrauchenden Art der Programmierung sogar den RAM-Speicher eines MEGA schon komplett verballert hast und der RAM-Speicherverbrauch Deines Programms inzwischen selbst für einen MEGA zu hoch ist?

In dem Fall solltest Du für alle print-Ausgaben mit Textkonstanten vom F-Makro Gebrauch machen, und zwar sowohl bei Serial.print als auch für das LED. Statt Ausgabe Textkonstante mit RAM-Verbrauch:
Code:
Serial.print("Volume size (Kbytes): ");
Setze Ausgabe Textkonstante ohne RAM-Verbrauch mit F-Makro:
Code:
Serial.print(F("Volume size (Kbytes): "));
1045  International / Deutsch / Re: PWM Zeitversätzt nach Start ansprechen on: March 16, 2014, 04:59:47 pm
Das muss ich mir in ruhe anschauen, beim ersten durchschauen habe ich den oberen teil schon mal etwas nachvollziehen jedoch beim unteren Teil muss ich mir noch genauer anschauen und durcharbeiten damit ich das auch verstehe.
Wenn irgendwas unklar ist, einfach fragen!

Das Hardware-Array für die "Eingabe" der Werte ist im Prinzip genau so wie es vorher schon war und enthält Einträge für Pin-Nummer, Vorlaufzeit und Schaltdauer:
Code:

 {ventil1Pin, 222*MS, 3*MS},

Aus diesen Einträgen wird das Schaltzeiten-Array automatisch vom Programm aufgebaut. Das Schaltzeiten-Array hat doppelt so viele Einträge wie das Hardware-Array, und zwar je eine Ein- und einer Ausschaltzeit. Schaltzeiten (automatisch erzeugt) zu dem obigen Hardwareeintrag wären:
 {ventil1Pin, 222000, 1},
 {ventil1Pin, 225000, 0},

Dieses Schaltzeiten-Array wird dann chronologisch sortiert (im setup) und ab Drücken des Startknopfs abgearbeitet.

Für einen "echten" Steuercomputer müßte man jetzt noch Editiermöglichkeiten für das Hardware-Array vorsehen. So dass man die zu steuernden Parameter (Pins, Schaltzeiten) ändern kann, ohne sie jedesmal im Quellcode eintragen, das Programm mit der Arduino-Software neu kompilieren und neu hochladen zu müssen.

Das könnte man einstellbar über den "Seriellen Monitor" oder ein "Terminalprogramm" machen, wobei dann immer ein PC am Arduino angeschlossen sein müßte, wenn Schaltparameter geändert werden sollen.

Man könnte ein "LCD-Keypad Shield" aufstecken und die Werte auf einem LCD-Display anzeigen und mit einigen Druckknöpfen einstellbar machen, so wie bei einer elektronischen Zeitschaltuhr. Dann hätte man einen von jedem PC vollkommen unabhängiges Steuergerät.

Oder man könnte auch ein "Ethernet-Shield" verwenden, den Arduino ins LAN bringen und die Einstellungen mit einem Web-Browser über eine HTML-Bedienoberfläche realisieren.

Je nachdem, wieviel Aufwand und Gehirnschmalz man da reinstecken möchte, um das Gerät von der ständigen Neuprogrammierung bei Änderung von Schaltparametern unabhängig zu machen.

1046  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 16, 2014, 04:25:55 pm
static unsigned long prevMillis=-2000;

Eine "static" deklarierte statische Variable wird exakt einmal initialisiert, beim ersten Aufruf der Funktion.
Und NICHT bei jedem Funktionsaufruf.
Zwischen den Funktionsaufrufen behalten "static" Variablen ihre Gültigkeit und ihren letzten zugewiesenen Wert.

Diese Variable ist von mir (übrigens in einem anderen Test-Sketch) nur deshalb nicht auf 0 initialisiert worden, damit schon beim allerersten Aufruf der Funktion eine neue Sekunde erkannt und gezählt wird und nicht erst ab der zweiten Sekunde. Wenn Du jetzt den Code auf "prevMillis+=1000" änderst, solltest Du den Initialwert eher auf "-1000" setzen. Oder auf "0", wenn es innerhalb der ersten Sekunde nach einem Reset keine Anzeige zu geben braucht.
1047  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 16, 2014, 03:35:50 pm
Das hier, ist eine übernommene Funktion für meine DS3231. Hatte jurs mal ins Forum gestellt.
static unsigned long prevMillis=-2000;
Gefiel mir, weil man das so schön einfach ohne zusätzliche RTC Library verwenden kann.
Vielleicht ist das eine Art Überlaufschutz der Variable?
So richtig erklären kann ich mir die Zeile auch nicht. Vielleicht liest jurs selbst hier mit und kann das erklären.

Da stelle ich die Variable einfach auf "2000 vor dem Überlauf auf null".
Den exakten Wert, wann das bei einem unsigned 32-Bit Integerwert der Fall ist, habe ich nicht im Kopf.
Soll der Compiler sich ausrechnen.

Ich werde diesen 1 Sekundenintervall mal umbauen auf gewöhnlichen Codebau ...   smiley
Ich denke jedoch eher, der Schönheitsfehler hängt mit dem Dallaskonstrukt zusammen.

Wenn ich hier lese, dass Deine loop-Funktion auch schon für sich an die 30 ms läuft und alle paar Sekunden vertaktet sich das Programm, dann würde ich mal wenigstens das probieren, statt:
Code:
void RtcTimeEverySecond(){
...
  prevMillis=millis();
...
Setze:
Code:
void RtcTimeEverySecond(){
...
  prevMillis+=1000;
...

So dass an der Stelle auch bei einer lahmenden loop immer entweder gar nicht, oder um 1000ms weitergezählt wird.

Das mit dem "prevMillis=millis();" läuft nämlich nur dann sauber, wenn die loop-Funktion WENIGER als 1 ms lang läuft.
1048  International / Deutsch / Re: Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ) on: March 16, 2014, 01:37:09 pm
hat bei mir einen Grundwiderstand von 1000R bei 25°.

Aha.  Also:
  float T0=25;    // Nenntemperatur des NTC-Widerstands in °C
  float R0=1000.0; // Nennwiderstand des NTC-Sensors in Ohm

Und warum steht in dem geposteten Sketch drin:
  float T0=60;    // Nenntemperatur des NTC-Widerstands in °C
  float R0=221.2; // Nennwiderstand des NTC-Sensors in Ohm
???

Diese beiden Konstanten im Sketch passen schon mal ÜBERHAUPT NICHT zu Deinem NTC.

Und wie sind die weiteren Daten laut Datenblatt Deines Sensors?

Du benötigst zusätzlich zu T0 und R0 (die auch im Sketch KORREKT eingetragen sein müssen und nicht nur auf dem NTC aufgedruckt) noch entweder:
- Materialkonstante B
Oder:
- T1, R1 (exakte Temperatur und exakter Widerstand an einem realistischen Arbeitspunkt)
1049  International / Deutsch / Re: Hilfe, Leonardo kaputt? Led 13 fadet? on: March 16, 2014, 12:32:08 pm
ich bin gerade etwas verwirrt, ich habe meinen Arduino Leonardo mit embedXcode programmiert. Normalerweise geht es ganz gut. Seit dem letzten flashen blinkt die lede l (13). Es ist weniger ein blinken als ein Faden. Kennt einer diesen Feher? Ich kann den Arduino leider auch an keinem Port mehr am macbook finden.

Wenn Du befürchtest, dass Du Dein Board mit einem Kurzschluss gekillt hast, mache doch erstmal einen ganz groben Test:

Sämtliche äußere Beschaltung vom Board entfernen.
USB ausstöpseln.
10 Minuten warten.
USB einstöpseln.

Wird das nackte Board dann wieder mit seinem Port am Rechner erkannt?
1050  International / Deutsch / Re: Frage zu SD Byteweise auslesen on: March 16, 2014, 11:21:37 am
wenn Ich  char zelle1 = readLineFromFile();
bekomme Ich folgende Fehlermeldung

sketch_mar16a.ino: In function 'int Stundenaufsdlesen()':
sketch_mar16a:7: error: too few arguments to function 'char* readLineFromFile(File)'
sketch_mar16a:52: error: at this point in file

Na dann ist ja alles in bester Ordnung!

Du rufst die Funktion OHNE PARAMETER auf:
  char zelle1 = readLineFromFile();

Aber die Funktionsdeklaration besagt, dass Du das FILEHANDLE ALS PARAMETER an die Funktion übergeben sollst:
char* readLineFromFile(File  myFile)

Richtigerweise lautet die Fehlermeldung daher:
> too few arguments to function 'char* readLineFromFile(File)'

Exakter und genauer geht es bei so einer offensichtlich provozierten Fehlermeldung nun wirklich nicht!
Pages: 1 ... 68 69 [70] 71 72 ... 217