Ich programmiere einen T89C51CC02 von Atmel mit der Sprache C. Nun versuche ich, ein PWM-Signal auszugeben. Von welchen Einstellungen hängt die Frequenz des Signals ab? Das Register CMOD besitzt zwei Bits, nämlich CPS0 und CPS1. Damit kann ich den Quelle für den Takt des PCA-Timer einstellen, darunter: - PCA-Takt / 6 - PCA-Takt / 2 - Timer 0 - Externer Takt auf Pin 1.2 Das Programm sieht in so aus (aus Atmel FAQ): CMOD = 0x00 // using PCA timer CCON = 0x40 CCAP0H = 0xa0; CCAP0L = 0xa0; CCAPM0 = 0x42; Hier werden quasi Compare-Register CCAPxy gesetzt, die mit dem aktuellen PCA-Timer-Wert verglichen werden. Je nach Ergebnis (< oder =>) wird dann das PWM-Signal auf Low oder High geschaltet. Gibt es auf der Software-Seite noch Faktoren (irgendein Register oder so), die die Timer-Frequenz, die als Basis für das PWM-Signal herhalten muß, beeinflußen? Hängt alles ausschließlich an den Bits CPS0 und CPS1 sowie der CPU-Frequenz?
Ja, leider ist das so. So nett das PCA-Modul ist, da ist es echt etwas unflexibel.
Wieso kann ich nicht ein PWM-Signal schneller als T (Periode) 1 / 16 kHz erzeugen? Ich verwende doch ein Oszi mit 16 MHz. Ich dachte, daß das PCA-Modul (nach Clock-Blockdiagramm aus dem Data-Sheet) die Hälfte von 16 MHz bekommen sollte. Was mache ich falsch? Wo denke ich falsch?
Die Taktfrequenzen für die PCA sind sehr eingeschränkt. Eventuell kannst Du versuchen, im PCA-Timer-Interrupt den Zählumfang des PCA-Timers zu verkürzen. Das geht aber auf Kosten der PWM-Auflösung. Andere Variante wäre eine PWM mit Hilfe der High Speed Output Modis nachzuempfinden. Eine ausführliche PCA-Beschreibung (Original Intel) als Anlage. Atmel ist weitgehend kompatibel dazu.
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.