Forum: Mikrocontroller und Digitale Elektronik AT90S1200 und PC-Speaker


von Thomas Klingbeil (Gast)


Lesenswert?

Hallo,
hat jemand eine Idee, wie man einen AT90S1200 dazu bringen kann auf
einem angeschlossenen PC-Speaker einen Piepston auszugeben (als
Statusmeldung)?

Danke,
Thomas

von Dingens (Gast)


Lesenswert?

an/abschaltbarer rechteckgenerator. ne555 tuts.

von Thomas Klingbeil (Gast)


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 ;) )

von Henning (Gast)


Lesenswert?

nimm nen piezo, der brauch kein signal, nur spannung

von Dingens (Gast)


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

von Thomas Klingbeil (Gast)


Lesenswert?

hab ich vielleicht vergessen zu sagen: bin wirklich noch anfänger.
was ist denn ein pwm-ausgang? und hat der atmel AT90S1200-4 sowas?

von crazy horse (Gast)


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.

von Thomas Klingbeil (Gast)


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?

von crazy horse (Gast)


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.

von Thomas Klingbeil (Gast)


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?

von Henning (Gast)


Lesenswert?

du must den code der die pins schaltet und die warteschleife enthält
eine sekunde lang ausführen (in einer weiteren schleife)

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.