Forum: Mikrocontroller und Digitale Elektronik Mikrofon als PWM Eingang benutzen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Luca Stürz (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo ich habe folgendes Proble
ich will mit hilfe eines Mikrofons einen Motor steuern und ihn je nach 
dem wie laut der Sound des Mikros ist schneller oder langsamer drehen 
lassen.
Code:

uint16_t ADC_Read( uint8_t channel )
{
  // Kanal waehlen, ohne andere Bits zu beeinflußen
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
  while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung 
warten
  }
  return ADCW;                    // ADC auslesen und zurückgeben
}

uint8_t change(uint8_t x, uint8_t in_min, uint16_t in_max, uint8_t 
out_min, uint8_t out_max)
{
  return (uint16_t)(x - in_min) * (out_max - out_min) / (in_max - 
in_min) + out_min;
  //                           i - 0               *  255     - 
0      /      1023  -            0      +      0
}


if ((PINC&(1<<PORTC3)) && (PINC&(1<<PORTC2)))
  {
    Micro = Sound;
    Drehzahl= change(Micro,0,1023,0,255);
    OCR0A = Drehzahl;
  }


mein bisheriger code (ohne initialisierung dachte dann wäre zu viel 
code) sieht so aus und ich weiß nicht wieso er nicht funktioniert, habe 
schonn alles mögliche probiert
(Sound wird so eingelesen Sound = ADC_Read(PortC5))

von Achim S. (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Luca Stürz schrieb:
> (Sound wird so eingelesen Sound = ADC_Read(PortC5))

ohne mir den Rest deines Codes genau angschaut zu haben - das ist auf 
jeden Fall schon mal falsch. Damit kriegst du einen Momentanwert deines 
Mikro-Signals. Der sagt aber noch nichts über die Lautstärke. Selbst bei 
einem sehr lauten Signal hat der Momentanwert immer mal wieder einen 
Nulldurchgang. Dein "Sound" ist also eher ein Zufallswert, der bei 
großer Lautstärke etwas höhere Wahrscheinlichkeit für größere Werte hat.

Um ein Maß für die Lautstärke zu erhalten, musst du über einen gewissen 
Zeitraum immer wieder Werte einlesen. Und dich dann für eine bestimmte 
"Kenngröße" für die Lautstärke entscheiden. Z.B. die Differenz zwischen 
größtem und kleinstem Wert, die du eingelesen hast. Oder der 
Effektivwert (ggf. nach Subtraktions eines Gleichanteils). Oder ...

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Luca Stürz schrieb:
> ... ich weiß nicht wieso er nicht funktioniert

Und ich weiß nicht einmal, wie er sich benimmt.
Je nach dem, wie die Schaltung zwischen deinem Mikrofon und dem 
Analogeingang aussieht, sieht der ADC ein Wechselspannung oder eine mehr 
oder weniger kräftig wackelnde Gleichspannung, deren Mittelwert 
"Totenstille" entspricht.
Verwende mal die unter Formatierung angegeben Code-Tags, damit dein 
Programm irgendwie lesbar wird.

von Luca Stürz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
1
ffffeeeetttes meeerccce

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.