Forum: Mikrocontroller und Digitale Elektronik ATTINY84 ADC und Mikrofon


von Martin R. (m-joy)


Angehängte Dateien:

Lesenswert?

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

von Martin R. (m-joy)


Lesenswert?

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?

von Dietrich L. (dietrichl)


Lesenswert?

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

von Martin R. (m-joy)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Martin R. (m-joy)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von Dietrich L. (dietrichl)


Lesenswert?

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

von Martin R. (m-joy)


Lesenswert?

hmmmm alsooo kriegt denn mein ATTINY84 die FFT gebacken....?
oder muss ich da auf atmega wechseln?

grüße

von Helmut L. (helmi1)


Lesenswert?

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?

von Martin R. (m-joy)


Lesenswert?

hmmm naja so 14k wäre schon ganz nett =)

von Helmut L. (helmi1)


Lesenswert?

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.

von Martin R. (m-joy)


Lesenswert?

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

von Martin R. (m-joy)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Martin R. (m-joy)


Lesenswert?

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 ?

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.