Werbung wegklatschen       

von Ralf Beesner                  
Elektronik-Labor   Projekte   AVR 


 

Ü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


Elektronik-Labor   Projekte   AVR