Forum: Mikrocontroller und Digitale Elektronik C8051 Oszillator und Timer Verständnisfrage


von Paul (Gast)


Angehängte Dateien:

Lesenswert?

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
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

(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.

von Ralf (Gast)


Lesenswert?

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

von Paul (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von AndreBlahblah (Gast)


Lesenswert?

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.

von Route_66 (Gast)


Lesenswert?

@AndreBlahblah
Der Timer der 8051er zählt "andersrum". Also 65536 - 50000 (=0x3CB0) ist 
schon der richtige Vorladewert.

von Paul (Gast)


Lesenswert?

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!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.