Forum: Mikrocontroller und Digitale Elektronik Arduino + Analog Sensoren = Verzögerung bei Datenausgabe


von Ruediger (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag,

ich hab gestern Sensoren in meinem Aufbau getauscht.

Im Prinzip habe ich 2 optische Sensoren an den analogen Inputs des Ardu 
hängen, das hat funktioniert solange ich 2 mal
[[http://docs-europe.electrocomponents.com/webdocs/0d1b/0900766b80d1bdc0.pdf]]
mit 500 für die Diode und 50k für den Detector verwendet hab.

Gestern wollte ich noch andere Sensoren testen(gleiche Widerstände):
[[http://www.vishay.com/docs/83752/tcrt1000.pdf]]
Seltsamer Weise funktionieren die auch, aber Bei der Datenübertragung 
wirds komisch, sobald das Signal am A0/1 ansteigt wird die serielle 
Übertragung sehr langsam.
Auf dem Serial Monitor äußert sich das in dem bei nem Signal von >400 
nur noch ca. 1 Wert/sek übertragen wird, ist das analog Signal < 100 
läuft die Übertragung scheinbar normal(0,5sek oder schneller).

Zur Auswertung meiner Daten habe ich eine Art Oszi gebastelt, dort hat 
das Ganze den Effekt das Informationen vom Sensor mit bis zu 10 sek 
Verzögerung ankommen oder sich der Ardu komplett aufhängt.

Meine erste Idee war ja das ich zuviel Strom vom Board ziehe, nur wenn 
ich den TCRT1000 nur als Detector(ohne IR Diode) betreibe und nur einen 
der Sensoren anschließe habe ich dasselbe Problem.

Vielleicht hat ja wer ne Idee, ich weiß ehrlich gesagt nicht ob ich den 
Fehler in der Programmierung oder Elektronik suchen soll.

Grüße

von Karl H. (kbuchegg)


Lesenswert?

Ruediger schrieb:

> Vielleicht hat ja wer ne Idee, ich weiß ehrlich gesagt nicht ob ich den
> Fehler in der Programmierung oder Elektronik suchen soll.

Ich denke mal: Programmierung.

Da wird dir nicht viel anderes übrig bleiben, als die LED_Debug_Technik 
anzuwenden.
Am Anfang deiner loop() schaltest du eine LED ein, am Ende wieder aus.
Und dann verschiebst du das Einschalten Zeile für Zeile nach unten, bis 
du einen deutlichen Sprung in der Helligkeit der LED siehst. Die 
Anweisung, über die du das Einschalten gerade drüber geschoben hast, ist 
dann diejenige, die einen wesentlichen Beitrag zur Laufzeit geliefert 
hat. Wichtig: deutlicher Sprung. Denn je weiter nach 'unten' du das 
Einschalten verschiebst, desto dunkler wird die LED auch. Aber das geht 
langsam. Bei dem Verhalten, welches du beschreibst, müsste es aber einen 
wirklich deutlichen Sprung in der Helligkeit geben.

Eventuell vorher mal die Technik an einem einfach Code ausprobieren, 
damit du lernst, die Helligkeits-Abnahme zu interpretieren.

von Ruediger (Gast)


Lesenswert?

ok,

Problem 1:
Ich habe bisher beide Analogeingänge parallel abgefragt, anscheinend war 
das keine gute Idee.
Werden jetzt beide abwechseln befragt.

Problem 2:
Der Ardu hört auf zu senden, aber Processing gibt weiter sich ändernde 
Daten raus. Sieht danach aus als ob es seinen Puffer(keine Ahnung ob das 
der Serial Puffer ist) leerschreibt.
Mit den alten Sensoren ist das Problem nicht augetretetn da ich diese 
nur senden lies wenn sich der analog Input um min. 5% ändert.
Die neuen Sensoren reagieren schon aufs 50Hz flackern und senden somit 
ständig, das führt dazu das Processing anscheinend überladen wird und 
noch eine Weile brauch um die Daten auszugeben.
Wie groß ist eigentlich der SerialPuffer für Pr.?

Letztendlich ist daran wohl meine "drawSensValues" schuld die einfach zu 
langsam ist.

von Ruediger (Gast)


Lesenswert?

Hier mal der Codeschnipsel
1
void drawSensorValue1 () {
2
  float yPos = sensor1act;
3
  // draw the line in a pretty color:
4
  stroke(80, 80, 180, 120);
5
  line(xSens1, height, xSens1, height - yPos/3);
6
  // at the edge of the screen, go back to the beginning:
7
  if (xSens1 >= width) {
8
    xSens1 = 0;
9
    // clear the screen by resetting the background:
10
    background(#081640);
11
  }
12
  else {
13
    // increment the horizontal position for the next reading:
14
    xSens1=xSens1+0.5;
15
  }
16
}

von Christoph H. (christoph_b)


Lesenswert?

float auf dem Atmega verwenden ist eine schlechte Idee. Macht ihn nur 
extrem langsam.

von Ruediger (Gast)


Lesenswert?

der codeschnipsel ist aus dem Processing Teil.
trotzdem keine gute idee?

von Bernhard S. (b_spitzer)


Lesenswert?

Ruediger schrieb:
> xSens1=xSens1+0.5;

willst Du halbe Pixel zeichnen??

von Ruediger (Gast)


Lesenswert?

der durchlauf ging mir zu schnell und ich hab den teil von 1 auf 0.5 
geändert damit er nicht so schnell durch den screen ist.

ich muß zugeben ich hab mir viel davon zusammengeklauft und steig an 
manchen stellen nicht ganz durch den code^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.