Mikrokontroller Problem: Uhrenquarz nach Reflow schwingt nicht

Gast #3765381
Lesenswert?

Haben momentan mit Problemen zu tun, die den externen Quarz betreffen.
An einem ATmega328 ist asynchron ein Uhrenquarz mit zwei 22p 
Kondensatoren angeschlossen, der zur Zeitmessung benutzt wird.
Die Platinen werden bei uns bestückt und durch eine Reflowstraße 
geschoben. Jetzt kommt es immer wieder vor, dass der Quarz mal nicht 
schwingt, bei manchen Geräten. Wenn ich dann neben den Pads des µC mit 
einem Messer entlangritze, geht es teilweise wieder --> evtl. 
mechanische Spannungen.

Ich habe bereits ein Reflow Profil aufgenommen, was der Norm entspricht 
und auch in der Note von Atmel beschrieben ist.
Mein Erster Gedanke war, Popcorneffekt, allerdings werden die Chips 
luftdicht mit einem Entfeuchtersäckchen gelagert.

Hat jemand Erfahrungen damit?
#3766219
Lesenswert?

Norbert S. schrieb:
> Axel Schwenke schrieb:
>> Für einen Uhrenquarz (gemeint ist wohl ein 32kHz Quarz) soll man gar
>> keine extra Kondensatoren verwenden.
>>

> ich hatte das oben ja auch angedeutet aber kann immer noch nichts im db
> finden.
> wo zum teufel steht das?

Im Datenblatt des ATmega48..328A, Kapitel 9 "System Clock and Clock 
Options", Unterkapitel 9.3 "Low Power Crystal Oscillator" ist eine 
Tabelle, die für Quarzfrequenzen unter 900kHz empfiehlt, die externen 
Kondensatoren nicht zu beschalten. Unterkapitel 9.5 "Low Frequency 
Crystal Oscillator" gibt die integrierten Lastkapazitäten mit 18pF 
(Xtal1/Tosc1) bzw. 8pF (Xtal2/Tosc2) an.


XL
Gast #3766421
Lesenswert?

>Im Datenblatt des ATmega48..328A, Kapitel 9 "System Clock and Clock
>Options", Unterkapitel 9.3 "Low Power Crystal Oscillator" ist eine
>Tabelle, die für Quarzfrequenzen unter 900kHz empfiehlt, die externen
>Kondensatoren nicht zu beschalten.

Also bei mir steht 0.4-0.9 MHz. Wenn man von der gängigen Übereinkunft 
von 32768 Hz für einen Uhrenquarz ausgeht (warum das eigentlich?), 
dann ist obige Aussage unter 9.3 (CKSEL3=1) hier nicht relevant.
Wichtig ist der Satz unter 9.5 (CKSEL3=0) "Crystals specifying load 
capacitance (CL) higher than 6 pF, require external capacitors applied".
Gast #3772849
Lesenswert?

Um nochmal aus das eigentliche Problem zurückzukommen:
Komisch ist, dass wenn ich den µC von Hand per Heißluft löte, es noch 
nie Probleme gab. Wenn ich ihn nach Norm durch die Reflow-Straße 
schiebe, machen manche Serien diese Probleme. Woran kann das liegen? 
Verändern sich intern die Kapazitäten?
Gast #3772946
Lesenswert?

Keine Ahnung, ob das von praktischer Bedeutung ist, aber meine 
Berechnung ergibt unterschiedliche Kapazitäten für TOSC1/2; auch passt 
der maximale ESR nicht ganz.

>Wenn ich dann neben den Pads des µC mit einem Messer entlangritze, geht es 
>teilweise wieder
Hängen da Lötreste oder sonst etwas?

CKSEL3..1 steht auf 010?
(Firma: TravelRec.) Persönliche Seite #3776557
Lesenswert?

Also ist es ein Röhrenquarz. Die können schon vor dem Prozess schadhaft 
sein, wenn es sich um Schüttgut aus der Tüte handelt. Mechanischer 
Stress beim Anlöten tut ein Übriges. Löte mal einen anständigen 
SMD-Quarz ein und Du wirst keine Probleme mehr haben.

Hier ein paar Beispiele:
http://www.mouser.de/Passive-Components/Frequency-Control-Timing-Devices/_/N-6zu9e?P=1yzmo0zZ1z0z7ymZ1z0zlseZ1yzu7kvZ1yzvlbm
Gast #3776620
Lesenswert?

>Also ist es ein Röhrenquarz. Die können schon vor dem Prozess schadhaft
>sein, wenn es sich um Schüttgut aus der Tüte handelt.

Kann ich nicht bestätigen.
Ich habe über die letzten Jahre hinweg ca. 700 Stück vom Typ DT-26 
(Reichelt-Best.nr. 0,032768-L6) an ATmega16 verbaut und nie ein Problem 
damit gehabt (Handlötung).
(Firma: TravelRec.) Persönliche Seite #3776640
Lesenswert?

der alte Hanns schrieb:
> Kann ich nicht bestätigen.

Ich schon. In dem Bestückungsbetrieb, in dem ich arbeite, gabe es bis zu 
25% Ausfall. Wobei ich den Lieferanten nicht kenne. Ich weiß nur, dass 
das Zeug billig war und in PE-Tüten zu 10.000 Stück geliefert wurde. Wie 
oft die Tüten auf ihrer Reise aus dem Reich der Mitte bis hier unsanft 
behandelt wurden, kann ich nicht sagen. Es gab aber auch durch 
(unqualifiziertes) Einlöten Ausfälle, wo die Quarze zuvor noch in 
Ordnung waren (durch Eingangsprüfung in Steckfassung bestätigt).
#3776683
Lesenswert?

Hallo,

ja, Qurze sind halt auch 'mechanische' Bauteile, die durch Schlag oder 
Sturz kaputtgehen können, das berifft nicht nur Uhrenquarze, die aber 
besonders, da der eigentliche Quarz bei ihnen recht groß ist.

Ich kann mich noch an mein Praxissemester erinnern (Ist aber soch über 
20 Jahre her), in der Elektronik-Produktion wurden Quarze unbesehen 
entsorgt, wenn jemand die Kiste, oder auch die kleine Schütte am 
Arbeitsplatz, fallen gelassen hatte. Man wollte sich da nicht auf, 
vielleicht auch später auftretende, Fehlfunktionen einlassen.

Mit freundlichem Gruß - Martin
Gast #3776698
Lesenswert?

>(unqualifiziertes) Einlöten

Nun ja - ich löte bei 250 °C immer etwa 10 Stück auf einmal, erst 
jeweils die einen, dann die anderen Anschlüsse. Es vergeht also eine 
gewisse Zeit zum Abkühlen, bis der zweite Anschluss eines Quarzes 
drankommt.
Gast #3781319
Lesenswert?

Wenn ich nach dem reflow vorgang den fehler feststelle und den 
mikrokontroller per hand austausche funktioniert alles. Es muss also am 
mikrokontroller liegen, der durch den reflowvorgang schaden nimmt. Nur 
kann sich das keiner so richtig erklären.
Gast #3781623
Lesenswert?

Manu schrieb:
> Wenn ich nach dem reflow vorgang den fehler feststelle und den
> mikrokontroller per hand austausche funktioniert alles. Es muss also am
> mikrokontroller liegen, der durch den reflowvorgang schaden nimmt. Nur
> kann sich das keiner so richtig erklären.


Wenden Sie sich an Ihren Quarzlieferanten/-hersteller.
Der kann Ihnen einen für Ihr System passenden Quarz heraussuchen
und einmessen.

Es bringt nichts, in einem Verbund von Mikrocontroller, Quarz, 
Stützkondensatoren, Layout, Löt-/Umgebungstemperatur (plus all deren 
Toleranzen) und parasitären Effekten hier und da ein Bauteil zu 
tauschen, bis das System wieder (vermeintlich) funktioniert.

Die hier oft verbreitete allgemeine Aussage á la "nimm 2x 22p und gut 
ist"
mag für die eine Baugruppe auf dem Basteltisch noch irgendwie 
funktionieren,
ist aber für den gewerblichen Einsatz absolut kein gangbarer Weg.
Gast #3782580
Lesenswert?

Ich habe in mehreren defekten systemen die 22p kondensatoren gewechselt 
auf 6 pf, sie gehen nicht, weder bei hitze noch bei kälte. Erst wenn ich 
den mikro tausche und ihn programmiere geht alles wieder. Manche serien 
gehen ohne probleme, auch mit 22ps. An der software kanns nicht liegen, 
weil sie auf 90 prozent läuft. Reflow profil ist direkt auf dem 
mikrokontroller (thermoelementt) aufgenommen worden, alle 
normrichtlinien eingehalten. Der quarz wird von hand eingelötet. Wenn 
manchmal zwischen den pins geritzt wird, an den der quarz angeschlossen 
ist, läuft das system manchmal wieder --> spannungen im mikrokontroller?
Denke eher an popcorn effekt. Aber die mikros werden mit einem 
entfeuchterkissen gelagert, mit indikator. Luftdicht abgeschlossen, bin 
ratlos.
Gast #3782754
Lesenswert?

Wenn Sie genauso systematisch arbeiten wie Sie hier Ihren Namen und die 
Rechtschreibung verwenden, Manuel, Manu, Manuel77 oder wie auch immer...

>An der software kanns nicht liegen
Diese Aussage ist generell gewagt, im Zusammenhang mit dem asynchronen 
Timer aber schlicht falsch.
Ich habe gestern wegen Ihnen etwas herumprobiert und einiges seltsames 
Verhalten gesehen, welches sich erst nach dem dritten Blick ins 
Datenblatt erklärte, Stichwort wie bereits erwähnt ...UB-Flags im ASSR, 
aber auch
"... the interrupt will immediately occur and the device wake up again. 
The result is multiple interrupts and wake-ups within one TOSC1 cycle 
from the first interrupt.",
überhaupt das ganze Kapitel 18.9.
Wird denn immer dieselbe Software aufgespielt, mit denselben Fusebytes?

Was die Quarzthematik betrifft: ATmega328P-PU mit DT-26 auf Steckbrett 
läuft mit der reinen Steckbrettkapazität, auch noch mit zusätzlichen 2* 
33 pF, benötigt dann aber über 5 s zum Anlaufen (eine große Spielwiese 
für den asynchronen Modus).
Gast #3782811
Lesenswert?

Eine gute Gelegenheit, wieder einmal Paul Watzlawick zu zitieren, das 
letzte Mal ist schon länger her, vielleicht kennt der Eine oder Andere 
die Geschichte noch nicht, ausserdem ist Wochenende, also:

Ein Betrunkener kriecht um Mitternacht auf allen Vieren um eine 
Straßenlaterne herum. Kommt ein Polizist vorbei: "Sie, was machen Sie 
denn da?" "Ich suche meinen Hausschlüssel." Jetzt suchen beide. Nach 
einer Viertelstunde fragt der Polizist "Sagen Sie mal, sind Sie sicher, 
dass Sie den Schlüssel hier verloren haben?" Antwort: "Nein, nicht hier, 
sondern dort drüben. Aber dort ist es viel zu dunkel zum Suchen."
Gast #3782819
Lesenswert?

Immer wieder schön zu lesen, wie hier Personen von dem eigentlichen 
Grund, hier zu sein ablenken und einen auf seine Rechtschreibung 
ansprechen. Ich habe von einem Handy geschrieben, erklärt auch die 
unterschiedlichen Namen ;)
...
Initialisierung des Timers:
1
//Timer2
2
ASSR |= (1 << AS2);
3
TCCR2A |= 0x00;
4
TCCR2B |= (1 << CS21) | (1 << CS20);
5
TIMSK2 |= (1 << TOIE2);
6
sei();
Routine:
1
//--------Timer--------
2
SIGNAL (SIG_OVERFLOW2)
3
{
4
...
5
}

Variablen etc. mit volatile definiert. Es sind 8Bitter, also kein 
atomarer Zugriff nötig. Bevor ihr euch wieder über die Interruptroutine 
zerreißt, das Programm ist 7 Jahre alt.
Gast #3782862
Lesenswert?

>Immer wieder schön zu lesen, wie hier Personen
Hilfe erwarten, aber unfähig sind oder keine Lust haben, konkreten 
Hinweisen nachzugehen und mal ins Datenblatt zu schauen.

Und wenn es seit 7 Jahren läuft, ist ja alles in Ordnung. Ich 
verabschiede mich ins Wochenende.
#3783002
Lesenswert?

@Hanns: Werde die UB-Flags nächste Woche mal einpflegen. Du meinst nach 
dem setzen des AS2 Bits auf die UBs warten, richtig?
1
//Timer2
2
ASSR |= (1 << AS2);
3
// Auf UBs warten:
4
while(ASSR & 0x1F)
5
{
6
    _delay_ms(1);
7
}
8

9
TCCR2A = 0x00;
10
TCCR2B |= (1 << CS21) | (1 << CS20);
11
TIMSK2 |= (1 << TOIE2);
12
sei();

@Matthias: Auch gerade gesehen, hast du Recht.
Gast #3783160
Lesenswert?

Das kann nicht Ihr Ernst sein!


Beispiel, in Assembler, ohne weiteren Kommentar:

  ldi  tmp0,(1<<AS2)   ; start asynchron 32768 Hz
  sts  ASSR,tmp0

  ldi  tmp0,(0<<CS22)+(1<<CS21)+(1<<CS20)
  sts  TCCR2B,tmp0
warten_TCCR2B_update:
    lds  tmp0,ASSR
    sbrc tmp0,TCR2BUB
  rjmp warten_TCCR2B_update

  ldi  tmp0,(1<<TOIE2)
  sts  TIMSK2,tmp0
  sei


Zum zweiten Mal: Lesen Sie das Kapitel 18.9 in Gänze (sowie zumindest 
18.11.8), es gibt noch weitere asynchrone Stolperfallen.
Gast #3783291
Lesenswert?

Also wie Ihr Programm sieben Jahre lang (offenbar in vielen Systemen) 
funktionieren konnte, ist mir völlig unklar - das wäre eine eigene 
Untersuchung wert.
Wenn ich hier in meiner Minimalkonfiguration die Warteschleife weglasse, 
kommt in 3 von 4 Fällen der Interrupt nicht mehr, wohl abhängig von den 
Startverhältnissen, egal, ob ich einen neuen ATmega328P von 1426 
verwende oder einen alten 168 von 0452. Und in dem (oben erwähnten) 
mittelgroßen System mit ATmega16 ginge generell gar nichts.

Das heißt natürlich leider noch lange nicht, dass dies ihr Fehler ist, 
es ist aber auf jeden Fall eine mögliche Fehlerquelle.
#3783635
Lesenswert?

Klar, der oben ergibt wenig Sinn. Habe den Code nur auf die Schnelle 
zusammengeschrieben. Teste ihn nächste Woche.
1
//Timer2
2
ASSR |= (1 << AS2);
3
TCCR2A = 0x00;
4
TCCR2B |= (1 << CS21) | (1 << CS20);
5
TIMSK2 |= (1 << TOIE2);
6

7
// Auf UBs warten:
8
while(ASSR & 0x10)
9
{
10
    _delay_ms(1);
11
}
12

13
// Interruptflag löschen:
14
TIFR2 &= ~(1<<TOV2);
15
sei();

Vielleicht lag es an der niedrigen Systemfrequenz von 1 MHz, dass der 
alte Code nahezu immer funktioniert hat.
Moderator (Firma: Titel) Persönliche Seite #3783717
Lesenswert?

Manuel schrieb:
> Ich habe von einem Handy geschrieben, erklärt auch die
> unterschiedlichen Namen ;)
Nein, tut es ganz&gar nicht. Ich schreibe abwechselnd vom drei PCs, 
einem Tablet oder dem Handy. Und jedesmal mit dem selben Namen. Du 
solltest nicht immer so schnell naheliegende Ausreden suchen. Ich sehe 
da ausgeprägte Parallelitäten zu der hier vorliegenden Fehlersuche...

Manuel77 schrieb:
> An der software kanns nicht liegen, weil sie auf 90 prozent läuft.
Aus meiner Erfahrung gilt eher: obwohl manche Software (und/oder 
Hardware) zu 100% läuft enthält sie noch einige Fehler. Und viele Fehler 
werden erst durch einen Zufall etliche Jahre später entdeckt...

Wenn das Anlaufen eines Systems nicht klappt, dann muss man jeden 
einzelnen der nötigen Punkte mit dem Datenblatt abgleichen. Und sich 
nicht beim erstbesten Verdachtsfall ("defekte Quarze") festbeißen...
Gast #3783901
Lesenswert?

Nein, nicht richtig. Das TCNT2 wird ja gar nicht angefasst, das Problem 
liegt beim TCCR2B, folglich ist das Flag ASSR.TCR2BUB abzufragen:

while(ASSR & 0x01)

(statt 0x10) oder eben, wie Sie es ursprünglich hatten, 0x1F (auch 
wenn's hässlich aussieht).

Das delay halte ich für unnötig.
Gast #3783993
Lesenswert?

>Obwohl manche Software (und/oder Hardware) zu 100% läuft enthält sie noch
>einige Fehler.

Es ist wie im Richtigen Leben: das System mit der Bezeichnung 'alter 
Hanns' wird obsolet werden, lange bevor die letzten Fehler darin 
entdeckt wurden.
Gast #3848964
Lesenswert?

Nach langer Zeit habe ich ein defektes Gerät entdeckt und teile euch nun 
das Ergebnis mit:

Das defekte Gerät mit zwei 22p Kondensatoren am Uhrenquarz lief nach 
alter Programmierung nicht an. Bei der neuen Programmierung lief es 
allerdings auch nicht an. Nach einem Wechsel auf 6,8p Kondensatoren dann 
schon.

Die Geräte, die auch mit alter Programmierung liefen, liefen auch mit 
neuer Programmierung, obwohl zwei 22p Kondensatoren verbaut waren.

Vielen Dank für die Hilfe,
MfG,
Manuel
Gast #3849185
Lesenswert?

Und wie passt das jetzt zu dem Beitrag vom 29.08.:

>Ich habe in mehreren defekten systemen die 22p kondensatoren gewechselt
>auf 6 pf, sie gehen nicht, weder bei hitze noch bei kälte. Erst wenn ich
>den mikro tausche und ihn programmiere geht alles wieder.
#3884672
Lesenswert?

Heute ist mir eine Platine untergekommen, wo der Uhrenquarz mit zwei 
6,8pF Kondensatoren und neuem Code nicht anläuft. Wenn ich die Platine 
leicht verwinde, läuft er an. Nach tauschen des µC läuft er sofort an, 
auch stabil.
Wie kann das sein?

Der Kontroller kann doch nur im Reflowprozess kaputt gegangen sein.
Gast #3884727
Lesenswert?

Löte mal den Controller mit Heißluft nach.. auf die Art und weise habe 
ich schon einen Großen Teil defekter Elektronik ein neues Leben 
eingehaucht.
Keine Ahnung was Dein Reflowofen so macht..

Gruß,

Holm
Gast #3885987
Lesenswert?

Du schriebst auch, durch Kratzen zwischen den Pins mit dem Messer 
bekommst du die Dinger manchmal wieder zum Laufen.
Versuche mal statt Kratzen mit Platinenreiniger intensiv die 
Flussmittelreste rauszuputzen. Evtl. ist das ja die Ursache.
#3886036
Lesenswert?

Easylife schrieb:
> Du schriebst auch, durch Kratzen zwischen den Pins mit dem Messer
> bekommst du die Dinger manchmal wieder zum Laufen.
> Versuche mal statt Kratzen mit Platinenreiniger intensiv die
> Flussmittelreste rauszuputzen. Evtl. ist das ja die Ursache.

Das werde ich aufjedenfall versuchen, wenn mir das nächste defekte Gerät 
auffällt.

Easylife schrieb:
> Der muss ja auch ganz schön was aushalten bei dir...
> 5 Minuten über 150°C, 2 Minuten über liquidus...

Okay, das wusste ich nicht. Habe mich an diesem Dokument orientiert:
http://www.microsemi.com/document-portal/doc_view/131105-solder-reflow-leadfree

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