Forum: Mikrocontroller und Digitale Elektronik Atmel mit separatem integriertem USB-Oszillator


von Boris (Gast)


Lesenswert?

Hallo,

ich soll ein Gerät entwickeln, daß USB hat und dessen Mikrocontroller 
extern von einem Oszillator mit bestimmter Frequenz (12,288MHz oder 
4194304Hz)  getaktet wird.

Ich würde gerne einen Atmel-Mikrocontroller verwenden,
habe aber bisher mit diesen noch nicht gearbeitet.

Nun habe ich mir das Datenblatt vom AT90USB1287 angeschaut und verstehe 
vielleicht ein paar Sachen noch nicht ganz:

------------------------

Wie es scheint, hat dieser Mikrocontroller keinen internen separaten 
Oszillator, nur für USB.

->  [S.40: This clock is generated with an on-chip PLL
    running at 48MHz. The PLL always multiply its input frequency by 
24.]
    i.V.m.
->  Figure 6-1 "Clock Distribution", auf dem gezeigt wird, daß der PLL
    seinen Eingangstakt über den Clock-Mulitplexer- vom externen
    Oszillator abzweigt.)

Ähnliches habe ich auch im Datenblatt des ATmega32U4 gesehen.

Fragen:

- Welchen Oszillatortakt kann ich extern anschließen und welche 
Auswirkungen hat dies auf den für USB notwendigen Takt?
- Gibt es solche Nebenwirkungen oder muß ich mir darum keine Gedanken 
machen?
- Gibt es Atmel mit separatem integrierten USB-Oszillator?
- Ich habe nur Angaben zum maximalen Takt für Atmels gefunden, wo ist 
die untere Taktgrenze? (scheinbar abhängig von der Versorgungsspannung)

Vielen Dank im Vorraus!
Gruß
Boris

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


Lesenswert?

Die haben natürlich einen integrierten Oszillator, sogar mehrere. ;-)
Allerdings kannst du für USB aus Genauigkeitsgründen nicht den
internen RC-Oszillator benutzen, bliebe also nur der interne Quarz-
oszillator (mit externem Quarz) oder ein externer Takt, und da du
für den USB-Betrieb die 64-MHz-PLL benötigst, bist du für die Wahl
der Taktfrequenz auf deren mögliche Vorteiler angewiesen, sprich,
es müssen entweder 8 oder 16 MHz Takt sein.

Die kannst du nun über irgendeinen Taktversorgungsbaustein aus deinem
TCXO ableiten, aber einfacher ist es vermutlich, wenn du USB und den
Rest deiner Logik komplett entkoppelst und dem USB-Controller gleich
einen eigenen Quarz von 8 MHz spendierst.  Eventuell genügt ja auch
einer der kleineren USB-AVRs dann für die Aufgabe, wenn du für den
Rest der Aufgabe einen separaten AVR benutzt, der dann von deinem
dedizierten Takt getrieben wird.

Alternativ (ich weiß ja nicht, was du mit dem genauen externen Takt
machen musst) kannst du auch überlegen, den Controller mit 16 MHz
zu takten und die 4,nochwas MHz extern in einem Timer einzuspeisen.

von Peter D. (peda)


Lesenswert?

Boris schrieb:
> ich soll ein Gerät entwickeln, daß USB hat und dessen Mikrocontroller
> extern von einem Oszillator mit bestimmter Frequenz (12,288MHz oder
> 4194304Hz)  getaktet wird.

Auch wenn Du nen MC mit nem bestimmten Takt betreibst, hast Du keinen 
Einfluß darauf, daß Code zu einem bestimmten Taktzyklus ausgeführt wird. 
Bedingte Ausführung und Interrupts hauen Dir dazwischen.

Wenn Du aber willst, daß der externe Takt gezählt wird und dazu synchron 
was ausgeführt wird, führe in in einen Timer.
Für 4,2MHz muß dann der CPU-Takt >8,4MHz sein, z.B. 16MHz.


Peter

von Boris (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> ber einfacher ist es vermutlich, wenn du USB und den
> Rest deiner Logik komplett entkoppelst und dem USB-Controller gleich
> einen eigenen Quarz von 8 MHz spendierst.

Zur Alles-In-Einem-Variante:

D.h. ich muß einen Quarz (8Mhz) und meinen TCXO an den Mikrocontroller 
anschließen.

Quarz an XTAL1 und XTAL2,...
und wohin der TCXO?
- Kann ich den per Konfiguration an irgend einem Pin legen?

Gibst Du mir bitte einen Hinweis wo ich im Datenblatt nachlesen kann?

--------------------
Jörg Wunsch schrieb:
>Alternativ (ich weiß ja nicht, was du mit dem genauen externen Takt
>machen musst) kannst du auch überlegen, den Controller mit 16 MHz
>zu takten und die 4,nochwas MHz extern in einem Timer einzuspeisen.

Diese Möglichkeit scheidet für mich aus.

--------------------
Vielen Dank, Jörg!

von Boris (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Auch wenn Du nen MC mit nem bestimmten Takt betreibst, hast Du keinen
> Einfluß darauf, daß Code zu einem bestimmten Taktzyklus ausgeführt wird.
> Bedingte Ausführung und Interrupts hauen Dir dazwischen.

Vielen Dank für die klaren Worte.
Sie lassen mich noch einmal genau nachdenken.

Mir geht es im Wesentlichen darum, ein digitales Signal zu erzeugen, 
welches auf den 2^22MHz-Takt baut.

Es ist für mich ungewöhnlich, daß für eine Aufgabe relativ wenig Text in 
einer ISR für einen Timer stehen kann, die nur einzelne Nullen oder 
Einser erzeugt. Ich muß mich wohl damit anfreunden.

Damit wäre auch das Problem gleichzeitiges anschließen von Quarz und 
TCXO geklärt.

----------------
Nur aus reiner Neugier: Wäre es wirklich möglich Quarz und TCXO 
gleichzeitig zu verwenden?

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


Lesenswert?

Boris schrieb:
> Mir geht es im Wesentlichen darum, ein digitales Signal zu erzeugen,
> welches auf den 2^22MHz-Takt baut.

Vielleicht solltest du dafür ein Stück Hardware spendieren, ein
CPLD oder ein kleines FPGA?  Ich verstehe nicht so ganz recht,
warum man das unbedingt mit einer eierlegenden Wollmilchsau
verwurschteln muss.

Boris schrieb:

[externer 2^22 Hz Takt an Timer]
> Diese Möglichkeit scheidet für mich aus.

Und warum?  Je nachdem, was für ein Signal du erzeugen musst,
kann das durchaus Sinn haben, das genau damit zu machen, zumal du
dann mit einer mit 16 MHz tickenden CPU deine ISRs fast viermal
schneller runtergerattert bekommst.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Solange die Fragen nicht klar definiert gestellt werden und im Notfall 
auch das dahinterstehende kommt, wird das nix.

Die silabs USB-Teile haben einen internen USB-Clock. PLL oder so.

von Boris (Gast)


Lesenswert?

Abdul K. schrieb:
> Die silabs USB-Teile haben einen internen USB-Clock. PLL oder so.

Hallo Abdul,

ja, ich weiß, ich habe schon mit dem C8051F320 von Silab gearbeitet.
Daher war ich bei den Atmels mit der voran gegangenen Problemstellung 
auch etwas verwundert.

Aber ich denke ich habe nun endlich verstanden, daß ich auch für meinen 
Fall einen Timer verwenden kann.

Sollte es wider Erwarten anders sein, melde ich mich an dieser Stelle 
wieder, damit auch andere von so einem seltenen Fall erfahren, bei dem 
der Mikrocontroller in einem bestimmten Takt arbeiten muß.

- Oder kennt Ihr so einen Fall?

Mir fällt im Moment keiner ein. Der Groschen ist gefallen.

Vielen Dank!

von Boris (Gast)


Lesenswert?

Nur aus reinem Interesse:

Gibt es so einen  Fall?

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

silabs ist technisch weit voraus. Nicht alle Hersteller können da 
mithalten.

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


Lesenswert?

Abdul K. schrieb:
> silabs ist technisch weit voraus.

Naja, eine interne PLL für den USB-Takt haben die USB-AVRs auch,
allerdings kann man deren Teilerfaktor nicht einstellen.  Die will
von 2 MHz auf 48 MHz gehen, und die 2 MHz Referenz kann man nur
per Vorteiler 4 oder 8 aus dem CPU-Takt ableiten.

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.