Forum: Mikrocontroller und Digitale Elektronik ATmega32 Quarz testen


von Cyber (Gast)


Lesenswert?

Hi, bin so ziemlich neu hier und kenne mich nicht alzugut aus, daher 
vorab entschuldigung wenn das hier im Falschen Forum ist. Mit der 
Suchfunktion konnte ich ebenso nichts dazu finden :(

Meine Frage ist, gibt es eine Möglichkeit um den Quarz zu Prüfen ob er 
noch richtig "Zählt"?
Und zwar arbeite ich mit Basic Bascom und die Idee ist, bei dem ATmega32 
(de besitzt ja 2 Quarze. Einmal den 11MHz und einen der 32k Hz ist. 
Zurück zu der Idee, ich zähle einmal wieviele Takte der 32k Hz macht und 
Parallel dazu wieviele der 11MHz macht und vergleiche diese dann mit 
einem Tolleranzwert von 5% und wenn das Stimmt, dann funktionieren beide 
richtig.
Die Frage ist nur wie man das jetzt im Code am besten umsetzt und was es 
dort zu beachten gibt.

Danke für die Aufmerksamkeit und Hilfe :)

Mfg
Cyber

von Falk (Gast)


Lesenswert?

@Cyber

>Hi, bin so ziemlich neu hier und kenne mich nicht alzugut aus, daher
>vorab entschuldigung wenn das hier im Falschen Forum ist. Mit der

Sinnvollerweise ist das ein Beitrag im Forum uC & Elektronik. Ist aber 
nicht tragisch.

>Meine Frage ist, gibt es eine Möglichkeit um den Quarz zu Prüfen ob er
>noch richtig "Zählt"?

Da gibt es viele.

>Und zwar arbeite ich mit Basic Bascom und die Idee ist, bei dem ATmega32
>(de besitzt ja 2 Quarze. Einmal den 11MHz und einen der 32k Hz ist.

Einen am normalen Quarzeingang (XTAL1/2 und an Timer 2)

>Zurück zu der Idee, ich zähle einmal wieviele Takte der 32k Hz macht und
>Parallel dazu wieviele der 11MHz macht und vergleiche diese dann mit
>einem Tolleranzwert von 5% und wenn das Stimmt, dann funktionieren beide

5% ist meilenweit weg von der Toleranz eines normalen Quarzes. Selbst 
schlechte Quarze haben max. +/- 100ppm Toleranz (das sind 0,01%).
Wirklich sinnvoll messen kannst du eigentlich nur mit einem 
Freqeunzzähler.

>Die Frage ist nur wie man das jetzt im Code am besten umsetzt und was es
>dort zu beachten gibt.

Lass einen Timer eine PWM erzeugen und miss die Frequenz mit einem 
Frequenzzähler. Man sollte niemals direkt am Quarz messen, das verfäscht 
das Ergebnis.
Wenn du keinen hast, kann man sich mit einem Trick behelfen. Programmier 
eine Uhr mit Sekundenanzeige. Stell die auf die Sekunde genau mit dem 8 
Uhr Zeichen der Tagesschau. Lass die Uhr eine Woche lang laufen. Schau 
dann nach, um wieviel die Uhr eine Woche später vom 8 Uhr Zeichen der 
Tagesschau abweicht.

MFG
Falk

von Cyber (Gast)


Lesenswert?

uff jetzt hast mich total überrumpelt :D

Also der Tolleranzwert sollte bei maximal 0.01% liegen.
Der 11MHz Quarz ist an XTAL1 und XTAL2 angeschlossen. Der 32768Hz Quarz 
liegt an (PortC.6/7) TOSC1/2 Das ist der Timer 2.

Hoffe ich hab das jetzt soweit Richtig verstanden (Bin wirklich blutiger 
Anfäger)

Das andere Problem ist ich hab keine Ahnung was du mit Frequenzzhler 
meinst, aber ich glaube ich habe auch zuwenig Informationen geliefert, 
versuche ich jetzt zu ergänzen :)

Ich habe hier bei der Platine leider nur eine einzige LED die an PortB.4 
liegt mit der ich mir was anzeigen lassen kann. Das heißt ich kann da 
leider nichts weiteres dranmachen sowas wie ein Display etc. habe nur 
die LED.
Das ganze soll ein 48 Stunden Testprogramm werden mit dem man die ganzen 
"Funktionen" von ATmega32 testet. dazu gehört auch ob der Quarz richtig 
läuft oder nicht. Von daher klappt das nicht mit einer Woche testlaufen 
lassen und mit Uhr und so :(

Der Test vom Quarz sollte (ich wiess nicht ob es Realistisch ist) 
maximal paar Minuten oder gar nur wenige Sekunden lag dauern.
Das Programm ist bisher so aufgebaut, das es alle test (Speicher, Pins 
ob es kurschlüssse gibt etc, den Quarz, das Shiftregister) immer wieder 
abwechselnd durchtestet ob die Bits alle richtig ankommen oder nicht.

Hoffe konnte es nn deutlicher ausdrücken.

Mfg
Cyber

von Falk (Gast)


Lesenswert?

@Cyber

>Hoffe ich hab das jetzt soweit Richtig verstanden (Bin wirklich blutiger
>Anfäger)

Soweit so gut.

>Das andere Problem ist ich hab keine Ahnung was du mit Frequenzzhler

Ein Freqeunzzähler ist ein Gerät, das, wie der Name vermuten lässt, die 
Freqeunz eines Signals messen kann.

>Das ganze soll ein 48 Stunden Testprogramm werden mit dem man die ganzen
>"Funktionen" von ATmega32 testet. dazu gehört auch ob der Quarz richtig
>läuft oder nicht. Von daher klappt das nicht mit einer Woche testlaufen
>lassen und mit Uhr und so :(

Warum willst du das machen? Das macht Atmel schon.

>Der Test vom Quarz sollte (ich wiess nicht ob es Realistisch ist)
>maximal paar Minuten oder gar nur wenige Sekunden lag dauern.

Das geht mit einem Frequenzzähler (wenns ganz genau sein soll).
Wenn es aber nur darum geht, die Funktion an sich zu testen reicht es 
aus, die LED im 1 Sekundentakt blinken zu lassen. Wenn sie blinkt 
funktioniert der Quarz und hat max. die +/-100ppm Abweichung (was für 
die allermeisten Anwendungen ausreicht).Wenn der Quarz kaputt ist geht 
gar nix.

MFG
Falk


von Cyber (Gast)


Lesenswert?

> Warum willst du das machen? Das macht Atmel schon.

Ja ist ne Aufgabe hier.. Hab hier Praktikum und soll das jetzt schreiben 
um einnige Platinen auf Kurzschlüsse und so weiter durchzutesten :)
Der Speicher wird z.b. gerade so getestet das ich da einmal so ziemlich 
ale möglichen Kombinationen an Bits reinschreibe und diese darauf auch 
gleich auslese und schaue obs übereinstimmt oder nicht. Beim 
Shiftregister (über eine extra platine) schriebe ich da ebenso schrifft 
für schritt die Bits rien und (dank der extraplatine) Fange ich die 
Ausgabe auf PortA ab und schaue da obs stimmt oder nicht. So ähnlich 
läufts bie de restlichen Pins.
Das hab ich auch fertig.
Und jetzt das mit Quarz...

Ne Frage nochmal zum Frequenzzähler. Muss man den Extra anbringen? Oder 
ist er da schon irgend wie drinne das ich auf ihn zugreifen kann?

von Falk (Gast)


Lesenswert?

@Cyber

>Ja ist ne Aufgabe hier.. Hab hier Praktikum und soll das jetzt schreiben
>um einnige Platinen auf Kurzschlüsse und so weiter durchzutesten :)

Ok. Das sit dann aber ein Funktionstest, wie er nach der Produktion von 
Platinen durchgeführt wird.

>Ne Frage nochmal zum Frequenzzähler. Muss man den Extra anbringen? Oder

Ja. genauso wie ein Multimeter zum Spannung messen. Es gibt auch 
Multimeter mit Frequenzzähleeingang. Die sind zwar nicht sonderlich 
genau aber für deine Anwendung ausreichend.

MFG
Falk

von Cyber (Gast)


Lesenswert?

> Ok. Das sit dann aber ein Funktionstest, wie er nach der Produktion von
Platinen durchgeführt wird.
genau so ein ähliches teil muss icha uch machen. Weil die hier die 
Platinen selbst löten. Also werden nicht fertig gekauft.

> Ja. genauso wie ein Multimeter zum Spannung messen. Es gibt auch
Multimeter mit Frequenzzähleeingang. Die sind zwar nicht sonderlich
genau aber für deine Anwendung ausreichend.

Hmm ich glaube nicht das er hier so ein multimeter in einem 48H testlauf 
an jede einzelne anschließen will :(
Der Test soll wirklich so ablaufen: Man startet ihn, nach 48 Stunden 
kommt man wieder und WENN die LED Blinkt (hab das bisher sogemacht das 
ich mit dem Timer0 die LED immer blinken lasse) dann traten keine Fehler 
auf, aber wenn die leuchtet dann ist bei dem Test irgend wo etwas schief 
gelaufen und man muss nun genauer schauen was. Versthest du was ich 
meine? Das ganze soll unabhängig von anderen Zusätlichen Gerären 
laufen.. Programm einbrennen und laufne lassen und dann schauen ob der 
Test OK war oder Fehlschlug. :(

von Falk (Gast)


Lesenswert?

@Cyber

>Hmm ich glaube nicht das er hier so ein multimeter in einem 48H testlauf
>an jede einzelne anschließen will :(

>Der Test soll wirklich so ablaufen: Man startet ihn, nach 48 Stunden

Warum eigentlich 48 Stunden? Kurzschlüsse und RAM-Fehler findet man in 
Sekunden. Oder soll eine Art-Burn in gemacht werden ?(Dabei werden die 
Boards under Maximal/Minimaltemperatur geetestet)

>gelaufen und man muss nun genauer schauen was. Versthest du was ich
>meine?

Ja.

>Das ganze soll unabhängig von anderen Zusätlichen Gerären
>laufen.. Programm einbrennen und laufne lassen und dann schauen ob der
>Test OK war oder Fehlschlug. :(

Das wird so nicht gehen, ein wenig Hardware brauchst du schon. Nur 
Münchhausen konnte sich selbst aus dem Sumpf ziehen. Der Selbsttest vom 
RAM geht so, aber den Quarz wirst du so nciht testen können. Du MUSST 
eine externe (Takt)referenz haben.
Im einfachsten Fall brauchst du einen Umschalter, um mehrere Borads mit 
einem Messgerät messen zu können.

MFG
Falk


von Cyber (Gast)


Lesenswert?

> Warum eigentlich 48 Stunden? Kurzschlüsse und RAM-Fehler findet man in
> Sekunden. Oder soll eine Art-Burn in gemacht werden ?(Dabei werden die
> Boards under Maximal/Minimaltemperatur geetestet)
Wenn ich das wüsste..^^
Soweit ich das Verstanden habe, werden diese nach dem Löten ein 48 
Stunden Dauerbetrieb test machen, um Fehler die nach einem Dauerbetrieb 
auftreten auszuschließen. Ist so ein Rechtliches Ding. Wenn da keine 
Fehler auftreten, wird es an die Kunden ausgeliefert.

> Das wird so nicht gehen, ein wenig Hardware brauchst du schon.
Ist es möglich einem Timer zu sagen welchen Quarz er von den beiden 
Verwenden kann?
Der 11MHz sitzt ja an Timer zwei. Gibt es Timer die an dem 32kHz sitzen?

von Cyber (Gast)


Lesenswert?

Okey.. also ich habe jetzt mit ihm nocheinmal gesprochen und glaube ich 
hatte vorhin etwas missverstanden. Oder gerade Falsch erklärt. ich 
versuchs nochmal:

Bei dem Test geht es darum zwei Sachen zu Prüfen.
Die eine Sache wäre um zu sehen ob ob der eine Quarz (11MHz) wirklich 
"selbst" arbeitet oder ob der Chip mit dem Internen Quarz arbeitet. Also 
sehen ob der Chip wirklich mit dem 11MHz Quarz arbeitet.

Die andere wäre um zu sehen ob der 32kHz Quarz ein lebenszeichen von 
sich gibt oder nicht.
Also man muss da nicht alles auf millionstel genau haben. Nur schlicht 
und einfach zu sehne ob die beiden Quarze arbeiten oder nicht

Schuldigung für die Verwirrenden erklärungen :(

Mfg
Cybi

von Falk (Gast)


Lesenswert?

@Cyber

>Bei dem Test geht es darum zwei Sachen zu Prüfen.
>Die eine Sache wäre um zu sehen ob ob der eine Quarz (11MHz) wirklich
>"selbst" arbeitet oder ob der Chip mit dem Internen Quarz arbeitet. Also
>sehen ob der Chip wirklich mit dem 11MHz Quarz arbeitet.

Das ist recht einfach. Eine LED blinken lassen (per Software-Delay). Die 
Geschwindigkeit ist direkt vom Prozessortakt abhängig. Der MEGA32 kann 
intern mit max. 8 MHz getaktet werden. Ist das der Fall, blinkt die LED 
zu langsam. Das kann man auch automatisch messen. Z.B. mit einem 
Monoflop,das auf eine Sekunde eingestellt ist. Der MEGA wird so 
programmiert, dass er bei 11 MHz so ziemlich genau 1 Sekunde die LED 
blinken lässt. Läuft er zu langsam (8 MHz intern), geht das Monoflop (ne 
LED dranhängen) aus.

>Die andere wäre um zu sehen ob der 32kHz Quarz ein lebenszeichen von
>sich gibt oder nicht.

Da musst du nur einen Timer auf den exteren 32kHz Quarz als Taktquelle 
schalten und ebenfalls eine LED blinken lassen (per Interrupt).

>Schuldigung für die Verwirrenden erklärungen :(

Kein Prolem, wir haben alle mal klein angefangen.

MFG
Falk

von Cyber (Gast)


Lesenswert?

Also im Moment hab ich die LEd folgendermaßen Blinken:
1
' Timer Konfiguration für das Blinkende Lämpchen
2
On Timer0 Lampe 'Interrupt-Routine für Timer0-Overflow
3
Config Timer0 = Timer , Prescale = 1024 'Takt: Quarz/1024
4
Enable Timer0 'Timer0-Overflow-Interrupt einschalten
5
Enable Interrupts 'Interrupts global zulassen
6
7
Do
8
Loop
9
10
Lampe:
11
   If Blink_verzoegerung = 10 Then
12
      Blink_verzoegerung = 0
13
      If Pinb.4 = 1 And Fehlgeschlagen = 0 Then Reset Portb.4 Else Set Portb.4
14
   Else
15
      Incr Blink_verzoegerung
16
   End If
17
Return
Blink_verzoegerung dient dazu damit er erst nach dem 10 "Interrupt" das 
Lämpchen aufleuchten lässt.
Fehlgeschlagen dient dazu, wenn irgend ein Test Fehlschlägt, leuchtet 
die Lampe die ganze Zeit.

Das heißt im Moment sind alle meine Lämpchen (die eine einzige -.-) die 
ich habe und verwenden darf vergeben.
Das heißt ich muss das jetzt irgen wie ohne wieteren Lämpchen Testen 
müssen.

Wäre der Test auch so möglich (das ist jetzt der Test nur für den Quarz 
11MHz um zu sehen ob er funktioniert oder ob es nur der Interne ist) das 
man einen Timer (T2) startet.
Dann lässt man ein "waitms 1000" los. Während die 1000 milisekunden 
warten,  werden die Overflows von Timer 2 gezählt. Ist die eine Sekunde 
vorbei stoppt man den Timer und dann hat man die Zahl der overflows. 
Diese Multipliziert man mit 65536 (hab die zahl gerad nicht mehr genau 
im Kopf) und schaut ob man ungefähr an die 11.000.000 rankommt oder 
nicht. Wenn das so um den dreh ist dann kann man sagen, ja der prozessor 
läuft mit den 11Mhz also mit dem Quarz.
Am Ende hat man dann die

von Falk (Gast)


Lesenswert?

@Cyber

>Das heißt im Moment sind alle meine Lämpchen (die eine einzige -.-) die
>ich habe und verwenden darf vergeben.
>Das heißt ich muss das jetzt irgen wie ohne wieteren Lämpchen Testen
>müssen.

>Dann lässt man ein "waitms 1000" los. Während die 1000 milisekunden
>warten,  werden die Overflows von Timer 2 gezählt. Ist die eine Sekunde
>vorbei stoppt man den Timer und dann hat man die Zahl der overflows.

Was glaubs du, woher weiss die CPU wann 1000ms vorbei sind? Dazu musst 
du ihm in Bascon die Quarzfreqenz angeben. Und dann vergleichst du zwei 
Unbekannte gegeneinander. -> keine gute Idee

Mein Vorschlag

Wenn alle internen Test erfolgreich sind, blinkt die LED im 1s Rhytmus. 
Tut sie das wirklich im 1s Rhytmus weiss man, dass A) die interen Tests 
und b) der 11 MHz Oszillator OK sind. Blinkt sie gar nicht oder mit der 
falschen Frequenz ist einer der Test schief gegangen.

MfG
Falk

von Cyber (Gast)


Lesenswert?

> Wenn alle internen Test erfolgreich sind, blinkt die LED im 1s Rhytmus.
> Tut sie das wirklich im 1s Rhytmus weiss man, dass A) die interen Tests
> und b) der 11 MHz Oszillator OK sind. Blinkt sie gar nicht oder mit der
> falschen Frequenz ist einer der Test schief gegangen.

Das gut, danke :D

Bleibt dann nur noch der 32kHz..
Der ist ja soweit ich das nun weiss da um dem Prozessor quasi die "zeit" 
einzuspeisen und schlicht erklärt setzt er mit jedem Takt ein Pin von 0 
auf eins und zurück.
So könnte man ja messen wie oft er das zu einer bestimmten Zeit gemacht 
hat und dann kann mana auch sagen ob der "grobgesehen" richtig zählt 
oder nicht?

von Falk (Gast)


Lesenswert?

@Cyber

>Bleibt dann nur noch der 32kHz..
>Der ist ja soweit ich das nun weiss da um dem Prozessor quasi die "zeit"
>einzuspeisen und schlicht erklärt setzt er mit jedem Takt ein Pin von 0
>auf eins und zurück.

Ein Takt halt. Funktioniert genauso wie der 11 MHz Oszillator.

>So könnte man ja messen wie oft er das zu einer bestimmten Zeit gemacht
>hat und dann kann mana auch sagen ob der "grobgesehen" richtig zählt
>oder nicht?

Das geht ohne Problem genau. Genauso mit nem Timer Interrupt wie du das 
schon gemacht hast. Nur halt als Taktquelle nicht den 11 MHz, sondern 32 
kHz verwenden.

MFG
Falk

von Cyber (Gast)


Lesenswert?

Super danke! :)

ne andere kleine Frage wären diese Einstellungen so ok?

$regfile = "m32def.dat"          ' specify the used micro
$crystal = 11000000              ' used crystal frequency
$hwstack = 40                    ' default use 32 for the hardware stack
$swstack = 20                    ' default use 10 for the SW stack
$framesize = 40


und die andere.. wie kann ich ihm sagen.. wie ein timer eine andere 
Taktquelle nehmen soll? Wenn die antwort keine Umstände macht :)

Mfg
Cyber

von Falk (Gast)


Lesenswert?

@Cyber

>ne andere kleine Frage wären diese Einstellungen so ok?

Sieht gut aus, aber da erwischst du meine Achillesferse. Ich hab von 
Bascom keine Ahnung ;-)

>und die andere.. wie kann ich ihm sagen.. wie ein timer eine andere
>Taktquelle nehmen soll? Wenn die antwort keine Umstände macht :)

Das sollte im Handbuch/Hilfe stehen.

MfG
Falk

von Cyber (Gast)


Lesenswert?

Okey dann bedanke ich mich nochmals für deine Hilfe und sehe zu das ich 
da was auf die Beine stelle ^^

Bis bald, man schriebt sich bestimmt irgend wann mal wieder ^.^

Mfg
Cyber

von Cyber (Gast)


Lesenswert?

Hrm.. ich könnt gerad heulen T_T

Also hab gerad nochmal mit jemanden unterhalten und irgend wie hatte ih 
das heute Mittag verdrängt/vergssen das der Test am Ende auch aussagen 
soll, ob einer der Fehler irgendwan während des 48h Tests auch nur ganz 
ganz kurz aufgereten ist oder nicht. Weil WENN dann wäre der 48 Test 
Fehlgeschlagen und man kann ja da jetzt nicht 48 sitzen und da Lämpchen 
beobachten :(
Das heißt das ganze muss doch nun so getestet werden.. unabhängig von 
dem Lämpchen -.-

Mal auf den monoflop zurück zu kommen. Hab jetzt danach gegoogelt aber 
nichts gescheites gefunden.. was ist es nochmal ganz genau? Bzw. wie 
funtzt er? Oder hat jemand ne nette Seite wo es erklärt steht?

Mfg
Cyber :(

von Falk (Gast)


Lesenswert?

@Cyber

>Hrm.. ich könnt gerad heulen T_T

Boys don't cry . . . ;-)

>Also hab gerad nochmal mit jemanden unterhalten und irgend wie hatte ih
>das heute Mittag verdrängt/vergssen das der Test am Ende auch aussagen
>soll, ob einer der Fehler irgendwan während des 48h Tests auch nur ganz
>ganz kurz aufgereten ist oder nicht. Weil WENN dann wäre der 48 Test

Und was lernen wir daraus? Ein klare und umfassende Spezifikation der 
Anforderugen ist das A und O.

>Fehlgeschlagen und man kann ja da jetzt nicht 48 sitzen und da Lämpchen
>beobachten :(
>Das heißt das ganze muss doch nun so getestet werden.. unabhängig von
>dem Lämpchen -.-

Und du brauchst schon einiges an Prüfaufbau.

>Mal auf den monoflop zurück zu kommen. Hab jetzt danach gegoogelt aber
>nichts gescheites gefunden.. was ist es nochmal ganz genau? Bzw. wie
>funtzt er? Oder hat jemand ne nette Seite wo es erklärt steht?

Schau mal in Datenblatt vom NE555 bzw. 74HC123.

Ein Monoflop macht im Prinzip aus einem kurzen (Start)Impuls einen 
Ausgangsimpuls definierter Länge.

MFG
Falk

von Cyber (Gast)


Lesenswert?

Kann ich den Quarz mt 32kHz zählen lassen von 0 bis 32768 und wenn dann 
ein overflow ist wird ein interrupt ausgelöst? Wenn ja.. welcher 
interrupt ist es? Der int0 int1 oder int2?

Mfg
Cyber

von Cyber (Gast)


Lesenswert?

Ich formulier mal die Frage anders :)

Ist es möglich mit dem 32k Quarz von dem Mega Interrupts auszulösen? 
Oder suche ich mir da gerad ein wolf ^^

danke im voraus :)
Cyber

von Falk (Gast)


Lesenswert?

@Cyber

>Ist es möglich mit dem 32k Quarz von dem Mega Interrupts auszulösen?

Ja.

>Oder suche ich mir da gerad ein wolf ^^

Möglich, wenn gleich unnötig ;-)

Mega32 Datenblatt, Kapitel 8-Bit Timer/Counter 2 with PWM and 
asynchronous Operation
Register ASSR, Bit 3 - AS2

MFG
Falk



von Cyber (Gast)


Lesenswert?

danke hat geholfen nun bin ich ein großen schritt weiter ^^

Zusammenfassung:
Sofern das AS2 bit aus dem ASSR register gesetzt ist, benutzt der 8-Bit 
Counter2 den Clock aus von dem 32kHz Quarz (TOSC1/TOSC2)

Das heißt quasi ich muss jetzt dasn AS2 bit setzen, den Counter2 starten 
und schon habe ich nach dem Takt des 32kHz Quarzes bei jeden 256. Zahl 
ein kleinen Interrupt. Ist das richtig so?

Lieben Gruß
Cyber

von Falk (Gast)


Lesenswert?

Ja.

MFG
Falk

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.