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))
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 ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.