Guten Tag zusammen,
ich habe mal wieder ein problem =)
Ich möchte den ADC eines ATTINY84 konfigurieren, sodass eine LED an PA2
angeht, bzw irgendwie action macht^^, wenn die Mikrofonkapsel etwas
empfängt. (die LED ist im schaltplan als kondensator dargestellt, nicht
beirren lassen hehe). dafür habe ich mir eine verschaltung aus dem
internet gesucht, bei der ich hoffe dass sie für meine anwendung
ebenfalls funktioniert.
verwendete Bauteile
Mikrofonkapsel EM-6 von
http://www.conrad.de/ce/de/product/302147/MIKROFONKAPSEL-EM6/SHOP_AREA_17390&promotionareaSearchDetail=005
NPN transistor MMBT4401:
http://www.fairchildsemi.com/ds/2N/2N4401.pdf
als erstes stellt sich natürlich die frage, ob die schaltung überhaupt
funktioniert. wenn dem so ist, wie muss ich den ADC7 (PA7)
konfigurieren?
meine bisherigen überlegungen:
ADCSRA = (1 << ADEN) | (1 << ADPS1) | (1 << ADPS0);
//enable ADC, set prescaler to 8
ADMUX = 7;
bisher habe ich aber noch keine ergebnisse erzielt.
Grüße
Martin
hmmm habe es jetzt hinbekommen, dass wenn ich klatasche und schnipse
sich etwas an der LED tut.... aber wenn musik läuft reagiert der
irgendwie net.
uint16_t get_adc() {
uint16_t value;
// warm up the ADC, discard the first conversion
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC));
value = ADCW;
ADCSRA |= (1 << ADSC); // start single conversion
while (ADCSRA & (1 << ADSC)); // wait until conversion is done
return ADCW;
}
int main( void )
{
................(codeteile fehlen)
ADMUX = 7; //VCC used as analog reference, disconnected from PA0
(AREF), ADC7 enable
ADCSRA |= (1 << ADEN) | // enable ADC
(1 << ADPS1) | (1 << ADPS0); // set prescaler to 8
for (;;)
{
if (get_adc() > 250)
{
Ledport |= (1 << LED_PIN);
else
Ledport &=~(1 << LED_PIN);
}
}
}
wie kann ich denn zum beispiel sagen, dass bei einer bestimmten frequenz
ein bestimmtes event passiert?
Du hast das Problem, dass der Ruhepegel am Kollektor nicht genau bekannt
ist und schwanken kann (hängt von der Verstärkung des Transistors ab).
Das Nutzsignal ist ja eine Wechselspannung, mit der der Ruhepegel sich
ändert. Daher weiß die SW nicht, wie groß Dein Nutzsignal ist, und Dein
Vergleich mit 250 ergibt eher ein Zufallsergebnis. Beim Klatschen hat es
gereicht, weil das ein kurzer, hoher Impuls ist. "Normale" Musik reicht
da wohl eben nicht.
Lösungen:
1. Ruhepegel per SW ermitteln: mehrere Messungen machen und Mittelwert
bilden
2. Ausgang kapazitiv entkoppeln: C zwischen Kollektor und ADC-Eingang +
(hochohmiger) Spannungsteiler zw.+5V und GND an den Eingang, um eine
bekannten Ruhepegel stabil festzulegen (am besten auf halben Wert der
Referenzspannung).
Die SW vergleicht dann mit dem Wert "Ruhepegel + (oder-) Schwelle".
Gruß Dietrich
hello =)
danke für deine auskunft. das klingt ja kompliziert... =)
muss ich mir mal genauer anschauen.
allerdings gibt es auf der homepage von der ich diese idee habe ein
video, wo bei selber verschaltung eine interaktion mit musik möglich
ist....
http://tinkerlog.com/2007/05/20/cheap-sound-sensor-for-avr/
grüße
Oder schmeiss den Transistor raus und bau was gescheitets ein mit einem
OP.
Den kannst du dann genau auf die haelfte der Versorgungsspannung
einstellen.
Stichwort: nichtinvertierende OP Schaltung.
ahh ha =)
und wenn ich den dann auf die hälfte der versorgungsspannung geregelt
habe, kann ich dann die eizenlnen frequenzbereiche grob ansteuern, so
wie eine art equilizer ? das wäre nämlich ziemlich cool dass ich z.b
sagen könnte bei niedrigen frequenzen kommt der effekt, bei hohen
der....?
kennt jemand gute beispiele? vlt wurde so etwas ja schonmal gebaut =)
grüße
Martin K. schrieb:> ahh ha =)> und wenn ich den dann auf die hälfte der versorgungsspannung geregelt> habe, kann ich dann die eizenlnen frequenzbereiche grob ansteuern, so> wie eine art equilizer ?
möglich ist es. Aber nicht so wie du dir das vorstellst.
Aus deinem ADC kommen ja keine Frequenzen raus, sondern Spannungswerte,
die sich mit der Zeit ändern (schnell ändern). Die Frequenz bzw. die
Mischung der im Signal enthaltenen Frequenzen steckt in dieser
zeitlichen Änderung. Und die kann man rausholen. Zb mit einer FFT.
> kennt jemand gute beispiele? vlt wurde so etwas ja schonmal gebaut =)
wurde es. Geh in die Codesammlung und such nach
[C] AVR-Lichtorgel per FFT MEGA8 32 644
Martin K. schrieb:> allerdings gibt es auf der homepage von der ich diese idee habe ein> video, wo bei selber verschaltung eine interaktion mit musik möglich> ist....>> http://tinkerlog.com/2007/05/20/cheap-sound-sensor-for-avr/
Ich vermute, da wurde der Vergleichswert (dort 180) durch ausprobieren
ermittelt. Du kannst allerdings auch die (Ruhe-) Spannung mit einem
(hochohmigen) Multimeter messen und daraus Deinen Vergleichswert
errechnen. Aber so richtig toll ist das nicht, da das z.B. auch
Temperaturabhängig ist.
Gruß Dietrich
Martin K. schrieb:> hmmmm alsooo kriegt denn mein ATTINY84 die FFT gebacken....?> oder muss ich da auf atmega wechseln?
Wenn es sich nur um 3 Frequenzbaender handelt wuerde ich dir 3 Digitale
Filter vorschlagen. Bedenke aber das du mindestens doppelt so hoch
abtasten muss wie deine hoechste Signalfrequenz. Wie hoch willst du denn
in der Frequenz gehen?
Martin K. schrieb:> hmmm naja so 14k wäre schon ganz nett =)
Da wird es aber langsam eng. Das wuerde mindestens 28KHz Abtastrate
bedeuten.
Mit maximaler Aufloesung (10Bit) kann er das aber nicht. Auch sollte
noch etwas Rechenzeit ueberbleiben fuer die Filterberechnung. Du must ja
wenn du 3 Frequenzbaender trennen willst ja 3 Filter aufbauen
(LOW,BAND,HIGH) nach den Filtern musst du noch die Amplitude
(Huellkurve) des Signales bestimmen also eine Gleichrichtung vornehmen.
hmmmm ist die variante mit der verstärkerschaltung nicht besser...?
dann mit der FFT von elm chan z.B. auswerten? sonst müsst ich ja frei
filter in meiner schaltung packen.
Da ist dann die frage ob die FFT funktion auf dem tiny läuft, da sie für
atmega optimiert ist....
Außerdem habe ich keinen plan von verstärkern, welchen nimmt man denn da
am besten.... ^^?
grüße
ich habe im übrigen noch folgende verschaltung im anhang entdeckt,
die auch grob Ihren job tut. ich schätze mal nicht so gut wie mit OP's
aber .... okay =)
hier verstehe ich nicht, auf welchen wert der Regelbare Widerstand
eingestellt werden sollte, und wie man die widerstandswerte ausmacht...
vlt kann jemand dazu etwas sagen? =)
grüße
Martin K. schrieb:> Außerdem habe ich keinen plan von verstärkern, welchen nimmt man denn da> am besten.... ^^?
Fuer deine Zwecke sollte es ein TS912/Ts914 tun.
Martin K. schrieb:> ich habe im übrigen noch folgende verschaltung im anhang entdeckt,> die auch grob Ihren job tut. ich schätze mal nicht so gut wie mit OP's> aber .... okay =)>
Der die Schaltung entwickelt hat , hat von Transistorverstaerker keine
Ahnung.
> hier verstehe ich nicht, auf welchen wert der Regelbare Widerstand> eingestellt werden sollte, und wie man die widerstandswerte ausmacht...> vlt kann jemand dazu etwas sagen? =)
Da bei dieser Schaltung werder der Arbeitpunkt noch die Verstaerkung der
Schaltung definiert ist und von den Transistorparameter sehr stark
abhaengig ist kann man das nicht sagen.
Die thermische Stabilitaet des Arbeitspunktes ist bei dieser Schaltung
nicht gegeben weil sie keine Gegenkopplung hat.
Entwerder Emitterwiderstand mit vorsehen oder Gegenkopplung Kollektor
nach Emitter.
Verbesserte Version:
--------+-----------+--- VCC
| |
R1 RC
| |
| +--- Ausgang
| |
| C
--CK----+--------B NPN
| E
R2 |
| +---R3---
| | |
| RE CE
| | |
GND GND GND
Als ersters geben wir mal einen Kollektorstrom vor also:
IC = 2mA , VCC = 5V
An RE sollte so rund 0.5 .. 1V abfallen zur Temperaturstabilisierung.
Und an RC sollte moeglichst eine hohe Wechselspannung abfallen.
Dann koennen wir mal anfangen zu rechnen:
RE = URE/RE = 0.5V/2mA = 250 Ohm
Der Rest der Spannung bis VCC soll sich fuer hoechste Aussteuerbarkeit
gleichmaessig auf CE und RC verteilen
Also: URC = (VCC-URE)/2 = (5V-0.5)/2 = 2.25V
Jetzt koennen wir RC bestimmen:
RC = URC/IC = 1125 Ohm
Der Spannungsabfall an R2 ergibt sich damit:
UR2 = URE+UBE = 0.5V+0.7V = 1.2V
und an R1
UR1 = VCC - UR2 = 3.8V
Der Basisstrom ergibt sich zu:
IB = IC / B wir nehmen ein B von 300 an (BC547C)
dann wird IB = 6.6uA
Damit der Spannungsteiler aus R1 u. R2 unabhaengig vom Basisstrom wird
der ja auf Grund der hohen Streuung von B nicht eindeutig bestimmt
werden kann
waehlen wir ihn ca. 5 .. 10x Groesser als IB.
Fuer die weitere Rechnung setzen wir ihn auf 5x IB fest.
Also ergibt sich fuer IR2 = IB * 5 und fuer R1 = IB*6
*6 deshalb neben dem Querstrom fliesst ja noch der Basisstrom ueber ihm.
Jetzt koennen wir R1,R2 berechnen.
R1 = UR1/(IB*6) = 95KOhm
R2 = UR2/(IB*5) = 36KOhm
Damit ist die DC Einstellung des Transistors abgeschlossen.
Jetzt berechnen wir die Signalverstaerkung ohne R3 des Transistors.
Das ergibt sich aus dem Verhaeltnis von Kollektor zu Emitterimpedanz.
Im Kollektor liegt ohne Last ein Widerstand von 1125 Ohm
Im Emitter liegt ein Widerstand von RE + re.
re ist hier der differentielle Emitterwiderstand.
Er wird folgendermassen berechnet:
re = UT / IC
UT ist die sogenannte Temperaturspannung mit 25mV bei Raumtemperatur
Damit wird re = 12.5 Ohm
Sie ist Temperatur und Stromabhaengig.
Damit ergibt sich eine Versaterkung von
V = 1125Ohm / (250 + 12.5) = 4.28 fach.
Das heist fuer die Temperaturstabilitaet ergibt sich:
Die UBE Spannung sinkt mit 2mV/K das mal 4fach.
Die Spannung am Kollkektor aendert sich mit 8mV/K
Waere der RE jetzt nicht drin wuerde der Transistor nicht gegengekoppelt
und wuerde mit einer hoeheren Verstaerkung arbeiten.
V = 1125 /12.5 = 90.
Das heist in diesem Fall die Kollektorspannung aendert sich mit 180mV/K
Das ist wesentlich empfindlicher.
Will man jetzt mehr Verstaerkung als die 4.28 haben und trotzdem die
Stabilitaet behalten kann man den RE jetzt Wechselspannungsmaessig
ueberbruecken. Das mach in diesem Fall CE. Man koennte ihn jetzt so
gross machen das sein Wechselstromwiderstand kleiner als 12.5 Ohm wird
dann wuerde die Stufenverstaerkung auf den Wert von 90 hoch gegen.
Allerdings steigt in diesem Fall auch die Verzerrungen mit an. Auch
waere die Verstaerkung weiterhin vom Transistorwert UT abhaengig.
Also was macht man. Einen Widerstand (R3) in Reihe zum CE.
Wenn wir jetzt eine Verstaerkung von 10 haben wollen koennen wir
rechnen:
RE' = RC / 10 = 1125 Ohm / 10 = 112.5Ohm
Davon ziehen wir re ab = 112.5 - 12.5 = 100 Ohm
100 Ohm muss jetzt die Parallelschaltung von RE + R3 haben.
das ergibt fuer R3 = 166 Ohm
Und fuer CE ergibt sich
CE = 1/(2*pi*fu*R3) fu = untere Grenzfrequenz (ca.30Hz)
CE = 32uF
Damit ist die Stufe dimensioniert.
uiuiui helmut.... krasse sache.
das nenn ich mal dokumentiert =)
vielen dank.
dann werd ich das mal so aufbauen und berichten, wa ... =)
dankeschön für deine hilfe =)
noch eine frage.... im datenblatt ist ja ein shematic gezeichnet,
http://www.produktinfo.conrad.com/datenblaetter/300000-324999/302147-da-01-en-Mikrofonkapsel_EM6.pdf
muss ich das mit aufbauen, und dann den ausgang auf --CK--- führen, und
den ausgang aus deiner schaltung in den uC ?