Hallo. Ich habe den Oszillator auf 20MHz, Prescaler=1, Interrupt freigegeben, Code läuft. Jetzt möchte ich eine Rechteckschwingung (PIN Toggle) haben, welche mit 100Hz läuft, d.h. mit 200Hz toggelt. Beim SiLabs gibt es einen schönen Hardware Wizard dazu, welcher mir das alles ausrechnet. Um das zu erreichen muss der Timer SYSCLK/2 als Timebase haben und dann mit dem Wert 0x3CB0 beladen werden damit er das macht was er soll. Leider kommt danach am Oszilloskop eine 111Hz Schwingung heraus! Ich werd noch Wahnsinnig. Die Dateien im Anhang helfen beim Verständnis. Wenn ich die SYSCLK ändere, verändert sich auch die Rechteckschwingung, obwohl ich immer den richtigen Preloader Wert in die RCAP2H und RCAP2L eingetragen habe...
:
Verschoben durch Moderator
(Uch, Hilfe!, ein Screenshot in ein PDF verpackt und dann noch völlig verpixelt. Schau dir mal bitte den Artikel Bildformate an.) Gibt's denn außer dem Gimmick-Tool von Silabs dafür keine Berechnungs- anleitung im Datenblatt? Sorry, bin gerade zu faul, mir nur dafür das Datenblatt eines Controller zu holen, den ich selbst in absehbarer Zeit nicht benutzen werde. Ich verlagere derartige Rechnungen gern in den C-Präprozessor (bzw. den Compiler selbst). Im Zweifelsfalle müsstest du doch auch von der gemessenen Frequenz mittels trial & error experimentieren können, bis du die gewünschte Frequenz erreichst. Vielleicht ist diese pragmatische Methode ja schneller.
So wird das m.E. auch nix. So gut wie fast jeder SiLabs Controller hat eine PCA, benutze diese in Verbindung mit dem ToggleOutput Feature. Dann macht das die Hardware von sich aus ohne weiteren Softwareeingriff... Ralf
Screenshots kann man nicht mit 300dpi machen, aber egal. Datenblatt darf ich nicht uploaden wegen Copyrights. Zurück zum Problem: Wenn ich den internen Oszillator mit 12.25Mhz als SYSCLK nutze, kommt 101 Hz raus, schalte ich um auf Externen Crystal Oszillator (auch auf dem Board) mit 12.25Mhz wird die Frequenz 90 Hz. Das kann doch nich sein?! Hab ich einen Denkfehler?
Paul schrieb: > Datenblatt darf ich nicht uploaden wegen Copyrights. Psst, ich verrate Dir mal ein Geheimnis: Man darf nen Link auf das Datenblatt posten. Damit verschwendet man auch nicht unnütz Speicherplatz beim Forenbetreiber. > Wenn ich den internen Oszillator mit 12.25Mhz als SYSCLK nutze, kommt > 101 Hz raus, schalte ich um auf Externen Crystal Oszillator (auch auf > dem Board) mit 12.25Mhz wird die Frequenz 90 Hz. Wie genau sind die denn? Muß der interne vieleicht noch kalibriert werden? Oder wurde die Factory-Kalibration überschrieben? Mit Code-Wizzards kenne ich mich nicht aus. Ich lasse einfach den Compiler konstante Ausdrücke selber berechnen. Peter
Paul schrieb: > Screenshots kann man nicht mit 300dpi machen, aber egal. Man kann sie einfach 1:1 machen, ohne sie erst irgendwie schräg zu skalieren -- und dann eben bitte als PNG hier dranhängen. Dann zeigt die Forensoftware sie mit Mausklick gleich an, ohne dass man erst einen PDF-Viewer hochziehen muss. Genau darüber handelt der referenzierte Artikel Bildformate, den anzugucken du offenbar nicht für nötig befunden hast. > Datenblatt darf ich nicht uploaden wegen Copyrights. Man kann daraus auch zitieren, ein kurzes, sauber gekennzeichnetes Zitat stellt kein Copyrightproblem dar. Außerdem siehe Peter, man kann einen Link posten (dann aber bitte die Seitennummer mit angeben, an der man das nachlesen sollte). > Wenn ich den internen Oszillator mit 12.25Mhz als SYSCLK nutze, kommt > 101 Hz raus, schalte ich um auf Externen Crystal Oszillator (auch auf > dem Board) mit 12.25Mhz wird die Frequenz 90 Hz. Oben waren's noch 111 Hz. ;-) Ist denn der externe Quarzoszillator wirklich ein solcher, oder ist das nur ein externer Quarz, der mit einem im Controller eingebauten Oszillator läuft? Wenn letzteres, dann kann es (insbesondere durch falsche Lastkapazitäten) schon passieren, dass der Quarz gar nicht auf seiner Frequenz schwingt, sondern dass der Oszillator irgendwelche Hausnummern erzeugt (der arbeitet dann mehr oder weniger als RC-Oszillator). Dann müsste man wohl als erstes mal dessen tatsächliche Frequenz kontrollieren. Oft genug geht das mit einem Oszilloskop, wenn man den Ausgang des internen Oszillators nimmt und an diesem misst. Allerdings bringt der Tastkopf natürlich ein paar Pikofarad zusätzlicher Kapazität ein, die ggf. das Missverhalten des Oszillators sogar beseitigen können... Ein andere Alternative wäre es, eine Testfirmware zu schreiben, die einen Portpin umschaltet. Wenn man die Befehle auszählt, weiß man, welches Verhältnis der Pinfrequenz zur CPU- Frequenz sich daraus ergibt.
Hallo, also wenn du 20MHz SYSCLK hast, und den Timer mit SYSCLK/2 ansteuerst, dann versuch doch mal den Reloadwert C350 (=50000). Weil: 20MHz / 2 = 10Mhz, 10MHz / 200Hz = 50KHz Btw: Die Timereinstellungen beeinflussen sich teilweise gegenseitig.
@AndreBlahblah Der Timer der 8051er zählt "andersrum". Also 65536 - 50000 (=0x3CB0) ist schon der richtige Vorladewert.
Die Lösung ist eigentlich so blöde wie einfach: Wenn ich die SYSCLK von einem externen Oszillator vorgeben lasse, dann muss ich wissen, dass dieser ausschließlich mit 22,1184MHz läuft. Im SiLabs Wizard kann man diese Frequenz zwar ändern, aber das ist eine Vortäuschung falscher Tatsachen. Die Frequenz bleibt immer bei 22,1184MHz (ext. crystal Oszi) mit welchen ich auch die RCAPH und RCAPL berechnen muss. Vielen Dank für die Diskussionen über Anhänge und Dateiformate!
Paul schrieb: > Im > SiLabs Wizard kann man diese Frequenz zwar ändern, aber das ist eine > Vortäuschung falscher Tatsachen. Was wieder ein Argument mehr gegen derartige Wizards ist. ;-)
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.