Forum: Mikrocontroller und Digitale Elektronik Steuerung des µC über PC


von Klaus (Gast)


Lesenswert?

Hi,

letzes Jahr habe ich eine Schaltung gebaut, die am Köpfhörer-Ausgang des 
PC hört und je nachdem ob L oder R ein Signal ankommt, wird etwas 
anderes vom µC ausgeführt (Lichtschaltung). Das Signal am PC trenne ich 
mit DJ-Tool und einem Mischpult dahinter.

Leider ist meine Schaltung ziemlich anfällig was Störungen auf der 
Leitung angeht. Hin und wieder denkt die Schaltung, dass auf L ein 
Signal anliegt obwohl es auf R ist (durch Rückkopplungen meiner 
Verstärker etc.).

Das Ziel damals war:  Über das DJ-Tool wird die Schaltung gesteuert je 
nachdem auf welchem Kanal (R/L) ein Signal/Musik ankommt.

Gibt es eine sinnvolle Möglichkeit dies umzudrehen? Also, dass die 
Schaltung die Musik im DJ-Tool steuer? Wohl eher nicht aber wenigstens, 
dass die Entscheidung/Ermittlung welcher Kanal (R/L) gerade angesteuert 
wird über den PC läuft und dieser das ganz klar mit einem digitalen 
Signal (0/1) an den µC weitergibt?
Habt ihr eine Idee?

Viele Grüße und Danke
Klause

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

du hast den Schaltplan vergessen.

von Klaus (Gast)


Lesenswert?

Den habe ich nicht mehr. Es war aber eine ganz einfache Erkennung eines 
Audio-Signals über Transistoren. Würde aber gern etwas zuverlässigeres 
oder über den PC steuerbares haben.

von Zeichen (Gast)


Lesenswert?

Klaus schrieb:
> Den habe ich nicht mehr.
Dann Zeichen eine neue.

von Stefan F. (Gast)


Lesenswert?

> Würde aber gern etwas zuverlässigeres oder über den PC steuerbares haben.

Dann trenne dich am besten von der Idee, den Audio Ausgang zum Steuern 
digitaler Sachen zu missbrauchen.

Nimm lieber USB. Ein USB-UART Adapter liefert topsaubere serielle Daten, 
die du direkt mit dem seriellen Eingang des Mikrocontrollers verarbeiten 
kannst.

von Klaus (Gast)


Lesenswert?

Genau das ist was ich auch möchte. Weg von den analogen Signalen.

Aber mit welchem Programm kann ich denn über USB am besten Daten an den 
µC senden?

von Ulrich F. (Gast)


Lesenswert?

> Aber mit welchem Programm kann ich denn über USB am
> besten Daten an den µC senden?

Mit einem selbst geschriebenem!?!?!
Nahezu jede Sprache bietet die Möglichkeit seriell zu quatschen.
Ausnahme: PHP unter Win. Da klappt das schreiben nicht.

von Little B. (lil-b)


Lesenswert?

zum Beispiel mit Java und der jSSC klasse,
um mit einem RS232 zu kommunizieren

von Stefan F. (Gast)


Lesenswert?

Das geht sogar mit Batch Files bzw Shell Scripte.

von Joachim B. (jar)


Lesenswert?

Little Basdart schrieb:
> zum Beispiel mit Java und der jSSC klasse,
> um mit einem RS232 zu kommunizieren

wenn er schon µC schreibt denke ich unter win an LCC32 in C

aber man könnte ja auch turbo pascal unter DOS (duck und wech)

von Klaus I. (klauspi)


Lesenswert?

Sorry Klaus ;o) irgendwie habe ich nicht kapiert was Du genau machen 
willst.

Vielleicht ist soetwas (Reichelt Artikel-Nr.: K8055) das richtige für 
Dich?

http://www.reichelt.de/Bausaetze/K8055/3/index.html?&ACTION=3&LA=2&ARTICLE=119282&GROUPID=5727&artnr=K8055

Du kannst am PC mit einem eigenen Programm die Eingänge auswerten und 
die Ausgänge ansteuern.

von Klaus (Gast)


Lesenswert?

Naja an sich brauche ich eine Möglichkeit irgendwie das Signal von 
meinem DJ-Tool in L/R zu unterscheiden. Das geht aber sicher auch mit 
Software auf meinem PC selbst oder?

Wäre doch eine gute Idee und dann das jeweilige "neue" Signal mit 0 oder 
1 anstatt analog über USB an den µC senden.

VG

von Stefan F. (Gast)


Lesenswert?

> das Signal von meinem DJ-Tool in L/R zu unterscheiden.

Ich bin gebürtiger deutscher, aber das verstehe ich trotz Wiederholung 
nicht. Formuliere den Satz doch mal anders und erkläre, was denn genau 
"das Signal" ist.

von Phillip (Gast)


Lesenswert?

Also das DJ Tool (Trakstor Studiu) spiel Musik ab. Es ist so 
eingestellt, dass auf Kanal 1 ein Gewitter und auf Kanal 2 eine 
gruseliges Lachen abgespielt wird. Weiterhin ist eingestellt, dass das 
Gewitter nur ein R-Stereosignal und das Lachen nur auf das 
L-Stereosignal geht.

Am Ende läuft das so: Gewitter für 10 Sekunden, Lachen 30 Sekungen, 
Gewitter 10 Sekunden, Lachen 30 Sekunden usw...

Das Ziel war nun, dass sobald das Gewitter kommt, meine Stroboskope 
angehen. Sobald das Lachen kommt: Keine Strobos mehr aber grünes Licht. 
Das steuer ich über einen µC, der mit ein paar Transistoren versucht zu 
erkennen, ob gerade das Gewitter abgespielt wird oder nicht. Sollte dies 
so sein werden die Strobos angeschaltet. Ansonsten das grüne Licht.

Sowei so gut. Leider habe ich aufgrund meiner Verstärker, wo am Ende das 
Gewitter raus kommt bzw. das Lachen ein paar "Fehlsignale" oder eine 
Rückkopplung oder was auch immer. Jedenfalls erkennt der µC hin und 
wieder Gewitter, obwohl Lachen abgespielt wird.

Jetzt würde ich die ganze Schaltung gern etwas ändern oder 
professioneller aufbauen. Ich dachte mir, dass die Erkennung, ob das 
Gewitter abgespielt wird oder das Lachen auch am PC selbst erfolgen 
kann, dieser könnte dann ein digitales 1-0-Signal an den µC senden. Dann 
muss der µC nicht "versuchen" zu erkennen.

von Stefan F. (Gast)


Lesenswert?

Ach so, jetzt hab ich's kappiert.

Da würde ich bei der analogen Schaltung mit Transistoren bleiben. 
Anscheinen ist die verbesserungsbedürftig.

Dafür einen PC zu verwenden, erscheint mir reichlich unsinnig. Du 
müsstest dazu ja einen AUdio-Eingang nutzen, das Signal per Software 
auswerten und dann per USB mit dem Mikrocontroller kommunizieren.

Da ist der Weg über eine Transistorschaltung sicher viel naheliegender.

Poste mal den Schaltplan, dann schauen wir mal, was man da verbessern 
kann. Und teile uns mit, welche Signalpegel am Ausgang deines DJ Tools 
zu erwarten sind.

von Norbert M. (Gast)


Lesenswert?

Stefan Us schrieb:
> Dafür einen PC zu verwenden, erscheint mir reichlich unsinnig.

Naja, liegt Nahe einen PC zu verwenden, da...

> welche Signalpegel am Ausgang deines DJ Tools zu erwarten sind.

...dieses ominöse "DJ Tool" anscheinend ganz einfach PC-Software ist.

Weswegen man da jetzt unbedingt eine "Audio-Signalerkennung" braucht, 
erschleißt sich mir nicht, zwei Lichtquellen kann man wohl auch anders 
mitm PC schalten.

von Phillip (Gast)


Lesenswert?

Ja,

da ich noch nie den µC mit dem PC über USB usw. gesteuert habe würde ich 
das auch gern mal zwecks Weiterbildung ausprobieren.

Also am besten ein kleines Programm schreiben mit bspw. C# / VB.NET / 
JAVA (die kann ich alle zumindest etwas) und dort Audiosignal abhören 
(also das, was der Mediaplayer des DJ Tools an den Audioausgang des PC 
sendet // wie das auch immer gehen mag) und in L/R trennen (geht das 
denn mit Java etc?). Die Kommunikation mti dem µC ist ja dann denke mal 
nicht mehr der Hit.

VG

von rogger (Gast)


Lesenswert?

* Speicher die Sounds als mp3.

* Schreibe ein PC-Programm (Python, etc.) was folgendes in Schleife 
macht:
   * Sende einem arduino über rs232 welcher effekt drann ist.
   * Spiele zum effekt passenden Sound ab (funktionsblockierend oder 
"warte in einer Schleife bis sound zu ende gespielt ist" programmieren)

entwickel arduino programm:
* buchstabe a empfangen -> grünes licht aus, blitzen
* buchstabe b empfangen -> blitzen aus, grünes licht

von rogger (Gast)


Lesenswert?

entwickel arduino programm:
* buchstabe a empfangen -> grünes licht aus, blitzen
* buchstabe b empfangen -> blitzen aus, grünes licht

Diese part zuerst ans laufen bringen, damit man wei das das geht und der 
fehler dann beim pc-programm sein muss wenn es dann auf mal mit dem 
pc-programm nicht mehr geht...

Siehe:
Arduino Tutorial Serielle Kommunikation
http://blog.openptv.org/?p=513

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Kann dieses DJ Tool zufällig auch MIDI?
Wenn ja, einen MIDI-USB-Adapter kaufen, eine MIDI Spur dazu anlegen und 
darüber die Kommunikation mit einem Mikrocontroller aufbauen.
Ist flexiebel und später einfach erweiterbar.

Christian_RX7

von Günter Lenz (Gast)


Lesenswert?

Also ich habe das so verstanden, er möchte ein Audiosignal
detektieren ob es vorhanden ist oder nicht.
Das geht so:
Audiosignal mit einem NF-Verstärker verstärken,
dann gleichrichten, dann folgt noch ein Schmitt-Trigger, fertig.
Dieses Problem wurde schon öfters hier im Forun
besprochen.

von Stefan F. (Gast)


Lesenswert?

Bedenke, dass nicht jede Soundkarte mit einem Programm Audio aufnehmen 
kann, was von einem anderen Programm erzeugt wurde.

Wer mal versucht hat, den Ton einer DVD-Wiedergabe aufzuzeichnen kennt 
das womöglich.

Das solltest du erstmal ausprobieren, bevor du Geld für irgendwelche 
Schaltungen ausgibst.

von Nil (nilsnilss)


Lesenswert?

Wozu denn mit der Soundkarte Sound aufnehmen?
Er will nur detektieren, ob ein Audiosignal am Soundkartenausgang 
anliegt oder nicht. Die ursprüngliche Schaltung scheint dahingehend 
nicht zuverlässig zu funktionieren, also muss dort einfach der Fehler 
gesucht und behoben werden. Oben wurden bereits NF-Verstärker als 
Stichwort genannt.
Fertigen Schaltplan aus dem Internet saugen, nachbauen, fertig.
Dazu muss man doch keine Software schreiben und 'a' oder 'b' auf die 
serielle schicken.

von Stefan F. (Gast)


Lesenswert?

> Wozu denn mit der Soundkarte Sound aufnehmen?

Das hat der TO geschrieben - ich hatte auch schon vorher davon 
abgeraten:

>"Also am besten ein kleines Programm schreiben mit
> bspw. C# / VB.NET / JAVA ...und dort Audiosignal abhören
> (also das, was der Mediaplayer des DJ Tools an den Audioausgang
> des PC sendet // wie das auch immer gehen mag)

Und genau das geht eben nicht immer so einfach, wie man sich das denkt.

von Norbert M. (Gast)


Lesenswert?

Vielleicht kann der DJ-Tool Traktor Studio scripting ja schon von Haus 
aus, dann wäre es ja ein Leichtes, mit diesen billigen FTDI-USB-Dongles.

Sowas in der Art:

Start:
 Stroboskop ON
 Play Gewitter.mp3
 Stroboskop OFF
 Gruenlicht ON
 Play Dummlache.mp3
 Gruenlicht OFF
GOTO Start.

von Phillip (Gast)


Lesenswert?

Günter Lenz schrieb:
> Also ich habe das so verstanden, er möchte ein Audiosignal
> detektieren ob es vorhanden ist oder nicht.
> Das geht so:
> Audiosignal mit einem NF-Verstärker verstärken,
> dann gleichrichten, dann folgt noch ein Schmitt-Trigger, fertig.
> Dieses Problem wurde schon öfters hier im Forun
> besprochen.


Könnt ihr mir einen Tipp geben wie das geht oder wie man so eine 
Schaltung nennt damit ich googeln kann?

von Joachim B. (jar)


Lesenswert?

Klaus schrieb:
> Gibt es eine sinnvolle Möglichkeit dies umzudrehen? Also, dass die
> Schaltung die Musik im DJ-Tool steuer? Wohl eher nicht aber wenigstens,
> dass die Entscheidung/Ermittlung welcher Kanal (R/L) gerade angesteuert
> wird über den PC läuft und dieser das ganz klar mit einem digitalen
> Signal (0/1) an den µC weitergibt?

entweder du sendest L 1 oder R 1 per serielle an den µC

oder dein µC (Atmel?) nimmt per ADC L und R an und entscheidet nach dem 
Pegel was zu tun ist.

von Phillip (Gast)


Lesenswert?

Bei L1 oder R1 habe ich das Problem, dass ich am PC irgendwie erkennen 
müsste, was am Audioeingang gerade passiert. Ich glaube mit einem Atmega 
bekomme ich das eher hin (habe sonst keine Ahnung davon).

Okay also den A/D Wandler nutzen ja? Ich denke mal, dass ich ca. 0,2 V 
maximal am Audioausgang haben werde (hatte das letztes Jahr gemessen).

Hatte dann eine einfache Schaltung mit gleichrichter und zwei oder drei 
Transistoren hintereinander, um den Pegel auf 5V zu bekommen, damit es 
der Atmega erkennen kann.

Ich denke mit einem NF Verstärker ist das einfacher oder? Habe nur 
leider noch nie einen gebaut.

von Joachim B. (jar)


Lesenswert?

Phillip schrieb:
> Okay also den A/D Wandler nutzen ja? Ich denke mal, dass ich ca. 0,2 V
> maximal am Audioausgang haben werde (hatte das letztes Jahr gemessen).
>
> Hatte dann eine einfache Schaltung mit gleichrichter und zwei oder drei
> Transistoren hintereinander, um den Pegel auf 5V zu bekommen, damit es
> der Atmega erkennen kann.

alles ne Frage der AREF einige bieten ja intern 1,1V da sollten 0,2V 
schon reichen, musst das nur positiv ansteuern, ggffs. eine 
Transistorstufe vorschalten, der klemmt auch gleich die neg. Halbwellen 
weg.

Audio, Trennkondensator, Transistor in Emittergrundschaltung, V ca. um 
5-fach.

von Phillip (Gast)


Lesenswert?

Also 0,2V am AREF klappt bei mir nicht.

Naja ich muss ja auch auf 3-5 V kommen, damit der µC alles auch als 
Signal erkennt.

D.h. alles ab 0,1 V muss auf mind. 3-5V verstärkt werden.

Habe schon etwas im Forum gesucht aber die "richtige" Schaltung habe ich 
noch nicht gefunden.

Bin gerade auf der Suche nach dem NF-Verstärker.
Hatte das hier gefunden:
http://www.pollin.de/shop/dt/NjA4OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_NF_Verstaerker.html

Funktioniert aber wohl erst ab 1V am Eingang.
Benötige also erst einmal einen NF, der ab 0,2V funktioniert.
ODER
"Audio, Trennkondensator, Transistor in Emittergrundschaltung, V ca. um
5-fach." (von Post von  Joachim B) Sollten aber 0,2 auf 1V verstärken 
oder?

Nach dem NF dann einen gleichrichter (einfach). Danach einen 
Schmitt-Trigger 
(http://www.mikrocontroller.net/articles/Schmitt-Trigger).

Funktioniert das denn alles so?

von Phillip (Gast)


Lesenswert?


von c-hater (Gast)


Lesenswert?

Phillip schrieb:

> Okay also den A/D Wandler nutzen ja?

Das bietet sich förmlich an.

> Ich denke mal, dass ich ca. 0,2 V
> maximal am Audioausgang haben werde (hatte das letztes Jahr gemessen).

Kein Problem. Viele AVRs (praktisch alle Megas und auch einige Tinys) 
bieten einen eingebauten Verstärker für die diffentielle Betriebsart der 
ADC. Welchen AVR willst du denn verwenden?

Man braucht bei nicht allzu hohen Forderungen an die "Qualität" 
jedenfalls nur ein paar Widerstände und Kondensatoren, um Audio-Ausgänge 
da dran zu frickeln.

Für Stereo sieht das dann ungefähr so aus:

                      10k
    1µ              -|===|-oVcc
R  ||              |
o--||-----*----------------oADC0
   ||     |        |            differentieller Kanal 1
           -|===|--*-------oADC1
L  ||        100k  |
o--||-----*----------------oADC2
   ||     |        |            differentieller Kanal 2
GND 1µ     -|===|--*-------oADC3
o-           100k  |
  |                 -|===|-
  |                   10k  |
 ---                      ---


Welche ADC-Kanäle sich mit welchen anderen zu einem differentiellen Paar 
koppeln lassen und welche Verstärkungsfaktoren verfügbar sind, 
unterscheidet sich von AVR zu AVR. Datenblatt->ADMUX-Register. Da steht, 
was geht. Und auch wie es geht.

Aufpassen: in der differentiellen Betriebsart liefert die ADC 
vorzeichenbehaftete Werte. Bei 8Bit kein Problem, bei 10Bit aber schon, 
man muß die nämlich vorzeichenrichtig auf 16Bit erweitern, wenn man dann 
damit rechnen will.

von Phillip (Gast)


Lesenswert?

Ich plane einen Atmega8 da der für meine bisherigen Wünsche immer 
ausreichend war. Das Thema ADMUX werde ich mir mal anschauen.

von c-hater (Gast)


Lesenswert?

Phillip schrieb:

> Ich plane einen Atmega8 da der für meine bisherigen Wünsche immer
> ausreichend war.

Der kann das aber nun gerade nicht. Wenn du auf solche Methusalems 
abfährst: der Mega16 kann es. Bei dem stehen dann 10x und 200x als 
Verstärkungsfaktoren zur Verfügung.

Oder ein wenig nach unten: der Tiny 84 kann es ebenfalls. Der hat 
allerdings nur 20x zu bieten.

von Joachim B. (jar)


Lesenswert?

Phillip schrieb:
> Also 0,2V am AREF klappt bei mir nicht.

kein Wunder du hast ADC noch nicht verstanden.

Was sind deine 0,2V überhaupt, Ueff, Up, Upp ?

nehmen wir mal den schlechtesten Fall, 0,2V peak

das wären an V Ref mit 1,1V und max. 1023 digits 0,2/1,1 * 1023 über 180 
ADC Wert, das kann jeder deutlich von 0 unterscheiden.

Phillip schrieb:
> Naja ich muss ja auch auf 3-5 V kommen

wieso das?

von Phillip (Gast)


Lesenswert?

Ja ADC habe ich noch nicht kapiert. Bin gerade dabei mir mal das 
Tutorial anzuschauen.

3-5 V weil High ja erst ab ca.3 bzw. 3,5V erkannt wird.

von Joachim B. (jar)


Lesenswert?

Phillip schrieb:
> Ja ADC habe ich noch nicht kapiert.

ADC ein Wert von 0 bei 0V und 1023 bei Ref Spannung, die kann je nach 
Atmel intern 1,1V oder 2,56V oder VCC oder eine externe Spannung sein.

Du könntest glatt eine Schwellspannung theoretisch Schottkydiode in 
Durchlassrichtung mit 0,2-0,5V anlegen und dann sollte der ADC Wert 1023 
bei Vref sein.

Phillip schrieb:
> 3-5 V weil High ja erst ab ca.3 bzw. 3,5V

digital

von Phillip (Gast)


Lesenswert?

Danke für die viele Hilfe.

Habe noch eine Verständnisfrage:

Da ich gerade keinen Atmega16 habe und etwas rumspielen wollte kann ich 
nur einen Atmega8 verwenden.

Deshalb kurz so, wie ich alles verstanden habe:
- Grundsätzlich würde einfacher ADC funktionieren. Geht auch mit 
Atmega8. Wenn 0 = 0V und 1023 bei Aref. Wenn ich einfach Aref = intern 
2,56V nutze sollte ich gut die 0,2 von den 0V unterscheiden können.
- Besser wäre eventuell noch bei Atmega16 die Verstärkung um 200x. Dazu 
müsste ich dann den differential mode nutzen. Damit wäre das noch 
genauer oder?

Stimmt das so?

Das der Wert 1023 ist aufgrund der Schottkydiode habe ich nicht 
verstanden. Hier würde ich doch nur den Wertebereich auf 0 bzw. 0,2 bis 
Aref anstatt 0 bis Aref ändern oder? Durch die Diode habe ich doch 
entweder 0 oder ab 0,2V Durchlass.

VG

von Joachim B. (jar)


Lesenswert?

Phillip schrieb:
> Das der Wert 1023 ist aufgrund der Schottkydiode habe ich nicht
> verstanden. Hier würde ich doch nur den Wertebereich auf 0 bzw. 0,2 bis
> Aref anstatt 0 bis Aref ändern oder? Durch die Diode habe ich doch
> entweder 0 oder ab 0,2V Durchlass.

ich verstehe nicht mal deinen Satz......

male mal ein Schaltbild, dann reden wir weiter.

von Phillip (Gast)


Lesenswert?

Also ein einfacher ADC am Atmega8 bekommt das gut hin.

Habe noch ein Problem, dass der ADC in der Luft hängt, wenn ich nichts 
angeschlossen habe aber ich denke der Anschluss muss nur mit einem 
Widerstand auf Masse gezogen werden oder?

Zudem ist die Auflösung noch nicht so gut aber das wird mit dem 
vorgeschlagenen Differential Mode sicher besser. Der Atmega16 ist aber 
noch nicht da.

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.