Forum: Mikrocontroller und Digitale Elektronik PWM mit verschiedenen Frequenzen


von Kai (Gast)


Lesenswert?

Hallo!

Ich stehe im Moment vor einem kleinen (großen) Problem:

Ich möchte mit Bascom ein Programm für einen ATtiny24 schreiben, das es 
ermöglicht, anhand der Stellung eines DIP Schalters verschiedene 
Frequenzen zu erzeugen.
Wie ich die PWM ansich erzeuge ist mir klar. Jedoch bin ich mir nicht 
schlüssig darüber, wie ich dem Programm nun mitteilen kann, dass es bei 
Schalterstellung X eine Frequenz von z.B. 33,0 Hz, bei Y 35,4 Hz und bei 
Z 36,6 Hz erzeugen soll.

Kann mir da jemand auf die Sprünge helfen oder mir vielleicht anhand der 
drei o.a. Frequenzen das eine oder andere Beispiel an den Kopf werfen?
Zwar hab ich bereits im Forum und auch über diverse Suchmaschinen 
gesucht, konnte bisher aber leider nichts finden, woraus ich wirklich 
schlau wurde.

Ich sag schonmal vielen Dank!

Gruß,

Kai

von Jörg X. (Gast)


Lesenswert?

Tipp 1: Dipschalter kann man als (Binär-)Zahl einlesen (z.B. 3 Schalter 
-> 0-7), diese Zahl kann man als Array-index benutzen
Tipp 2: Bei soo niedrigen Frequenzen nimmt man software-PWM (Ist 
bestimmt bei Bascom schon eingebaut, aber das Bascom-Manual musst du 
lesen, nicht ich ;) ). Bei Soft-PWM wird i.d.R eine Variable hoch (oder 
auch runter, ist egal) gezählt, als zusätzlicher Teiler. Wie weit da 
gezählt werden muss, kann man dann z.B. aus einem Array auslesen.

Also:
 - lies nach, wie man in Bascom ein PWM-Signal ausgibt
 - bau das so um, dass du die Frequenz einstellen kannst
 - lies nach, wie man Dipschalter einliest (PINS, SChieberegister, oder 
wieauchimmer)
 - Ordne die Schalter-Stellungen den PWM-Einstellungen zu.
(Nennt man Divide-And-Conquer-Methode: Zerteil die Aufgabe in kleine 
Teile, und löse die nacheinander).

hth. Jörg
ps: wozu brauchst du ein PWM-Signal mit einstellbarer FREQUENZ ?
Bei PWM stellt man doch normalerweise den 'Duty-Cycle' (die An/Aus-Zeit) 
ein...

von Kai (Gast)


Lesenswert?

Hallo Jörg!

Danke für deine Antwort.

Wie ich grundsätzlich die PWM erzeuge stellt kein Problem dar. Dazu habe 
ich mich hierdran orientiert: 
http://www.roboternetz.de/wissen/index.php/Bascom_und_PWM#Grundprogramm

Mit dem Umbauen des Codes, so, dass je nach Schalterstellung eine andere 
Frequenz erzeugt wird, hab ich meine Probleme.
Ich weiss leider nicht, was genau ich ändern muss/kann/darf und wie das 
dann aussehen muss.

Der Rest, wie das Auslesen des DIP Schalters usw. ist keine große Hürde.

Die Schaltung soll am Ende insgesamt, abhängig von der Stellung des DIP 
Schalters, 64 verschiedene Töne generieren und als externes CTCSS-Modul 
für CB-Funkgeräte dienen.
Ich weiss, dass es solche Module fertig zu kaufen gibt, da ist aber das 
Problem, dass sie 1. recht teuer und 2. i.d.R. unzulässig sind, da sie 
ins Gerät eingebaut werden müssen. Darum mein Versuch, eine externe 
Lösung zu bauen.
Die Hardware ist soweit auch schon fertig, es fehlt nur noch die 
Programmierung. Und die bereitet mir schon seit einigen Wochen 
Kopfzerbrechen.

von Jörg X. (Gast)


Lesenswert?

Meinst du das CTCSS: http://de.wikipedia.org/wiki/CTCSS ?
 Das wird ein bisschen komplizierter als ein 30Hz PWM-Signal.
Da musst du nämlich einen Ton erzeugen, d.h. ein schnelles 
(Hardware-)PWM-Signal mit dem passenden Sinus modulieren (Stichworte: 
Sinustabelle, DSS -> "Digital Signal Synthesis").
 Sollte aber noch machbar sein.

hth. Jörg

von Kai (Gast)


Lesenswert?

Das ist mir schon klar.
Das PWM Signal wird durch einen Tiefpass geschickt und dort dann in ein 
Sinus Signal umgewandelt. Das ist soweit alles gelöst.

Hier mal ein Ausschnitt des Codes für die PWM:
1
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up Prescale = 1
2
3
Do
4
 Compare1a = 255
5
Loop
6
7
End

Die Frage ist nun, ausgegangen vom ATtiny24 (1 MHz), was muss ich hier 
ändern, um z.B. auf eine Frequenz von 33,0 Hz zu kommen?

von LTE (Gast)


Lesenswert?

Ich bin da zwar kein Profi, aber verursacht PWM hier nicht unerwünschte 
Störungen / Interferenzen ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Für solche Dinge lässt man den Tiny besser eine Sinuskurve abklappern 
und die mit hoher PWM Frequenz ausgeben. Dann reicht ein simpler 
Tiefpass und es sieht trotzdem nicht schlecht aus.

Als Beispiel kann die Applikations Note AVR314 von Atmel dienen. Hier 
werden mit einem beliebigen AVR DTMF Touchtones erzeugt - also sogar 
zwei Töne gleichzeitig.
Für die neuen Frequenzen muss man dann halt rechnen.

von Wolfgang (Gast)


Lesenswert?

Kai schrieb:
> Kann mir da jemand auf die Sprünge helfen oder mir vielleicht anhand der
> drei o.a. Frequenzen das eine oder andere Beispiel an den Kopf werfen?

DDS
Der Seite von Jesper Hansen mit seinem miniDDS sind leider die Links zum 
Code-Download abhanden gekommen.
http://www.radanpro.com/Radan2400/mikrokontroleri/Jesper's%20AVR%20pages%20-%20MiniDDS.htm

Der Kern ist eine kleine Assembler-Schleife, die sich per Inline 
bestimmt auch in BASCOM umsetzen lässt.

Was du brauchst sind:
 - eine Sinustabelle
 - ein Phasenzähler
 - ein DAC
 - und ein Phaseninkrement, passend zu deiner Frequenz berechnet

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.