Zitat Zitat von taylor22
... Lautsprecher mit ... AVR uC ansteuern! ... muss nur Pieps-Ton mit unterschiedlichen Frequenzen ausgeben können...
Na ja, mit AVR (und Transistor) gehts so so, la la. Es ist halt eine dämliche Rechteckspannung - das hört man der auch an.

Zitat Zitat von Willa
Auf dem RN-Control Board ist doch ein Lautsprecher drauf ...
Stimmt, da steht auch "Speaker" - aber das ist dem Aussehen (und dem Schaltplan nach) ein Piezo. Und "Treiber" ist auch nicht auf meiner RNControl - und die ist von vorletzter Woche (noch mit Aufkleber "Remove after washing" ).

Ich bin grad auch dabei, Töne auszugeben - es klingt schrecklich mit der Rechteckspannung. Als Vergleich habe ich meine Stimmgabel genommen - na ja, den "Ton" kriegt man schon frequenzgenau hin. Ich Suche ja nicht unbedingt die Oberwellen von einer Stradivari, ich würde eher gerne so einen Pfiff loslassen können - aber davon bin ich Jahrhunderte entfernt.

Ach so, ja, taylor22 fragt ja, wie es geht:
Code:
;===================================================================================

#include "tn13def.inc"

; Interrupthandler-Tabelle (aus ATTiny13_doc2535.pdf, Seite 42)
;	Address Code	Labels		; Comments
.org	0x0000	rjmp	reset		; Reset Handler
;.org	0x0003	rjmp	isr_x13		;TIMO_OVF = Timer0 Overflow Handler

.org	0x0006	rjmp	isr_ctc		; IRS für Timer0 CompareA Handler
;
;===================================================================================
; Hauptprogramm
;===================================================================================
;
reset:		;=== Generelle Initialisierung
		; Zuerst Stack definieren;
	ldi	a,RAMEND	;Ram Ende des tiny13
	out	SPL,a		;Stack Pointer tiny13 setzen
;
anfang:		;=== Hier beginnt das Hauptprogramm
	rcall	mc_init
	rcall	isr_ini		;Initialisiere die ISR
;
;
hauptp:		;=== Löse Aufgabe: Teste Port PB1 auf Tastendruck. WENN
		;    - Taste gedrückt: rLED an und piezo/PB4 an
		;    - Taste gelöst  : rLED aus und piezo/PB4 aus
;
	sbi	portb,rLED	;Rote LED/PB3 aus
	sei			;Globel Interrupt an
;
h2:		;=== Hier beginnt das Hauptprogramm
	in	a,pinb
	sbrc	a,taste0	;Wenn Pinb_0 (0..7) = 1, dann rLED/PB3 einschalten
	rjmp	tonan		;  sonst schalte die piezo/PB4 ein
	rjmp	tonaus
;
tonan:
	in	a,SREG
	sbrc	a,7	;Ist global interrupt gesetzt?
	rjmp	h2
	sbi	portb,rLED	;Rote LED/PB3 an
	sei			; ... und dazu einfach Interrupt einschalten
	rjmp	h2
;
tonaus:
	in	a,SREG
	sbrs	a,7	;Ist global interrupt gesetzt?
	rjmp	h2	;   nein, dann gleich abschalten
;
	cli			;Verbiete Interrupts
	cbi	portb,rLED	;Rote LED/PB3 aus
	cbi	portb,piezo	;    piezo/PB4 aus
;
	rjmp	h2
;
;===================================================================================
; Prozeduren
;===================================================================================
;
;===================================================================================
; Initialisierungprozeduren, für µC, ADC und Timer-ISR
;===================================================================================
;
mc_init:	;=== Initialisiere Mikrocontroller
		;ALLE Register initialisieren hier := pull-ups einschalten
;
	ldi	a,0b00111000	;
				;Datenrichtung "Eingänge" für ports 0 - 2
				;  und         "Ausgänge" für ports 3 - 5
	out	ddrb,a	
	ldi	a,0b00000000
	out	portb,a		;  ports aus-(=) oder ein(1)schalten;  low = sink
	ret		;=====----->>>>>
;
;
isr_ini:	;=== Initialisierung der ISR (war mal isrinit_x15)
;
;;Timer Register werden belegt
	ldi	a,(1<<wgm01)	;prescaler ist 1, waveform = CTC
	out	tccr0a,a	;Register TCCR0 ist für den Prescaler zuständig
	ldi	a,tmrprsc	;prescaler, siehe oben, Abstand zum nächsten
	out	tccr0b,a	;  Interrupt bestimmt CTC-Preload tmrprsc
	ldi	a,(1<<ocie0a)	;Hier Interrupts nach CTC eingeschaltet
	out	timsk0,a	;Register TIMSK ist dafür zuständig 
	ldi	a,tmrprld	;Hier wird der Timer vorgeladen. Er läuft dann
	out 	TCNT0,a   	; .. tmrprld mal durch bevor ein Interrupt auftritt
	out	ocr0a,a		;Prescaler tmrprs in OCR0A
	ret		;=====----->>>>>
;
;
;===================================================================================
; Interrupt-Service-Routine
;#######>>>>> Muss real nicht zuerst der (letzte) PC gepusht werden ?
;===================================================================================
;
;
isr_ctc:	;=== ISR läuft sowieso auf 880 Interrupts je Sekunde, also 440 Hz
		;    zum Ansteuern des piezo einfach toggeln
	in	ac,pinb
	sbrs	ac,piezo	;Ist Rampe vom piezo an?
	rjmp	pinan		;Piezo war aus, also anschalten
;
pinaus:		;=== piezo ist an, also ausschalten, ebenso LED/PB3
	cbi	portb,piezo
	rjmp	iraus
;
pinan:		;=== piezo ist aus, also den und LED/PB3 anschalten
	sbi	portb,piezo
;
iraus:
	reti		;=====----->>>>>
;
;===================================================================================
; Ende des Quellcodes
;===================================================================================
Ich schalte den Ausgang "piezo" mit einer Taste ein. Der Piezo jammert solange, wie die Taste gedrückt wird. Funktioniert - aber es ist eigentlich nix für menschliche Ohren

Ja, und noch meinen "Schaltplan" aus dem Quellcode.
Code:
;             +--------+          
; Vcc --------+ LP2950 +-------tiny13-Vcc---------------------------+ 
; (9VBlock)   |3      1|                          \  Taste          |
;             |   2    |       tiny13-PB0---+----+ |----------------+
;             +---+----+                    |                        
;                 |            +-----+      |                        
;                 +------------+ 10K +------+                        
;                 |            +-----+                               
;                 |                                   rLED|\ |       
;                 |            tiny13-PB3-----------------| >+------+
;                 |                                       |/ |      |
;                 |                                                 |
;                 |            tiny13-PB4-----Piezosummer-----------+
;                 |                                                 |
;                 |                           +------+              |
; GND-------------+------------tiny13-GND-----+ 100R +--------------+ 
;                                             +------+
taylor22 - musst Dir halt für Deinen µC umpfriemeln.

Übrigens gibts ein Demo auch in Hochsprache:
https://www.roboternetz.de/wissen/in...oprogramm_in_C
unter "/*### Sound durch den Speaker ausgeben ###*/"