Clock an XTAL abgreifen

Gast #823538
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
Persönliche Seite #823546
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
Gast #823570
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
#823575
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.
Gast #823584
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
Gast #823927
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.
Gast #824097
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.
(Firma: DC3AX) #826025
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
(Firma: DC3AX) #849948
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren