Forum: Mikrocontroller und Digitale Elektronik Mehrere (3) Atmels mit einem Quarz


von Jens (Gast)


Lesenswert?

Hallo,

würde gern 3 ATM8 auf einer Leiterplatte mit nur einem Quarz betreiben.

Reicht es, einen Quarz an einen ATM8 mit den beiden 22pF zu hängen und 
dann alle 3 XTAL1 zu verbinden? Hat jemand Erfahrung?

von Sebastian M. (sebastian_m)


Lesenswert?

nimm einen fertigen oszillator, damit gehts und du brauchst keine 
lastkapazitäten

seb

von *kopfkratz* (Gast)


Lesenswert?

Mit einem Resonator könnte es gehen.

von ... (Gast)


Lesenswert?

Kannst du so machen:
Der erste Atm8 bekommt einen Quarz und die CKOPT-Fuse muss gesetzt sein.
Von XTAL2 dieses Atm8 gehst du dann jeweils auf XTAL1 der beiden anderen 
Atm8.

von Sebastian (Gast)


Lesenswert?

CKOPT muß auf jeden Fall programmiert sein. Einen zweiten ATMEGA kann 
man dann ziemlich sicher mitversorgen, Bei dreien kommt es auf den 
Versuch an. Vielleicht läßt sich mit einem 74HC14 als Puffer etwas 
machen.

von ... (Gast)


Lesenswert?

siehe Datenblatt:
When CKOPT is programmed, the Oscillator output will oscillate a full 
rail-torail swing on the output. This mode is suitable when operating in 
a very noisy environment or when the output from XTAL2 drives a second 
clock buffer.

von ... (Gast)


Lesenswert?

oder du gehst in XTAL1 des nächsten Atm8 und von XTAL2 dieses Atm8 zum 
nächsten XTAL1

von Jens (Gast)


Lesenswert?

Danke, werde ich jetzt mal probieren ...

von MaWin (Gast)


Lesenswert?

> oder du gehst in XTAL1 des nächsten Atm8 und von XTAL2
> dieses Atm8 zum nächsten XTAL1

Nicht direkt, nur mit kapazitiver Kopplung. Siehe:
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.7
suche "Verbinde XOUT und XIN"

von fritz (Gast)


Lesenswert?

MaWin schrieb:
> Nicht direkt, nur mit kapazitiver Kopplung.

Das war vielleicht vor 10 Jahren so.
Stell den Haupt-ATmega so ein, dass sein XOUT maximalen Pegel liefert. 
XIN schalten heutzutage bei VCC/2.

von Peter D. (peda)


Lesenswert?

Nimm die moderneren ATmega88 und setze beim Master die CLKOUT-Fuse.


Peter

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


Lesenswert?

Peter Dannegger schrieb:
> Nimm die moderneren ATmega88 und setze beim Master die CLKOUT-Fuse.

Das braucht allerdings einen zusätzlichen Pin.

von MaWin (Gast)


Lesenswert?

> Das war vielleicht vor 10 Jahren so.

Nope.

Es ist auch heute so, daß
die von dir vorgeschlagene Methode
nur funktioniert, wenn der Zufall dir gnädig ist,
und die Schaltschwelle der Oszillatoreingänge beider Chips
zufällig ausreichend gleich ist.

Schaltungen nach dem Prinzip Hoffnung aufzubauen,
mögen dien Stil sien, meiner ist es nicht.

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


Lesenswert?

MaWin schrieb:

> Es ist auch heute so, daß
> die von dir vorgeschlagene Methode
> nur funktioniert, wenn der Zufall dir gnädig ist,
> und die Schaltschwelle der Oszillatoreingänge beider Chips
> zufällig ausreichend gleich ist.

Nicht, wenn man beim Treiber CKOPT gesetzt hat (was man ohnehin tun
sollte).  Dann ist die Schaltschwelle des 2. Controllers wurscht.

von Peter D. (peda)


Lesenswert?

Jörg Wunsch schrieb:
> Peter Dannegger schrieb:
>> Nimm die moderneren ATmega88 und setze beim Master die CLKOUT-Fuse.
>
> Das braucht allerdings einen zusätzlichen Pin.

Dafür funktioniert es aber zuverlässig.

Ich hatte auch mal in einem Projekt diese Edelbastlerschaltung mit 
Abgriff direkt am Quarz gemacht. Ich hatte damit signifikant höhere 
Rückläufer wegen Quarzproblemen.

Die lange Leitung bis zu den anderen ICs verändert völlig das 
Schwingverhalten. Es ist ja ein unabgeglichener Serienschwingreis 
(Leitungsinduktivität + Schaltungskapazität) direkt am Quarz.


Peter

von MaWin (Gast)


Lesenswert?

> Nicht, wenn man beim Treiber CKOPT gesetzt hat

Doch, auch dann, schliesslich macht CKOPT aus dem Oszillator nur einen 
normalen Oszillator, so wie ihn alle anderen uC auch haben, also gelten 
auch dann alle beachtenswerten Dinge anderer uC.

von Peter D. (peda)


Lesenswert?

Die CKOPT erhöht nur die Amplitude, sie macht aber nicht aus dem 
Oszillatorausgang einen echten TTL-Ausgang.

Damit die Schaltung schwingt, braucht der Ausgang einen Innenwiderstand 
von einigen kOhm.
Wenn es ein TTL-Ausgang von wenigen Ohm wäre, ist ja der Kondensator 
dazu parallel witzlos und es entsteht auch nicht die notwendige 
Phasendrehung von 180°.


Peter

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Peter Dannegger schrieb:
>> Nimm die moderneren ATmega88 und setze beim Master die CLKOUT-Fuse.
> Das braucht allerdings einen zusätzlichen Pin.
Wer 3 uCs in nächster Nähe zueinander platziert (denn nur dann 
funktioniert das Ganze), der fragt nicht nach Ressourcen...  :-/

von Ulla (Gast)


Lesenswert?

>Damit die Schaltung schwingt, braucht der Ausgang einen Innenwiderstand
>von einigen kOhm.
>Wenn es ein TTL-Ausgang von wenigen Ohm wäre, ist ja der Kondensator
>dazu parallel witzlos und es entsteht auch nicht die notwendige
>Phasendrehung von 180°.

Ah, endlich mal jemand, der das checkt!

Am besten hängt man garnichts Zusätzliches an die Komponenten eines 
Pierce-Oszillators. Es gibt zwar Hersteller, die am Ausgang des internen 
Pierce-Inverters ein CMOS-Gatter-Eingang mit weniger als 5pF 
Lastkapazität erlauben, aber die Realität zeigt, daß bei einem realen 
Aufbau deutlich mehr Streukapazität zustande kommt und das Teil nicht 
mehr so richtig will. Wundert mich sowieso, daß diese 
Pierce-Oszillatoren überhaupt so zuverlässig arbeiten.

Wenn die drei µC denn wirklich EINEN synchronen Takt brauchen, würde ich 
das mit einem zusätzlichen Quarzoszillatorchip machen und alle 
Takteingänge der µC damit parallel versorgen. Dabei muß man aber auf 
peinlichst kurze Leiterbahnwege und ein Routen über einer durchgehenden 
Massefläche achten, sonst kann man sich die EMV ganz gründlich versauen.

von Jens (Gast)


Lesenswert?

Danke an alle,


habe jetzt das alles mal aufgebaut. Die 3 uC sind auf einer 
Leiterplatte. Ich brauche keinen synchronen Takt, ich brauch drei USART, 
deshalb das Gebastle.

Also CKOPT muss gesetzt werden. Dann XTAL2 vom 1. uC zu XTAL1 des 
nächsten uC usw.. Das geht sehr gut.

Auf dem Oszi ist die Amplitude abgegriffen direkt am Quarz fast 2V und 
bricht kaum zusammen, wenn ich an den 2. uC gehe.

Allerdings habe ich einen PC-Oszi, der nur bis 3MHz geht, deshalb auch 
ein Sinus -- glaube ich??? Aber die Amplitude bleibt bestehen.

Nehme ich CKOPT raus, bricht die Amplitude zusammen.

von (prx) A. K. (prx)


Lesenswert?

Jens schrieb:

> Allerdings habe ich einen PC-Oszi, der nur bis 3MHz geht, deshalb auch
> ein Sinus -- glaube ich???

Ist auch auf besseren Scopes einer.

> Nehme ich CKOPT raus, bricht die Amplitude zusammen.

So ist CKOPT definiert. Ohne reduziert sich die Amplitude zwecks 
sparsameren Schwingens.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jens schrieb:
> ich brauch drei USART, deshalb das Gebastle.
Das allein ist noch kein Grund. Wie schnell müssen die UARTs sein?

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


Lesenswert?

Lothar Miller schrieb:
> Wie schnell müssen die UARTs sein?

Geschwindigkeit ist keine Hexerei. ;-)

Der relative Fehler ist das einzige, was für eine UART-Kommunikation
zählt, der darf nicht mehr als 2 % sein.  Wenn man den RC-Oszillator
auf eine "baudratenfreundliche" Frequenz abstimmt und ansonsten mit
dessen Toleranzen leben kann, dann sind auch 230400 Bd mit dem
RC-Oszillator kein Problem.

Wenn man allerdings mit dem Standardwert von 8 MHz arbeitet, dann
hat man einen zusätzlichen Baudratenfehler bedingt durch den
realisierbaren Teilerfaktor, und der addiert sich zu den Toleranzen
des Oszillators dazu, sodass manche Baudraten aus dem Raster fallen.

von Jens (Gast)


Lesenswert?

Die Baudrate ist 31250 = Midi und ich nehme einen 8MHz-Quarz.

Es ist eigentlich auch kein Problem 3 Quarze zu nehmen -- wollte nur mal 
wissen, ob jemand schon Erfahrung mit dieser Reihenschaltung gemacht 
hat. Dann könnte man faul sein und sich die 2 Quarze sparen.

Übrigens habe ich auch schon verschiedene Versuche mit internem RC-Oszi 
bei dieser Baudrate gemacht.

Das lief sehr gut -- erstaunlich -- habe den uC erhitzt (ca. 70°) und im 
Gefrierfach laufen lassen. Die Abweichungen waren immer noch im "grünen" 
Bereich bei 31250 ...

von einloggen (Gast)


Lesenswert?

Schonmal an Software-UART gedacht? Spart 2 µCs ;-)

von fritz (Gast)


Lesenswert?

Jens schrieb:
> Also CKOPT muss gesetzt werden. Dann XTAL2 vom 1. uC zu XTAL1 des
> nächsten uC usw.. Das geht sehr gut.

Na bitte!

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


Lesenswert?

Jens schrieb:

> Das lief sehr gut -- erstaunlich -- habe den uC erhitzt (ca. 70°) und im
> Gefrierfach laufen lassen. Die Abweichungen waren immer noch im "grünen"
> Bereich bei 31250 ...

Wenn das selbst mit dem ältlichen ATmega8 schon geht, dann könntest
du durch Umstieg auf ATmega88 den/die Quarz(e) wohl komplett
einsparen und gleich mit dem RC-Oszillator arbeiten.  Der ist dort
nochmal ein Stück stabiler geworden gegenüber den älteren AVRs.

von Simon K. (simon) Benutzerseite


Lesenswert?

Wenn es was ernsthaftes sein soll, würde ich es sein lassen mit dem 
Abgriff an XTALx. Nimm CLKOUT und fertig. Das ist sauber und richtig.

Aber um mal weiter zu fragen: Brauchst du die 3 Mikrocontroller nur um 3 
UARTs zu haben? Wie schon oben gesagt, nimm Software-UART für die beiden 
langsamsten UARTs.

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


Lesenswert?

Simon K. schrieb:
> nimm Software-UART für die beiden
> langsamsten UARTs.

Wird wohl bei 31250 Bd (MIDI) nichts werden ... aber er hat ja schon
den Tipp bekommen, welche Controller 3 (und mehr) UARTs haben.

von Max (Gast)


Lesenswert?

Wieso nich 31250 Baud -> 320 µS Bitzeit (Da geht was mit Timerinterrupt) 
und ob 3 oder eine emulierte UART is nich SO viel hin/her...

von Simon K. (simon) Benutzerseite


Lesenswert?

Auch gut :-) Sollen alles 3 MIDI Schnittstellen sein? Habe das anders 
verstanden oder falsch gelesen.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Nimm die moderneren ATmega88 und setze beim Master die CLKOUT-Fuse.
>
>
> Peter

Ja also so kannst es doch machen. Du musst dann die beiden anderen 
Controller halt auf "external clock" fusen (und dann den Takt von CLKOUT 
an XTAL1), nicht auf Quarz und das Signal "durchschleifen". Solltest 
halt sehen dass die Abstaende unter den Controllern kurz sind.

Mit dem alten Mega8 geht das allerdings nicht, wie schon gesagt.

Greets,
Michael

von Jens (Gast)


Lesenswert?

Danke --

ich werde eine ATM168 nehmen und über CLKO die anderen speißen.

von stru_aus (Gast)


Lesenswert?

hm..

mich würde dennoch interessieren ob das mit einem quarz und zwei atmegas 
funktionieren würde - auch wenn was anderes empfohlen wird.

also sturr beide atmegas auf externes quarz stellen, und dann sehen was 
passiert, hat das schon mal jemand versucht?

konkret schwebt mit eine stapelung von einem dip40 atmega über einem 
dip28 atmega vor - würde gut passen.
zweite idee, die auch nicht so ganz sinnvoll ist: ein oder mehrere 
baugleiche atmegas stapel, um multicore zu haben.

von (prx) A. K. (prx)


Lesenswert?

stru_aus schrieb:

> mich würde dennoch interessieren ob das mit einem quarz und zwei atmegas
> funktionieren würde - auch wenn was anderes empfohlen wird.

Man muss nicht unbedingt päpstlicher sein als der Papst. Soll heissen: 
Die beiden Controller von Atmels eigenem STK500 arbeiten höchstselbst 
mit einem einzigen Keramikschwinger, und XTAL2 vom oszillierenden 
Controller hängt an XTAL1 vom Kollegen.

Klar ist aber auch, dass solche Verbindungen in Aufbau/Layout etwas 
kritisch sind. Und es kann auch sein, dass Quarze dabei empfindlicher 
sind als Keramikschwinger.

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


Lesenswert?

stru_aus schrieb:

> konkret schwebt mit eine stapelung von einem dip40 atmega über einem
> dip28 atmega vor - würde gut passen.

Wenn du die beiden im QFP-Gehäuse nähmest, kommst du fast mit dem
halben Platzbedarf aus.

von stru_aus (Gast)


Lesenswert?

mir ist klar:
-smd-gehäuse machen weniger platzverbrauch, aber ich liebe lochraster, 
hab hier nix zum belichten/ätzen zur hand
-es geht wie von atmel empfohlen mit der xtal1/xtal2-kopplung
-mit nem quarzoszi könnte man mehrere antreiben, braucht nur eine 
leitung
-mit internem 8mhz rc stellt sich die frage auch nicht

dennoch die theoretische frage:
ginge das überhaupt, zwei (oder mehr) atmegas, kurze wege zum selben 
quarz, und beide auf externes quarz gefust. ist zwar ausserhalb der 
specs, dennoch wollte ich da man nachfrgen, is ja nicht verboten :)

mfg

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


Lesenswert?

stru_aus schrieb:
> ginge das überhaupt, zwei (oder mehr) atmegas, kurze wege zum selben
> quarz, und beide auf externes quarz gefust.

Falls du XTAL1 mit XTAL1 und XTAL2 mit XTAL2 verbinden willst: nein,
so funktioniert das nicht.  Wenn schon, musst du von XTAL2 nach
XTAL1 des Slave-Controllers gehen.  Ob letzterer nun auf Quarzoszillator
oder externen Takt eingestellt wird, spielt keine große Rolle.

von Thomas T. (knibbel)


Lesenswert?

Max schrieb:
> Wieso nich 31250 Baud -> 320 µS Bitzeit (Da geht was mit Timerinterrupt)
> und ob 3 oder eine emulierte UART is nich SO viel hin/her...

Wieso kriege ich hier immer 32 µs raus? ;-)

Bei dieser Bitrate ist nicht mehr viel mit Timerinterrupts zu machen. 
Und wenn der Controller (neben dem Einlesen der Werte) noch was nebenbei 
machen soll, dann wird die Zeit recht knapp. Auf der anderen Seite wäre 
es eine schöne Programmierübung, die drei seriellen Datenströme 
(interruptgesteuert und parallel) einzulesen.

Ich würde hier eher versuchen, das Ganze in Hardware auszulagern, sprich 
die drei Schnittstellen in einem CPLD oder FPGA auszugliedern. Der 
Controller passt dann gegebenfalls auch noch mit ins FPGA. Aber ich 
denke, dies ist für den Threadersteller zu aufwändig.

Gruß,
Thomas

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.