Forum: Mikrocontroller und Digitale Elektronik Einfache Soundausgabe (I2S, PWM, DAC,.)


von peterguy (Gast)


Lesenswert?

Hi Leute,

für mein aktuelles Projekt möchte ich einen einfache Soundausgabe 
umsetzen.
Im Prinzip reichts wenn ich ein klicken (für den Touchscreen) und ein 
Piepen(als Warnton) ausgeben kann.

Der STM32, den ich verwende bietet DAC, I2S und PWM Kanäle.

Was davon sollte ich nehmen um möglichst einfach zum Ziel zu kommen?
Wie sieht die Peripherie aus?

Grüße,
Peter

von DerER (Gast)


Lesenswert?

Hallo!

Nimm doch einfach einen fertigen Summer
Beispiel Reichelt "SUMMER HDB 06"

Einfach per Transitor an einen Portpin,
einige ms ansteuern: Klicken
einege s ansteuern: Piepsen

Wenn es verschiedene Tonhöhen werden sollen:

Lautsprecher und PWM

Grüße!

von peterguy (Gast)


Lesenswert?

Oh jee, das sind ja alles so Riesenviecher.

Habe mir jetzt diesen hier:
http://www.reichelt.de/?ACTION=3;ARTICLE=35918;PROVID=2402
mal rausgesucht, der dürfte noch grad so auf meine Platine passen.

Werde den Summer dann über nen Transistor an meinen DAC hängen. Damit 
sollte es dann möglich sein die Lautstärke zu regulieren.

Soweit die Theorie, muss das ganze erstmal austesten. Die Datenblätter 
von den Dingern sind ja nicht gerade besonders aussagekräftig.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

peterguy schrieb:
> Werde den Summer dann über nen Transistor an meinen DAC hängen. Damit
> sollte es dann möglich sein die Lautstärke zu regulieren.
Was bringt dich zu dieser Annahme?
Da steht übrigens: Vcc = 4-6,5 VDC

von chris (Gast)


Lesenswert?

Einen Summer würde ich nie verwenden. Das würde verhindern, eigene Töne 
zu generieren.
Mit einer 8Bit PWM kann man schon eine relativ passable Audio Qualität 
erreichen und wav-Dateien ausgeben.

von peterguy (Gast)


Lesenswert?

Lothar Miller schrieb:
> Was bringt dich zu dieser Annahme?
> Da steht übrigens: Vcc = 4-6,5 VDC
Na ich würde den Summer mit "+" an 12V hängen, an "-" einen Widerstand, 
an diesen dann den Collector von nem Transistor. Dessen Basis wird von 
dem µC beschaltet und von Emitter zu Ground kommt auch noch ein 
Widerstand.
Je nach höher der Spannung an der Basis wird die Spannung über dem 
Emitter-GND Widerstand eingestellt und damit dann der Strom. Soweit die 
Theorie :-)

chris schrieb:
> Einen Summer würde ich nie verwenden. Das würde verhindern, eigene Töne
> zu generieren.
> Mit einer 8Bit PWM kann man schon eine relativ passable Audio Qualität
> erreichen und wav-Dateien ausgeben.
Das wäre natürlich auch eine gute Lösung.
Hast du eine Beispielschaltung parat?

von chris (Gast)


Lesenswert?

Es ist relativ einfach: In einer Interruptroutine werden mit einer 
Frequenz von ca. 30kHz Werte in das PWM-Register geladen. Die Werte sind 
die Abtastwerte aus dem WAV-File.
Wenn Du nur Töne erzeugen willst, kannst Du via DDS einen Akku in der 
Interruptroutine hochzählen.
An den PWM-Ausgang kannst Du entweder direkt eine Piezo-Speaker, einen 
RC-Tiefpass an eine Cinch Buchse, oder einen RC-Tiefpass und einen LM358 
mit Lautsprecher anschließen.

von Holger P. (Gast)


Lesenswert?

Ich habe einfach ein Piezo an einen Port angeschlossen und folgendes 
geschrieben:
1
.def Dummy2    = r17
2
.def Dummy3    = r18
3
4
Ton:
5
  ldi  Dummy3,$7F
6
Ton1:
7
    sbi   PortD,2
8
  ldi  Dummy1,$AF
9
  rcall Delay
10
  cbi   PortD,2
11
  ldi  Dummy1,$AF
12
  rcall Delay
13
  dec   Dummy3
14
  brne  Ton1
15
  rcall Delay2
16
17
  ldi  Dummy3,$7F
18
Ton2:
19
    sbi   PortD,2
20
  ldi  Dummy1,$7F
21
  rcall Delay
22
  cbi   PortD,2
23
  ldi  Dummy1,$7F
24
  rcall Delay
25
  dec   Dummy3
26
  brne  Ton2
27
  ldi   Dummy3,$6
28
W1: rcall Delay2
29
  dec   Dummy3
30
    brne  W1
31
32
  ldi  Dummy3,$FF
33
Ton3:
34
    sbi   PortD,2
35
  ldi  Dummy1,$DF
36
  rcall Delay
37
  cbi   PortD,2
38
  ldi  Dummy1,$DF
39
  rcall Delay
40
  dec   Dummy3
41
  brne  Ton3
42
  sbi   PortD,2   ; TonBit auf High damit nicht immer Strom fließt
43
  ret
44
45
; ============================= 
46
;    Delay 
47
;    :bei 8 MHz
48
; ----------------------------- 
49
Delay2:
50
         push Dummy1
51
         push Dummy2
52
53
         ldi  Dummy1, $30
54
S3:      ldi  Dummy2, $FF
55
S4:      dec  Dummy2
56
         brne S4
57
         dec  Dummy1
58
         brne S3
59
         
60
     pop  Dummy2
61
     pop  Dummy1
62
     ret
63
64
65
; ============================= 
66
;    Delay 
67
;    :bei 8 MHz
68
; ----------------------------- 
69
Delay:
70
         ldi  Dummy2,$5
71
S2:      dec  Dummy2
72
         brne S2
73
         dec  Dummy1
74
         brne Delay
75
     ret

macht schön düdeldidüd

von peterguy (Gast)


Lesenswert?

So, habe jetzt eine super simple Schaltung mit einen 
Miniaturlautsprecher (vermutlich piezo) gefunden. Der Lautsprecher hat 
vllt einen Durchmesser von 1cm, is 5mm hoch und hat zwei Beinchen zum 
Anlöten (THT). Leider habe ich keine Bezeichnung von dem.

Was mir jetzt noch fehlt ist eine Bezugsquelle für so einen 
Lautsprecher, kann mir da jemand einen Typen + Lieferanten nennen?
Bei Reichelt gibts da anscheinend nix..

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.