Frequenz generieren in C

Gast #447661
Lesenswert?

Hallo zusammen

Ich habe eine kleine Frage zu C. Ich möchte möglichst einfach eine 
Frequenz an einem Port ausgeben. Ich habe einen internen Wert von 0-500.
Jetzt möchte ich aus diesem Wert eine Frequenz machen. Also 0-500HZ.

Gruss und Danke

Matthias
Gast #447674
Lesenswert?

Rechtecksignal?

Dann dauert eine Halbperiode (1/Frequenz)/2 Sekunden

Beispiel:

Frequenz = 10 Hz
Dauer der Halbperiode = (1/10)/2 s = 0,1/2 s = 0,05 s = 50 ms

Um das Signal zu erzeugen kannst du einen Output-Pin eine Halbperiode 
lang LOW schalten und eine Halbperiode lang HIGH.

Bei AVRs beispielsweise so
1
#define F_CPU 1000000   // µC läuft z.B. mit 1 MHz Haupttakt (anpassen!)
2
#include <util\delay.h> // Wartefunktionen (Wertebereich nachlesen!)
3
#include <avr/io.h>     // IO Definitionen
4

5
int main(void)
6
{
7
   DDRC = 0xFF;         // PORTC auf Ausgang (anpassen!)
8
   while(1)
9
   {
10
      PORTC ^= (1<<PC0);  // PC0 LOW/HIGH toggeln (anpassen!)
11
      delay_ms(50);       // Halbperiode warten  
12
   }
13
}

  
Gast #447676
Lesenswert?

Dafür verwendest Du einen Timer- oder PWM-Port.
Die Register werden mit den Zeiten (Peridendauer) programmiert, nicht 
mit der Frequenz.
xtal 8000000L
timerregister=0-xtal/prescale/freq

0- deswegen, weil die Timer meistens hinaufzählen

Vermutlich musst Du bei einem so großen Bereich noch eine 
Fallunterscheidung für den Prescaler einbauen  und  Timer kaskadieren.

Alternative: DDS (direkte digitale Synthese)

http://www.mikrocontroller.net/forum/1?filter=dds*
http://www.mikrocontroller.net/forum/1?filter=freque*
http://www.mikrocontroller.net/forum/1?filter=ton*

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