Werbung
wegklatschen
Überblick
Die echte Pest ist zwar inzwischen weitgehend ausgerottet, aber
inzwischen werden wir virtuell "gepestet": mit Werbung. Akustische
Werbepest, dümmliche Eigenwerbungs-Jingles und flaches
Moderatorengequatsche blende ich beim Musikhören schon seit Jahren mit
der
"Halt-die-Klappe"-Schaltung
aus. Ein ATtiny13 schließt auf Knopfdruck das Audiosignal für eine
feste Zeit kurz und gibt es danach ohne Zutun wieder frei. Die
Schaltung wird in die Leitung zwischen Soundkarte und Aktivboxen bzw.
in die "Line"-Verbindung zwischen Tuner und Stereoanlage eingefügt. Die
Schaltung braucht kaum Strom, die Knopfzelle ist nach 6 Jahren immer
noch die erste.
Da der Mikrotaster etwas "fummelig" ist, habe ich nun versucht, ihn
durch einen Klatschschalter zu ersetzen. Man klatscht zwei Mal kurz
nacheinander in die Hände, die Schallimpulse werden durch einen
Piezoschwinger (Buzzer) aufgefangen und durch den internen Komparator
des ATtiny13 ausgewertet. Die Referenzspannung für den Komparator wird
durch einen Spannungsteiler erzeugt; sobald die positive Halbwelle des
Piezosignals höher als diese Referenzspannung ist, wird ein Interrupt
ausgelöst.
Leider muss der ATtiny im Idle-Betrieb laufen (im Powerdown-Modus wird
auch der Komparator stillgelegt) und verbraucht so ständig 300 µA, also
2,6 Ah/Jahr. Man kann die Schaltung notfalls aus 3 Mignon-Akkus
betreiben - die nach einem knappen Jahr aufgeladen werden müssen - oder
über einen USB-Stecker aus einem Rechner.
Hardware
Wie bei der "Halt-die-Klappe"-Schaltung wird das Audiosignal durch die
Schaltung durchgeschleift. Im NF-Signalweg liegen zwei Widerstände mit
2,2 kOhm, die das Signal kaum bedämpfen. Werden die Ports PB3 und PB4
des ATtiny13 als Ausgang konfiguriert, legen sie niederohmig 0V an die
Ausgangsseite der Widerstände. Mit ihrem Restwiderstand von etwa 50 Ohm
schließen sie die NF weitestgehend kurz.
Der als Mikrofon dienende Buzzer liegt am nichtinvertierenden
Komparatoreingang (PB0). Zur Ableitung statischer Aufladung liegt ein
sehr hochohmiger Widerstand (10 MOhm) parallel. Verwendet wurde ein
Piezoschallwandler "Summer BM15B" von Reichelt.
Am Referenzeingang (PB1) liegt ein Spannungsteiler 1 MOhm / 1 kOhm, die
Referenzspannung beträgt also nur etwa 3 - 5 mV (der Buzzer gibt nur
wenig Spannung ab, wenn er nicht direkt erschüttert, sondern lediglich
mit Schall beaufschlagt wird). Zur feineren Einstellung könnte man den
1 kOhm-Widerstand durch einen Trimmer mit 5 oder 10 kOhm ersetzen.
Die Betriebsspannung des ATtiny wird wie üblich mit 100 nF abgeblockt,
als Sicherungs-Ersatz sind 10 Ohm in die Stromversorgung eingefügt.
Der Schaltplan und das Streifenraster-Platinenlayout (Ansicht von der
Oberseite):
Software
Die erste Variante (attiny-klatschschalter-test.bas) schaltet nicht ein
NF-Signal, sondern eine LED an PB3; sie diente zum Ermitteln des besten
Spannungsteilerverhältnisses.
Im Beispielprogramm ist informationshalber angedeutet (und
auskommentiert), wie man den ADC-Multiplexer nutzen kann, um den
nichtinvertierenden Komparatoreingang von PB0 auf einen anderen Pin zu
verlegen (der invertierende Komparatoreingang lässt sich nicht auf
einen anderen Pin verschieben, man kann ihn aber auf die interne
1,1V-Referenzspannung des AD-Wandlers umschalten).
Im Programm werden zunächst alle Digitaleingänge deaktiviert (spart
Strom), der Komparator und die Interrupts freigegeben sowie die
Interruptroutine definiert. Tritt ein Schallereignis auf, wird der
Komparator-Interrupt ausgelöst und in der Interrupt-Routine die
Variable "aci_cnt" um eins erhöht.
In der Hauptschleife wird auf Interrupts gewartet. Ein Schallereignis
kann mehrere Interrupts auslösen. Daher wird 100 ms abgewartet (bis das
Schallereignis abgeklungen ist) und die Zahl der Interrupts in der
Variable "Aci_cmp" gespeichert. Treten durch das Doppelklatschen
innerhalb von 300 ms weitere Schallereignisse auf, ist die Variable
"Aci_cnt" größer als "Aci_cmp". Dann wird die LED kurz ein- und wieder
ausgeschaltet.
Die zweite Variante (werbung-wegklatscher.bas) ist weitgehend
identisch, nur werden statt des Ausgangspegels an PB3 die beiden
Richtungsregister DDRB.3 und DDRB.4 niederohmig geschaltet und nach 90
s wieder hochohmig gemacht.
Aufbau
Der Buzzer ist sehr empfindlich gegen Körperschall (eigentlich ist er
besser als Erschütterungsmelder denn als Mikrofon geeignet). Im
vorgeschlagenen Lochraster-Platinenlayout ist er fest eingelötet; die
ganze Schaltung muss dann "in Watte gepackt" werden, damit sie nicht
auf Erschütterungen reagiert. Alternativ kann man den Buzzer von der
Platine trennen, über zwei flexible Litzen verbinden und tatsächlich in
Watte packen.
Ich muss bekennen, die Schaltung nur im Versuchsaufbau betrieben zu
haben und wieder die alte Schaltung mit dem Mikroschalter zu verwenden;
die Klatscherei war mir zu laut ;-)
Weitere Varianten
Da der Stromverbrauch der Schaltung ohnehin recht hoch ist, könnte man
auch über ein 5V- Relais die Lautsprecherleitungen einer Stereoanlage
schalten, statt mit den Mikrocontroller-Pins das Line-Signal
kurzzuschließen.
Download des Bascom-Quelltextes: 0117-werbung-wegklatscher.zip
' Programm vergleicht Ausgangsspannung eines als Mikrofon eingesetzten Piezoschwingers
' mit der Spannung an einem Spannungsteiler. Nach einem Doppelimpuls (Doppelklatschen)
' werden PortB.3 und PortB.4 für 30 Sekunden niederohmig geschaltet, um die NF kurz-
' zuschliessen.
' Compiler: BASCOM 2.0.7.5 Demo
'--------------------------------------------------------------------------------------
$Regfile = "attiny13.dat"
$Crystal = 1200000
$Hwstack = 32
$Swstack = 8
$Framesize = 8
DIDR0 = &B00011111 ' alle Digitaleingänge deaktivieren
' Dies wäre die "offizielle" Bascom-Syntax für den Komparator:
' Config ACI = ON , COMPARE = ON
' Enable Interrupts
' Enable ACI
' so geht es mit direkter Register-Manipulation
ACSR.ACO = 1 ' Output to IRQ ACO
ACSR.ACIE = 1 ' AC Interrupt Enable
SREG.7 = 1 ' Interrupts enable
ACSR.ACD = 0 ' AC Interrupt enable
' Alternative Komparatoreingänge wählt man so:
' ADCSRB.ACME = 1 ' Multiplexer enable
' ADMUX = 2 ' PinB.4 (ADC2) statt PinB.1
' ACSR.ACBG = 1 ' 1,1V Bandgap statt PinB.0
Dim Aci_cntr As Byte
Dim Aci_cmp As Byte
On ACI on_aci ' Interrupt-Routine definieren
Do
If Aci_cntr > 0 Then ' Interrupt(s) aufgetreten durch das erste Klatschen
Waitms 100 ' falls erstes Klatschen mehrere Interrupts erzeugt
Aci_cmp = Aci_cntr ' Zahl der Interrupts zwischenspeichern
Waitms 300 ' auf zweites klatschen warten
If Aci_cntr > Aci_cmp Then ' weitere Interrupts aufgetreten?
DDRB.3 = 1 ' Ausgänge niederohmig schalten
DDRB.4 = 1
Wait 90 ' muss ggf.verländert werden
DDRB.3 = 0 ' Ausgänge hochohmig schalten
DDRB.4 = 0
End If
Aci_cntr = 0
End If
Idle ' Powerdown schaltet leider den Komparator ab
Loop
on_aci:
Incr Aci_cntr
Return
End