Ich habe bei meinem laufenden Projekt ein Problem. Basis ist ein mega8L.
Ich messe eine Frequenz am ICP mit Timer1. Timer0 ist ein
allround-Timer, den ich zur Tonausgabe (Tonöhe abhängig von einer
bestimmten gemessenen Frequenz), Länge der Ausgabe, Länge der Pause etc.
nutze.
Die gemessene Frequenz kommt von einem Farbsensor und liegt zwischen 20
Hz und 6,5 kHz (Messung läuft super und auch genau). Jetzt muß ich aber
noch meine Meßstelle mit einer gedimmten weißen LED beleuchten, um die
Werte zu normieren. Erster Gedanke war: pwm. 2. Gedanke war, da Timer1
schon die Frequenzmessung macht, SOFT-PWM (ist ziemlich gefrickelt
geworden).
Nach Tastendruck wird 10x die f gemessen und aufs LCD geschrieben sowie
der
PWM-reload-Wert angepaßt.
Der Test ergab: diese Methode versaut mein Timing und somit die
Frequenzmessung.
Jetzt die Frage:
- Wäre es gut, einen externen DAC zu nutzen (440Hz-2,8kHz, sinus-signal)
und
wenn ja, welchen?
- Soll ich auf einen mega162 migrieren, der ja 2 16-Bit-Timer hat?
- Gibt es da nicht noch einen 8-Bit-Timer, der die Soft-PWM machen kann,
ohne, daß er mich zusehr nervt. (leider muß ich halt gleichzeitig
beleuchten wie messen.)
Vielen Dank.
sorry daß mein code so broken aussieht.
@ Sebastian (Gast)
>Ich messe eine Frequenz am ICP mit Timer1. Timer0 ist ein>allround-Timer, den ich zur Tonausgabe (Tonöhe abhängig von einer>Werte zu normieren. Erster Gedanke war: pwm. 2. Gedanke war, da Timer1>schon die Frequenzmessung macht, SOFT-PWM (ist ziemlich gefrickelt>geworden).
Und was ist mit Timer 2?
>- Wäre es gut, einen externen DAC zu nutzen (440Hz-2,8kHz, sinus-signal)>und
?? Willst du die LED statisch mit PWM dimmen oder dynamisch damit einen
Sinus generieren?
>- Soll ich auf einen mega162 migrieren, der ja 2 16-Bit-Timer hat?
Man kann mittels Output Compare auch auf Timer 1 noch PWM machen.
Parallel zu ICP.
MFG
Falk
Hmm,
ich wußte nicht, daß man das parallel auf einem Timer nutzen kann.
Könntest Du mir da ein paar code-Brocken schicken?! Mit den Timern tue
ich mich recht schwer.
@ Sebastian (Gast)
>ich wußte nicht, daß man das parallel auf einem Timer nutzen kann.>Könntest Du mir da ein paar code-Brocken schicken?! Mit den Timern tue>ich mich recht schwer.
Was für eine PWM willst du denn? 8/10/12/16 Bit? PWM Frequenz?
MFG
Falk
Hi,
eine 8-Bit PWM erscheint mir ausreichend. Ich möchte nur halbwegs
gleiche Bedingungen für meine Farbwertmessung schaffen.
Was die Frequenz angeht - hmm ich arbeite mit 4 MHz CPU-Takt. Die LED
sollte auch am dunkleren Ende nicht flackern aber es muß nicht
wahnsinnig schnell sein.
Mach keine fertige Applikation, mir reichen Anhaltspunkte. Ich dachte
bisher, daß der Timer durch die Nutzung mit dem Flankenfang belegt ist
und ich nun keinen mehr frei habe. Ich muß auch gestehen, daß ich die
eingebaute PWM noch nicht richtig zum Laufen gekriegt habe. Vielleicht
würde dazu schon ein Bsp reichen (initialisierung und start).
vielen dank
Ich beschäftige mich auch gerade mit der Farbeerkennung. Ein weiße LED
ist als Beleuchtung dazu problematisch, da das Spektrum meistens kaum
rot enthält. Eventuell sollte noch je eine rote und grüne LED dazu. Wenn
der Farbsensor nicht mit flackerndem Licht zurechtkommt, muß eventuell
die Spannung an der LED noch geglättet werden.
Ich kenne den Farbsensor zwar nicht, aber wegen des Spektrums der LED
wird die Farbmessung keine wirklich normgerechten Farben liefern können.
D.h. 2 Farben die für deinen Sensor gleich aussehn, können unter einer
normalen Glühbirne oder bei Sonnenlicht verschieden aussehen. Bekanner
ist der Effekt umgekehrt, also Farben die bei Sonneenlicht gleich
aussehen, können unter einer Leuchtstoffröhre verschieden aussehen.
Ich benutze übrigens verschieden LEDs (zur Zeit 10) als Beleuchtung und
eine normale Photodiode, um verschiendene Wellenlängen zu unterscheiden.
Funktioniert eigentlich schon ganz gut, nur der Abstand zur Probe ist
noch etwas kritisch.
@ulrich:
ja mit einzelnen Photodioden habe ich auch angefangen aber das war arg
komplex, brauchte ne stabile v- und war unmöglich abzugleichen. Ich
nutze jetzt den taos tcs230 von conrad. Das Ding hat allerdings ne
Frequenz statt ner Gleichspannung als Ausgang - daher etwas aufwendiger.
Intern ein Viertel ohne, und drei mit R B G Filtern. TTL adressierbar
und 5V/3,3V als Vcc.
Daß die weiße Led ein "verbogenes" Spektrum liefern hab ich schon
festgestellt aber ich hoffe, daß ich es mit Referenzwerten später
rausrechnen kann. Ich will ja keine RAL-Farbe erkennen und die passenden
Werte liefern sondern eher den "supjektiven" Farbeindruck meines Gerätes
dann als Piepser ausgeben. Und das Gerät sieht ja dann jedes Meßobjekt
auf die gleiche Art.
@ Sebastian (Gast)
>eine 8-Bit PWM erscheint mir ausreichend. Ich möchte nur halbwegs>gleiche Bedingungen für meine Farbwertmessung schaffen.
Na dann wirds ja noech einfacher! Die kannst du entweder mit dem freien
Timer 2 oder parallel mit dem Timer 0 erzeugen. Das Datenblatt sagt wie.
BEi 4 MHz CPU-Takt hast du 15kHz PWM-Freqeunz, da flackert GAR NICHTS.
MFG
Falk
Hallo,
weitere Fragen nach Studium des Manuals vom mega8:
Wenn ich den Timer1 freilaufend nutze, um meine Frequenz über icp zu
messen, kann ich ihn doch nicht gleichzeitig als 8-Bit-PWM-Modulator
nutzen, da TCNT1 dann nur bis 255 und wieder zurück läuft und somit
meine TCNT1 -> ICR1 Übernahme gestört wird, oder?
init code dazu:
TCCR1B = (1<<ICES1) | (1<<CS10); //ICP nutzen, Timer1 mit f_cpu
TIMSK = (1<<TICIE1) | (1<<TOIE1) | (1<<TOIE0); //ICP, TOVflow, T0 für
was anderes
TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8-Bit PWM, invert.
OCR1A = 128; //PWM 50:50 an/aus (jetzt mal als Bsp.) ->darin sehe ich
das Problem
Wenn ich Timer2 zur Erzeugung meines PWM-Signals nutze, kommt nach DDRx
Definition das Ergebnis an OC2 raus. Dieses Pin wird aber auch von der
SPI-Schnittstelle genutzt, über welche ich den uC programmiere. Kann ich
diesen Ausgang als PWM-Ausgang nutzen während die SPI-Schnittstelle laut
Fuses aktiviert ist? Ich kann die ja schlecht abschalten, wenn ich mich
nicht aussperren will.
Vielen Dank schonmal!
@ Sebastian (Gast)
>Wenn ich den Timer1 freilaufend nutze, um meine Frequenz über icp zu>messen, kann ich ihn doch nicht gleichzeitig als 8-Bit-PWM-Modulator>nutzen, da TCNT1 dann nur bis 255 und wieder zurück läuft und somit>meine TCNT1 -> ICR1 Übernahme gestört wird, oder?
Ja, das geht nicht. Aber du hast ja noch zwei andere Timer.
>Wenn ich Timer2 zur Erzeugung meines PWM-Signals nutze, kommt nach DDRx>Definition das Ergebnis an OC2 raus. Dieses Pin wird aber auch von der>SPI-Schnittstelle genutzt, über welche ich den uC programmiere. Kann ich
Ja und? Das machst du doch nicht im laufenden Betireb.
>diesen Ausgang als PWM-Ausgang nutzen während die SPI-Schnittstelle laut>Fuses aktiviert ist?
Sicher.
>Ich kann die ja schlecht abschalten, wenn ich mich>nicht aussperren will.
Besser ist das. Aber die kann man sowieso nur per HV-Programmierung
löschen.
MFG
Falk
Hi,
hab mir ein kleines Testprogramm geschrieben, um mal TIMER2 zu testen.
Eigentlich soll es während des Laufs möglich sein, mit zwei Tasten das
Tastverhältnis zu verändern.
Irgendwas mache ich da falsch. Auch die Status-LEDs an PORT D blitzen
nur ganz kurz auf. Was hab ich vergessen?!
nabend!
Der Befehl:
sei();
zur globalen Int-Freigabe war Schuld. Jetzt geht alles super. Ich
forsche mal, was genau passiert ist. Scheinbar wird dadurch noch ein
OVF-Int oder so freigegeben und der bügelt mir meine Änderungen ständig
weg. Wenn die Frequenz ganz niedrig war, konnte man soetwas ähnliches
aus dem Verhalten der LEDs schliessen.
TNX & night.