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
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
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
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.
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
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
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
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).
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.
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
> der Abgriff des Taktes am Ausgang des uC-Oscillators (XTAL2 bei denAVR'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.
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
> > 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.
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.
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
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;
}
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