Forum: Mikrocontroller und Digitale Elektronik Rechteckgenerator mit verschiedenen Frequenzen


von Der Thomas (Gast)


Lesenswert?

Hallo! Vorweg ich habe keine Erfahrungen auf dem Gebiet Elektrotechnik.
Mein Problem ist das folgende. Ich möchte ein Rechecksignal zur 
Triggerung von einer Stereokamera erzeugen. Dazu bräuchte ich 
einstellbare Frequenzen (5,10,15,20,25,30 und 60 Hz).
Da das ganue auch recht genau sein sollte bin ich der Meinung, dass ich 
es mit einem Quarz  lösen sollte. Da kommen jetzt meine mangelnden 
elektrotechnischen Kenntnisse ins Spiel. Ich lese überall das man sich 
einfach ein Quarz nimmt und den runter teilt.
Wenn ich also einen Quarz mit einer bestimmten Frequent habe und den an 
ein 74HC4060 packe kann ich ja die vom Quarz erzeugte Frequenz durch 
2^4-2^16 teilen und habe dann an den entsprechenden Ausgängen die 
entsprechend kleineren frequenzen. Allerdings kann ich so ja nicht die 
von mir gebraichten Frequenzen erzeugen.
Gibt es jetzt Bauteile die ich einfach hinter die Ausgänge schalten 
kann, die dann meine gewünschte Frequenz erzeugen? Wenn ja welche wären 
das!

Ich wäre für jede Hilfe dankbar und an dieser Stelle schon einmal besten 
Dank im Vorraus!

Beste Grüße,

Thomas

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Der Thomas schrieb:
> Hallo! Vorweg ich habe keine Erfahrungen auf dem Gebiet Elektrotechnik.
> Mein Problem ist das folgende. Ich möchte ein Rechecksignal zur
> Triggerung von einer Stereokamera erzeugen. Dazu bräuchte ich
> einstellbare Frequenzen (5,10,15,20,25,30 und 60 Hz).
> Da das ganue auch recht genau sein sollte bin ich der Meinung, dass ich
> es mit einem Quarz  lösen sollte. Da kommen jetzt meine mangelnden
> elektrotechnischen Kenntnisse ins Spiel. Ich lese überall das man sich
> einfach ein Quarz nimmt und den runter teilt.
> Wenn ich also einen Quarz mit einer bestimmten Frequent habe und den an
> ein 74HC4060 packe kann ich ja die vom Quarz erzeugte Frequenz durch
> 2^4-2^16 teilen und habe dann an den entsprechenden Ausgängen die
> entsprechend kleineren frequenzen. Allerdings kann ich so ja nicht die
> von mir gebraichten Frequenzen erzeugen.
> Gibt es jetzt Bauteile die ich einfach hinter die Ausgänge schalten
> kann, die dann meine gewünschte Frequenz erzeugen? Wenn ja welche wären
> das!
>
> Ich wäre für jede Hilfe dankbar und an dieser Stelle schon einmal besten
> Dank im Vorraus!
>
> Beste Grüße,
>
> Thomas

Hallo Thomas,
mit der gewünschten Einstellmöglichkeit (5,10,15,20,25,30 und 60 Hz) 
bist du sicher mit einem Mikrocontroller besser bedient. Welches Quarz 
du dann verwendest, ist eher unwichtig, weil die Frequenz per Software 
runtergeteilt werden kann. Damit bist du flexibel und kannst fast 
beliebige Rechtecksignale ausgeben. Ein paar der Pins kannst du 
verwenden, um die gewünschte Frequenz per Schalter vorzugeben, so dass 
du jederzeit umschalten kannst.

Die Sache hat allerdings einen Haken: du musst für den Mikrocontroller 
ein kleines Programm schreiben. Hast du damit Erfahrung?

von Werner (Gast)


Lesenswert?

Der Thomas schrieb:
> Gibt es jetzt Bauteile die ich einfach hinter die Ausgänge schalten
> kann, die dann meine gewünschte Frequenz erzeugen?

Mit einer PLL würde soetwas gehen, aber für deinen Frequenzbereich wäre 
wohl ein klitzekleiner Mikrocontroller einfacher.
Ein Poti dran - zur Auswahl der Frequenz - und ein kleines Programm, das 
über den AD-Wandler die Potistellung liest, um über eine Tabelle einen 
Timer zur Erzeugung deiner Frequenzen passend zu programmieren

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Nur diese Frequenzen? Für feinere Auflösung wäre ein DDS 
Funktionsgenerator das richtige.
Aber hier ist der kleinste gemeinsame Teiler 1500 Hz, wenn das Rechteck 
symmetrisch sein soll 3 kHz. Das ist aus einem Quarzoszillator einfach 
zu gewinnen.
Schau mal das Datenblatt zum 74HC40103 an, der kann parallel einstellbar 
durch 3..256 teilen, der Ausgang ist aber ein Impuls. Danach noch ein 
D-Flipflop 74HC74 o.ä., dann ist es ein symmetrisches Rechteck.

von Der Thomas (Gast)


Lesenswert?

Hi! Wow das ging ja schnell!!
Dann sieht es wohl so aus, dass ich um das programmieren nicht drum rum 
komme! Das müsste ich dann wahrscheinlich in C oder C++ schreiben oder? 
Kann ja nicht so viel anders sein als Matlab ;)
Kennt ihr zufällig irgendwelche frei verfügbaren Beispiele an denen ich 
mich orientieren könnte? Und könntet ihr mir vielleicht als kleine 
Starthilfe die erforderlichen Bauteile nennen die ich da bräuchte? Für 
mich sind diese ganzen Bezeichnungen nicht gerade aussagekräftig...
Vielen dank schonmal für die bisherigen Tips!!

von Ingo (Gast)


Lesenswert?

Hallo Thomas,

nimm dir n kleinen Tiny-µC, häng einen Quarz dran und programmiere einen 
Timer im CTC Modus um die gewünschte Frequenz zu erzeugen. Bei den 
niedrigen Frequenzen erreichst du eine super Genauigkeit!

Ingo

von Der Thomas (Gast)


Lesenswert?

Sorry für die vielleicht dumme Frage, aber einen kleinen Tiny-µC??

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Der Thomas schrieb:
> Das müsste ich dann wahrscheinlich in C oder C++ schreiben oder?

Für diese Aufgabe ist wahrscheinlich sogar Assembler deutlich einfacher 
als C. Kommt immer drauf an, welche Programmiersprachen du schon 
beherrschst.

> Kennt ihr zufällig irgendwelche frei verfügbaren Beispiele an denen ich
> mich orientieren könnte?

Das AVR-Tutorial hier bei mikrocontroller.net ist sehr gut. Lies 
dich dort einfach mal ein und schau, ob du damit zurecht kommst.

> Und könntet ihr mir vielleicht als kleine
> Starthilfe die erforderlichen Bauteile nennen die ich da bräuchte?

Für deine Anforderungen eignet sich fast jeder Mikrocontroller. Welchen 
du nimmst, ist Geschmacksache, ich persönlich würde mich für den 
ATtiny85 entscheiden, weil der handlich klein ist, wenig Strom braucht, 
weil man ein Quarz direkt anschließen kann und sicher auch, weil er 
billig ist und man ihn fast überall bekommt.

Sonstige Bauteile... ein Quarz mit z.B. 8 MHz, die obligatorischen 
Kondensatoren dazu, weitere Kondensatoren zum Abblocken, einen 
DIP-Schalter (evtl. als BCD-Drehschalter), um die Frequenzen 
umzuschalten, ein paar Widerstände und zwei Mignonzellen (oder 
Knopfzellen) für die Stromversorgung.

Auch hierzu findest du wahrscheinlich ein paar gute Beispiele im 
Tutorial.

von Karl H. (kbuchegg)


Lesenswert?

Tja. Da waren sie wieder, deine Probleme.

Ein Tiny ist ein AVR-Risc Microkontroller in einem kleinen Gehäuse 
(daher der Name).

Fragen wir mal anders rum:
Von welchen Voraussetzungen können wir ausgehen.
Denn: so einfach so ein Tiny (oder Mega) auch zu programmieren ist, man 
benötigt dennoch etwas Zeug drummherum, wie zb einen Brenner mit dem man 
das Programm in den Tiny brennt.
Du scheinst das alles nicht vorrätig zu haben, d.h. da kommen ein paar 
Kosten auf dich zu, die sich bei einem Einmal-Projekt sicher nicht 
lohnen.

von Der Thomas (Gast)


Lesenswert?

Ich denke es ist hier alles vorhanden was man so braucht! Ich bin 
maschinenbauer bzw. Luft- und Raumfahrtechniker und bin gerade im 
Praktikum. Hier bin ich jetzt irgendwie sehr in der E-Technik schiene 
gelandet. Davon habe ich allerdings wenig Ahnung! Ich habe im Studium 
mal c++ programmiert. Das ist allerdings eine Weile her. Das Tutorial 
ist ein guter Tipp. Da werde ich mich mal einlesen!
Vielen dank nochmals und ich melde mich sicherlich bald mit neuen Fragen 
oder aber mit einem erfolgsbericht ;)
Beste Grüße!

von Karl H. (kbuchegg)


Lesenswert?

Der Thomas schrieb:
> Ich denke es ist hier alles vorhanden was man so braucht! Ich bin
> maschinenbauer bzw. Luft- und Raumfahrtechniker und bin gerade im
> Praktikum. Hier bin ich jetzt irgendwie sehr in der E-Technik schiene
> gelandet.

Dann würde ich an deiner Stelle so vorgehen, dass ich erst mal in deiner 
Umgebung rumfrage, ob da wer Mikrocontroller programmiert bzw. Platinen 
dazu baut.
Und dann genau denselben nehmen.
Denn das hat auch keinen Sinn, wenn du da dann dein eigenes Süppchen 
kochst und dir keiner vor Ort helfen kann.

von Peter D. (peda)


Lesenswert?

Werner schrieb:
> Ein Poti dran - zur Auswahl der Frequenz

Ich würde lieber einen Codierschalter nehmen, da kann man die Stellung 
einfach ablesen.
Dann ist der ATtiny25 etwas knapp mit Pins, daher besser den ATtiny24 
nehmen.

Der Thomas schrieb:
> in C oder C++ schreiben oder?

Ja.

von Peter D. (peda)


Lesenswert?

1
#define F_CPU   10e6                                    // 10MHz
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
#define DELAY(x)        1e6 / 2.0 / x
6
7
int main ()
8
{
9
  DDRA = 1<<PA4;                                        // output
10
  for(;;){
11
    switch( PINA & 0x0F ){                              // PINA3..PINA0
12
      case 0: _delay_us( DELAY(  5 )); break;           // 5Hz
13
      case 1: _delay_us( DELAY( 10 )); break;           // 10Hz
14
      case 2: _delay_us( DELAY( 15 )); break;           // 15Hz
15
      case 3: _delay_us( DELAY( 20 )); break;           // 20Hz
16
      case 4: _delay_us( DELAY( 25 )); break;           // 25Hz
17
      case 5: _delay_us( DELAY( 30 )); break;           // 30Hz
18
      case 6: _delay_us( DELAY( 60 )); break;           // 60Hz
19
    }
20
    PINA = 1<<PA4;                                      // toggle output
21
  }
22
}

= 210 Byte Code.

von Ingo (Gast)


Lesenswert?

Peter Dannegger schieb:
> = 210 Byte Code.
Hier ist der Default-Fall nicht abgefangen, hier wird ins 
Eingansgregister geschrieben, interne Pullups nicht aktiv, folglich 
extern, AVR/io nicht eingebunden, Am Ausgang toggeln nichts, da müsste 
stehn PortA ^= 1<<PAx
Halb so voreilig und lieber deine gewohnte Qualität!

von Der Thomas (Gast)


Lesenswert?

Wow! Dann gilt es jetzt nur noch den Code und Ingos Kommentar zu 
verstehen und dann sehe ich langsam Land!!
Ich kann euch gar nicht oft genug danken :D

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Ingo schrieb:
> Peter Dannegger schieb:
>> = 210 Byte Code.
> Hier ist der Default-Fall nicht abgefangen, hier wird ins
> Eingansgregister geschrieben, interne Pullups nicht aktiv, folglich
> extern, AVR/io nicht eingebunden, Am Ausgang toggeln nichts, da müsste
> stehn PortA ^= 1<<PAx
> Halb so voreilig und lieber deine gewohnte Qualität!

Ja, die Pullups sollte man vielleicht noch setzen. Auch muss man sich 
überlegen, ob die Zeitverluste der Schleife noch irgendwie kompensiert 
werden sollen, trotzdem ist das Programm von Peter wunderbar klar und 
einfach, mir gefällts.

Was hast du gegen "PINA = 1<<PA4"? Ist doch die einfachste Art, den 
Ausgang zu toggeln. Kann natürlich sein, dass der Compiler auch "PortA 
^= 1<<PA4" in o.g. Befehl übersetzt, aber nur, wenn er einen sehr guten 
Optimierer hat.

von Ingo (Gast)


Lesenswert?

Was Peter wahrscheinlich sagen wollte ist, dass dein Problem innerhalb 
von n paar Zeilen Code gelöst sind, hat er ja recht.

Ingo

von Ingo (Gast)


Lesenswert?

Tut mir leid, evtl. übersehe ich was aber:
PINx beschreibt den logischen Zustand am Pin
Portx steuert den logischen Zustand am Pin
Was toggelt denn hier? Hier wird nur eine 1 in das Eingangsregister 
geschrieben.

Will nicht ausschließen das ich was übersehen habe

von spess53 (Gast)


Lesenswert?

Hi

>Was toggelt denn hier? Hier wird nur eine 1 in das Eingangsregister
>geschrieben.

Ist bei neueren AVRs so. Das Schreiben einer 1 in das PIN-Register 
toggled den zugehörigen Pin.

Toggling the Pin
  Writing a logic one to PINxn toggles the value of PORTxn, independent
  on the value of DDRxn.
  Note that the SBI instruction can be used to toggle one single bit in 
a
  port.

MfG Spess

von Ingo (Gast)


Lesenswert?

Hallo Spess,

vielen Dank für die Info, ich wusste nur das das mit nem XMega und den 
OUTTGL Registern geht, aber bei den neueren Megas nun auch, interessant! 
Sorry Peter, mein Fehler!

von spess53 (Gast)


Lesenswert?

Hi

>aber bei den neueren Megas nun auch,

Nicht nur bei den neueren ATMegas, sondern auch bei neueren ATTinys.

MfG Spess

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


Lesenswert?

> Recheckeckgenerator
Ja, klar. Habs mal aufgeräumt...

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Standard-Quarze von Reichelt:
12,88 MHz/4096
6,144MHz/2048
3,072MHz/1024
=3kHz
also ein 74HC4060,ein 74HC40103 und ein 74HC74 reichen auch.
Aber das mit Mikrocontroller ist natürlich eleganter.

von c-hater (Gast)


Lesenswert?

spess53 schrieb:

> Ist bei neueren AVRs so. Das Schreiben einer 1 in das PIN-Register
> toggled den zugehörigen Pin.
>
> Toggling the Pin
>   Writing a logic one to PINxn toggles the value of PORTxn, independent
>   on the value of DDRxn.
>   Note that the SBI instruction can be used to toggle one single bit in
> a
>   port.

Das haut mich jetzt weg. Gerade fluche ich mal wieder, warum es wohl 
keine "eori"-Instruktion gibt, die mir einen dringend benötigten Takt 
freiräumen könnte, und nun stelle ich fest, daß ich die garnicht 
brauche.

Allein deswegen hat es sich heute schon wieder gelohnt, das Forum zu 
lesen. OK, man hätte natürlich auch die Datenblätter der neueren Teile 
einfach mal vollständig lesen können, aber wer rechnet schon damit, daß 
es bei Trivialitäten wie Bitbanging nach 10 Jahren nochmal was 
nützliches Neues gibt...

von Ulrich (Gast)


Lesenswert?

Die Lösung mit den Delays ist noch nicht besonders genau. Man könnte es 
noch hinbekommen, müsste dann aber noch die Laufzeit der Schleife 
berücksichtigen.

Für eine genauer Lösung wäre es besser einen Interrupt zu nehmen, der 
einem z.B: 600 Hz erzeugt, und dann in der ISR je nach Gewünschter 
Frequenz durch 5,10,15,20,30,60 usw. teilt. Alternativ könnte man auch 
je nach Frequenz direkt den Timer Programmieren das der Interrupt mit 
der Doppelten der gewünschten Frequenz kommt und das Signal gleich per 
Waveform Generator ausgeben lassen.

Wenn das Hauptprogramm nur einfach in den Sleep Modus geht, ist auch die 
Reaktionszeit auf einen Interrupt immer gleich.

von Wilhelm F. (Gast)


Lesenswert?

Ulrich schrieb:

> Wenn das Hauptprogramm nur einfach in den Sleep Modus geht, ist auch die
> Reaktionszeit auf einen Interrupt immer gleich.

Haben diese kleinen µC eigentlich keinen Compare-Mode bzw. Compare-Timer 
für PWM? Dann kann die CPU gleich ganz schlafen, und der Timer läuft 
ohne Interrupt, so gut wie es auch ein reiner Hardware-Zähler mit bspw. 
einem CMOS 4060 tun würde.

von thom (Gast)


Lesenswert?

Du kannst auch ein AD9850-Modul nehmen, das hat neben dem Sinus auch 
einen Rechteck-Ausgang:

http://www.ebay.de/itm/New-AD9850-DDS-Signal-Generator-Modul-0-40MHz-Test-Equipment-/330868965479?pt=Licht_Effekte&hash=item4d0953c067

Ein Steuer-IC gibts auch bei der Bucht:

http://www.ebay.de/itm/310624875218?ssPageName=STRK:MESOX:IT&_trksid=p3984.m1559.l2649


Das gibt zusammen einen prima Funktionsgenerator, den man immer mal 
gebrauchen kann.

von Ulrich (Gast)


Lesenswert?

Die Tiny AVRs haben schon einen PWM Mode und compare Mode, allerdings 
haben viele nur 8 bit Timer. Da müsste man dann schon einen passenden 
Quarz finden, damit man so ohne weiteres alle der gewünschten Frequenzen 
direkt hin bekommt. Der Vorteiler (Takt und am Timer) gibt ja nur 2 er 
Potenzen.
Es gibt aber auch einige Tinys mit 16 Bit Timer und AD Wandler: z.B. den 
Tiny24.

von Karl H. (kbuchegg)


Lesenswert?

Ulrich schrieb:
> Die Lösung mit den Delays ist noch nicht besonders genau. Man könnte es
> noch hinbekommen, müsste dann aber noch die Laufzeit der Schleife
> berücksichtigen.
>
> Für eine genauer Lösung wäre es besser einen Interrupt zu nehmen,

Für das Auslösen einer Stereocamera wird es wohl reichen :-)
Zum anderen ist ja auch der Quarz nicht genau genug, so dass die 
zusätzlichen <10 Takte neben den errechneten Verzögerugsschleifen pro 
Schleifendurchlauf das Kraut auch nicht mehr fett machen.

von Peter D. (peda)


Lesenswert?

Ulrich schrieb:
> Die Lösung mit den Delays ist noch nicht besonders genau.

Es ist Unsinn, die Software auf den Zyklus genau zu schreiben, wenn die 
Hardware das nicht wuppen kann.
Für ein typisches MC-Quarz ist das daher vollkommen ausreichend.

Willst Du eine höhere Genauigkeit, mußt Du erstmal eine bessere 
Zeitbasis benutzen, z.B. ein Rubidium Frequenznormal.

von M. N. (Gast)


Lesenswert?

Ulrich schrieb:
> Die Lösung mit den Delays ist noch nicht besonders genau. Man könnte es
> noch hinbekommen, müsste dann aber noch die Laufzeit der Schleife
> berücksichtigen.

Wenn man die Aussage vollständig zitiert, wird sie auch nachvollziehbar.

Ulrich schrieb:
> Es gibt aber auch einige Tinys mit 16 Bit Timer und AD Wandler: z.B. den
> Tiny24.

Einen Tiny24/44/84 + Quarz würde ich auch empfehlen.

Peter Dannegger schrieb:
> Willst Du eine höhere Genauigkeit, mußt Du erstmal eine bessere
> Zeitbasis benutzen, z.B. ein Rubidium Frequenznormal.

Und das ist nun völlig daneben!

von Karl H. (kbuchegg)


Lesenswert?

M. N. schrieb:
> Ulrich schrieb:
>> Die Lösung mit den Delays ist noch nicht besonders genau. Man könnte es
>> noch hinbekommen, müsste dann aber noch die Laufzeit der Schleife
>> berücksichtigen.
>
> Wenn man die Aussage vollständig zitiert, wird sie auch nachvollziehbar.

Nicht wirklich.
Sieht man sich die Schleife an, dann besteht sie zu 99.999% aus 
Takte-zählen plus ein paar zusätzliche Takte (weniger als 10), die sich 
mit Pin toggeln und Aufbau der Schleife beschäftigen.

delay_us rechnet sich sehr genau aus, wieviele Takte es zu zählen hat 
und berücksichtigt dabei auch seinen eigenen Aufbau. d.h. diese Takte 
stimmen. Ein _delay_us( 1000 ) wird so aufgelöst, dass bei 10Mhz 
Taktfrequenz auch wirklich in Summe 1 Millionen Takte verbrutzelt 
werden. Die zusätzlichen (angenommenen)10 Takte für den Rest der 
Schleife fallen überhaupt nicht ins Gewicht. Denn ob der µC jetzt 
1000000 Takte verbrutzel um auf 1ms zu kommen oder 1000010 (delay + 
Schleifenaufbau) ist völlig egal, solange der Quarz real nicht 10000000 
(wie auf ihm aufgedruckt) sondern 10000130 Schwingungen (oder 
entsprechend in der anderen Richtung) in der Sekunde macht (und sich das 
bei Temperaturänderungen auch ändert)

Wenn du wirklich exakte Zeiten haben willst, musst du in erster Linie 
mal dafür sorgen, dass du die Frequenz deiner Zeitbasis exakt kennst 
(und die auch konstant bleibt), damit du diese Frequenz auch exakt 
zählen kannst. Solange du die nicht exakt kennst, spielt es überhaupt 
keine Rolle, ob du systematisch um 4 oder 5 oder 10 Takte zuviel/zuwenig 
zählst oder nicht, weil das im Quarzfehler völlig untergeht.


Ich gehöre durchaus zu denjenigen, die bei einem delay zu heulen 
anfangen. Aber ich akzeptiere auch, dass es Programme gibt, in denen ein 
komplexeres Timer-Schema nichts bringt.  Dieses Einfachstprogramm gehört 
m.M. nach genau in diese Kategorie. Ob ich mit einem Timer die 1Mio 
Takte falsch abzähle (weil es in Wirklichkeit 1000124 oder 9999848 oder 
... sein müssten), oder ob ich eine Warteschleife 1Mio Takte verbrutzeln 
lasse, ist Jacke wie Hose. Stimmen wird das eine genausowenig wie das 
andere - wenn man ganz genau hinsieht.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Auch wenn die Delay-Lösung für die vorliegende Anwendung ausreichend
sein mag, kostet es ja kein zusätzliches Geld, das Ganze mit einem Timer
zu machen. Die Software wird dadurch sogar noch kürzer.

Da jeder aktuelle AVR-Controller einen 8-Bit-Timer mit CTC-Mode, Output-
Compare-Toggle und Prescaler-Faktor bis mindestens 1024 hat, ist es
überhaupt kein Problem, das Rechtecksignal zyklengenau komplett durch
den Timer generieren zu lassen.

Beispiel:

- Quarz:            2,4576 MHz (gibt's bspw. bei Reichelt)
- Prescaler-Faktor: 1024
- Timer-Periode:    240 ->  5 Hz
                    120 -> 10 Hz
                     80 -> 15 Hz
                     60 -> 20 Hz
                     48 -> 25 Hz
                     40 -> 30 Hz
                     20 -> 60 Hz

Anstelle der 2,4576 MHz gehen auch 1,8432 MHz. Dann sind die angegebenen
Timer-Perioden jeweils mit 3/4 zu multiplizieren.

Die meisten neueren AVRs haben aber auch einen 16-Bit-Timer und/oder
größere Prescaler-Faktoren, so dass beim Quarz auch höhere Frequenzen
und damit kleinere Gehäuseformen als HC49/U möglich sind (falls Baugröße
wichtiger als Stromverbrauch ist).

Die CPU steht damit nach der Initialisierung des Timers zu 100% für
andere Aufgaben zur Verfügung (falls man noch irgendwelche Gimmicks
realisieren möchte) oder kann schlafen gelegt werden, um Strom zu
sparen.

von M. N. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich gehöre durchaus zu denjenigen, die bei einem delay zu heulen
> anfangen.

Na das nun nicht.
Aber Timer + Quarz erscheinen mir als sinnvolle und zuverlässige Lösung, 
wenn man auf dem Teppich bleiben und nicht jeden Lösungsansatz zerreden 
will.

von Wilhelm F. (Gast)


Lesenswert?

Peter Dannegger schrieb:

> Ulrich schrieb:
>> Die Lösung mit den Delays ist noch nicht besonders genau.
>
> Es ist Unsinn, die Software auf den Zyklus genau zu schreiben, wenn die
> Hardware das nicht wuppen kann.
> Für ein typisches MC-Quarz ist das daher vollkommen ausreichend.

Das könnte man auf den ersten Blick annehmen. Eine Addition von Fehlern 
macht aber eine Sache garantiert nicht besser. Bei einem Einzelstück 
kann man mal so hantieren.

Beim Kauf eines Quarzes griff ich mal daneben, und erwischte wohl 2. 
Wahl. 690ppm Abweichung, da hätte die Schaltung noch einen Trimmer am 
Quarz gebraucht. Zum zuverlässigen Betrieb eines CAN-Controllers hätte 
das kaum noch gereicht, und für eine autonome Uhr (z.B. ausgefallenes 
DCF-Signal) bei weitem auch nicht. Die Uhr geht am Tag sowas knapp unter 
10 Minuten falsch. Es spielt bei mir keine Rolle, ist nur ein 
Schaustück, und DCF updatet sowieso jede Minute. Der Quarz wäre auch 
schnell ausgetauscht, wenn es mir so wichtig wäre. Alternativ zum 
Trimmer könnte man wohl noch etwas an den Timertakten justieren, bei 
Timern mit geringer Auflösung allerdings weniger gut.

von Johann L. (radiostar)


Lesenswert?

Wenn ich, so wie der TO, wenig Ahnung von Elektronik und Controllern 
hätte, dann würde ich ja eine Lösung mit Microcontrollern nicht gerade 
favorisieren. Ich würde mir einfach einen 1,5 MHz Quarzoszillator 
besorgen und mit ein paar Timer-ICs die passenden Ausgangsfrequenzen 
einstellen.

Wenn ich mir's genau überlege - selbst mit Ahnung von Elektronik und 
Controllern würde ich es für ein Einzelstück wohl so machen.

von Karl H. (kbuchegg)


Lesenswert?

Wilhelm Ferkes schrieb:
> Peter Dannegger schrieb:
>
>> Ulrich schrieb:
>>> Die Lösung mit den Delays ist noch nicht besonders genau.
>>
>> Es ist Unsinn, die Software auf den Zyklus genau zu schreiben, wenn die
>> Hardware das nicht wuppen kann.
>> Für ein typisches MC-Quarz ist das daher vollkommen ausreichend.
>
> Das könnte man auf den ersten Blick annehmen. Eine Addition von Fehlern
> macht aber eine Sache garantiert nicht besser. Bei einem Einzelstück
> kann man mal so hantieren.

Ähm.
Ist dir klar, das PeDa einen wunderbaren Artikel darüber geschrieben 
hat, wie man (allerdings mittels Timer) eine Uhr aufbaut, die dann auch 
maximal genau geht? Teil dieses Abgleichprozesses ist es, die exakte(!) 
Quarzfrequenz festzustellen und die CTC-Timerkette so einzustellen, dass 
sie über mehrere Timerperioden gemittelt genau diese real ermittelte 
Zyklenzahl ergibt.
Und solange man das nicht macht, ist es sinnlos auf eine Zyklenzahl 
eines Quarzes hinzuarbeiten, die der einfach nicht hat. Egal ob mit 
Timer oder mittels Warteschleifen.

von M. N. (Gast)


Lesenswert?

J. L. schrieb:
> Wenn ich mir's genau überlege - selbst mit Ahnung von Elektronik und
> Controllern würde ich es für ein Einzelstück wohl so machen.

Dann gerade mit µC! Bislang wissen wir doch kaum etwas, nur dass ein 
"Rechecksignal" erzeugt werden soll :-)
Das soll bestimmt auch zu einem Zeitpunkt gestartet und gestoppt werden 
und nicht wie bei einer Kirchturmuhr Tag für Tag durchlaufen.
Erst ein µC kann die Schaltung/Steuerung praxisgerecht machen.

von Wilhelm F. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Ist dir klar, das PeDa einen wunderbaren Artikel darüber geschrieben
> hat, wie man (allerdings mittels Timer) eine Uhr aufbaut, die dann auch
> maximal genau geht? Teil dieses Abgleichprozesses ist es, die exakte(!)
> Quarzfrequenz festzustellen und die CTC-Timerkette so einzustellen, dass
> sie über mehrere Timerperioden gemittelt genau diese real ermittelte
> Zyklenzahl ergibt.

Zwar kenne ich die Uhr von PeDa nicht, aber ja, klar, da kann man mit 
Aufwand noch was machen. Ich tippe mal, ohne es zu wissen, daß er zur 
Korrektur sogar das DCF-Signal selbst heran zieht.

So weit soll das hier sicher nicht getrieben werden. Der TO hat ja auch 
noch die Möglichkeit, einen eng tolerierten Fertigoszillator zu kaufen, 
wenn die Sache wirklich präziser sein muß.



J. L. schrieb:

> Wenn ich mir's genau überlege - selbst mit Ahnung von Elektronik und
> Controllern würde ich es für ein Einzelstück wohl so machen.

Zumindest fällt da niemals ein Flash aus, weil es aus Altersgründen mal 
bits verliert. Aber: Die Sache ist dann fest verdrahtet, so leicht nicht 
mehr änderbar. Genau dort liegt ja die Fortschrittlichkeit von µC.

von Der Thomas (Gast)


Lesenswert?

So dann melde ich mich auch mal wieder zu Wort als TO.
Ich habe mich dazu entschlossen es definitiv mit einem Mikrokontroller 
umzusetzen, welchen ich in C programmieren werden. Dazu gibt es hier ja 
recht gute Tutorien die auch den Hardwareaufbau gut erklären. Ich will 
ja schließlich dabei auch noch was lernen ;)

Den Hardwareaufbau habe ich mir jetzt soweit auf dem Papier erstellt. 
Beschreiben werde ich das ganze über einen ISP Adapter.
Um die Frequenzen zu ändern möchte ich einen Schalter verwenden. Habe 
ich das soweit richtig verstanden das ich wenn ich 7 Frequenzen 
generieren möchte, ich ich 7 Eingangspins und einen für den Ausgang 
benötige. Je nachdem an welchen Eingangspin dann die Spannung anliegt, 
kann ich dann ein entsprechendens "Programm" schreibe welches die 
gewünschte Frequenz generiert und am Ausgangspin ausgibt. Über diesen 
Pin füttere ich dann die beiden Kameras mit dem Triggersignal.
Schalter wäre dann sowas hier:
http://www.reichelt.de/Dip-Kodierschalter/DP-06/3/index.html?;ACTION=3;LA=2;ARTICLE=7172;GROUPID=3287;artnr=DP+06

Würde das so hinhauen oder habe ich da was noch falsch verstanden?

Beste grüße,

Thomas

von Peter D. (peda)


Lesenswert?

Man kann natürlich mit einem Timer 600Hz erzeugen und dann daraus die 
gewünschten Takte ableiten.
Der Pferdefuß ist aber, daß ein 6MHz Quarz eben nicht exakt 6,000000MHz 
hat, sondern abweicht und schon haben die 600Hz einen Fehler. Dieser 
kann durchaus größer sein, als der Fehler des Delays. Im Worst Case ist 
er 300 Zyklen.

Klar kann man mit dem 16-Bit Timer auch eine PWM höherer Bitzahl machen, 
um auch bei realen Quarzfrequenzen zyklusgenau zu sein.
Aber die Mathematik wird nen Zacken komplexer und damit wollte ich einen 
Anfänger nicht verunsichern.

Mein RTC-Code macht ja auch keine Kompensation auf einen Zyklus genau, 
sonderen nur so weit, daß es für Uhrenanwendungen ausreicht.
Ich glaub, etwa alle 10Hz F_CPU-Änderung ändert sich auch der 
Korrekturwert.

von Peter D. (peda)


Lesenswert?


von Der Thomas (Gast)


Lesenswert?

Ok dann so einen Schalter! Aber ist es korrekt, dass ich den dann an die 
7 Pole anschließen muss und ich dann mit einer einer switch case abfrage 
die entsprechenden Frequenzen erzeuge?

von spess53 (Gast)


Lesenswert?

Hi

>Ok dann so einen Schalter! Aber ist es korrekt, dass ich den dann an die
>7 Pole anschließen muss und ich dann mit einer einer switch case abfrage
>die entsprechenden Frequenzen erzeuge?

Der braucht nur 4 Anschlüsse.

MfG Spess

von Der Thomas (Gast)


Lesenswert?

Hmm dann verstehe ich nicht wie so ein Schalter funktioniert. Ich hätte 
jetzt gedacht, dass der nur den anliegende Spannung auf eine bestimmten 
Pin durchschaltet. Dann liegt ein pin auf high und die anderen auf low. 
Das kann ich dann einfach auslesen. Sprich ich muss dann nur schauen an 
welchen pin ist high. jedem pin wurde eine frequenz zugeordent und die 
wird dann ausgegeben.
Bin ich da auf dem Holzweg?

von spess53 (Gast)


Lesenswert?

Hi

>Bin ich da auf dem Holzweg?

Ja. Da sind 4 Schalter drin. Dadurch wird die Schalterstellung binär 
codiert auf den 4 Anschlüssen ausgegeben.

MfG Spess

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter Dannegger schrieb:
> http://www.reichelt.de/Dip-Kodierschalter/KDR-16/3/index.html?;ARTICLE=9250

Diesen Schalter gibt es auch mit Griff (damit du nicht ständig einen
Schraubenzieher mit dabei haben musst) und wahlweise mit 10 oder 16
Einstellpositionen:

  http://www.reichelt.de/?ARTICLE=9433
  http://www.reichelt.de/?ARTICLE=9434

Wie auch der von Peter vorgeschlagene Schalter brauchst auch du hier
4 Eingangspins an Mikrocontroller. Die Schalterstellung wird dabei
binär codiert (s. zweite Abbildung auf der Reichelt-Webseite).

von Wilhelm F. (Gast)


Lesenswert?

Der Thomas schrieb:

> Bin ich da auf dem Holzweg?

Vielleicht sagt dir der Begriff Hex-Codierschalter eher was, und 
Binärcodierung weniger. Die Schalterstellung geht hexadezimal an die 
Anschlußpins.

An 3 Pins kann man bspw. 8 Schalterstellungen codieren.

DIP-Schalter, auch Mäuseklavier genannt, gehen auch. Bspw. 3 Schalter 
für 8 Zustände.

von Der Thomas (Gast)


Lesenswert?

Ahh da hats klick gemacht:D Ist ja gar nicht so dumm diese 
Binärcodierung :D
Also hänge ich den Schalter an Port D 0-3 und kann mir dann den Port D 4 
als ausgang definiren und da das Triggersignal ausgeben!
Wenn das so stimmt geh ich einkaufen und programmiere die Abfrage und 
dann müsste das so klappen oder?

von Wilhelm F. (Gast)


Lesenswert?

Der Thomas schrieb:

> Wenn das so stimmt geh ich einkaufen und programmiere die Abfrage und
> dann müsste das so klappen oder?

Du hast noch nicht beschrieben, was alles genau du jetzt einkaufen 
willst. Es wäre besser, das mit uns noch mal zu besprechen. Letztendlich 
gehören zu der Sache auch problemlose und preisgünstige Tools für den 
PC. Besser, wenn man das im Vorfeld weiß, ob und was es da gibt.

Leider kenne ich AVR-Familien und Tools nicht, aber andere Freaks hier 
geben sicher Rat dazu.

von Der Thomas (Gast)


Lesenswert?

Ok! Also ich benötige meines Wissens nach:
Für die Grundschaltung des Mega8:
R1 = 10kOhm
C1 = 47nF
C2-C4 100nF
einen Quarzoszilator oder ein Quarz plus 2 C mit 22pF(4MHz)
Der Atmega8 selber
einen 6 poligen ISP- Anschluss
einen ISP Adapter für den PC(Der müsste aber vorhanden sein, da muss ich 
nochmal suchen)

und für die Stromversorgung:
5V Spannungsregler (7805)
C1 Elko 10 µF
C2,C3 100nF Keramik
D1 Diode 1n4001

Außderm 2 Kabel plus eine Batterie oder wenn ich ein Netzgerät bekomme 
Adabter um die Laborstecker auf die Lochplatte zu bekokommen die ich 
natürlich auch noch benötige!

Meint ihr das passt so?

von Der Thomas (Gast)


Lesenswert?

Ach und der Schalter natürlich!! Der mit 10 Stellungen denke ich!

von Wilhelm F. (Gast)


Lesenswert?

Der Thomas schrieb:

> Meint ihr das passt so?

Wie gesagt, kenne ich Mega8 ja gar nicht, nur ganz andere Familien wie 
PIC, 8051, ARM, aber das spielt jetzt hier keine Rolle.

Hast du mal ein Schaltbild, wenn auch nur Provisorium handgezeichnet und 
fotografiert oder gescannt?

Da müssen eben die richtigen Spezialisten für diesen Controller mal ran.

von M. N. (Gast)


Lesenswert?

Der Thomas schrieb:
> einen Quarzoszilator oder ein Quarz plus 2 C mit 22pF(4MHz)

Warum nutzt Du nicht die Berechnung, die Yalu schon gemacht hast und 
nimmst einen passenden Quarz?
Beitrag "Re: Rechteckgenerator mit verschiedenen Frequenzen"

Ein ATmega8 ist nicht optimal. Beim ATmega88A-PU stimmen mit 2,15 Preis 
und Leistung.

von Der Thomas (Gast)


Lesenswert?

Habter recht! Nehme ich einen mit 2,4576 MHz. und den ATmega88A-PU.

Die schaltung ist diese:
http://www.mikrocontroller.net/articles/Datei:Mega8_Tutorial.png

und die Stromversorgung diese:
http://www.mikrocontroller.net/articles/Datei:V_Regler.gif

von Wilhelm F. (Gast)


Lesenswert?

M. N. schrieb:

> Beim ATmega88A-PU stimmen mit 2,15 Preis
> und Leistung.

Och, da muß man aber auch nicht mit dem Cent geizen, für ein 
Einzelstück. Für meine SAB80515A und SAB80C517A zahlte ich vor 15-20 
Jahren noch richtig Geld, sowas um die 20 Euronen herum. Sie sind heute 
immer noch Klasse, und geben was her. Dann gibts in der Kneipe mal ein 
Bierchen weniger, und an der Technik erfreut man sich ja auch, und vor 
allem viel länger, als ein Bierchen anhält.

Ich hätte sogar den PIC12F675 für sowas geeignet gehalten, der kostet 
nur 1€, ein 8-Pinner im DIP-Gehäuse. Wenn man ein PICkit1 als Programmer 
schon besitzt. Und das kostete auch nicht viel. Den PIC werde ich 
gelegentlich z.B. als Universal-Logikbaustein mißbrauchen, wenn ich 
sowas als Sonderfall mal benötige, und er schnell genug ist. Vor allem, 
bei der nächsten Bestellung mal 3 Stück als Vorrat mit buchen.

Aber nein, wir sind nicht beim PIC, keine neue Baustelle.



Der Thomas schrieb:

> Habter recht! Nehme ich einen mit 2,4576 MHz. und den ATmega88A-PU.

Siehste mal. Das muß vor dem Kauf alles geklärt sein.

von Der Thomas (Gast)


Lesenswert?

Ok! Dann werde ich das jetzt wohl so aufbauen! Und falls ein ISP Adapter 
hier nicht auffindbar ist, dann baue ich mir mit dieser Anleitung selber 
einen!

http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel

Das sollte für den Atmega88A ja funktionieren!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Von der Anzahl der I/O-Pins her würde auch ein ATtiny24 reichen, der
etwas handlicher als der ATmega8 ist. Dafür hast du bei ATmega8 die
Option, noch ein LCD zur Anzeige der gerade eingestellten Frequenz
anzuschließen ;-)

Ob ATmega8, ATmega88, ATmega88A, ATmega48 oder ATmega48A, das macht bei
dieser Anwendung kaum einen relevanten Unterschied. Und da sie alle
einen 16-Bit-Timer haben, spielt auch die Quarzfrequenz keine große
Rolle. Du kannst damit auch problemlos höhere Quarzfrequenzen als die
oben vorgschlagenen 2,4576 MHz wählen. Die von dir angedachten 4 MHz
sind ebenso in Ordnung. Ich würde vielleicht aus ästhetischen Gründen
3,6864 MHz nehmen, da diese Frequenz ein ganzzahliges Vielfaches der von
dir gewünschten Triggerfrequenzen ist, so dass du zumindest rechnerisch
diese Frequenzen exakt hinbekommst. Natürlich hat auch der Quarz gewisse
Toleranzen, aber durch die Frequenzteilung wird dann kein Fehler mehr
hinzuaddiert. Da die 3,6864 MHz auch ein Vielfaches üblicher RS-232-
Baudraten ist, kannst du deine Schaltung als Option auch problemlos über
eine RS-232-Schnittstelle steuern.

Aber wie gesagt, das alles ist ziemlich unkritisch, und auch deine
bisherige Einkaufsliste ist vollkommen in Ordnung. Mach dir nicht zuviel
Gedanken und bestelle einfach :)

> Und falls ein ISP Adapter hier nicht auffindbar ist, dann baue ich mir
> mit dieser Anleitung selber einen!
>
> http://www.rn-wissen.de/index.php/AVR-ISP_Programmierkabel

Aber nur, wenn dein PC noch einen Druckerport hat :)

von M. N. (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Och, da muß man aber auch nicht mit dem Cent geizen, für ein
> Einzelstück.

Das mache ich auch nicht unbedingt,

Wilhelm Ferkes schrieb:
> Beim Kauf eines Quarzes griff ich mal daneben, und erwischte wohl 2.
> Wahl. 690ppm Abweichung, da hätte die Schaltung noch einen Trimmer am
> Quarz gebraucht.

denn diesen Quarz hätte ich einfach ausgelötet und weggeworfen :-)

Yalu X. schrieb:
> Ob ATmega8, ATmega88, ATmega88A, ATmega48 oder ATmega48A, das macht bei
> dieser Anwendung kaum einen relevanten Unterschied. Und da sie alle
> einen 16-Bit-Timer haben, spielt auch die Quarzfrequenz keine große
> Rolle.

Da mir Deine obige Berechnung so gut gefallen hat, dachte ich, ein 
Mega88 kann diese Aufgabe allein schon mit T0 erledigen :-)
Bei den neueren Typen sind die PCINTs nicht schlecht und von Mega48 - 
Mega328 hat man eine pinkompatible Auswahl im gleichen Gehäuse - ohne 
Aufpreis.

edit:
"pinkompatible Auswahl im gleichen Gehäuse" == weißer Schimmel
Ich meinte mit gleichen Funktionen

von Wilhelm F. (Gast)


Lesenswert?

M. N. schrieb:

> denn diesen Quarz hätte ich einfach ausgelötet und weggeworfen :-)

Keine Sorge. Ich hab eine große Kiste Ersatz, wenn nötig.

Ich mache es dann wie der Peter Dannegger, und justiere per Software 
nach, wenn an der Hardware eine DCF77-Uhr dran ist.

Man kann da mit der Uhr so vieles noch an Fehlerkorrektur machen, daß 
man den ganzen Tag nur noch damit alleine beschäftigt ist. 
Plausibilitätstests der Daten, usw. usf..

Man kann auch den ganzen Tag an einem Pommes-Stäbchen schnitzen, bis es 
Normmaße hat. Oder in der Nase bohren, bis man auf eine Ölquelle 
gestoßen ist. ;-)

von Peter D. (peda)


Lesenswert?

Wilhelm Ferkes schrieb:
> Oder in der Nase bohren, bis man auf eine Ölquelle
> gestoßen ist. ;-)

Da brauchst Du aber große Nasenlöcher:

http://commons.wikimedia.org/wiki/File:Erd%C3%B6l_Bohrmeissel.jpg

von Karl H. (kbuchegg)


Lesenswert?

Wilhelm Ferkes schrieb:
> M. N. schrieb:
>
>> denn diesen Quarz hätte ich einfach ausgelötet und weggeworfen :-)
>
> Keine Sorge. Ich hab eine große Kiste Ersatz, wenn nötig.
>
> Ich mache es dann wie der Peter Dannegger, und justiere per Software
> nach, wenn an der Hardware eine DCF77-Uhr dran ist.

Du hast das falsch verstanden.
An seiner Uhr gibt es kein DCF.
Man geht davon aus, dass der Quarz so schnell schwingt wie aufgedruckt, 
lässt das ganze ein paar Tage laufen und rechnet aus der Abweichung 
zurück, wie schnell der Quarz wirklich schwingt und dann wird das in den 
Code eingearbeitet.

AVR - Die genaue Sekunde / RTC

von Wilhelm F. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Du hast das falsch verstanden.
> An seiner Uhr gibt es kein DCF.
> Man geht davon aus, dass der Quarz so schnell schwingt wie aufgedruckt,
> lässt das ganze ein paar Tage laufen und rechnet aus der Abweichung
> zurück, wie schnell der Quarz wirklich schwingt und dann wird das in den
> Code eingearbeitet.

Wo ist denn da die Referenz? Der µC und der Quarz merken ja nicht von 
alleine, daß sie driften.

von Wilhelm F. (Gast)


Lesenswert?

Apropos RTC-Uhren mit Quarz 32768Hz:

Die können sehr genau sein.

Meine 30 Jahre alte Armbanduhr Made in HongKong läuft aktuell noch, muß 
sie nie nach stellen. Ich hab gerade mal gerechnet, deren Abweichung 
beträgt wirklich nur 1,5 ppm. Das Ding kostete bei Kaufhof 1983 ganze 
30DM. HongKong, da sagte man damals: Im Kaugummiautomaten gezogen.

Gegen die 1,5 ppm sind µC-Quarze wirklich Mist. Selbst wenn man einen 
Justiertrimmer dran hat, die triften auch mit der Temperatur schon 
einige 10 ppm.

Die in HongKong bekamen es jedenfalls vor 30 Jahren hin, daß meine Uhr 
bis heute einwandfrei spielt, vielleicht noch weitere 30 Jahre.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ich habe die Schaltung gerade mal mit einem ATmega8, einem Quarz mit
3,6864-MHz, einem Codierschalter und etwas Kleinzeug zusammengesteckt
und folgendes Programm aufgespielt:
1
#include <stdint.h>
2
#include <avr/io.h>
3
4
// Taktfrequenz in Hz
5
#define CLK 3686400
6
7
// Umrechnung von Frequenz in Wert für Output-Compare-Register
8
#define OC(f) (CLK / 16 / (f) - 1)
9
10
// 16 wählbare Frequenzen in Hz für die Schalterstellunge 0-9, A-F
11
uint16_t periods[16] = {
12
13
  //  0       1       2       3       4       5       6       7
14
  OC( 5), OC(10), OC(15), OC(20), OC(25), OC(30), OC(60), OC(60),
15
16
  //  8       9       A       B       C       D       E       F
17
  OC(60), OC(60), OC(60), OC(60), OC(60), OC(60), OC(60), OC(60)
18
};
19
20
int main(void) {
21
22
  // Initialisierung
23
  PORTC  = 0x0f;    // Pullups für Codierschaltereingänge (PC0-PC3)
24
  DDRB   = 1<<PB1;  // PB1 (OC1A) als Ausgang konfigurieren
25
  TCCR1A = 0x40;    // Timer 1: CTC Mode, Toggle OC1A on Compare Match
26
  TCCR1B = 0x0a;    //          Clock Select clkio/8
27
28
  // Codierschalter abfragen und entsprechende Periodendauer setzen
29
  for(;;)
30
    OCR1A  = periods[PINC & 0x0f];
31
}

Das Oszi am OC1A-Ausgang zeigt die jeweils erwartete Frequenz mit einem
Fehler von 80 ppm an.

von Der Thomas (Gast)


Lesenswert?

Krass! Ich bin begeistert! Dann muss ich nur noch auf die Teile warten 
und um was zu lernen vollziehe ich wohl erstmal deinen Code nach!!
Vielen herzlichen Danke!!!
Mfg!!

von Der Thomas (Gast)


Lesenswert?

Eine Frage hätte ich noch: Für die Kondensatoren am Quarz, nehme ich da 
2 Keramikkondesatoren mit 22pF für den 3.6864MHz?

von Wilhelm F. (Gast)


Lesenswert?

Der Thomas schrieb:

> Dann muss ich nur noch auf die Teile warten ...

Am PC kannst du doch schon mal alles fertig stellen, auch wenn die 
Bauteile noch nicht geliefert sind. Vielleicht hat die Oberfläche einen 
Simulator, dann hast du auch das Programm schon mal simuliert.

Der Thomas schrieb:

> Eine Frage hätte ich noch: Für die Kondensatoren am Quarz, nehme ich da
> 2 Keramikkondesatoren mit 22pF für den 3.6864MHz?

Datenblatt und/oder User Manual, je nach dem, was es für den µC gibt, 
haben ganz sicher Antworten dazu, irgendwo dort muß es drin stehen. Aber 
22pF sind sehr oft üblich. Toleranzen dieser Kondensatoren sind auch 
nicht weiter kritisch, wenn man nicht gerade eine Uhr baut.

von Michael A. (Gast)


Lesenswert?

Wilhelm Ferkes schrieb:
> Toleranzen dieser Kondensatoren sind auch
> nicht weiter kritisch, wenn man nicht gerade eine Uhr baut.

Und selbst da ist die Toleranz unwichtig. Die Stabilität der 
frequenzbestimmenden Komponenten insgesamt ist da entscheidend.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wilhelm Ferkes schrieb:
> Der Thomas schrieb:
>
>> Eine Frage hätte ich noch: Für die Kondensatoren am Quarz, nehme ich da
>> 2 Keramikkondesatoren mit 22pF für den 3.6864MHz?
>
> Datenblatt und/oder User Manual, je nach dem, was es für den µC gibt,
> haben ganz sicher Antworten dazu, irgendwo dort muß es drin stehen.

Die optimale Lastkapazität Cl steht normalerweise im Datenblatt des
Quarzes. Die beiden Kondensatoren gegen Masse sollten die Kapazität
C1=C2=2·(Cl-Cs) haben, damit der Quarz die gewünschte Kapazität Cl
"sieht". Cs ist dabei die Streukapazität des Aufbaus (Leitungen, Platine
und Oszillatoreingang).

Wenn man die Quarze im Hobbyshop kauft, ist der Hersteller i.Allg.
unbekannt, und man kann die Lastkapazität nur raten. Üblich sind so
zwischen 10pF und 30pF.

Wenn man von 20pF Lastkapazität und 10pF Streukapazität ausgeht, kommt
man auf C1=C2=20pF bzw. die oft empfohlenen 22pF.

Der Fehler in der Schätzung der Last- und Streukapazität ist nicht arg
kritisch, sondern führt meist nur zu einer leichten Verstimmung des
Resonanzfrequenz. Nur wenn die Kapazitäten grob daneben liegen, kann es
passieren, dass der Oszillator nicht mehr zuverlässig läuft.

Nimm also die

> 2 Keramikkondesatoren mit 22pF

dann machst du nicht viel falsch.

von Wilhelm F. (Gast)


Lesenswert?

Michael A. schrieb:

> Wilhelm Ferkes schrieb:
>> Toleranzen dieser Kondensatoren sind auch
>> nicht weiter kritisch, wenn man nicht gerade eine Uhr baut.
>
> Und selbst da ist die Toleranz unwichtig. Die Stabilität der
> frequenzbestimmenden Komponenten insgesamt ist da entscheidend.

So ein µC-Quarz, für den Kondensatoren mit 22pF spezifiziert sind, wird 
auch noch mit 10pF oder 100pF funktionieren, unter Umständen auch völlig 
ohne diese Kondensatoren, denn die Leiterbahnen zwischen Quarz und µC 
haben auch noch ein wenig Kapazität.

Die Kapazitätsabweichungen machen sich folgendermaßen bemerkbar: 
Kleinere Kapazität ergibt schnelleres Anschwingverhalten, jedoch 
geringere Frequenzkonstanz. Bei größeren Kapazitäten ist es umgekehrt. 
Abweichungen verschieben aber auch geringfügig die Frequenz.

All dies ist aber in den allermeisten Anwendungen nicht so wichtig oder 
tragisch. Ein üblicher µC-Quarz hat ohnehin 20-50ppm Toleranz, je nach 
dem, was man an Geld in den Quarz investiert, und auch Temperaturdrift 
in diesem Bereich.

Programmier mal zwei völlig gleiche Boards mit einer blinkenden LED und 
dem selben Programm. Nach Minuten bis Stunden, je nach Toleranzen, kann 
man die Verschiebung oft schon rein optisch an den LEDs sehen, wenn sie 
nicht mehr synchron zueinander blinken. Also ist die Abweichung sogar 
völlig unkompliziert ganz ohne teuere Meßtechnik feststellbar.



Yalu X. schrieb:

> Die optimale Lastkapazität Cl steht normalerweise im Datenblatt des
> Quarzes.

Dort schaut man natürlich als Profi nach. Oft ist es aber so, daß man 
auch einfach eine Schaltung aus einem Buch nach baut. So war das bei mir 
früher. In einem guten Buch hat der Autor dann auch beschrieben, was es 
mit den Quarzwerten auf sich hat. Für Bastler reicht das in fast allen 
Fällen auch.

> Wenn man die Quarze im Hobbyshop kauft, ist der Hersteller i.Allg.
> unbekannt, und man kann die Lastkapazität nur raten.

Eben. Oder man bekommt sogar den schlimmsten Ausschuß, wie ich es 
gestern schon mal beschrieb. Wenn die Grundfrequenz schon arg abweicht, 
da macht man dann mit korrekten Berechnungen nicht mehr viel.

Also, 22pF sind meistens ein guter Wert. Ich habe in meinen 
Hobbyschaltungen oft 33pF drin, eben weil es auch mal irgendwo so 
vorgeschlagen wurde. Sich detailliert mit dem Quarz zu beschäftigen, 
kommt meistens erst viel später. Sogar in Entwicklungsabteilungen 
beschäftigt man sich meistens nicht intensiver damit, und nimmt den 
Vorschlag aus dem Datenblatt. Für einen Maschinenbauer, der sich 
nebenbei mal mit µC beschäftigt, ist das vielleicht noch etwas schräger, 
als für einen Elektroniker.

Als Bastler zur Zeit habe ich auch keinen Zugang zu Profi-Shops, wo 
Firmen einkaufen. Also bleibt mir auch nur etwas unbekanntere Ware von 
den bekannten Versendern, wo ich nicht auswählen kann. Fürs Hobby spielt 
es meistens eine untergeordnete Rolle.

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.