PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Farbsensor



Justus Arnie Black
18.04.2005, 18:45
huhu

ich habe garde den Farbsensor TCS230 RGB-Sensorchip zu geschickt bekommen. Datenblatt findet ihr hier : http://www.micromaus.de/tcs230.pdf
eigentlich wolte ich einen sensor, der volt werte zurück gibt.

Ich habe einen Flash M1 von der Firma Wickenhäeuser als Microkontoller.

Meine Frage ist welche Schlatung ich beutzen kann oder muss um die um die Wete des Sensors auszulesen. Oder an welche Art von Port ich den Sensor anschließen muss.

gruß arnie black

uwegw
18.04.2005, 19:15
der sensor gibt ein rechtecksignal mit einer frequenz aus, die von der farbe abhängt. du musst also die frequenz messen, indem du sie zb auf eine interrupteingang legst dun die periodendauer misst...

Franzibua
18.06.2008, 18:55
Ich steh gerade vor dem selben Problem:

ATMEGA8 zum auslesen, TCS230 als Farbsensor und 3 LEDs als Lichtquellen.

Ist das Auswerten (=Periodendauer messen) nur an den Interrupt Eingängen möglich (oder bezog sich das auf den Flash M1)???

mmg
Franz

Besserwessi
18.06.2008, 21:00
Es hätte gereicht einen der alten tasks zur Farberkennung wiederzubeleben.

DAs Problem scheint also das auslesen des Farbsensors TCS230 zu sein, der ein Frequenzsignal ausgibt. Die Frequenz kann man entweder durch zählen der Flanken in einer festen Zeit (z.B. 0.1 s) oder durch stoppen der Zeit für eine Feste Zahl von Perioden (z.B. 1 oder 100) bestimmen. Die Frequenzen, die der Sensor ausgibt, sind so das man beim Mode mit den hohen Frequenzen wohl besser das Pulse Zählen wählen sollte, denn ohne extra Hardware wird das zu schnell sein um die Zeiten zu messen. Bei der Niedrigen Frequenz könnte man schon die Zeiten für Flanken indiwiduell messen und daraus die Frequenz bestimmen. Das 2.te verfahren ist aufwendiger, in der Regel sollte man aber damit mehr Auflösung oder ein schnelleres Ergebnis kriegen. Für die Farbmessung sollte das Zählen der Flanken reichen. Wie man das genau macht hängt vom verwendeten Controller ab. Oft gibt es einen Eingang zum Zählen von externen Flanken, der gerade für diese Funktion gedacht ist.

Franzibua
25.06.2008, 19:32
Hallo,

Erstmal sry, war wohl etwas übermotiviert 8-[

Hätte mich urspruenglich für das Messen der Dauer eines Impulses festgelegt (wovon du bei höhern Frequenzen ja ablehnst):
Dachte an eine Schleife die den Controller mal mit Nichts tun beschäftigt bis er auf eine positive Flanke stößt. Der Timer wird gestartet, es folgt Nichtstun solange High. Bei der negativen Flanke stoppt er den Timer, ermittelt daraus die (Periodendauer) Frequenz.

Hab natürlich schon bisschen gestoebert, weiß desshalb auch bezüglich Overflow und Prescaler bescheit (oder hoffe zumindest). Ich haben aber dann trotzdem irgendwann den Überblick verloren. Speziell das Einstellen des Timers und die Verwendung des Timers als Counter sind für mich Neugebiet.

mmg Franz

Besserwessi
25.06.2008, 19:52
Es spricht nichts gegen die Methode mit der Messung der Periodendauer. Man sollte dann aber den Modus mit der Niedrigen Frequenz wählen. Wenn man ein schnelles ergebnis haben will ist das Verfahren definitov das bessere.
Der Weg mit der kurzen Schleife, die auf die Flanke wartet gibt eine unsicherkeit von einer Schleifenlänge. In Assembler sind das wohl 3 bis 5 zyklen in C wohl etwa mehr. Für die genaue Zeitmessung gibt es sonst noch die "input capture funktion" damit kann man Zeiten auf einen Zyklus genau messen. Da die Zeiten hier relativ kurz sein werden, kommt man auch ohne Überlauf aus. Man kriegt da bei jeder Flanke (der einen Sorte) einen Interrupt und den Zählerstand zu der Zeit. Man berechent einfach die Differenz zur letzten Zeit und hat dann sofort die Perioden dauer.

Franzibua
29.06.2008, 21:47
input capture funktion nicht möglich -> kein ICP Eingang frei

Besserwessi
29.06.2008, 22:09
Die Input capture funktion kann man auch über den komperator nutzen. Damit sollten auch die AD kanäle gehen.
Wenn die ICP funktion nicht geht, dann ist die Methode mit dem warten auf die Flanken und dem timer zur messung wohl das beste. Eventuelle solle man zwei gleiche Flanken auswählen oder sogar etwas mehr als eine Periode messen. Eventuell sollte man das Warten auf die Flanke in Assembler schreiben, damit die Schleife möglichst kurz wird.

robocop78
22.08.2008, 10:34
Hi,
habe ein Projekt gesehen, das zum Thema paßt:

http://gruste.npage.de/

Der hat ein Farberkennungssystem für Blinde damit gebaut.

ciao
robocop78