AT90S1200 und PC-Speaker

Gast #59602
Lesenswert?

geht das irgendwie mit den bordmitteln?
ich will den atmel keine melodien spielen lassen, sondern der soll
einfach nur pieps machen... (und das nichtmal in einer bestimmten
tonlage ;) )
Gast #59604
Lesenswert?

wenn du'nen pwm ausgang über hast, is zwar'ne verschwendung, aber
naja. würde aber keine interrupts oder sonstewas für so'n schnulli
verschwenden. da wärs mir eher wert für 30cent oder so 'nen dummen
6pin-teiler mit chip-enable-eingang nehmen und vom takt abzweigen
Gast #59606
Lesenswert?

der 1200er hat keinen PWM-Ausgang.
Schalte den Speaker einfach zwischen 2 Portpins, ggf. mit zusätzlichem
Widerstand.
Zum Programm:
entweder mit Timer, oder wenn der Chip sonst nichts zu tun hat, auch
mit einfachen delay.

ldi r16, 0b00000001
loop:
out PORTB, temp
cpl r16 //invertiert
//hier entsprechendes delay je nach Taktfrequenz und Tonhöhe
rjmp loop  //forever

eleganter gehts mit dem Timer, aber da du offensichtlich ganz am Anfang
bist, machs erst mal so.
Gast #59607
Lesenswert?

hab ich das richtig verstanden, dass der ton durch an-und ausschalten
zustande kommt?
wozu ist temp da? (oder is r16 = temp [im beispiel])
kann mir jemand einen anhaltspunkt geben, wie ich nen hörbaren ton
erzeugen kann?
Gast #59608
Lesenswert?

jo, temp ist r16.
Willst du einen Ton von z.B. 1kHz erzeugen, beträgt die Periodendauer
1ms, eine halbe Periode also 500µs. Die restliche Programmlaufzeit mal
ausser acht gelassen, muss die Verzögerung also 500µs betragen. Bei
1MHz Taktfrequenzsind das 500 Takte, bei z.B. 4MHz 2000 Takte.
Kann man leicht mit Schleifen realiesieren:

delay:
ldi r17, 100
delay_loop:
dec r17  //1. Takt
nop      //2. Takt
nop      //3. Takt
brne delay_loop //4.+5.Takt

erzeugt also eine Warteschleife von 100*5 Takten, also bei 1MHz 500µs.
Gast #59609
Lesenswert?

auf jeden fall schonmal vielen dank.
seh ich das jetzt richtig, dass ich, wenn der ton eine sekunde gehalten
werden soll, das ganze dann bei dieser frequenz 1000 mal wiederholen
muss?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren