Forum: Mikrocontroller und Digitale Elektronik Doppelton Erzeugung


von avrler (Gast)


Lesenswert?

Hallo,
hätte für mich da mal jemand nen Denkansatz:
Ich will über einen Port einen Doppelton (Überlagerung von zwei
Frequenzen) ausgeben.
In Bascom gibts ja den Befehl DTMF out, was mir nun ja sagt dass es
prinzipiell funktioniert. Die Frage ist nur wie.
Danke

Michi

von harry (Gast)


Lesenswert?

hi,

wenn's kein sinus sein muss aber echteck sein darf ist's ganz
einfach.
z.b. timer0 setzt einen port alle 1/200 sec auf low, 1/200 sec später
wieder auf high.
damit haste mal 'ne grundfrequenz von 100Hz.
timer1 toggelt denselben port 1000x je sekunde, jetzt haste 'ne
übergelagerte freq von 1 KHz.
fertig ist der doppelton.

gruss und fröhliches probieren, harry

von Hagen (Gast)


Lesenswert?

>In Bascom gibts ja den Befehl DTMF out, was mir nun ja sagt dass es
>prinzipiell funktioniert. Die Frage ist nur wie.

www.atmel.com hat noch komplett fertige AN dazu.
Ansonsten bei eBay gibts zZ. den CM8888 samt Quarz im Zweierpack,
identisch zum MT8888, falls du eine HW Lösung vorziehst.

Gruß Hagen

von avrler (Gast)


Lesenswert?

Jo danke mal soweit.
werd mal etwas probieren.
Das Prob istr ja dass es keine Standart DTMF Töne sein sollen, sondern
eben andere Frequenzen.

von avrler (Gast)


Lesenswert?

also habs jetzt mal so probiert, aber so richtig funktionierts net.
Weiß da jmd. eine Lsg oder sieht meinen garantiert dummen Fehler?

Blick grad überaupt net mehr durch.
Vielen vielen Dank.

Michi

$regfile = "2313def.dat"
$crystal = 8000000

Config Timer0 = Timer , Prescale = 64
Config Timer1 = Timer , Prescale = 1
Config Pind.6 = Output
Config Pind.5 = Output
On Ovf0 Erster                                              '
On Ovf1 Test

Enable Timer0
Enable Timer1
Enable Interrupts

Do

Loop



  Erster:

     Portd.6 = Not Portd.6

     Timer0 = 10426
  Return

 Test:
 Portd.6 = Not Portd.6

     Timer1 = 30426
 Return

von Günni (Gast)


Lesenswert?

Hallo Michi,

ich habe so etwas vor langer Zeit mal auf einem Zilog µC gemacht.
Das Prinzip was so:
- konstante Sinustabelle erzeugen (beim Amiga Assembler gab's dazu
eine Funktion, beim AVR weiß ich's nicht.)
- der Offset beim lesen aus der Tabelle bestimmt die Frequenz
- bei gewünschter Überlagerung von zwei Frequenzen führst Du einfach
zwei Offsets für die jeweiligen Frequenzen und addierst Die Werte aus
der Tabelle und erzeugst damit den gewünschten Ton.

Das hat bei der Realisierung einer speziellen Fernabfrage/Steuer-Box
tadellos funktioniert.
Außerdem hat diese Methode den Vorteil, dass aufwendige Berechnungen in
Realtime vermieden werden.

Vielleicht ist's ja ein Ansatz wert!

Grüße
Günni

von harry (Gast)


Lesenswert?

hi,

funktioniert prinzipiell so schon, nur dass du die freq. aus timer0 so
gur wie nicht mitkriegst, weil sie die gleiche amplitude erzeugt wie
die von timer1.
nehm doch mal for timer1 portd.5.
das signal von d.6 über R1 widerstand 10K auf einen R2 widerstand gegen
masse 10K, das signal von d.5 über R3 widerstand 47K auf den knoten
R1/R2. jetzt solltest du ein 20% moduliertes signal am knoten R1/R2
abnehmen können. haste oszi? -> gut, wenn nicht, soundcartenoszi geht
bei nf allemal.
gruss, harry

von Profi (Gast)


Lesenswert?

Günni:
Hierzu gibt es von Motorola die sehr schöne Application Note AN1771:
Precision Sine-Wave Tone Synthesis Using 8-Bit MCUs

google mal nach +motorola +an1771   gibt 140 Treffer

Die Frequenz-Auflösung ist theoretisch beliebig genau, sie hängt nur
von der Sample-Frequenz und der Länge der Tabelle ab.

Ausgegeben wird ein Sinus, kein Rechteck!
Ich implementiere sie gerade auf einem 68hc908.

von Profi (Gast)


Lesenswert?

Günni:
Hierzu gibt es von Motorola die sehr schöne Application Note AN1771:
Precision Sine-Wave Tone Synthesis Using 8-Bit MCUs

google mal nach +motorola +an1771   gibt 140 Treffer, bestimmt sich
auch welche mit eigenen Kommentaren / Berichten dabei

Die Frequenz-Auflösung ist theoretisch beliebig genau, sie hängt nur
von der Sample-Frequenz und der Länge der Tabelle ab.

Ausgegeben wird ein Sinus, kein Rechteck!
Ich implementiere sie gerade auf einem 68hc908.

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.