Forum: Mikrocontroller und Digitale Elektronik Quarz fuer MSP430


von Bernd K. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine Board von Olimex, auf dem optional eine Quarz für den MSP 
vorgesehen ist. Da ich die serielle Schnittstelle mit mehr als 9600baud 
betreiben will, muss ich nun "aufrüsten". Auf dem Board sind zweit 
Plätze für Kondensatoren und und ein freier Platz für den Quarz.
Wie gross müssen die Kondensatoren dimensioniert sein, bzw. was für 
einen Quarz könnt ihr empfehlen?

Danke

von Christian R. (supachris)


Lesenswert?

Quarz kannst du jeden bis 8 MHz benutzen. Die Kondensatoren richten sich 
nach der vom Quarz geforderten Lastkapazität. Da musst du im Datenblatt 
des Quarzes nachschauen und dann ausrechnen. Und zwar so:

CL = 2 * Cq - Cpar

CL ist jeder der Lastkondensatoren, Cq ist die geforderte 
Lastkapazität des Quarzes und Cpar die parasitäre Kapazität der Pins und 
der Leitungen, kann man mit etwa 5pF annehmen.

Beispiel: Der Quarz will 33pF Last sehen, also müssen die beiden 
Kondensatoren jeweils etwa 60pF groß sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Da ich die serielle Schnittstelle mit mehr als 9600baud
> betreiben will, muss ich nun "aufrüsten".

Das musst Du nicht unbedingt. Du kannst den DCO mit dem 
32-kHz-Uhrenquarz in Software stabilisieren.

Beispiele dafür gibt es von TI als slac015k.zip, das darin enthaltene 
fet140_uart03_19200.c zeigt, wie auf diese Art und Weise mit 19200 Baud 
gearbeitet werden kann.

Natürlich ist es oft sinnvoller und auch einfacher, mit einem richtigen 
Quarz zu arbeiten, dann ist der Takt deutlich stabiler als bei o.g. 
Softwarelösung.

Spezielle "Baudratenquarze" sind jedoch nicht erforderlich, da der 
Baudratengenerator der MSP430-UART sehr flexibel ist.

Wenn Du beim 'F169 und Deiner Olimex-Platine den zweiten Oszillator 
verwenden möchtest, kann ich nur auf Supachris' Beitrag verweisen. 
Bedenke, daß Du in der Initialisierungsroutine auf das Einschwingen des 
Quarzoszillators warten solltest; in o.g. Quellcodesammlung ist das 
exemplarisch enthalten.

von Bernd K. (Gast)


Lesenswert?

Vielen Dank, wenn ich euch richtig verstanden habe, ist das ok:
http://de.farnell.com/9712380/passive-bauelemente/product.us0?sku=rakon-lf-a140a 
(Farnell Best.Nr.: 9712380 )

und dazu 2x56pF ..

von Johnny (Gast)


Lesenswert?

Kannst auch einen Keramikresonator nehmen. Bei diesem sind die 
Kondensatoren beispielsweise bereits eingebaut:
http://de.farnell.com/1170435/passive-bauelemente/product.us0?sku=murata-cstcc8m00g53-r0
Sind nicht so genau wie ein Quarz, aber wenn die +-0.5% ausreichen, ist 
das eine sehr kostengünstige und einfache Variante.

von Jörg S. (joerg-s)


Lesenswert?

Benutze ich auch für meine MSPs. Bestelle allerdings bei Reichelt, da 
kosten sie nur die Hälfte :)

von Bernd K. (Gast)


Lesenswert?

Ich hab noch eine Frage zu dem Olimex MSP Board. Sehe ich das richtig, 
dass die +VeRef direkt mit der Versorgungsspannung gespeist wird? 
Erklärt das die Ungenauigkeit des ADCs?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Sehe ich das richtig, dass die +VeRef direkt mit
> der Versorgungsspannung gespeist wird?

Ja, solange Du R30 nicht entfernst, ist das so.

> Erklärt das die Ungenauigkeit des ADCs?

Höchstens, wenn Du VeRef auch verwendest. Der ADC12 im '169 aber kann 
auch mit einer internen Referenzspannungsquelle von 1.5V oder 2.5V 
betrieben werden.

von KlaRa (Gast)


Lesenswert?

Hallo,
Siehe hier. Ein Quarz 3,57... MHz für 19200 Bit/s.

https://community.ti.com/forums/t/346.aspx

We actually have a code example that implements a software UART using 
the Timer_A. Please see the follwing zip file from www.MSP430.com for 
several different examples: http://www.ti.com/lit/zip/slac011 (namely, 
see msp430x11x1_ta_uart19200_01.c)

Gruss Klaus.

von Bernd K. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe es auch mit den beiden internen Refenrenzen probiert, der ADC 
ist einfach sehr ungenau:
1
void init_ADC(void)
2
{
3
   ADC12CTL0 = SHT0_15 + REFON +ADC12ON + MSC;
4
  ADC12CTL1 = CSTARTADD_0 + SHS_0 + SHP + ADC12DIV_0 + ADC12SSEL_0 + CONSEQ_1;
5
  ADC12MCTL0 = SREF_0 + INCH_2;    //ADC12MEM0, A2
6
  ADC12MCTL1 = SREF_0 + INCH_3;    //ADC12MEM1, A3
7
  ADC12MCTL2 = SREF_0 + INCH_4 + EOS;    //ADC12MEM2, A4
8
  //ADC12MCTL3 = SREF_0 + INCH_5;    //ADC12MEM3, A5
9
  ADC12CTL0 |= ENC;  //ADC startfähig machen
10
11
}

liegt das am Design des Boards?

von Christian R. (supachris)


Lesenswert?

Software-UART braucht man doch am F169 nicht, der hat doch 2(!) USARTs 
in Hardware, die jeweils einen Baudratengenerator mit Modulator haben, 
um auch gebrochene Teilerfaktoren zu realisieren. Für sehr hohe 
Geschwindigkeiten ist es allerdings vielleicht besser, einen 
Baudratenquarz zu benutzen, ich fahre 921.600 baud mit einem 7,3728MHz 
Quarz. Allerdings muss man dann Vcc schon leicht mehr als 3,3V haben.

von Christian R. (supachris)


Lesenswert?

Bernd K. wrote:
> Ich habe es auch mit den beiden internen Refenrenzen probiert, der ADC
> ist einfach sehr ungenau:

> liegt das am Design des Boards?

Nein, die internen Referenzen sind recht ungenau (4%)und driften 
außerdem noch (100ppm/°C). Das Rauschen kommt allerdings vom ADC selbst, 
2 Bits unten wackeln eigentlich immer, das SNR ist sicherlich nicht 
besonders hoch, sonst stünde es im Datenblatt. Aber der Fakt, dass TI 
diese wichtige Angabe einfach weggelassen hat, lässt auf ein recht 
niedriges SNR schließen.

Allerdings ist das Offset doch recht hoch bei dir, das könnte wirklich 
durch Layout-Probleme kommen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Das Rauschen kommt allerdings vom ADC selbst,
> 2 Bits unten wackeln eigentlich immer,

Sicher? Das könnte auch am Board-Layout liegen. Die üblichen sechs 
Abblockkondensatoren sind da und nah genug am Controller plaziert?

Möchte man es präziser haben und hat genug Zeit, kann mit Oversampling 
(von TI in slaa323 beschrieben) erheblich mehr Auflösung erzielt werden.

Mit 256-fach-Oversampling sind 16 Bit möglich, und die "stehen" 
erstaunlich ruhig, selbst auf dem nicht sonderlich tollen Layout des 
'F449-Evaluation-Boards MSP430-449STK2 von Olimex.

von Martin (Gast)


Lesenswert?

Was zeigt Dein obiger Plot...?
Das Diagramm sieht nach LabVIEW aus. Wie hast du die Daten aufgenommen?

von Bernd K. (Gast)


Lesenswert?

"Allerdings ist das Offset doch recht hoch bei dir, das könnte wirklich
durch Layout-Probleme kommen."

es liegt eine Gleichspannung an, Eingang liegt nicht auf Masse.

Was würdet ihr mir raten, erstmal mit einer externen Vref anfangen?

von Christian R. (supachris)


Lesenswert?

Öhm, und wie hoch ist die Gleichspannung, wie hoch ist denn das 
Rauschen? Was erwartest du denn von einem 12-Bit ADC, der auf der 
gleichen Chipfläche mit einem µC sitzt, und dann noch mit interner 
Referenz und das ganze auf einem 2-Lagen Demo-Board?

von Bernd K. (Gast)


Lesenswert?

die Gleichspannung lag bei 0.14V. Ich hab eigentlich angenommen, dass 
der ADC des MSP wesentlich genauer ist. Um richtig genau zu werden muss 
man wohl selbst ein Board entwickeln, wollte mir den Aufwand nur sparen. 
Wie sind eure Erfahrungen mit der Genauigkeit des MSP?

@Martin
es ist ein Labview Programm, via USart werden die Daten zum PC 
übertragen (hex-dezimal konvertierung findet auf MSP statt).. mit 
Labview wird das ganze dann nur dargestellt

von Bernd K. (Gast)


Lesenswert?

hat es sinn mit dem internen ADC weiter zu experimentieren, oder sollte 
ich gleich auf einen externen umsteigen? Wie sind eure Erfahrungen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Frage ist, was Du willst. Brauchst Du absolute Präzision? Verfügst 
Du über ausreichend genaue Messgeräte? Ein übliches 3 1/2-stelliges DMM 
ist nicht ansatzweise ausreichend, um einen 12-Bit-ADC zu beurteilen.

Ich kann ansonsten nur auf meine bereits erwähnten Erfahrungen 
verweisen: Beitrag "Re: Quarz fuer MSP430"

von Bernd K. (Gast)


Lesenswert?

Ich habe mich entschieden mit einem externen ADC zu experimentieren:


Mit welchem externen AD-Wandler habt ihr gute Erfahrungen gemacht, bzw. 
was halt ihr vom MAX1144?
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3383

von Johnny (Gast)


Lesenswert?

Normalerweise ist ein externer ADC wirklich nicht nötig.
Nimm vom MSP die internen Referenzspannungen und stabilisiere sie noch 
mit einem externen C. Dann noch ein wenig oversampling wie bereits 
geschrieben wurde (z.B. mit drei Zeilen Code ein IIR Filter machen) und 
schon hast Du einfach und kostengünstig schöne Messwerte.

von Bernd K. (Gast)


Lesenswert?

@Johnny

das hoert sich interessant an. Wie kann ich die interne Ref. mit einem C 
stabilisieren?
(http://www.mikrocontroller.net/attachment/39962/msp430-pxxx-sch.gif)

Hast du noch ein paar Infos zum IIR-Filter?

von Johnny (Gast)


Lesenswert?

Schau hier:
http://focus.ti.com/lit/ds/symlink/msp430f169.pdf
und hier:
http://focus.ti.com/lit/ug/slau049f/slau049f.pdf Seite 17-3

Du kannst die interne Vref+ auf Pin 7 herausführen und dann dort noch 
zusätzlich stabilisieren. Gibt sicher irgendwo eine Application Note 
dazu, wie man das am besten macht.

Ein IIR Filter kannst Du z.B. nach diesem Prinzip resourcenschonend 
realisieren:

AlterTeil = GefilterterMesswert >> Filterwert;
NeuerTeil = ADCWert >> Filterwert;
GefilterterMesswert = GefilterterMesswert - AlterTeil + NeuerTeil;

Vielleicht vorher den ADCWert noch hochskalieren, da sonst beim Schieben 
Information verloren geht. Dieses Beispiel kann je nach Parameter noch 
optimiert werden, ist halt eben nur ein Beispiel ;-)

von Johnny (Gast)


Lesenswert?

Hab übrigens gerade zufällig folgenden Thread gefunden, wo es um die 
Stabilisierung von Vref+ geht:
Beitrag "MSP430 Erfahrungsaustausch zu ADC12 gesucht"

von Christian R. (supachris)


Lesenswert?

Ich benutze übrigens einen LTC1864 am MSP430, geht einwandfrei, das CS 
lasse ich mir vom Timer A in Hardware erzeugen, passend dazu den 
Interrupt um die Daten per SPI abzuholen.

von Bernd K. (Gast)


Lesenswert?

Vref+ ist auf dem Proto-Board von Olimex bereits mit 2 Kondesatoren 
stabilisiert. Die Kondesatoren sind im Eagle-Schematic nicht verzeichnet 
gewesen.
Hast du ein Code-Beispiel fuer den IIR-Filter? Wirkt der wie ein 
gleitender Mittelwert?

von Johnny (Gast)


Lesenswert?

Ja ein IIR ist wie ein gleitender Mittelwert. Codebeispiel steht ja 
bereits oben. Mehr ist es nicht, es ist sogar bereits ausführlicher als 
nötig. Mann könnte es auch in einer Zeile Code machen...

von eProfi (Gast)


Lesenswert?

Wenn Du einen 12bit-Wandler hast, empfehle ich folgenden Code:

gefiltert = (summiert += adc - gefiltert) >> 4;

Dieser Code hat den Vorteil, dass er
1. sehr schnell ist
2. nach endlicher Zeit der Wert "gefiltert" auch den Wert "adc" annimmt.

Beispiel: bei einem Eingang von

1000  wird summiert 16000 und der stabile Zustand ist:
12bit        16bit       12bit  12bit         4bit
gefiltert = (summiert += adc  - gefiltert) >> 4;
1000      = (16000    += 1000 - 1000     ) >> 4;

der maximale Wert:
4095      = (65520   +=  4095 - 4095     ) >> 4;
0fff      = (fff0    +=  0fff - 0fff     ) >> 4;


Wenn Du stärker filtern willst, musst Du für "summiert" mehr Bits (24 
oder 32) vorsehen:
12bit        18bit       12bit 12bit         6bit
gefiltert = (summiert += adc - gefiltert) >> 6;

oder den ADC-Wert kleinerrechnen (skalieren):
10bit        16bit          10bit     10bit         6bit
gefiltert = (summiert += (adc >> 2) - gefiltert) >> 6;
gefiltert = (summiert +=  adc  / 4  - gefiltert) / 64;
Das Ergebnis ist hier aber nur ein Viertel des Eingangswertes.

Aufpassen:
1. der >>-Operator hat eine andere Rangfolge als / , muss also 
geklammert werden.
2. bei signed-Variablen haben >> und / verschiedene Ergebnisse.


Erklärung der Funktionsweise:
erste Iteration:
gefiltert = (summiert += adc  - gefiltert  ) >> 4;
  00ff    = (  0000   += 0fff -   0000     ) >> 4;
2. Iteration:
  01f0    = (  0fff   += 0fff -   00ff     ) >> 4;
3. Iteration:
          = (  1f00   += 0fff -   01f0     ) >> 4;

d.h. es wird solange auf "summiert" aufsummiert, bis summiert/16 so groß 
wie adc wird (adc - (summiert >> 4) ist dann 0).

Auseinandergedröselt lautert der Code ja:
summiert  = summiert + adc - gefiltert;
gefiltert = summiert >> 4;



n.b.: mein alter Code:
summiert += adc - (gefiltert = summiert >> 4);
braucht eine Iteration länger zum Erreichen des Endwertes, da das 
gefiltert aus dem "alten summiert" berechnet wird.

von Jens B. (Gast)


Lesenswert?

um nochmal das Thema vom Anfang aufzugreifen. Bernd schreibt, dass dort 
Plätze für den Quarz und den Kondensator vorgesehen sind, das sind Q3, 
C32 und C33, richtig? auf den Cs sitzen bei mir aber schon 
Kondensatoren, allerdings steht im Datenblatt nicht, was drin ist (Siehe 
Link von Bernd im ersten Post). Muss ich die dann erst rauslöten? Wozu 
sind die überhaupt dort, wenn sie vom Quarz abhängig dimensioniert 
werden müssen?

von Henry (Gast)


Lesenswert?

Der Kondensatorenwert ist total unkritisch. Da braucht man nicht eine 
Sekunde drüber nachdenken wenn man nicht gerade eine genaue Uhr mit dem 
Controller realisieren will.

von Christian R. (supachris)


Lesenswert?

Naja, solche pauschalen Aussagen kann ich nicht unterstützen. Für 
normale Anwendungen mit Standard-Quarzen, wie es sie bei Reichelt und 
Conrad gibt, stimmt das, da kann man irgendwas zwischen 15 und 33 pF 
rein löten. Aber wenn es auf Genauigkeit ankommt, oder ein etwas 
hochwertiger Quarz, meinetwegen von Jauch verwendet wird, dann gibts da 
schnell Probleme. Wir haben z.B. solche kleinen SMD Quarze von Jauch 
nicht mit 22pF zum Laufen bekommen. Auch kann´s passieren, dass die 
Standard-Quarze immer mal nicht richtig schwingen oder aussetzen, wenn 
der Wert arg daneben liegt. Da sucht man sich einen Wolf dann.

von Jens B. (Gast)


Lesenswert?

nur wärs halt schön, überhaupt zu wissen, was die von olimex denn da nun 
verlötet haben, denn diese information fehlt auf dem datenblatt

von Jens B. (Gast)


Lesenswert?

im Prinzip kann ich auf dem Board ja keine 8MHz Quarze einsetzen, da die 
Versorgungsspannung nur 3.3V ist. Richtig?

Wie siehts mit 4MHz Quarzen aus?

Grüße
Jens

von Christian R. (supachris)


Lesenswert?

Jens B. wrote:
> im Prinzip kann ich auf dem Board ja keine 8MHz Quarze einsetzen, da die
> Versorgungsspannung nur 3.3V ist. Richtig?

Doch kann man. Nur läuft der MSP430 dann evtl. nicht richtig, wenn du 
die 8MHz ohne Vorteiler für den MCLK benutzt. Wenn du die nur für den 
SMCLK nimmst oder den Vorteiler benutzt, gehts problemlos.

> Wie siehts mit 4MHz Quarzen aus?

Was sollte dagegen sprechen? Mit 3,3V sind 7,3Mhz etwa laut dem Diagramm 
im Datenblatt möglich. 7,3728MHz Baudratenquarz klappt damit bei mir 
zumindest bisher auch.

von Jens B. (meddle)


Lesenswert?

Also kann ich für die Timer problemlos die 8MHz nehmen, aber für das 
Programm selbst halt etwas weniger...

von Christian R. (supachris)


Angehängte Dateien:

Lesenswert?

Sollte klappen. Zumindest steht im Datenblatt explizit drin, dass der 
maximale MCLK abhängig von der Spannung ist. Auszug aus dem Datenblatt 
des F1611.

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.