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
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 | }
|
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*
Wie Profi schon sagte: Timer benutzen. Am Besten den 16-bit-Timer wegen der Auflösung, den Teiler richtig einstellen und den Output-Compare-Interrupt benutzen um den (beliebigen) Pin umzuschalten. Dazu den CTC-Modus einschalten (WGM12) und den Inhalt für das Output-Compare-Register entsprechend berechnen.
Hallo zusammen Danke für die Antworten. Werde das einmal versuchen. Gruss Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.