Forum: Mikrocontroller und Digitale Elektronik Midi Drumpad mit Piezo Schallwandler


von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hier ein kleines Problem mit einem Piezo-Schallwandler den ich
als Trigger für ein Drumpad verwenden will.
Ich habe mir mal das Projekt von der ISPF-Seite als Grundlage
genommen.
Ich habe den Piezo so wie in dem Projket beschaltet(Sampel&Hold
-Schaltung)die Software habe ich in Assembler geschrieben (Soll erstmal
nur zum testen sein!). Nun habe ich das folgende Problem.
Ich muß schon mit sehr viel Kraft auf den Piezo schlagen um ein Ton zu
erzeugen. Und dann habe ich noch einen Zeitversatz, d.H. der Ton kommt
erst kurz nach dem schlag.
Meine Frage: hat jemand schon ein ähnliches Projekt erfolgreich
abgeschlossen, oder kann mir jemand ein Paar Tips geben wie ich diese
Probleme in den Griff bekomme.

Vielen Dank !!

Ach ja der MC ist ein Atmege8.......

von Rahul (Gast)


Lesenswert?

wenn ich ISPF bei google eingebe, bekomme ich u.a. das heraus "Institut
Statistique de Polynésie française".
Das hat wohl wenig mit deinem Problem zu tun...

von Sascha D. (plutoonline)


Lesenswert?


von Axel R. (Gast)


Lesenswert?

Piezo verpolt?

von Axel R. (Gast)


Lesenswert?

>..
Start:  sbi PIND,7
..
..
play:  cbi PIND,7          ;Portpin low Kondensator entladen PD7 = 
Portpin
13
/>..

müsste es nicht "cbi PORTD,7" bzw "sbi PORTD,7" heissen?

Mal sehen, ob ich nochwas finde

von Sascha D. (plutoonline)


Lesenswert?

wie Piezo verpolt?! Sag bloß der hat eine Polung?
Das würde ja schon einiges erklären. Wie muß ich den Piezo dann
anschließen?

Was ist denn der Unterschied zwischen Portd und Pind?

von Simon K. (simon) Benutzerseite


Lesenswert?

PIND ist ausschließlich zum Einlesen des Ports (Port muss als Eingang
gesetzt sein!)
PORTD ist nur zur Ausgabe auf den Port (Port als ausgang)

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Sascha D. (plutoonline)


Lesenswert?

Ich muß euch mal ein Lob aussprechen ihr seid ja schnell wie die
Feuerwehr. Echt Super!!!!!!!!!!

Also das mit PIND und PORTD habe ich jetzt geändert.
Ich weiß nicht ob sich dadurch wirklich was verändert hat?
Muß ich den Ausgang eigentlich über einen Pull-Up/Down Wiederstand auf
einen bestimmten Pegel ziehen?

Ich habe AVCC über eine Induktivität 10uH nach VCC und einen
Kondensator 100nF nach GND gelegt (wie im Datenblatt). ARef habe ich
über einen Kondensator 100nF nach GND gelegt.
Ein Oszi habe ich leider nicht.

Ein kleinen Schaltpan wie die Beschaltung eines Piezos am MC aussehen
muß würde mir wahrscheinlich sehr weiterhelfen.

Vielleicht stimmt ja auch mit meiner ADC-Einstellung was nicht
(AREF/Prescaler.....)?

von Axel R. (Gast)


Lesenswert?

>..
ldi Temp,((1<<REFS0) | (1<<ADLAR))    ;Kanal 0 auswählen und ADC Left
Adjust Result setzen
    out ADMUX, Temp          ;Kanal 0 = Portpin 23
/>..

ldi Temp,((1<<REFS0) | (1<<REFS1)| (1<<ADLAR))    ;Kanal 0 auswählen und
ADC Left Adjust Result setzen
    out ADMUX, Temp          ;Kanal 0 = Portpin 23

denn:
REFS1 REFS0  Voltage Reference Selection
-----+-----+-------------------------------
    0     0  AREF, Internal Vref turned off
    0     1  AVCC with external capacitor at AREF pin
    1     0  Reserved
    1     1  Internal 2.56V Voltage Reference with external capacitor
at AREF pin

Nur mit REFS0 hast Du also die 5Volt VCC als Bezug. Da musst Du dann
doller kloppen, damit sich was rührt. Nimmst Du REFS1 mit hinzu, hast
du die interne Referenz von "nur" 2.5Volt. Sollte jetzt besser
gehen.
Die Blechscheibe vom Piezo kommt an Masse, die Keramikscheibe den
Einstellregler. Je nach Polung erzeugen die Teile eine Positive oder
negative Ausgangsspannung, wenn sie durchgebogen werden. Wenn Du nun
draufhaust, verbiegt sich das Teil nach unten und erzeugt im
Fehlerfalle ein negative Spannung. Geht der Stick wieder nach oben gibt
es eine Positive Spannung. Ich weiss jetzt nicht, wann dein Portpin
zuschlägt - aber genau im ungünstigen Moment wird die Spannung
kurzgeschlossen...
Aber ich glaube nicht, dass man die Dinger verkehrt anbaut. Schon vom
Gefühl kommt die Blechscheibe ja an Masse---

Den Schaltplan kannst Du schon so übernehmen, wie er auf der Seite
angegeben ist.
Die Beispielvideosequenzen sind ja echt beeindruckend!

Kommen denn überhaupt irgentwelche Noten? Offensichtlich schon...  dann
scheint der Rest ja zu funktionieren (Bei mir nämlich nicht, habe das
gerade mal zusammengelötet)
Ich werde mal die Suchfunktion des Forums bemühen.
PIN15 der Gameport SUB-D ist MIDI-IN? NA mal sehn...

von Sascha D. (plutoonline)


Lesenswert?

O.K. ich bin jetzt auf der Arbeit kann das mit der AREF Einstellung
nicht testen. Wenn ich zu Hause bin setze ich mich gleich mal dran und
checke das mal.

Ich glaube ich habe den Piezo völlig falsch angeschlossen.
Das Metallplätchen hat auf der einen Seite eine Scheibe mit 2
Kontaktfeldern, an die habe ich die Kabel angelötet.
Muß ich jetzt ein Kabel an die Scheibe löten und ein Kabel an eines der
Kontaktfelder?

Der Portpin geht doch erst auf Null wenn der Peak unter den vorherigen
Wert fällt d.H. die Note abgespielt werden soll, das ist doch der
richtige Zeitpunkt um ihn zu entladen (oder?)?

Du mußt aufpassen wenn du direkt an den Gameport gehst, kann sein (je
nach Soundkartenmodell) das du die Werte negieren mußt, bin mir aber
nicht 100%ig sicher.

siehe:
http://www.mikrocontroller.net/forum/read-1-242282.html#new

von Sascha (Gast)


Lesenswert?

Der Ansatz dieser Seite für ein Drumpad ist SEHR simpel. Normalerweise
schaltet man mindestens noch einen OpAmp als Verstärker/Buffer vor den
Controller.

Piezos können auch recht unterschiedliche "Lautstärken" von sich
geben.

Vielleicht hilft dir dieses Projekt weiter:
http://www.edrum.info/

von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

Nochmal zur Beschaltung des Piezos:

Ich hab mal ein Bild drangehängt.

Also ich hab den Piezo jetzt an 1 und 3 angeschlossen.

Kann mir jemand sagen ob das so richtig ist?

von Rahul (Gast)


Lesenswert?

schliess ihn an 2 und 3 an!

von Sascha D. (plutoonline)


Lesenswert?

Danke, probier ich heute Abend gleich aus.
Für was ist denn der Anschluß 1?
Ist das die Negierung von 3? (Ist vielleicht ein bischen doof
ausgedrückt)


@Sascha
Diese Edrum-Seite ist nicht schlecht, besonders die Umsetztung de HiHat
pedals ist ganz interessant.

von Sascha (Gast)


Lesenswert?

Du musst den Piezo an 1 und 2 anschließen. 3 ist nur wichtig wenn du ihn
als Lautsprecher verwenden willst (Selbstschwingen).

von AxelR. (Gast)


Lesenswert?

ich habe mir jetzt MIDI-OX und den passenden YAMAHA Seriell Treiber
runtergeladen, weil ich am Gameport (z.Zt.) keine, was zu connecten.

Wie wäre es, wenn man die Analogelektronik nicht in die Pads einbaut,
sondern in den STICK?!? So könnte man in der S-Bahn auf allem
rumtrommeln .-))
http://img-europe.electrocomponents.com/largeimages/C285784-01.jpg

http://www.rsonline.de/cgi-bin/bv/browse/Module.jsp?BV_SessionID=@@@@0622563515.1128947987@@@@&BV_EngineID=cccfaddflhjgfmdcefeceefdffhdglg.0&cacheID=deie&3306400855=3306400855&stockNo=0285784&prmstocknum=0285784&prodoid=0124973

(Was für ein Link - ob der geht?)

Mit dem gezeigten Wegaufnehmer könnte man das am Stick realisieren. Man
müsste nur alle paar takte mal die Instrumente "wechseln", aber das
kann ja der Atmel machen.

faszinierend, wusste nicht, das es SOO einfach ist!

Gruß
Axel

von AxelR. (Gast)


Lesenswert?

..keine, was zu connecten.
 bitte?

..keine Möglichkeit habe, was zu connecten.
Habe keinen passenden Stecker zur Hand.

Gruß nochmals
AxelR.

von Sascha D. (plutoonline)


Lesenswert?

Was macht denn diese Yamaha-Seriell Treiber?

von AxelR. (Gast)


Lesenswert?

der macht dir aus COM1 (oder eben 2 oder 3) einen MIDI Ein- und Ausgang.
Spart man sich den Optokoppler Mist..

von Sascha D. (plutoonline)


Lesenswert?

Cool, wo gibts den den Treiber?

von AxelR. (Gast)


Lesenswert?

cbxdrv201w.zip heist die Datei

http://www.yamaha.co.uk/xg/html/software/s_serial.htm

da kann ich gleich mit meinem STK arbeiten und muss nicht erst alte
Joysticks schlachten :-))

von TravelRec. (Gast)


Lesenswert?

>>Spart man sich den Optokoppler Mist..

Dieser Optokoppler-Mist hat schon manches teure Keyboard oder Sampler
oder Computer gerettet - so abfällig würde ich das nicht beschreiben,
die MIDI-Entwickler in den frühen ´80ern haben sich etwas dabei
gedacht!

BTW: habe 8 Piezos als Drumtrigger an ´nem Multiplexer und fütter damit
den ADC eines ATMega16 (8MHz), sind somit anschlagdynamisch und die
Einstellzeit liegt unter 1 ms - alle Anschläge einer Stärke ergeben
auch gleich"starke" MIDI-Velocity-werte. Eingangsschaltung ähnlich
der geposteten weiter oben.

von Axel R. (Gast)


Lesenswert?

Habe ich "Mist" gesagt? Ja ahbe ich wohl.
Ich meinte eigentlich den Umzstand, dass ich im Moment keinen Schneid
habe, extra wa szusammenzubasteln. Habe ich eben noch nichts mit zu tun
gehabt. Optokoppler ist schon wichtig, haste natürlich Recht.

Zu deinem Multiplexer: schaltest Du nach jeder Wandlung einen weiter?
warum hast Du nicht die vorhandenen Kanäle im AVR verwendet, sondern
benutzt einen externen Multiplexer?

Ich würde die Diode - wenn mans schon so einfach macht - vorspannen,
damit man nicht erst die Schwellspannung erreichen muss. da fand ich
die Schaltung mit dem Präzisionsgleichrichter schon ansprechender...

von Sascha D. (plutoonline)


Lesenswert?

Also ich hab den Piezo jetzt richtig angelötet und siehe da jetzt kommt
da auch was raus und die Schaltung funktioniert.

Jetzt habe ich wieder ein Problemchen, wie lange muß ich warten bis ich
Note Off sende, um ein realistisches Spielgefühl zu erzeugen?


@TravelRec.
Wie sieht denn deine Eingangsschaltung aus?

Kann man in dein Programm mal ein auge werfen? (wäre Super zum Lernen!)

von Simon K. (simon) Benutzerseite


Lesenswert?

Du kannst sofort ein NoteOff senden. Die Note müsste noch weiterklingen.
Zumindest war es bei mir so (Habe allerdings kein NoteOff verwendet,
sondern NoteOn(0,0))

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von TravelRec. (Gast)


Lesenswert?

>>Zu deinem Multiplexer: schaltest Du nach jeder Wandlung einen
>>weiter?
>>warum hast Du nicht die vorhandenen Kanäle im AVR verwendet, sondern
>>benutzt einen externen Multiplexer?

Weil ich außer den 8 Pads noch 4 Pedale abfrage, die für
Zusatzfunktionen (BassDrum oder Controller-Senden) reserviert sind.
Nach jeder Wandlung schalte ich 1 weiter, genau.

>>Ich würde die Diode - wenn mans schon so einfach macht - vorspannen,
>>damit man nicht erst die Schwellspannung erreichen muss. da fand ich
>>die Schaltung mit dem Präzisionsgleichrichter schon ansprechender...

´n Diode reicht. Besser ist Schottky, leitet ab etwa 0,3V. Bei einem
Piezo ist as aber nicht sooo wichtig, weil bei relevanten Drum-Schlägen
(also nicht nur Kitzeln) gibt so ein Wandler schon mehrere Volt. Bei
meinem Projekt ist es so, daß bei heftigen Schlägen auf ein Pad auch
das Nachbarpad noch mitsendet, also die Schwellspannung der Diode ist
vernachlässigbar.

>>Wie sieht denn deine Eingangsschaltung aus?
>>Kann man in dein Programm mal ein auge werfen? (wäre Super zum
>>Lernen!)

Piezo -> Widerstand 100kOhm nach Masse -> 1N4148 -> 10k Serie ->100nF
nach Masse -> Multiplexereingang (4067)

Programm ist in "Konfus-ASM" geschrieben (eins meiner frühen Werke
und noch völlig Beta) und steuert neben dem MIDI auch noch ein 2x16 LCD
für Padinfos (Note, Midi-Kanal, DrumSet bla...) an. Zum Lernen ist das
sicher nichts, aber es funktioniert richtig super ;-)

>>Jetzt habe ich wieder ein Problemchen, wie lange muß ich warten bis
>>ich
>>Note Off sende, um ein realistisches Spielgefühl zu erzeugen?


Meine Routine wartet so um die 20ms (Programm läuft derweil weiter!),
bis eine gesetzte Note mit einem Note-Off wieder zurückgenommen wird.
Somit erhalte ich recht kurze, aber ausreichende Notenlängen, die mein
Sequenzer sehr gut verarbeiten kann. Kürzere Intervalle führen mitunter
zum Abreißen des Klanges, längere Intervalle blockieren schnelle
Tonfolgen - ausprobieren bringt hier einiges. Ebenso die Sache mit dem
NoteOff oder NoteOn mit Velocity 0 - letzteres mögen manche Sequenzer
nicht.

von AxelR. (Gast)


Lesenswert?

Mein schw..teurer Rechner zu Hause hat angebl. kein MIDI INPUT Device.
Jetzt habe ich den Yamaha Seriell Treiber, aber trotzdem... :-((
Jetzt fäält mir ein, dass man das im BIOS einstellen kann, oder?
Fujitsu Scaleo 600 3,irgentwas mit AC97 Sound on board. Über meine
Tastatur kann ich Noten einspielen, also ein OUTPUT Device ist
vorhanden - komisch. Hat jemand ne Idee?

Danke AxelR.

von Sascha (Gast)


Lesenswert?

MIDI-In (wie auch Out) läuft bei Soundkarten meist über den Gameport.
Billige Onboard-Soundkarten haben soetwas aber oft nicht.

von AxelR. (Gast)


Lesenswert?

Na egal, wenn ich jedenfalls drann denke, wie kompliziert das früher mit
reiner analogtechnik war.
Da waren schon 5 OPV's weg für Trigger,Gate und Sample&Hold. Jeder
einzeln mit Frequenzkompensation und das ganze mit +-15Volt..

Wenn ich die Schaltung noch finde, kann ich sie ja mal reinstellen.
Schönen Gruß nochmal
AxelR.

von Rahul D. (rahul)


Lesenswert?

Vor Jahren hatte die Elrad auch mal eine Drum-Trigger-Schaltung.
Allerdings nur aus TTL/CMOS-Bausteinen.
Den genauen Aufbau hab ich nicht mehr im Kopf, aber sa waren am Eingang
IMHO ein Widerstand (Strombegrenzung) und Überspannungs-Schutzdioden (so
wie sie beim AVR Standard sind; die sollte man dafür aber bestimmt nicht
benutzen...).
Abgefragt wurden die Eingänge mit einem Demultiplexer.
Die Daten und Adresse wurden dann wohl noch über Schieberegister
versandt...
Alles quasi diskret aufgebaut.

von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

@TravelRec.
Wie hast Du das mit dem Warten gelöst?
Über einen TimerInterrupt der alle 20ms Note-Off sendet?

Zu deiner Schaltung für die Piezos:
Hab mal ne Zeichnung angehängt.
Sieht die Schaltung bei Dir so aus?
Ich bin nämlich immer noch am optimieren meiner
Piezo Eingangsschaltung. Im momment benutze ich die Schaltung wie in
dem ISPF Projekt.

@AlexR.
Ich denke das mit dem Treiber über die Serielle Schnitstelle wird so
nicht funktionieren, weil der PC keine 31250 Baud an der Seriellen
Schnitstelle versteht. Ich könnte mir höchstens vorstellen das man dann
das MIDI-Signal mit einer anderer Baudrate fahren kann und es so über
die Serielle Schnittstelle in den PC-Bringt, ist aber nur eine
Vermutung.
Man müßte ja dann in dem Treiber von Yamaha eine Baudrate einstellen
können.
Ich habe zu Anfang meines Projektes probiert die Midi-Daten auch über
die Serielle Schnittstelle auszugeben und das ganze mit einem
Terminalprogramm anzuschauen, aber das hat aus dem oben genannten grund
auch nicht funktioniert.

von AxelR. (Gast)


Lesenswert?

Warum soll der PC keine 31250 Baud können? Nur, weil diese Baudrate in
den meisten DropDown Listen der meisten "SeriellTools" ausgelassen
wurde?
Ich kann mich auch irren, aber das sollte kein Problem darstellen - ich
lese nochmal, vielleicht finde ich eine verlässliche Aussage dazu.

Gruß

von Rahul D. (rahul)


Lesenswert?

Alte Multi-IO-Bausteine konnten das wegen der festen Quarze nicht
machen. Vielleicht arbeiten da heute "bessere" Bausteine...

von Sascha D. (plutoonline)


Lesenswert?

Also ich habe das mit allen möglichen Terminalprogrammen bei denen man
die Baudrate frei einstellen kann probiert. Und bei keinem kam was
vernünftiges am PC an. Vielleicht gibt es ja Mainboards (Chipsätze) die
auch krumme Baudraten zulassen.

von AxelR. (Gast)


Lesenswert?

der YAMAHA Treiber erwartet seine MIDI Daten mit 38400baud.
Zumindest habe ich das hier rausgelesen...
http://www.ucapps.de/midibox_to_com.html
mitm AVR wäre das kein Problem ->stelle ich eben 38400 ein.
normale MIDI Geräte gehen so natürlich nicht.
(Ich habe das jetzt alles nicht getestet - muss erstmal ein bisschen
arbeiten)

von AxelR. (Gast)


Lesenswert?

Habe ja alles hier auffa Arbeit - brauche ich nicht lange zu
spekulieren.
Hier die Einstellungen, die der YAMAHA Treiber an COM1 macht:
0.00012041  midiox.exe  IRP_MJ_CREATE  Serial0  SUCCESS  Options: Open
0.00000475  midiox.exe  IRP_MJ_CLEANUP  Serial0  SUCCESS
0.00000391  midiox.exe  IOCTL_SERIAL_SET_QUEUE_SIZE  Serial0  SUCCESS 
InSize:
1024 OutSize: 1024
0.00001313  midiox.exe  IOCTL_SERIAL_PURGE  Serial0  SUCCESS  Purge: 
TXABORT
RXABORT TXCLEAR RXCLEAR
0.00000140  midiox.exe  IOCTL_SERIAL_SET_TIMEOUTS  Serial0  SUCCESS 
RI:-1
RM:-1 RC:6 WM:0 WC:0
0.00000140  midiox.exe  IOCTL_SERIAL_GET_BAUD_RATE  Serial0  SUCCESS
0.00000168  midiox.exe  IOCTL_SERIAL_GET_LINE_CONTROL  Serial0  SUCCESS
0.00000140  midiox.exe  IOCTL_SERIAL_GET_CHARS  Serial0  SUCCESS
0.00000140  midiox.exe  IOCTL_SERIAL_GET_HANDFLOW  Serial0  SUCCESS
0.00002458  midiox.exe  IOCTL_SERIAL_SET_BAUD_RATE  Serial0  SUCCESS 
Rate:
38400
0.00001341  midiox.exe  IOCTL_SERIAL_CLR_RTS  Serial0  SUCCESS
0.00001425  midiox.exe  IOCTL_SERIAL_CLR_DTR  Serial0  SUCCESS
0.00001257  midiox.exe  IOCTL_SERIAL_SET_LINE_CONTROL  Serial0  SUCCESS 
StopBits:
1 Parity: NONE WordLength: 8
0.00001090  midiox.exe  IOCTL_SERIAL_SET_CHAR  Serial0  SUCCESS  EOF:0 
ERR:0
BRK:0 EVT:0 XON:0 XOFF:0
0.00001592  midiox.exe  IOCTL_SERIAL_SET_HANDFLOW  Serial0  SUCCESS 
Shake:0
Replace:0 XonLimit:0 XoffLimit:512
0.00000363  midiox.exe  IOCTL_SERIAL_GET_PROPERTIES  Serial0  SUCCESS
0.00001062  midiox.exe  IOCTL_SERIAL_GET_COMMSTATUS  Serial0  SUCCESS
0.00058415  midiox.exe  IRP_MJ_READ  Serial0  CANCELLED  Length 16
0.00053415  midiox.exe  IRP_MJ_READ  Serial0  CANCELLED  Length 16
0.00051487  midiox.exe  IRP_MJ_READ  Serial0  CANCELLED  Length 16

wird also tatsächlich 38400 eingestellt

von AxelR. (Gast)


Lesenswert?

so, der Drummstick funktioniert gg

erst mal nur am STK500.. leichte bis mittlere Schläge steuern die
Intensität(drittes Byte), ein "harter" Schlag inkrementiert
gleichzeitig auf das nächste Instrument. (Kanal 10, andere Note)
38400Baud an COM1. Jetzt kann ich meine Kollegen nerven.

Sascha sei Dank!! So viel Spass mit so wenig Aufwand - Klasse!

in FastAVR sieht "Clapphands" so aus:
1
$Device= mega16      ' used device
2
$Stack = 28        ' stack depth
3
$Clock = 3.6864      ' adjust for used crystal
4
$Source=On        ' basic source in Asm
5
$Baud = 38400
6
7
Do            ' place your code in next line
8
WaitMs 250
9
PrintBin 144;39;127
10
Loop

Gruß Axel

von AxelR. (Gast)


Lesenswert?

Ich nochmal:
ich bekomme sehr oft zwei Anschläge direkt hintereinander mit zwei
unterschiedlichen Intensitäten. Die Sache klingt dadurch sehr unsauber.
Ich lese mich nochmal in die Quelltexte ein..
Schönen Abend noch
AxelR.

von TravelRec. (Gast)


Angehängte Dateien:

Lesenswert?

>>@TravelRec.
>>Wie hast Du das mit dem Warten gelöst?
>>Über einen TimerInterrupt der alle 20ms Note-Off sendet?

Ja, über Timer - ich setze pro angeschlagenem Pad eine Speicherzelle
mit dem Wert 20 und wenn der Timer jede Millisekunde vorbeirauscht wird
sie dekrementiert bis sie 0 ist und dann wird für dieses Pad der passene
Note-Off Befehl ausgesendet. Habe ich alles in Arrays programmiert aber
frage jetzt bitte nicht nach Einzelheiten ;-), bin froh, daß es geht
und fasse es nicht mehr an ;-).

>>Zu deiner Schaltung für die Piezos:
>>Hab mal ne Zeichnung angehängt.
>>Sieht die Schaltung bei Dir so aus?
>>Ich bin nämlich immer noch am optimieren meiner
>>Piezo Eingangsschaltung.

Nee, so sieht sie nicht aus, da bei Dir die Diode an Masse liegt.
Schaltung im Anhang!

von Sascha D. (plutoonline)


Lesenswert?

Das mit den Arrays und dem Timer würde mich aber doch mal interessieren
ich stehe nämlich jetzt vor dem gleichen Problem.
Das ist mein erstes Projekt mit einem Atmega und Assembler und
irgend wie habe ich keine Ahnung wie ich in Assembler ein Array
hinbekomme.

Theoretisch ist das schon klar aber mit der Umsetzung klappts dann
doch
nicht so.

Das Array wird ja im S-Ram angelegt.
Der Stack wird von Oben nach Unten gezählt.
Also fängt das S-Ram bei 0060h an (bei Atmega8) und zählt dann nach
Oben.
Wenn ich jetzt z.B. auf Zelle 8 zugreifen will

Zeiger auf Array:
ldi YH, HIGH(Array)
ldi YL, LOW(Array)

lesen aus Array: ldd r16, Y+8
schreiben in Array: std Y+8, r16

Ist das so korekt?

Wenn ich aber in einem Register die Zellenposition hab wie gehe ich
dann vor?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

von TravelRec. (Gast)


Lesenswert?

Lesen von Zelle 8 Beipiel:

ldi XH, $0      ;Pointer initialisieren (Array Start)
ldi XL, $60
ldi Temp, 8     ;statt Temp könnte ein Zähler mitlaufen
clr TempH
add XL, Temp    ;Wert auf X-Pointer addieren
adc XH, TempH   ;Falls Überlauf, XH +1
ld  Temp, X     ;Wert aus SRAM lesen
....

Schreiben von Zelle 8 Beipiel:

ldi XH, $0      ;Pointer initialisieren (Array Start)
ldi XL, $60
ldi Temp, 8     ;statt Temp könnte ein Zähler mitlaufen
clr TempH
add XL, Temp    ;Wert auf X-Pointer addieren
adc XH, TempH   ;Falls Überlauf, XH +1
ldi Temp, $45   ;zu speichernden Wert laden
st  X, Temp     ;Wert in SRAM schreiben

von Sascha D. (plutoonline)


Lesenswert?

Ahhhhh, jetzt hab ich es verstanden.
So kann ich aber nur Arrays mit max 255 Zellen verwalten, oder?

von TravelRec. (Gast)


Lesenswert?

256 Zellen, die nullte Zelle ist auch eine! Das sollte aber für 8
Drumpads auch reichen ;-), ansonsten brauchst Du 2 Zähler-Register (1
für Low, 1 für High), die Du dann auf den Pointer addierst. Somit hast
Du 65536 Adressen frei - wohl aber nicht soviel SRAM... Viel Spaß noch
beim Proggen. Übrigens finden sich in den Atmel Appnotes viele schöne
Beispiele für den Umgang mit Pointern, z.B. in dem Code für den
DTMF-Signalgeber.

von Sascha D. (plutoonline)


Lesenswert?

Ich habe das Programm jetzt soweit das ich die 6 Pads relativ sauber
auslesen kann aber die Zeitverzögerung ist immer noch da :-(
Sollte bei 16MHz Takt eigenztlich nicht sein oder?
Oder liegt es doch an meinem Programm? Der Code ist im Prinzip der
gleiche wie im ersten Beitrag nur das in einer Schleife die 6 ADC-Ports
abgefragt werden. Die Peaks usw. werden im S-RAM abgelegt.
Hat jemand ein Tip oder ein Denkanstoss für mich?

von Sascha (Gast)


Lesenswert?

Zeitverzögerung hat verschiedene Gründe.

Bei großer Verzögerung ist wahrscheinlich die Soundkarte schuld. Womit
gibst du den Ton aus ? Gibst du einen Midi-Ton aus oder benutzt du
einen Sampler ?

Für schnelle Soundwiedergabe benötigt man normalerweise eine Soundkarte
mit niedriger Latenz und ASIO-Treibern.

von TravelRec. (Gast)


Lesenswert?

Das stimmt natürlich, da können etliche 10 Millisekunden dazukommen.
Häng doch mal ´nen Keyboard dran und aktiviere die Drum-Abteilung. Oder
nimm ´ne simple LED und klemm sie auf den MIDI-Ausgang. Sie muß just in
dem Moment blitzen, da Du auf die Pads haust. Nicht so
tock.......blink, sondern genau auf "1". Also mein ATMega16 hat die
12 Eingänge zu verwalten, daddelt mit 8MHz und ist trotzdem fett
schnell. Wartest Du denn irgendwo mit ´nem Delay oder so auf
irgendetwas? Liest Du alle 6 Pads mit dem ADC hintereinander weg bevor
Du irgendetwas anderes tust??! Falls ja, lies mal immer erst 1 Pad,
dann den Multiplexer eins weiterschalten, mach dann die Auswertung: A/D
Wert für dieses Pad größer als beim letzten Durchlauf, wenn ja
Trigger-Byte für das Pad auf 20 setzen, schicke dann die MIDI-Daten für
eben jenes Pad (Note On), und nimm dann den Meßwert für´s nächste Pad
und so weiter - so mußt Du an keiner Stelle warten. Zwischendurch
dekrementierst Du per Timer-interrupt die Triggerbytes und guckst, ob
sie schon wieder auf 0 heruntergezählt sind, sendest in dem Fall für
dasjenige Pad den Note-Off Befehl und dann weiter im Text. Okay, das
erfordert schon eine flüssige Programmierung mit so ein, zwei
Interrupts, ´nem Sack voll Flags und kurzen Routinen, ist aber machbar.
Die einige wirkliche Bremse ist der ADC, den man nicht unendlich schnell
laufen lassen kann und auf dessen Ergebnis man immer warten muß.

von Sascha D. (plutoonline)


Lesenswert?

Also es lag nicht an meinem Programm.
Es liegt tatsächlich wie Sascha schon gesagt hat an der Latenz der
Soundkarte.

Ich hab mir jetzt Treiber mit niedriger Latenz für meine Sounkarte
besorgt und siehe da es läuft einwandfrei.

Die Treiber gibt es übrigens unter
http://kxproject.lugosoft.com/

von TravelRec. (Gast)


Lesenswert?

Na sach´ das doch gleich - ich arbeite seit 2 Jahren mit dem kX-Treiber,
geht aber nur für spezielle Creative/EMU-Soundkarten (schon mal in´s
Forum geguckt?!) ;-).

von Sascha D. (plutoonline)


Lesenswert?

So, ich wollte mich nochmal zurückmelden.
Vielen Dank für eure Tips und Infos.
Ich bin jetzt gerade dabei meine gesammelten Infos jetzt zu einem
Gesammtprojekt zusammenzusetzen. Ich habe die letzten Tage viel gesägt,
gefeilt und geklebt. Fehlt nur noch ein bischen Lack und die
Holzarbeiten sind dann abgeschlossen.
Die Elektronik steht auch schon fast. (Bin gerade beim Layouten der
Platine.)

Wenn iteresse besteht werde ich die Tage mal ein paar Bilder anhängen.

von TravelRec. (Gast)


Lesenswert?

Ja mach mal - sowas ist immer interessant! :-)

von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

wie besprochen ein paar Bilder............

von Sascha D. (plutoonline)


Angehängte Dateien:

Lesenswert?

und nocheins.......

von TravelRec. (Gast)


Lesenswert?

Ja professionell! Fett! Gefällt mir. Richtig schön Zitonengelb :-) Hut
ab! Neugier: was zeigt´n Dein Display an?

von Sascha D. (plutoonline)


Lesenswert?

Also momentan zeigt das Display noch nicht so viel an.
Ich bin gerade dabei ein Menü zu schreiben.
Die folgenden Funktionen sollen im Menü Implementiert sein:
- Midi Kanalauswahl
- Zuweisen der einzelnen Drumpads zu Instrumenten
- Speicherfunktion für Presets
- Anpassung der Anschlagdynamik und Lautstärke für jedes Drumpad
- Statusanzeige für alle Drumpads
- Midimonitor (was gerade über den Midi-Out gesendet wird)

Ansonsten verfügt meine Schaltung über 10 Triggereingänge von denen die
ersten 6 fest auf dem Drumpad angeschlossen sind, die anderen 4 sind
über eine Buchse nach aussen geführt um z.B. ein HiHat-Pedal und ein
Basedurm-Pedal und/oder Becken anzuschließen.

von TravelRec. (Gast)


Lesenswert?

Hehe, nette "To-Do-Liste"...

von Mathias Müller (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe als Piezo-Eingangsschaltung mal die Schaltung von eDrum.info
nachgebaut. Allerdings sieht das Ausgangssignal ziemlich hässlich aus.
Ich habe das Oszillogramm eines einzelnen(!) Anschlags mal angehängt
(Sorry, hab' nur ein Analog-Speicheroszi, deshalb ist das Bild nicht
so gut). Man sieht, dass das Signal ziemlich lange schwingt (bei
2ms/Div) und viele Peaks hat, was beim Einlesen zum mehrfachen Erkennen
von Anschlägen führt. Wenn man als Workaround aber z.B. nur den 1. Peak
als Anschlag nimmt, kann es sein, dass dieser nicht proportional zur
Schlagstärke ist, weil erst danach der "Hauptpeak" kommt.

Hat jemand eine Idee, wie man die Schaltung verbessern könnte?

Gruß Mathias

von TravelRec. (Gast)


Lesenswert?

Dann nimm doch einfach den OV weg und nimm die Schaltung, die ich weiter
oben gepostet habe. Wenn Du direkt am AVR-A/D anschließen willst, mußt
Du die Schaltung etwas abwandeln: R1 ist dann 1M, da wo 4067 Eingang xx
steht, hängst Du nochmal 10k in Serie und dann den A/D dran, vom A/D-Pin
100k nach Masse, damit die Piezo-Spannung abfließen kann. Über die letzt
genannten Widerstände kannst Du die Anstiegs- und Abfallzeiten für
Deinen Spannungshuckel festlegen. Und: es wird pro Anschlag nur 1
Huckel sein ;-), dessen effektive Höhe von der Anschlagstärke abhängt.

von Mathias Müller (Gast)


Lesenswert?

Hmm, ich habe die Schaltung nach deinem Vorschlag aufgebaut (direkt am
AVR), bekomme aber immernoch mehrere "Huckel". Kann es evtl auch an
meinem Piezo liegen? Vielleicht schwingt der zu lange nach und gibt so
über längere Zeit Spannung ab. Ich habe auch den Entladewiderstand
testweise bis auf 10k verringert. Mit dem Ergebnis dass sich die
Empfindlichkeit drastisch verringert und ich immernoch mehrere
Anschläge bekomme.
Vielleicht noch etwas zur Abfrage (Software):
Ich lese den ADC-Wert ein, wenn der folgende größer ist wird er als
neuer Max-Wert gespeichert. Ist der ADC-Wert kleiner als der Max-Wert,
wird eine Note gespielt. Ich habe auch schon versucht die Ausgabe so
lange zu blockieren, bis der Spannungswert wieder auf einen bestimmten
Wert gefallen ist. Dadurch wird's aber ziemlich träge, da ich noch
relativ lange eine Spannung am Kondensator habe...

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Mathias Müller (Gast)


Angehängte Dateien:

Lesenswert?

Klar, die sind zum Entladen des Kondensators ;-) Ich hatte die
Anschlüsse auch schon mal dran, nur will es trotzdem nicht richtig
funktionieren (siehe Bild im Anhang, 10ms/div). Der Kondensator wird
anschließend sofort wieder nachgeladen... Könnte es vielleicht daran
liegen, dass an der Diode noch 0,7V abfallen und der Kondensator so nie
richtig entladen wird?

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich bin gerade auch wieder dabei so einen Drumcontroller zu bauen. Womit
ich probleme hatte, ist diese Diode, die an einem Pin angeschlossen
wird, und die den Kondensator entladen sollte. Das funktionierte nie so
richtig wirklich. Was bei mir viel besser ging: BS170 gegen Masse
schalten und dann einfach nur das Gate kurz ansteuern.

Man sieht bei deinem Scopebild auch garkeine scharfe Flanke, die
Richtung Masse 'saust'. Das muss aber schon so sein.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ähm eine kleine Frage noch:

Hat jemand eine Ahnung, wie die Klinkenstecker von diesen kommerziellen
Drumpads (habe hier das Roland PD6) beschaltet sind? An der Spitze kommt
immer ein negativerer Impuls als am Schaft an. Ich habe das Gefühl, dass
der negative Pol vom Piezo an der Spitze liegt und der positive am
Schaft. kann das sein? Wie ist dann die Belegung bei Dual-Trigger pads?

von TravelRec. (Gast)


Lesenswert?

Hmm - das ist aber komisch, bei meiner Schaltung bekomme ich immer nur
einen Huckel. Die Zeitkonstante von Ladewiderstand und Kondensator ist
so gewählt, daß etwa 30 ms überbrückt werden, die Entladung ist dabei
etwa 10x langsamer, als die Ladung. Damit können dann Impulse von
maximal 30 Hz detektiert werden, was für´s Drumming völlig ausreicht
und den Körperschall des Gehäuses weitestgehend außer Acht läßt.
Mittels der Firmware lese ich ständig und schnell den ADC, um den Peak
zu detektieren und gebe dann den Peakwert in eine Speicherzelle, die
zur Generierung des MIDI-Velocity-wertes herangezogen wird. Die
Response-Zeit liegt um und bei 5ms bei Abfrage von allen 12 Pads.

Also nochmal im Klartext: über den Piezo werden 1MOhm parallel
geschlossen. Der Messingrand des Piezos kommt an Masse, die Keramik ist
der heiße Pol. Dieser geht direkt auf die Anode der Diode. Zur Erhöhung
der Empfindlichkeit kann dies eine Schottky-Diode sein. Die Kathode
geht über 10kOhm an den Speicher-Kondensator, der als Richtwert 100n
groß ist. Der Speicher-Kondensator geht nach Masse. Parallel zum
Speicher-kondensator wird wieder 1MOhm angeschlossen. Vom
Spiecherkondensator geht nochmals ein 10kOhm-Widerstand (zum
Überspannungsschutz) direkt zum A/D - Converter. Das war´s.

Woran hast Du denn den Piezo geklebt? Vielleicht schwingt ja diese
Platte so lange nach und es liegt gar nicht am Piezo selbst. In dem
Fall hilft ein größerer Speicher-Kondensator.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich hab deine "Schaltung" als Vorlage genommen und dabei bin ich auf
folgendes gekommen:

Parallel zum Piezo 1MOhm. Dann eine Diode in Reihe (kann Schottky,
sollte sogar), dann der Ladekondesator und dahinter ein
Spannungsteilerpoti von 1MOhm. An den Abgriff den ADC Eingang. Der
Kondensator wird mittels n-FET entladen.
Klappt äußerst gut!

von TravelRec. (Gast)


Lesenswert?

Na bidde - geht doch. Bestimmt findet jeder das für sich geeignetste
Konzept beim Probieren und Programmieren...
Grüße!

von Mathias Müller (Gast)


Lesenswert?

Ich habe jetzt mal den FET zur Entladung genommen, jetzt sieht man
tatsächlich die steile Entladeflanke. Das Problem besteht aber
immernoch :-( Der Kondensator lädt sich gleich wieder auf und das
spielchen dauert ca. 50 ms. Das ist etwas viel... Ich vermute, dass es
tatsächlich am mechanischen Aufbau liegt (dünne Holzplatte über 5
Filzdämpfer auf eine Dicke Platte geklebt). Das Teil scheint doch sehr
zu schwingen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Welchen Durchmesser hat denn die Platte? Und ist sie Rund oder eckig?

von Mathias Müller (Gast)


Lesenswert?

Die Platte ist eckig, ca. 24cm*18cm. War eigentlich nur zum testen, beim
eigentichen Pad werden sie wesentlich kleiner...

von TravelRec. (Gast)


Lesenswert?

Das liegt bestimmt an der Platte - ich habe alte CDs genommen, die
runden Piezos direkt auf das Loch in die Mitte der Unterseite geklebt
und eine Lage Kunststoff-Fußbodenbelag direkt auf die Oberseite der CD
geklebt. Das gesamte Pad hat eine Resonanz weit über 100 Hz und durch
den 1,2mm schaumigen Fußbodenbelag schwingt da auch nichts nach.

von Simon K. (simon) Benutzerseite


Lesenswert?

Hallo,

Ich möchte hier auch nochmal mein (fast) fertiges Projekt vorstellen.

So wie es im Moment ist, kann es eigentlich schon im vorgesehenen Sinne
eingesetzt werden.

http://klinkerstein.m-faq.de/index.php?dir=/Selbstbau%20Drum-Controller

von Hagen R. (hagen)


Lesenswert?

@Simon: könnte man den MOSFET nicht weg optimieren ? Ich meine statt dem
MOSFET den Pin zum Gate mit einem Widerstand von ca. 240 Ohm direkt an
der jetzigen Drain anschließen. Der Pin steht normalerweise auf Eingang
und zum Entladen wird er auf Ausgang-Low gelegt. D.h. statt dem MOSFET
entlädt der Pin den Cap.

Gruß Hagen

von Simon K. (simon) Benutzerseite


Lesenswert?

Das hat der Guido so gemacht. Aber das hat komischerweise nie so richtig
funktioniert. Anstatt da nachzuforschen habe ich es lieber "Sauber"
gemacht. und ein BS170 verbraucht auch nicht soviel Platz.

von Guido (Gast)


Lesenswert?

Was bite ist bei mir unsauber?

von Hagen R. (hagen)


Lesenswert?

Hm, ich habe mir jetzt mal Guidos Schaltung angeschaut. Auch da könnte
man meiner Meinung nach was verbessern :)

Also vom Cap zum ADC Eingang einen 240 Ohm Widerstand rein. D2 und
PORTX0 entfallen vollständig. Der ADC ist normalerweise auf Eingang
geschaltet und zum Entladen des Cap wird er auf Ausgang->Low
geschaltet. Somit spart man pro Kanal einen kompletten Pin.

Klar, man müste dies noch praktisch testen.

Gruß Hagen

von Hagen R. (hagen)


Lesenswert?

Der Vorteil von Guidos Schaltung ist die Position des Potis. Man kann es
direkt auf dem Drum bauen und den Rest der Schaltung separieren.

Gruß Hagen

von Guido (Gast)


Lesenswert?

@Hagen

es ist zwar Zeitunkritisch, aber man sollte wie Du weißt den ADC nicht
als ADC und PORT nutzen. Dennoch kann ich Deinem Vorschlag zustimmen da
der ADC sich wirklich langweilt und man das Signal ruhig zig mal
oversamplen kann.

Bau ich bei mir mal um "wenn ich Zeit habe"

Gruß, Guido

von Hagen R. (hagen)


Lesenswert?

Naja deine Beschaltung hat einen großen Vorteil meine ich. Über D2 und
PORTX auf HIGH hast du einen Überspannungsschutz für den ADC
realisiert. Alles was am ADC Eingang über Vcc +0.7V liegt wird in den
PORTX über D2 abgeleitet. Das ließe sich aber auch anders
bewerkstelligen, wenn mans real auch braucht.

Ich stimme dir zu das man den ADC nicht so mißbrauchen sollte, wenn es
draufankommt. Alledings sind die AVRs in diesem Punkt wirklich robust
und ich wüste auch nicht das davon irgendwas in den Datenblättern
steht. Wenn was nicht funktionieren sollte, so meine ich würde es eher
zu Problemen mit einem Übersprechen der einzelnen ADC Kanäle auf die
anderen ADC Kanäle, kommen.

Gruß Hagen

von Guido (Gast)


Lesenswert?

der ADC sollte von Haus aus bei den neueren AVRs eh Klemmdioden drin
haben. Ich wüßte nicht, warum die beim benutzen des Ports als ADC
wegfallen sollten.

Aber wie gesagt, ich teste das mal. Das was da gesampled wird ist ja so
schnarchlangsam, das man es eigentlich mitschreiben könnte.

Gruß, Guido

von Hagen R. (hagen)


Lesenswert?

Auf alle Fälle meine ich das beide Schaltungsvarianten zwei komplett
andere Paar Schuhe darstellen und demzufolge in der Software anders
ausgewertet werden müssen. Das Ladeverhalten vom Cap wird je nach
Schaltung unterschiedlich sein. Simons Schaltung wird den Cap immer mit
gleicher Geschwindigkeit aufladen und das nachgeschaltete Poti stellt
die zu messende Spannung am ADC ein. Guidos Schaltung wird je nach Poti
Stellung das Ladenverhalten vom Cap beeinflussen und die Software muß
wie er's beschrieben hat die Ladekurve des Caps über den ADC messen.
Ich weiß nun nicht was davon die bessere Lösung ist, aus Sicht eines
Drummers. Persönlich mein ich das man über das Messen des
Ladeverhaltens des Caps mehr in Software beeinflussen kann, und das das
vorgeschaltete Poti wie in Guidos Schaltplan, stärker die
Anschlagstärke/Dauer des Piezos beeinflussen wird.

Gruß Hagen

von Simon K. (simon) Benutzerseite


Lesenswert?

@Guido:

Ich habe das "sauber" extra in Anführungsstriche gesetzt, da das
nicht so hart gewertet werden soll.

Deine Version ist insofern unsauber (finde ich), dass um den Cap zu
entladen der Strom durch den Mikrocontroller auf Masse fließt. Wenn ich
nun meinen Cap per 10cm Leitung angeschlossen, dann fließt der Strom
erst wieder 10cm zurück, durch den Mikrocontroller und dann wieder 10cm
zum Cap hin. Also habe ich den FET direkt neben den Kondensator gesetzt.
Zumindest ich finde das so "sauberer", wie ich schon sagte.

Ein "Problem" was ich auch feststellen konnte, ist dass aufgrund der
LED erst (relativ..) steil entladen wurde und dann nur noch langsam, da
die Spannung am Kondensator allmählich kleiner wird, als die
Durchlassspannung der Diode. Ein weiterer Grund, den ICH nicht so
"sauber" finde. Mit meinem FET habe ich eine sehr steile
Entladeflanke.

@Hagen:
Ich persönlich bevorzuge, den Trimmer/Poti hinter die Aufladeschaltung
zu setzen, eben um nicht auf der Kondensatorkennlinie
"herumzureiten". Denn man muss ja auch beachten, wenn man ein 1M Ohm
Poti auf 50% (Spannungsteiler) stellt, dass da 500kOhm in Reihe zum
Kondensator liegen. Ich lade, wie schon von dir gesagt, den Kondensator
gleichmäßig und teile einfach die Spannung die anliegt so, dass die
Spannung im ADC Bereich liegt. (Bei richtiger Einstellung sollte hier
auch kein >5V Peak zum ADC gelangen).

von Simon K. (simon) Benutzerseite


Lesenswert?

Ach quark. LED = Diode.

von Hagen R. (hagen)


Lesenswert?

@Simon: wenn ich dich also richtig verstanden habe dient dein Poti nur
zur Anpassung des Bufferkondensators/Piezowandler an deinen ADC
Eingang. Dh. dein Poti hat nichts damit zu tun das man damit die
Empfindlichkeit des Drumpads einstellen möchte. Ist das korrekt ?

Sollte das so sein so würde doch eine Zenerdiode statt dem Poti
ausreichend sein, oder ?

Ich bin kein Drummer, noch nicht mal Musiker, aber ich denke das
besonders die Erkennung der Anschlagstärke und Geschwindigkeit (Pitch
heist das wohl?) von Wichtigkeit ist. Und um dies für jedes Pad
einstellen zu können gibt es ja nur 2 Möglichkeiten: a.) per Hardware
wie bei Guidos Schaltung oder b.) per Software.

In deinem Falle dient aber das Poti eben nicht zur Veränderung der
Ladekurve am Cap. sondern nur als Spannungsvorteiler für den ADC.

Oder liege ich da vollkommen falsch ?

Gruß Hagen

von Simon K. (simon) Benutzerseite


Lesenswert?

@Hagen:

Natürlich dient das Poti zur Empfindlichkeitsanpassung des Pads. Es
gibt  durchaus verschieden Drum-Pads die unterschiedlich starke Signale
liefern. Und um den relevanten (also den, den mit dem der Drummer auf
die Pads schlägt) Bereich in den ADC-Bereich hereinzukriegen, existiert
das Poti.

Wenn ich mit meinem Pad erstmal einen Kondensator auflade, der, sagen
wir mal, jetzt mit 30V geladen ist (Ziemlich harter Anschlag), dann
wird das Signal auf 2,56 herunterskaliert mit dem Poti. Also entspricht
dieser Anschlag jetzt Maximalausschlag am Drum-Controller.

Und jetzt stell dir mal vor, man schlägt das Pad in der Regel nicht so
stark an, dann wird die Spannung am ADC garantiert nicht 2,56V
übersteigen. Also brauche ich da keine Schutzdioden oder ähnliches.

von Valerian V. (valerian)


Angehängte Dateien:

Lesenswert?

Hallo!

Bin neu hier im Forum und kenne nicht schlecht aus in der Elektronik 
aber dann doch auch irgendwie haha, darum hätte ich da eine Frage zu 
einem Schaltplan den ich einige Stunden gesucht hatte!

Diese OP´s werden ja mit 5V betrieben d.h heißt das am Ausgang bei 
max.Anschlag auf den Piezo werden am Ausgang 0-5V ausgegeben wenn ich 
das richtig verstanden habe.

Da ich aber am Ausgang 0-3,3V haben möchte müsst ich ja dann eig. nur 
den OP mit 3,3V versorgen?! Oder passen dazu meine Widerstandwerte dann 
nicht mehr?

Und VR1-VR8 sind Potentiometer würde ich vermuten?! Nur um sicher zu 
gehen :D


Das ganze will ich dann mit A/D Wandler (MCP3008) am Raspberry einlesen. 
Brauche di 3,3V da der Raspberry nicht mehr als 3,3V verträgt und 
dadurch muss der MCP auch mit 3,3V betrieben werden. Und die Eingänge 
des AD´s dürfen die Betriebsspannung nicht überschreiten darum muss ich 
die Piezoschaltung umbauen!

Was meint ihr zu der Schaltung? Könnte die so  klappen wies da 
aufgezeichnet ist. Hab mich mit OP´s erst wenig beschäftigt, wär ein 
Thema wo ich echt gerne dazulernen will und würd mich über qualifizierte 
Ratschläge zur
Verbesserung freuen.
Danke
Valerian

: Bearbeitet durch User
von Axel R. (Gast)


Lesenswert?

1K Widerstände in die Ausgänge und wird gut gehen.
edit
besser 10K

von Valerian V. (valerian)


Lesenswert?

Ok danke, also meinst 10k pullwiderstände auf Ground oder?

von Axel R. (Gast)


Lesenswert?

Valerian Valerian schrieb:
> Ok danke, also meinst 10k pullwiderstände auf Ground oder?

Warum Pullwiderstände auf Ground? Kannst Du deine Annahme begründen?

Reihenwiderstände in die Leitungen, damit die Schutzdioden im Eingang 
gegen GND bzw. VCC nicht soviel Strom ableiten müssen. Deine 
Eingangssignale werden somit automatisch auf VCC+0.3V begrenzt.

von Axel R. (Gast)


Lesenswert?

Sonst brauchst Du andere Verstärker. LMV358 könnten gehen.
Die invertierende Beschaltung der OPVs machen die EIngänge für den Piezo 
recht niederohmig. Du erhälts aber höherer Spannungsspitzen, wenn die 
Potis dort rauskommen und deine Piezo direkt an den (hochohmigen) 
Eingang kommen. Das 100K Poti dämpft schon und die 22K 
Eingangswiderstand tun ihr übriges. Da ich aber die Sensorik und den 
Aufbau nicht kenne, kann ich nicht viel mehr dazu sagen. Beachte die 
Maximale und mininmale Eingangsspannung beim Operationsverstärker. Du 
brauchst sicher einen Rail-to-Rail Typ.
Verwende zwei Doppel-Opv gesockelt. die haben (fast) alle die gleiche 
Anschlussbelegung, wenn Du sie als DIP8 kaufen kannst, sockelst Du die 
und kannst sie tauschen, ohne in der Schaltung etwas ändern zu müssen.
Probiers aus, kaputt gehen kann nicht viel.
http://www.reichelt.de/ICs-MCP-6-9-/MCP-602-I-P/3//index.html?ACTION=3&GROUPID=5473&ARTICLE=90032&SEARCH=mcp&SHOW=1&OFFSET=500&;
http://www.reichelt.de/IC-Sockel/GS-8/3//index.html?ACTION=3&GROUPID=3215&ARTICLE=8230&SHOW=1&OFFSET=500&;

von Axel R. (Gast)


Lesenswert?

Input Characteristics LMV358
1
Input Common Mode Voltage Range² 
2
○○LO 0   -0.4 V
3
○○HI 3.8  3.6 V

²Bei 5Volt

Bei 3.3Volt sieht die Sache noch schlechter aus.
Bei dem MCP602, den ich siegessicher beim reichelt rausgesucht habe, 
steht zwar RailtoRail. Aber nur auf den Ausgang bezogen!!
Der Eingang darf auch nicht mehr als (VCC-1.2)Volt "sehen"!
Dein OPV muss also In und OUT R2R sein. Lässt Du die Schaltung so, ist 
die hochohmigkeit des Eingangs unerheblich, das sie hier von der 
IEngangsbeschaltung bestimmt wird, die um Größenordnungen geringer 
ausfällt.

von Valerian V. (valerian)


Lesenswert?

Axel R. schrieb:
> Warum Pullwiderstände auf Ground? Kannst Du deine Annahme begründen?

Naja begründen jetzt nicht direkt, ausser das bei der Fortsetzung dieses 
Schaltplanes diese auf Ground gezogen sind!
Links obene im Eck kommen die Ausgänger der OP´s an soweit ich das 
geschnallt haben :-)

von Axel R. (Gast)


Lesenswert?

such doch mal hier im Forum nach Piezo Drum MIDI oderso. das haben wir 
doch schon 2008-2009 mitm Guido zusammen gebaut.
http://www.youtube.com/watch?v=2ZzUYOwYLIU

von Valerian V. (valerian)


Angehängte Dateien:

Lesenswert?

Sorry hab den Schaltplan vergessen! :-)

von Valerian V. (valerian)


Lesenswert?

Ach ja und echt danke für die anderen Beiträge was du verfasst hast 
auch, versteh zwar noch net ganz so viel davon aber ich versuch mal da 
ich mich da einlese! Habe zwar Mechatroniker gelernt aber mich jetzt 
erst seit 6 Monaten mit der mikroelektronik sehr intensiv damit 
beschäftigt :)

von Axel R. (Gast)


Lesenswert?

>mit A/D Wandler (MCP3008) am Raspberry einlesen.
ich sehe in deiner Schaltung keinen.
BTW: 2006 gab es noch keinen Raspberry...

Nimm die erste Schaltung, die Du gepostet hast und häng die mit 10k in 
Reihe an deie ADCs von deinem Raspberry. Dann berichte uns. Das 
funktioniert schon.

Es kann nicht schaden, ein neuen Thread zu eröffnen und kene Leichen 
auszubuddeln.
Ich Trottel fall NATÜRLICH wieder auf so eine Karteileiche rein. ;)

von Valerian V. (valerian)


Lesenswert?

Axel R. schrieb:
> Nimm die erste Schaltung, die Du gepostet hast und häng die mit 10k in
> Reihe an deie ADCs von deinem Raspberry. Dann berichte uns. Das
> funktioniert schon.

Ja also der Raspberry hat ja keine Analogeneingänge also keinen ADC on 
Board darum muss ich das ganze über den MCP3008 machen aber an der 
Schaltung wird sich ja dadurch nichts ändern vermute ich jetzt mal.

Ach ja und auch noch ne andere Frage. Was hab ich dann hier für ne 
beschaltung des Opv? (invertieren, nicht invertieren...... usw?)
Und dieser OPv ist ja auch für rail-to-rail ausgelegt oder!? (Das heißt 
doch das die Ausgangsspannung nahe der Betriebsspannung ist)

Nur das ich das ganze auch verstehe was ich aufgebaut habe.

Hab die Schaltung jetzt aufgebaut und funktioniert wunderbar, hab zwar 
noch keinen ADC dran hängen abr die Ausgangsspannung ändert sich 
abhängig von der Kraftaufwirkung des Piezos :-) Fangt also schon mal 
ganz gut an!
Danke!
Valerian


Joa mach ich beim nächsten mal, hab mir aber gedacht ich poste es hier 
weils ja ums selbe geht und so^^

: Bearbeitet durch User
von Valerian V. (valerian)


Lesenswert?

Hätte jemand vielleicht Zeit der mir die Fragen noch kurz beantworten 
könnte? Wäre echt nice, schon langsam versteh ich einigermaßen so nen OP 
aber würde mir trotzdem sehr weiter helfen,

Danke Valerian :)

von Axel R. (Gast)


Lesenswert?

Valerian Valerian schrieb:
> Hab die Schaltung jetzt aufgebaut und funktioniert wunderbar, hab zwar
> noch keinen ADC dran hängen abr die Ausgangsspannung ändert sich
> abhängig von der Kraftaufwirkung des Piezos :-) Fangt also schon mal
> ganz gut an!

Klasse! Welche Operationsverstärker hast Du nun verwendet?
MIt welcher Betriebsspanung läuft das gerade?

Wenn das die Schaltung von oben
http://www.mikrocontroller.net/attachment/215753/Piezo_to_ANalog.gif
mit den LM324 ist, dann ist das invertierend. Eingangswiderstand 100K 
poti parallel 22K zum OPV, je nach Potistellung bewirkt dieser 
Eingangswiderstand ein Einbrechen deiner Piezorohspannung. Wenn Du 
"lauter" drehst, bricht die Spannung mehr zusammen, weil langsam der 22K 
zum tragen kommt. Es wird dann irgentwie nicht wirklich lauter, nur der 
Frequenzgang deiner Piezoscheibe ändert sich etwas. Wird aber soo 
schlimm nicht sein, der Effekt. Messbar auf jeden Fall. Von den 
Ausgängen auch hier mit Reihenwiderständen zum ADC. ZU hochohmig dürfen 
diese lt. Datenblatt leider auch wieder nicht werden... bau es mal auf, 
das passt da schon alles.Da geht soo schnell nichts kaputt. Höchstens, 
das der ADC bei 0x03ff (oberhalb seiner Referenzspannung) "hängen" 
bleibt, wenn er am Eingang (etwas) übersteuert wird.
kannst Du denn den ADC schon per SPI auslesen?

von Axel R. (Gast)


Lesenswert?

eigentlich müsste man die Spannung der (+)IN Pins auf halbe 
Betriebsspanung ziehen und erst einmal die (wechsel)Spannung 
vorverstärken. Diese mit einem zweiten OPV dann aktiv gleichrichten und 
auf 0-3.3V normieren.
Aber so, wie die Schaltung im Netz steht, geht es erstmal auch. Trotz 
negativer (Piezo)Spannungsspitzen am Eingang der OPVs...
Wenn man auf die Trommel drischt, geht der Impuls ja auch ins negative 
hinein, wenn das Trommel"fell" sich hin und her bewegt.
Ich wollte das nur anmerken, das ich mir schnon im klaren bin, das die 
Schaltung eigentlich "Pfusch am Bau" ist, wie so vieles, was man im Netz 
so findet.

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

So "mussten" wir das früher bauen.
Mit plus und minus 15Volt. nicht mit 3.3V ...
Das man's mal gesehen hat ;)
Davon dann ACHT Stück!

von Valerian V. (valerian)


Lesenswert?

Axel R. schrieb:
> MIt welcher Betriebsspanung läuft das gerade?


Joa freut mich richtig! :-)
Ähm LM324, passt einfach prächtig da ich 8 pads bauen will und die haben 
ja 4 OP drinnen.

Danke für die beschreibung, wird schon ein bisschen klarer das ganze!

Axel R. schrieb:
> kannst Du denn den ADC schon per SPI auslesen?
Noch nicht ganz Schaltung alles aufgebaut aber morgen kommt ein Freund 
zu mir der programmiert, hat auch schon ein Programm entworfen um die 
Analogen Werte vom MCP3008 über die SPI Stelle einzulesen! Na, dann schu 
ma mal wies morgen ausschaut, werd mich auf jeden Fall melden! :-)

Danke Valerian

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.