Archiv verlassen und diese Seite im Standarddesign anzeigen : gemeinsame Taktquelle für viele µC´s
hallo,
ich möchte eine große Anzahl Microcontroller (ca. 30 Stück) gleichzeitig betreiben, die mit einem externen Takt versorgt werden sollen. Aus Platz- und Kostengründen sind Quarze, die für jeden Controller einzel benötigt werden, nicht gerade eine gute Alternative.
Ich hatte die Idee, zur Takterzeugung einen einzelnen Oszillator zu verwenden, der den Takt für alle Controller liefern soll. Irgendwo im Forum hatte ich mal gelesen, dass man jedoch nur eine bestimmte Anzahl von ICs bzw. µCs an einem solchen Oszillatorausgang hängen kann und deshalb Treiberbausteine nötig sind.
Kann mir dies jemand bestätigen, dass das tatsächlich so ist, da die Meinungen dafür sehr weit auseinander gehen?
Wie könnte die Schaltung für die Taktversorgung aussehen bzw. welche Treiberbausteine könnte man verwenden?
Hat jemand evtl. eine bessere Idee zur Taktversorgung?
Danke.
Das haupt Problem dürfte sein, dass die Leitungen von Oszillator zum µC möglichst kurz sein müssen. Also am Besten nicht über 3cm. Und dass kannst du bei 30µCs nicht einhalten.
Wenn die Leitungen länger werden, kommt es schnell mal zu Störungen, was für zeitkritische Anwendungen schlecht ist.
jon
Hubert.G
28.03.2007, 10:20
Diese Quarzoszillatoren können 2TTL oder 10LS Gatter treiben, zumindest die ich kenne. Wie die Last bei einem AVR auf XTAL1 bewertet wird habe ich auf die schnelle nicht gefunden aber wohl kaum höher als ein LS-Gatter.
Dein Problem wird aber nicht nur die Last sein sondern viel mehr die Störungen die du über die Leitungen zu den einzelnen µC verbreitest. Die Oszillatoren geben ein Rechteck und keinen Sinus aus. 30 µC wirst du nicht im Umkreis von 10cm betreiben können, da musst du dann die Induktivität und Kapazität der Leitungen mit einbeziehen.
Wenn also nicht aus Synchronisationsgründen ein gleicher Takt unbedingt notwendig ist, wäre ich für einen Quarz je µC. Oszillator und Treiber sind kaum billiger als je ein Quarz.
Hubert
Das haupt Problem dürfte sein, dass die Leitungen von Oszillator zum µC möglichst kurz sein müssen. Also am Besten nicht über 3cm. Und dass kannst du bei 30µCs nicht einhalten.
Wenn die Leitungen länger werden, kommt es schnell mal zu Störungen, was für zeitkritische Anwendungen schlecht ist.
jon
Die Leitungslänge sollte eigentlich kein so großes Problem sein, wenn der Takt nicht allzu hoch ist. Ich habe bei einem Projekt einen 24MHz Takt über ca. 10cm verlegt. Ich musste zwar einen kleinen Kondensator am Ende der Taktleitung gegen GND reinbauen, um die Flanken ein wenig abzuschwächen (sonst kommt es zu Reflexion), aber es funktioniert absolut störungsfrei.
Nein, das größere Problem wird sein, wie bombatz schon selber angesprochen hat, dass ein Oszillator nur begrenzt belastbar ist. Wie viele Controller man an einen Oszillator anschließen kann, müsste man im Einzelfall ausprobieren. Ich denke mal, das ist von Oszillator zu Oszillator unterschiedlich und hängt natürlich auch vom Eingangswiderstand des Takteingangs des µC ab.
Eine andere Lösung wäre, den Takt nur auf einen µC zu legen und z.B. über einen Counter-Ausgang wieder auszugeben und damit den nächsten µC zu versorgen usw. Dann hätte man weder mit der Leitungslänge noch mit der Leistung des Oszillators zu kämpfen.
Allerdings hat man dann den Nachteil, dass jeder Controller von seinen "Vorgängern" abhängig ist - d.h. wenn ein Controller nicht läuft, bekommen alle nachfolgenden keinen Takt.
Manche Controller haben auch einen CLKOUT - Pin, an dem der eingehende Takt einfach wieder über einen Treiber ausgegeben wird. Das funktionniert in der Regel auch, wenn der Controller nicht läuft. Das wäre natürlich die optimale Lösung.
Gruß,
askazo
Die Leitungslänge sollte eigentlich kein so großes Problem sein, wenn der Takt nicht allzu hoch ist. Ich habe bei einem Projekt einen 24MHz Takt über ca. 10cm verlegt. Ich musste zwar einen kleinen Kondensator am Ende der Taktleitung gegen GND reinbauen, um die Flanken ein wenig abzuschwächen (sonst kommt es zu Reflexion), aber es funktioniert absolut störungsfrei.
Bei mir sind die Leitungen ein Problem. Wenn ich die über 3cm lang mache, kommt es zu Störungen. Kondensatoren helfen bei mir auch nichts. Ich habe es mit 16MHz versucht.
jon
An die Probleme mit den Leitungslängen habe ich bisher noch gar nicht gedacht. Wie man sieht, gibt es da wahrscheinlich auch keine sicheren Angaben. Bei Jon machen schon 3cm mit 16 MHz Probleme, wobei askazo mit 24 MHz und 10cm Länge Erfolg hatte.
Als Taktfrequenz habe ich 16 oder 20 MHz vorgesehen und die Taktleitungen werden etwa 10cm lang.
Eine andere Lösung wäre, den Takt nur auf einen µC zu legen und z.B. über einen Counter-Ausgang wieder auszugeben und damit den nächsten µC zu versorgen usw. Dann hätte man weder mit der Leitungslänge noch mit der Leistung des Oszillators zu kämpfen.
Allerdings hat man dann den Nachteil, dass jeder Controller von seinen "Vorgängern" abhängig ist - d.h. wenn ein Controller nicht läuft, bekommen alle nachfolgenden keinen Takt.
Diese Idee musste ich leider auch schon verwerfen, da es ein Stresstest für die µC's werden soll, und da ist bereits eingeplant, dass sich der ein oder andere Controller verabschiedet.
Manche Controller haben auch einen CLKOUT - Pin, an dem der eingehende Takt einfach wieder über einen Treiber ausgegeben wird. Das funktionniert in der Regel auch, wenn der Controller nicht läuft. Das wäre natürlich die optimale Lösung.
Das ist natürlich auch eine gute Idee, leider scheint der ATmega48, den ich verwende, ein solches Pin nicht zu besitzen.
... zur Synchronisierung mußt Du wohl einen als Master definieren und bei allen anderen den Impuls als INT auswerten ..
Hubert.G
28.03.2007, 12:56
Es gibt den CLKO-Pin, den muss man aktivieren beim Mega48
... zur Synchronisierung musst Du wohl einen als Master definieren und bei allen anderen den Impuls als INT auswerten ..
eine Synchronisation ist in meinem Fall nicht notwendig, da die Controller nicht miteinander kommunizieren sollen
Es gibt den CLKO-Pin, den muss man aktivieren beim Mega48
stimmt... den hab ich glatt übersehen :oops:... danke
Ich habe eine Frage zum CLKO Pin, da ich auch vorhabe, mehrere Microcontroller ueber einen Takt laufen zu lassen. Beim ATtiny261/461/861 teilt sich der CLKO Ausgang einen Pin mit einem der beiden XTALs.
Wenn nun schon ein Quarz zwischen beiden XTALs haengt, kann man dann trotzdem den CLKO benutzen, um die System Clock an andere Controller zu reichen?
Gibt es dabei irgendwelche Einschraenkungen (Anzahl der drangehaengten MCs)?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.