MODDING-FAQ FORUM

Alles rund ums Modden => Elektronik, Elektrik => Thema gestartet von: HighEnd am Oktober 16, 2015, 19:05:30



Titel: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 16, 2015, 19:05:30
Hallo zusammen,

mein Bruder und ich wollten vor ner Woche ein wenig mit einem Farbsensor (Adafruit TCS34725 für Arduino) experimentieren, was leider nicht geklappt hat. Grund: Der Sensor meldet sich nicht.

Wir haben die Library von GitHub heruntergeladen und installiert, und wollten dann einfach mal mit dem Example "Color View" (https://github.com/adafruit/Adafruit.../colorview.ino) aus ebendieser Library herumspielen. Nachdem das Script übertragen wurde kam im Serial Monitor die Meldung "Color View Test!", aber weder die Meldung "Found Sensor", noch die Meldung "No TCS34725 found... check your connections". Es scheinte so, als ob der Sensor kein Signal über den I²C-Bus schickt.

Also haben wir gemessen, ob an SDA und SCL Spannung anliegt. Jeweils konstante 2,2V waren vorhanden. Die LED am Breakout-Board funktioniert, es scheint am Sensor, dem I²C-Bus oder dem Programm zu liegen.

Sobald im Programm die Funktion "if (tcs.begin()) {..." aufgerufen wird, geht's nicht mehr weiter. Bei anderen IF-Anweisungen wie z.B. "if (Pin 2, HIGH) {..." hat der Serial Monitor auch die Meldung "Sensor Found" ausgespuckt. Der Rest vom Programm läuft allerdings weiterhin nicht (logisch, Pin 2 hat ja nix mehr mit dem Sensor zu tun)

Wir haben den Sensor an die Analog-Pins 4 (SDA) und 5 (SCL) unserer Arduino Diecimila (AtMega328P) angeschlossen und mit +5V (Vin) und GND die Spannungsversorgung hergestellt. Rein theoretisch also alles so, wie es richtig ist.

Dennoch haben wir nach stundenlanger Fehlersuche kein Ergebnis erzielt, so wie das Programm vom Scripter kommt, funktioniert es nur bis zur "Color View Test"-Meldung. Der Sensor ist vor einer Woche, am gleichen Tag wie unser Versuch, ihn zum Laufen zu bringen, erst mit der Post angekommen, einen Defekt dessen halte ich für gering wahrscheinlich, es sei denn der Sensor hat von der Fertigung schon einen Schuss weg.

Der Sensor meldet sich übrigens auch nach Reset der Platine und anschließendem Neu-Upload des Programms nicht.

Die Diecimila wird mit USB mit Spannung versorgt und ist auch darauf eingestellt.

Könnte es sein, dass die Library-Scripte nicht 100%ig korrekt sind, oder dass der I²C-Bus auf unserem Board defekt ist? Was wären weitere mögliche Fehler und deren Lösung?

Ich würde mich über Lösungsvorschläge etc. sehr freuen :)  Vielen Dank schonmal!

LG, HighEnd


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 18, 2015, 23:33:03
Das is immer so ne Sache mit der Ferndiagnose..
Wenn die LED schonmal leuchtet, sollte die Stromversorgung stimmen.
Wie siehts denn mit der I²C Adresse der Breakout im Programm aus? Is die denn richtig definiert?


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 19, 2015, 15:24:59
Du meinst sicher diesen Teil des Codes:

Code:
/**************************************************************************/
/*!
    @brief  Reads an 8 bit value over I2C
*/
/**************************************************************************/
uint8_t Adafruit_TCS34725::read8(uint8_t reg)
{
  Wire.beginTransmission(TCS34725_ADDRESS);
  #if ARDUINO >= 100
  Wire.write(TCS34725_COMMAND_BIT | reg);
  #else
  Wire.send(TCS34725_COMMAND_BIT | reg);
  #endif
  Wire.endTransmission();

  Wire.requestFrom(TCS34725_ADDRESS, 1);
  #if ARDUINO >= 100
  return Wire.read();
  #else
  return Wire.receive();
  #endif
}

/**************************************************************************/
/*!
    @brief  Reads a 16 bit values over I2C
*/
/**************************************************************************/
uint16_t Adafruit_TCS34725::read16(uint8_t reg)
{
  uint16_t x; uint16_t t;

  Wire.beginTransmission(TCS34725_ADDRESS);
  #if ARDUINO >= 100
  Wire.write(TCS34725_COMMAND_BIT | reg);
  #else
  Wire.send(TCS34725_COMMAND_BIT | reg);
  #endif
  Wire.endTransmission();

  Wire.requestFrom(TCS34725_ADDRESS, 2);
  #if ARDUINO >= 100
  t = Wire.read();
  x = Wire.read();
  #else
  t = Wire.receive();
  x = Wire.receive();
  #endif
  x <<= 8;
  x |= t;
  return x;
}

Um ehrlich zu sein, jetzt fällt mir auf dass dort "1" und "2" drin steht, statt "4" und "5", was bei meiner Platine die I²C-Bus-Adresse wäre (AnalogIn 4 und 5) ... aber wie kann ich jetzt diese CPP-Datei korrigieren? Die ist ja bei der Library des Sensors mit dabei...

Falls du dir evtl. einen kurzen Überblick über diese Lib verschaffen willst, die komplette gibt's hier: https://github.com/adafruit/Adafruit_TCS34725


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 19, 2015, 17:29:51
Das, was du meinst, is die Deklaration der Pins .. ich meinte die Adresse des Sensors.. laut der Produktseite von Adafruit 0x29, aber die müsste ja im Programm auch irgendwo auch bestimmt werden


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 19, 2015, 17:54:30
dann vermutlich hier die 0x66:

Code:
void Adafruit_TCS34725::clearInterrupt(void) {
  Wire.beginTransmission(TCS34725_ADDRESS);
  #if ARDUINO >= 100
  Wire.write(0x66);
  #else
  Wire.send(0x66);
  #endif
  Wire.endTransmission();
}


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 19, 2015, 17:56:24
ich glaub, die solltest du auf 0x29 ändern


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 19, 2015, 18:05:40
Hab ich, tut immernoch nicht. In der .h-Datei wird diese Adresse auch als 0x29 deklariert. Alles komisch, mein Bruder und ich sind grad dabei die Wire.cpp durchzuchecken.


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 20, 2015, 04:52:38
die 0x66 muss so bleiben :D kA, wie ich drauf komme, dass das geändert werden muss.

Letzlich kanns nur daran liegen, dass der Sensor über  I²C an eurem Ardunio falsch angeschlossen is. Was isses denn für ein Arduino? Wie habt ihr das alles im Moment verkabelt? (ggfs Fotos!?)


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 20, 2015, 14:19:53
Ist eine erweiterte Diecimila, umgebaut vom Franzis-Verlag, mit dem AtMega328P. I²C-Bus ist laut beiliegendem Handbuch und laut Internet bei A4 und A5, dort haben wir den Sensor auch angeschlossen.

Fotos vom Aufbau und den technischen Daten folgen in Kürze ;)

#Edit: Hier die Bilder vom Aufbau. Technische Daten stehen drunter ;)

http://www.directupload.net/file/d/4146/q46ikura_jpg.htm
http://www.directupload.net/file/d/4146/aqv4yhek_jpg.htm
http://www.directupload.net/file/d/4146/9364mzjx_jpg.htm

Prozessor: AtMega328 (TQFP32-08)
Taktfrequenz: 16 MHz
max. Strombelastbarkeit: pro Pin 40 mA
max. Gesamtbelastbarkeit: 200 mA
Stromaufnahme der LEDs*: 3 mA pro LED
Typische Stromaufnahme ohne Last: 30 mA
Spannungsversorgung: USB oder Netzteilbuchse (7,5-14V, optimal: 9-12V)

Speicher: SRAM 2KB; Flash 32kB, mi. 10.000 Schreibzyklen, Page-Größe 128 Bytes/64 2-Byte-Worte; EEPROM: 1KB, min. 100.000 Schreibzyklen, Page-Größe 4 Bytes

SDA geht auf Pin A4 und SCL auf Pin A5, wie es auch im Handbuch der Arduino-Platine dargestellt wird.


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 21, 2015, 12:41:53
komisch ... ich seh keine Bilder :(


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 28, 2015, 16:06:59
Hm, merkwürdig. Ich schau mal, ob ich sie nochmal hochgeladen bekomm... für hier drin sind sie zu groß.

Auf den Bildern ist eigentlich auch nur das zu erkennen, was ich schon geschrieben hab:

5V Arduino -> Vin Sensor
GND Arduino -> GND (& LED) Sensor
AnalogIn 4 Arduino -> SDA Sensor
AnalogIn 5 Arduino -> SCL Sensor


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Oktober 28, 2015, 23:44:42
hm ... sieht soweit erstmal richtig aus .. dann kanns ja nur am Programm selber liegen


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Oktober 31, 2015, 07:12:27
Das komplette Programm sieht so aus:

Code:
#include <Wire.h>
#include "Adafruit_TCS34725.h"

// Pick analog outputs, for the UNO these three work well
// use ~560  ohm resistor between Red & Blue, ~1K for green (its brighter)
#define redpin 3
#define greenpin 5
#define bluepin 6
// for a common anode LED, connect the common pin to +5V
// for common cathode, connect the common to ground

// set to false if using a common cathode LED
#define commonAnode true

// our RGB -> eye-recognized gamma color
byte gammatable[256];


Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {
  Serial.begin(9600);
  Serial.println("Color View Test!");

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1); // halt!
  }
 
  // use these three pins to drive an LED
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode(bluepin, OUTPUT);
 
  // thanks PhilB for this gamma table!
  // it helps convert RGB colors to what humans see
  for (int i=0; i<256; i++) {
    float x = i;
    x /= 255;
    x = pow(x, 2.5);
    x *= 255;
     
    if (commonAnode) {
      gammatable = 255 - x;
    } else {
      gammatable = x;     
    }
    //Serial.println(gammatable);
  }
}


void loop() {
  uint16_t clear, red, green, blue;

  tcs.setInterrupt(false);      // turn on LED

  delay(60);  // takes 50ms to read
 
  tcs.getRawData(&red, &green, &blue, &clear);

  tcs.setInterrupt(true);  // turn off LED
 
  Serial.print("C:\t"); Serial.print(clear);
  Serial.print("\tR:\t"); Serial.print(red);
  Serial.print("\tG:\t"); Serial.print(green);
  Serial.print("\tB:\t"); Serial.print(blue);

  // Figure out some basic hex code for visualization
  uint32_t sum = clear;
  float r, g, b;
  r = red; r /= sum;
  g = green; g /= sum;
  b = blue; b /= sum;
  r *= 256; g *= 256; b *= 256;
  Serial.print("\t");
  Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX);
  Serial.println();

  //Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" ");  Serial.println((int)b );

  analogWrite(redpin, gammatable[(int)r]);
  analogWrite(greenpin, gammatable[(int)g]);
  analogWrite(bluepin, gammatable[(int)b]);
}

Bilderupload funzt irgendwie nicht :(


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am November 2, 2015, 23:51:23
soo .... ich hab mich mal reingelesen ...  für mich is das auch nich all zu einfach, weil ich mir das alles auch irgendwie selbst beibringe :D

hast du in der ccp noch irgendwas geändert? weiter oben hast du erwähnt, dass da "1" und "2" steht, statt "4" und "5" ..  das muss so bleiben, wie es is, weil es der Wire.requestFrom befehl ist. Der arbeitet mit bestimmten Parametern, die an der Stelle eben 1 oder 2 sein müssen :D
Du nutzt auch sicherlich den serial Monitor den die Arduino IDE bietet? Damit kann man ja sehen, was der Arduino macht (oder nich macht).


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am November 4, 2015, 18:55:50
Ich hab bereits alles wieder in den Originalzustand versetzt. Ja, ich nutze den Serial Monitor von der Arduino IDE. Baud 9600, wie im Programm auch.

Die Meldung "Color View Test!" kommt, danach passiert gar nichts mehr :( Kann man irgendwie einstellen, dass dort der aktuelle Schritt vom Programm angezeigt wird?


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am November 5, 2015, 04:06:51
so ohne weiteres geht das nich .. aber möglich ist's.

Ich hab mir bei wichtigen Dingen nen Befehl hinzugefügt. Du kannst dir also nach interessanten Schritten nen  Serial.println("Wichtiger Schritt"); Befehl einfügen. Damit siehst du, wo das Programm grade is, bzw. welcher Schritt im Moment bearbeitet wird. Ob der dann auch richtig bearbeitet wird, is erstmal ne andere Frage


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am November 5, 2015, 15:45:27
Das blöde dabei ist: An der Stelle, wo's nicht weiter geht, ist bereits ein Print-Befehl: "Color View Test!"

Ich denke mal, einen weiteren Print-Befehl direkt drunter zu schreiben ist nicht  wirklich hilfreich... scheinbar ist direkt vor oder bei der ersten if-Abfrage Feierabend.

Edit: Ist bei Serial.println das l ein kleines L oder ein großes i? Eventuell haben sich die Programmierer da ja verschrieben...?


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am November 5, 2015, 16:45:08
dann scheint der if (tcs.begin()) schon Probleme zu machen.. vielleicht meldet sich der Sensor nich zurück ..  aber dann müsste ja die Fehlermeldung kommen..

Leuchtet denn die LED beim Einschalten der Stromversorgung (oder beim Anstecken vom USB Kabel) ??


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am November 5, 2015, 17:33:52
Die LED am Sensor leuchtet sofort, wenn die Arduino-Platine Strom bekommt. PWR-LED beim Arduino ebenso. RX und TX leuchten nicht.


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am November 7, 2015, 18:11:03
hm .. verkabelung ok, stromversorung ok, programm ok ... was bleibt also? Sensor defekt?


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: OlafSt am November 8, 2015, 08:30:36
Schon mal was von Sherlock Holmes gehört ?  ;D

Wenn alles andere ausgeschlossen ist, dann muß das, was übrig bleibt - auch wenn es noch so unwahrscheinlich ist - die Wahrheit sein.

Der Sensor ist gehimmelt, das habe ich schon nach dem 2. Post befürchtet. Aber da ich von Adruinos nicht viel verstehe, hab ich mich rausgehalten...


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am November 8, 2015, 16:35:52
die Sache mit dem gehimmelten Sensor dacht ich mir auch von anfang an, aber bevor man Geld für was neues ausgibt, sucht man erstmal alle kostenlosen Fehlerquellen ab (zumindest mach ich das immer ) ;)


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am November 28, 2015, 07:21:55
Moin,

hab jetzt einen Ersatz-Sensor vom Händler bekommen, mit dem es ebenfalls nicht funktioniert. Dass 2 Sensoren kaputt sind, halte ich für unwahrscheinlich, da wär dann bei einer kompletten Charge was schief gelaufen.

Aus Interesse hab ich das Ganze nochmals ohne Sensor getestet. Hier sollte laut Programm dann im seriellen Monitor angezeigt werden, dass der Sensor nicht gefunden wurde. Pustekuchen, außer "Color View Test!" steht gar nichts dran. Es scheint also entweder am Board oder an der Library bzw. den Programmbeispielen zu liegen. Aufgrund dessen, dass ich bis jetzt schon problemlos einige andere Dinge mit dem Board programmiert habe, liegt die Vermutung nahe (@OlafSt: Auschlussverfahren, Sherlok usw... jap, ich kenn das tatsächlich ;) ), dass irgendwas im Programm übersehen wurde.

Weitere und mit meinem Wissensstand letzte Möglichkeit wäre, dass der I²C-Bus vom Board nen Hau hat (mein Wissensstand ist was Arduino angeht noch nicht sehr fortgeschritten, korrigiert mich daher bitte, wenn ich falsch liege und es noch mehr Möglichkeiten gibt! ;)). Da mein Bruder mittlerweile die gleiche Platine hat, können wir das mal testen. Ich hoff, dass es nur am Script liegt.


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Dezember 12, 2015, 20:35:58
Problem gelöst: Die Platine hat nen Jumper um die 20 Onboard-LEDs zu (de-/) aktivieren. Durch die LEDs am I²C wurde zu viel Spannung vom Bus abgegriffen und dadurch hat der komplette Bus nicht richtig arbeiten können. Einfach die Brücke abziehen und schon hat das Ganze funktioniert. Dass man wegen einer Jumperbrücke insgesamt 4 Tage verschwenden kann...  ;D

War auf jeden Fall cool, den SCL auf dem Oszi zu sehen, mal was anderes als eine normale Sinuskurve  ;)


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Dezember 13, 2015, 21:37:41
nen Jumper ???  wo is der denn?


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: HighEnd am Dezember 14, 2015, 03:12:28
Man darf nicht vergessen, dass es sich bei der Platine um eine spezielle Anpassung einer Diecimila handelt, die um Lichteffekte erzeugen zu können mit 20 SMD-LEDs ausgestattet ist. Der Jumper befindet sich neben dem USB-Port.

Bildchen: http://media-franzis.e-load.de/sgallery-media/initial/d-gallery/gib/default/179901/65130-1-LP-Lichteffekte-Arduino-platine.jpg


Titel: Re: [Arduino] Problem mit Adafruit TCS34725 Farbsensor
Beitrag von: Davemoon am Dezember 16, 2015, 05:59:51
oh mann :D  da wär ich ja nie drauf gekommen  :bestens:


© 2001-2022 MODDING-FAQ FORUM | SMF
Alle Rechte vorbehalten.