Forum: Mikrocontroller und Digitale Elektronik Clock an XTAL abgreifen


von Frank (Gast)


Lesenswert?

Hallo,

ich brauche einen Clock für einen DDS Baustein.
Ein 16MHz Quarz steht zur Verfügung, der einen Mikrocontroller versorgt.

Könnte man einfach an einem XTAL Pin den Clock an den DDS IC führen ?

Oder müsste ich separat einen Clock erzeugen ?
Gibt es eigentlich ICs, die direkt einstellbare Clocks liefern ?

MfG

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Frank wrote:
> Hallo,
>
> ich brauche einen Clock für einen DDS Baustein.
> Ein 16MHz Quarz steht zur Verfügung, der einen Mikrocontroller versorgt.
>
> Könnte man einfach an einem XTAL Pin den Clock an den DDS IC führen ?

Was willst Du machen? Den Takt abzweigen? Duerfte mit nem Quarz nicht 
wirklich eine gute Idee sein. Da hast Du mit einem kompletten Oszillator 
wahrscheinlich mehr Chancen. Aber ob das so gluecklich ist?

> Oder müsste ich separat einen Clock erzeugen ?
> Gibt es eigentlich ICs, die direkt einstellbare Clocks liefern ?

Klar gibt es die, z.B. PLLs. Kommt auch drauf an wie genau Dein Takt 
sein muss dann kannste auch normale Logikbausteine dazu missbrauchen. Es 
gibt auch Moeglichkeiten, je nachdem wie hoch Dein Takt sein muss, den 
Mikrocontroller zum erzeugen eines Taktes zu verwenden. Manche Chips wie 
z.B. der FT232 erzeugen bereits (passende) Systemtakte fuer 
Mikrocontroller.

> MfG

von udo (Gast)


Lesenswert?

manche uCs kanns du so fusen, das der Takt auf einem Pin ausgegeben 
wird....

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Geht mit den neueren (aber AFAIR nur mit den neueren) AVRs auch, z.B. 
dem Tiny2313. Bei kleineren Takten bieten sich auch die Benutzung von 
Timers an.

von Frank (Gast)


Lesenswert?

Hallo,

ich frage nur, weil ich das hier gesehen habe (Anhang).
CLK wird vom Quarz abgezweigt, mittels zweier FFs geviertelt und dann 
dem DDS Baustein zugeführt. Geviertelt auch nur, weil die gewünschte DDS 
Ausgangsfrequenz sehr klein ist.

Es ist mir auch neu.
Scheint aber zu funktionieren.

Das eine PLL und sowas in Frage kommen, ist ja klar, aber dafür braucht 
man auch erstmal einen Takt !

Es geht um die Bereitstellung eines einfachen unipolaren Taktsignales
zwischen 0 und 3,3V.
Am besten wäre natürlich ein einfacher IC, der das macht.

Ansonsten werde ich wohl den µC Takt an einem Pin bereitstellen.

MfG

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Anhang

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ja das geht am AVR, wenn er nicht zuviele Eingänge versorgen muß. So ein 
HC-TTL-Eingang ist ja hauptsächlich eine kapazitive Last, parallel zu 
dem sowieso vorhandenen 22pF-C. Die Fuse für volle 
Quarzoszillator-Spannung, nicht auf "energiesparend" einstellen, und am 
Oszillatorausgang Xtal 2 anschließen, nicht am Eingang Xtal 1.

von Thorsten (Gast)


Lesenswert?

Hallo,

der Abgriff des Taktes am Ausgang des uC-Oscillators (XTAL2 bei den 
AVR's) stellt kein Problem dar (bei neueren AVR's sollte der Osc auf 
Fullswing gefused werden). Es sollte nur auf serielle Terminierung 
geachtet und die Eingangskapazität des folgenden Eingangs berücksichtigt 
werden (evtl. Korrektur des entsprechenden Quarzlastkondensotors, wobei 
die leichte Asymmetrie der Lastkapazitäten durchaus von Vorteil sein 
kann)

Gruss

von Peter D. (peda)


Lesenswert?

Fürs Hobby kein Problem, für ein Produkt laß es sein. Es erhöht die 
Rückläuferquote beträchtlich. Du sparst nichts ein, sondern hast 
zusätzliche Kosten.


Peter

von Frank (Gast)


Lesenswert?

Hallo,

ich bin da auch skeptisch.

Es geht mir nur um eine Vergleichsmessung.

Gibt es nicht einen einfachen IC, der mir einen Clock erzeugt ?

Ich will nicht großen Aufwand treiben.


MfG

von Andreas K. (a-k)


Lesenswert?

Frank wrote:

> Gibt es nicht einen einfachen IC, der mir einen Clock erzeugt ?

Gibt es. Sind aber teurer als Quarz oder Resonator.

> Ich will nicht großen Aufwand treiben.

Eben. Wenn 0,5% Toleranz akzeptabel sind, dann sind 3-beinige 
Resonatoren schon vom Platz her recht angenehme Taktquellen (weil die 
Kondensatoren schon drin sind).

von Frank (Gast)


Lesenswert?

Hallo,

erzeugt ein Resonator aktiv einen Takt ?

Ich glaube nicht.

Ich habe mir einen IC vorgestellt an dem ich 5V anlege und meinen Takt 
erhalte.

MfG

von Andreas K. (a-k)


Lesenswert?

Nö, ist ähnlich wie Quarz, nur nicht nicht so gut.

Eigenständigen Takt erzeugen tut ein fertiger "Quarzoszillator". Der 
kann dann etliche Controller versorgen. Kostet aber soviel wie >5 
Quarze.

von Ulrich P. (uprinz)


Lesenswert?

Hi!

Du kannst so etwas wie einen CY22393 ( Verf. bei z.B. RS-Components) 
einsetzen. Das ist ein programmierbarer Mehrkanal-Oszillator. Er braucht 
ein Quarz und leitet daraus dann verschiedene Frequenzen auf vier 
Ausgängen ab.

Ist nicht ganz billig, aber praktisch.

Gruß, Ulrich

von Bensch (Gast)


Lesenswert?

> der Abgriff des Taktes am Ausgang des uC-Oscillators (XTAL2 bei den
AVR's) stellt kein Problem dar (bei neueren AVR's sollte der Osc auf
Fullswing gefused werden).

Ergänzung: Der Takt sollte nicht zuviele Eingänge versorgen, also am 
besten durch ein Gatter puffern.

> Fürs Hobby kein Problem, für ein Produkt laß es sein. Es erhöht die
Rückläuferquote beträchtlich. Du sparst nichts ein, sondern hast
zusätzliche Kosten.

Unsinn.

von Barnes (Gast)


Lesenswert?

Hallo,

ein Quarzoszillator ist schon nicht schlecht.

Mal sehen, ob es einen mit 3,3V gibt.

Danke.

MfG

von Peter D. (peda)


Lesenswert?

Bensch wrote:

>> Fürs Hobby kein Problem, für ein Produkt laß es sein. Es erhöht die
> Rückläuferquote beträchtlich. Du sparst nichts ein, sondern hast
> zusätzliche Kosten.
>
> Unsinn.

Das ist kein Unsinn, probiers doch mal mit 1000 Platinen aus.
Ich hatte etwa 1% Rückläufer wegen Quarzproblemen.


Peter

von Bensch (Gast)


Lesenswert?

> > Unsinn.

> Das ist kein Unsinn, probiers doch mal mit 1000 Platinen aus.
> Ich hatte etwa 1% Rückläufer wegen Quarzproblemen.

Doch, das ist Unsinn, wir hatten bei einigen tausend Platinen NULL 
Probleme wegen Quarz oder Oszillator. vielleicht habt ihr den Takt am 
falschen Ende abgegriffen oder sonst einen Bock gebaut. Du solltest mal 
ein Scope dranhalten.

Hab noch kein Datenblatt eines Prozessors gesehen, wo dies nicht 
ausdrücklich erlaubt wurde.

von HildeK (Gast)


Lesenswert?

Es gibt auch die analoge Verwendung des CD4049UB - als gegengekoppelten 
Verstärker. Da könnte man recht hochohmig (schätze mal >50 .. 100k) das 
Signal abgreifen.
Ich hoffe, der tut das noch bei 16 MHz.

von Andreas K. (a-k)


Lesenswert?

HildeK wrote:

> Ich hoffe, der tut das noch bei 16 MHz.

Bei Vdd=15V vielleicht schon. ;-)

von Barnes (Gast)


Lesenswert?

Hallo,

ich will mir für mein DDS LAyout folgenden Quarzoszillatior bestellen.

http://de.farnell.com/1276640/halbleiter/product.us0?sku=RAKON-CFPS-39IB-12.0MHZ&_requestid=107996

Kann man den löten ?
Der wäre ideal für meine Zwecke.
Irgendwie sieht mir das nach Reflow aus.

Danke.

MfG

von Ulrich P. (uprinz)


Lesenswert?

Kann man löten. Du solltest die Kontaktflächen vorab mit Flussmittel 
versehen  und dann etwas Lötizinn an die Lötkolbenspitze machen. In die 
halbrunden Ecken führen und fest ist das Ding.
Ich rate davon ab die Kontaktflächen vor zu verzinnen, da der Baustein 
dann nicht auf der Platine sitzt, sondern darüber scchwebt und der 
Kontakt durch das Lötzinn, nicht aber durch die direkte Berührung mit 
der Platinen-Kontaktfläche entsteht. Zudem wird er schief eingelötet, 
weil er sich diagonal verkanten.
Also Flussmittel, Chip aufsetzen, andrücken und dann in den Ecken 
verlöten. Für solche EInsätze sind die Hohl-Spitzen Löteinsätze 
besonders gut geeignet.

Schönes Wochenende an alle!

Gruß, Ulrich

von Barnes (Gast)


Lesenswert?

Hallo,

danke Ulrich.

von Avll (Gast)


Lesenswert?

wie kann ich mit einem uC ein clock mit 24 impulse erzeugen ohne das 
programm zu beeinflussen und umgekehrt.

ich habe ein clock mit eine for schleife gemacht


  for(i=0; i<=24; x++)
  {
   clock=0;
   delay();
   clock=1;
  }

von Ulrich P. (uprinz)


Lesenswert?

Du kannst keine Pulsfolge erzeugen, ohne das Timing Deines Programmes zu 
beeinflussen. Du musst irgend etwas tun um die Pulse einzeln oder in 
Gruppen auszulösen und das wird immer Rechenzeit erfordern.

Aber man muss das von einer anderen Seite sehen:
Welche Zykluszeit benötigt Deine Hauptschleife? Wieviel dieser Zeit ist 
schon durch andere Aufgaben verbraucht? Ist das, was übrig bleibt, genug 
Zeit um eine Pulsfolge auszulösen?

Lösung 1)
Das Timing der Pulsfolge ist nicht kritisch:
Du kannst den Pin z.B. am Anfang und in der Mitte Deiner Hauptschleife 
toggeln.

main {
  while(1) {
    if( count) pin = 1;
    programmteile...
    if( count) { pin = 0; count--; }
    programmteile
  }
}
Um die Pule auszulösen einfach count auf die Anzahl der gewünschten 
Pulse setzten.

Lösung 2)
Ein gewisser 'Jitter' in deiner Hauptsoftware, der durch Interrupts 
verursacht wird, ist nicht tragisch und ebenso ein gewisser Jitter im 
Puls-Signal ist nicht tragisch.

Setze einen Timer auf, der zum einen zählt wie viele Impulse noch zu 
senden sind und zum anderen diese Impulse auslöst. Entweder läuft dieser 
Timer immer und vergleicht wie in 1) ob noch Impulse zu senden sind, 
oder der Timer schaltet sich nach dem Senden des letzten Impulses selber 
ab und wird durch die Hauptsoftware immer wieder gestartet.

Ein Trick um nicht mit zwei Timern zu arbeiten: Der Timer erzeugt die 
doppelte Frequenz bei den Interrupts und arbeitet bei ungeradzahligen 
Aufrufen nur den Teil setze Pin und bei geradzahligen Aufrufen den Teil 
lösche Pin und dekrementiere Zähler ab.

Lösung 3)
Das Timing der Pulse ist kritisch und daher musst Du tricksen. Also 
setzt Du einen Zähler als Timer auf und tust zwei Dinge: Du läst den 
Timer einen seiner OC Ausgänge toggeln und gleichzeitig löst Du bei 
diesem Event einen Interrupt aus, der die Pulse mitzählt. Die 
Interrupt-Software schaltet den Timer rechtzeitig ab um überzählige 
Impulse zu verhindern.

Lösung 4)
Timing der Pulse ist kritisch und auch noch sehr schnell
Dazu missbraucht man den SPI-Port. Programmiere ihn auf die richtige 
Frequenz und lasse bei SPI-Puffer leer einen Interrupt auslösen. 
Schreibst Du nun ein (Pseudo-) Byte in den SPI Ausgangspuffer startet 
der Sender mit der Übertragung. Der Sender-Leer-Interrupt schiebt 
einfach immer 2 Bytes nach. Dies löst jedes mal 8 Pulse am SCK Ausgang 
des SPI aus.

Gruß, Ulrich

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.