Hallo, ich habe nur ein Grundverständnis von Mikrocontrollern; ich möchte lernen und bin für Beantwortungen dankbar. Ich habe bereits mit einem RFID Tag überlegt die Übertragung nach ISO Norm über einen Mikroprozessor aufzubauen, was theoretisch möglich sein müsste und von mir ggf. noch experimentell gemacht wird (da brauche ich aber keine weitere Hilfe zu). Nun sollte es doch auch, nebst der in Microcontrollern eingebauten Analog-Digital-Wandler, vor allem in Anlehnung an frühere Generationen von Microcontrollern, wo man den A/D Wandler noch nicht im Chip integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen. Ich bekomme, beispielsweise als Musik, div. Sinuskurven die sich überlagern geliefert und muss diese jetzt digitalisieren. Dazu werde ich, laut meiner theoretischen Überlegung, den Wert der in der Zeiteinheit zu hörenden Sinuskurven (mehrere oder der gemeinsamen?) in digitale 0101010 Bit-Schreibweise umwandeln müssen. Ein IC A/D macht dies über integrierte Schaltkreise. Wie würde das mit einem Microcontroller aussehen? Wäre dieser hypothetisch genau so schnell? Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr schwierig vor. Für einen Ausblick, auch und vor allem in die Funktionsweise der Zeiteinteinheit und Umsetzung mit Bezug zu Audio-Signalen und eine Erklärung, die ich verstehe, bedanke ich mich im Voraus. Mit freundlichem Gruß, Freewarehookie
:
Bearbeitet durch User
"Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr schwierig vor." Gucken wie viel Samples pro Sekunde der jeweilige AD Wandler liefern kann. Die Sampels musst du ja auch abholen, also wenn es extern über SPI/I2C/Parallel ist musst du die Datenrate auch entsprechend hoch haben. Für audio brauchst du ja eventuell 40kHz. Und ca 12 bits. Dass heisst dann 40kSamples/Sec und jeweils 12 bit (mono). 12bits sind leider 2 bytes meist. 80kByte/sec. I2C mit 100kHz wird vermutlich eng werden, eher so 400kHz oder noch mehr. SPI gleich. Parallel ist ja auch gleich wobei hier hast ja meist 8 oder 12 oder 16 bit zum übertragen. Dann muss der uC intern alles noch verarbeiten können. Wenn der AD Wandler im uC selbst ist, dann hast ja nur ein Interrupt oder musst ein Fifo Ringspeicher lesen. Interrupt mit 40kHz sollte machbar sein. Wird aber an anderen Stellen probleme machen. Würde lieber hier ein AD Wandler haben der einen Ringspeicher füllt. Dann alle X ms ein Interrupt und die Datenreihe abholen. Suche dir doch eine uC mit internen AD Wandler. Wird viel einfacher. https://www.olimex.com/Products/PIC/Development/PIC32-EMZ64/open-source-hardware Hier das Ding hat Audio Input und Output. Ist zwar limitiert aber ich meine damals konnte ich da MP3 zurückspielen. War halt mit 8 bit. Aber immer hin. Den AD Wandler habe ich nicht ausprobiert. Kannst mal machen :)
Moin, hast du dir mal angeguckt welche Methoden es für eine Analogmessung gibt? Klar kann man das auch auf einem uC selber implementieren. Viel zeitintensiver/kritischer ist aber die Auswertung via DFT. Umso höher die Abtastung sein muss (>2f) desto mehr Systemtakt brauchst du. (Der ADC muss dann natürlich auch mitkommen)
> integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für > Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen. DAs ist theoretisch kein Problem, praktisch nicht moeglich. Bei Audiosignalen legst du wert auf wenigstens 96dB Rauschabstand bei mindestens 44.1khz Samplerate. Es gibt sogar Leute die glauben mehr zu brauchen. Das kann man aber nicht in einen Mikrcontroller integrieren weil dessen Herstellungsprozess auf digitale Logic optimiert ist. Das sind die ueblichen 12-14Bit das maximum und selbst da musst du schon sehr aufpassen das dir der laufende Digitalteil nicht stoerungen in den Analogteil rueberkoppelt. Wer das nicht glaubt muss nur mal die AD oder DA-Wandler bei den gaengigen STM32 genauer anschauen und sieht dann wie schwer sich der Hersteller da schon tut. Wenn du dagegen sowas mit einem externen Wandler aufbaust duerfte es etwa 10x einfacher sein als in einem Controller. Trotzdem werden die meisten hier das nicht schaffen. 16Bit Rauschabstand ist etwas anderes als zwei Arduinoboards zusammenstoepseln. Olaf
Zwei Zahlen, die du brauchst: - Samplingrate vom ADC - Abtastheorem nach Shannon/Nyquist-Grenze Ersteres ist abhängig von deinem Mikrocontroller und dessen AD-Wandler. Zweiteres beschreibt die maximale Frequenz, die dein Audio-Signal in Abhängigkeit der Samplingrate haben kann. Es gibt Controller (besonders DSPs), die problemlos mit Audio klarkommen. Ein 8bit-Atmel-AVR eher nicht. Und AD-Wandler in Controllern sehen im Prinzip genau so aus, wie ADC-ICs. Nur halt auf dem gleichen Die.
Kai S. schrieb: > Ich bekomme, beispielsweise als Musik, div. Sinuskurven die sich > überlagern geliefert und muss diese jetzt digitalisieren. Naja, eine sehr akademische Beschreibung. > Dazu werde ich, laut meiner theoretischen Überlegung, den Wert der in > der Zeiteinheit zu hörenden Sinuskurven (mehrere oder der gemeinsamen?) > in digitale 0101010 Bit-Schreibweise umwandeln müssen. Dito. > Ein IC A/D macht dies über integrierte Schaltkreise. > Wie würde das mit einem Microcontroller aussehen? Praktisch genau so. > Wäre dieser > hypothetisch genau so schnell? Ja. Auch praktisch, wenn gleich natürlich die AD-Wandler in Mikrocontrollern im Allgemeinen nicht so vielfältig und schnell sind wie die unzähligen diskreten AD-Wandler. > Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit > in Binärcode umzuwandeln, oder? Nö. > Zumindest stelle ich mir dies als sehr > schwierig vor. Falsche Vorstellung. Der AD-Wandler des AVR schafft 15.000 Umwandundlungen pro Sekunde, spricht 15ksps (kilo samples per second) mit 10 Bit Auflösung. Wenn man will, geht noch mehr, dann aber mit reduzierter Auflösung. Diskrete AD-Wandler schaffen 100ksps- viele Msps, die richtig schnellen mehrere Gsps (ja, Giga samples per second, Milliarden Meßwerte pro Sekunde!). > Für einen Ausblick, auch und vor allem in die Funktionsweise der > Zeiteinteinheit und Umsetzung mit Bezug zu Audio-Signalen und eine > Erklärung, die ich verstehe, bedanke ich mich im Voraus. Die etwas größeren 32 Bit Controller haben oft einen AD-Wandler, der je nach Typ 10-12 Bit Auflösung bei einigen hundert ksps bis wenige Msps schafft. Beispielsweise der PICCOLO, der schafft ca. 4,6Msps. Damit kann man Audio mit z.B. 44,1kHz digitalisieren. Diverse STM32 und viele andere können das auch, ggf. sogar besser. Der ADC arbeitet im Großen und Ganzen selbstständig, d.h. die CPU hat nichts zu tun, um die AD-Wandlung durchzuführen und nicht viel zu tu, um die Daten abzuholen und zu speichern. Beim kleinen AVR muss das die CPU noch für jeden Meßwert selber machen, bei größeren Controllern macht das ein DMA Kanal selbstständig.
Kai S. schrieb: > Ein IC A/D macht dies über integrierte Schaltkreise. > Wie würde das mit einem Microcontroller aussehen? Genau so: über einen im µC integrierten Schaltkreis. > Wäre dieser hypothetisch genau so schnell? So schnell wie was sollte der denn hypothetisch sein müssen? > Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit > in Binärcode umzuwandeln, oder? Ja, in der Tat. Da haben schon einige tausend Ingenieure viele Millionen Mannstunden damit zugebracht. Allerdings haben die gute Arbeit gemacht und du bekommst inzwischen fertige Wandler, die recht einfach anzuwenden sind. Und "Echtzeit" bedeutet ja nur, dass du ein schneller sein musst als die höchste Frequenz, die du erfassen willst. Bei Audio reichen da 44kHz. > Zumindest stelle ich mir dies als sehr schwierig vor. Offenbar musst du dir mal die "Grundlagen der Signalerfassung und Signalverarbeitung" genauer anschauen. Dann entspannt sich die Sache ein wenig.
Olaf schrieb: >> integriert hatte, möglich sein, einen A/D Wandler, zum Beispiel für >> Audio-Signale (z.B. Sound-Karte) mit einem Microcontroller aufzubauen. > > DAs ist theoretisch kein Problem, praktisch nicht moeglich. Was für ein Unsinn! Natürlich geht das! > Bei Audiosignalen legst du wert auf wenigstens 96dB Rauschabstand bei > mindestens 44.1khz Samplerate. Es gibt sogar Leute die glauben mehr zu > brauchen. Nö. Du hast den CD-Standard im Kopf. Kann man machen, ist aber nicht zwingend. Man kann eine allgemeine Soundkarte auch mit 10-14 Bit bauen, auch wenn die aktuell üblichen in PCs eher 16 Bit und mehr haben.
> Nö. Du hast den CD-Standard im Kopf. Kann man machen, ist aber nicht > zwingend. Man kann eine allgemeine Soundkarte auch mit 10-14 Bit bauen, Da hast du recht. Wenn damit zufrieden ist wird vieles einfach. Und wenn man sich den Dynamikumfang heutige Musik so anschaut reichen vermutlich sogar 8Bit, aber trotzdem wenn man Audio liesst hat man erst immer so das gefuehl das es 16Bit sein sollten. :-) > Mikrocontrollern im Allgemeinen nicht so vielfältig und schnell sind wie > die unzähligen diskreten AD-Wandler. Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler. Geschwindigkeit ist nicht das Problem. Rauschabstand ist es. Oder vielleicht auch linearitaet. Und natuerlich Stoerungen aus anderen Teilen. Es gibt ja Controller wo du den Core fuer die Wandlung besser anhalten solltest wenn das letzte Bit im AD nicht wackeln soll. Olaf
1000 Dank! 1000 Dank für den Input, die weiterführenden Infos und die Erklärungen. Ich habe jetzt eine Menge nachzulesen. Die Erklärungen sind teilweise echt top! Beste Grüße, Freewarehookie
Kai S. schrieb: > Wie würde das mit einem Microcontroller aussehen? Wäre dieser > hypothetisch genau so schnell? > > Es wird doch ziemlich schwierig sein die analoge Datenmenge in Echtzeit > in Binärcode umzuwandeln, oder? Zumindest stelle ich mir dies als sehr > schwierig vor. Dann guck dir z.B. mal das Teensy4.0 Board. Das macht das nebenbei auf zwei Kanälen. https://www.pjrc.com/teensy/td_libs_Audio.html
Kai S. schrieb: > Ich habe jetzt eine Menge nachzulesen. Und falls dir die Lesestoff ausgeht, die Hersteller der µC schreiben da auch noch einiges dazu:-) z.B.: - https://www.st.com/content/ccc/resource/training/technical/product_training/group0/0b/e4/af/01/4a/92/44/dc/STM32F7_Analog_ADC/files/STM32F7_Analog_ADC.pdf/_jcr_content/translations/en.STM32F7_Analog_ADC.pdf - https://www.st.com/resource/en/application_note/dm00628458-getting-started-with-the-stm32h7-series-mcu-16bit-adc-stmicroelectronics.pdf - https://www.st.com/resource/en/application_note/cd00211314-how-to-get-the-best-adc-accuracy-in-stm32-microcontrollers-stmicroelectronics.pdf Oder auch mal in das Reference Manual eines beliebigen µC rainschauen -> da ist Kap.15 nur für den ADC - https://www.st.com/resource/en/reference_manual/rm0385-stm32f75xxx-and-stm32f74xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf
Nebenbei erwähnt: Es gibt von sehr vielen µC Hersteller, Evalboards sogar mit fertigen Audioapplikationen zu kaufen. Inkl. FFT usw. Hast du dich den schon für einen speziellen µC Entschieden, oder ist noch alles offen?
:
Bearbeitet durch User
> Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler. > Geschwindigkeit ist nicht das Problem. Rauschabstand ist es. Kann ja nicht so das grosse Problem sein. Besagter AD wandelt mit 12 Bit. > Hast du dich den schon für einen speziellen µC Entschieden, oder ist > noch alles offen? Der gezeigten Kompetenz folgend, vermute ich, dass er auf ino endet. Es handelt sich dabei nicht um die Suppenwuerze.
Patrick L. schrieb: > Nebenbei erwähnt: > > Es gibt von sehr vielen µC Hersteller, Evalboards sogar mit fertigen > Audioapplikationen zu kaufen. > > Inkl. FFT usw. > > Hast du dich den schon für einen speziellen µC Entschieden, oder ist > noch alles offen? Nee, ich will das eigentlich nur generell wissen, um zu lernen. Die Umsetzung folgt später; die Artikel speichere ich sorgfältig, mit allen Links und Inhalten, designe mir dann PCBs (was ich eh muss, in China ist das recht günstig) und beginne dann zu experimentieren, um mir irgendwann dann mal eine Anwendung dafür zu bauen wenn ich es brauche. Beste Grüße, Freewarehookie
NXP schrieb: >> Es gibt einen Mikrocontroller der hat einen 80Msp AD-Wandler. >> Geschwindigkeit ist nicht das Problem. Rauschabstand ist es. > > Kann ja nicht so das grosse Problem sein. > Besagter AD wandelt mit 12 Bit. > >> Hast du dich den schon für einen speziellen µC Entschieden, oder ist >> noch alles offen? > > Der gezeigten Kompetenz folgend, vermute ich, dass er auf ino endet. > Es handelt sich dabei nicht um die Suppenwuerze. Nenee, das geht weit über Ino hinaus!!! BG
hallo leute ich arbeite ean einem project und ich muss pitch,roll, YAW winkelbestimmen ich habe soweit alles bekommen außer YAW da ich die verzögerungszeit T zwischen zwei messungen nicht auslesen kann , es sollte von dem Timer tick ausgelesen wird könnte ihr mich damit weiterhelfen. das sensor ist soweit kalbrieriert durch 1000 messungen 20ms pause zwischen 2 messungen und funktionert einwandfrei problem nur die delay time (verzögerungszeit) auszulesen roll = atan2(accy,accz) * RAD_TO_DEG; pitch = atan2(accx,accz) * RAD_TO_DEG; gyroZ = (rawgyroz - gyrobiasz) / 131.0; yaw += (-gyroZ*T); #pragma vector=WDT_VECTOR __interrupt void tick(void) { if(tick_0_5_ms > 0) { tick_0_5_ms++; if(tick_0_5_ms == 0) { LPM0_EXIT; } } }
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.