Forum: Mikrocontroller und Digitale Elektronik Wie genau ist der Intere Quarz


von Olli (Gast)


Lesenswert?

Hi,

ich habe mir einen Counter mit Siebensegmentanzeige gebaut. Der Counter 
soll ca. jeder Sek einen Variable herunterzählen. Ich habe folgenden 
Ansatz gewählt:

Hardware:
- Atmega 8
- Spg. Versorgung
   - 230V->9V Trafo
   - Brückenschaltung aus vier Dioden
   - 1000µF zur Glättung

Software:
- Internen Quarz auf 8 Mhz eingestellt
- Timer0 auf 31250 Hz eingestellt
- Timer0 Interrupt aktiviert
- In der Interruptfkt. eine Schleife, die von 122 (=31250/256) bis 0 
zählt und dann eine globale Variable herunterzählt

Irgendwie hat das ganze auf meinem Schreibtisch mit einem Schaltnetzteil 
ohne Probleme funktioniert. Jetzt mit dem Trafo habe ich das Problem, 
dass der Counter manchmal jede Sekunde herunterzählt und manchmal ca. 
die dreifache Geschwindigkeit hat, sprich dreimal pro Sek herunterzählt. 
Kann das an dem Internen Quarz liegen (wäre ganz schön häftig wenn da 
solche unterschiede geben sollte)?
Oder habt Ihr ne Idee, woran es liegen könnte?

Gruß
Olli

von crazy horse (Gast)


Lesenswert?

interner Quarz? Gibts es nicht.
Nur einen RC-Oszillator, ziemlich ungenau, abhängig von Temperatur und 
Spannung.
Sprünge von 1:3 gibts da allerdings nicht, das ist was anderes.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Olli wrote:

> - Internen Quarz auf 8 Mhz eingestellt

Sowas gibt es nicht.

Das ist ein RC-Oszillator.  Der lässt sich bei konstanten Umgebungs-
bedingungen (Vcc, Tamb) auf ca. 0,5 % genau kalibrieren.

> Irgendwie hat das ganze auf meinem Schreibtisch mit einem Schaltnetzteil
> ohne Probleme funktioniert. Jetzt mit dem Trafo habe ich das Problem,
> dass der Counter manchmal jede Sekunde herunterzählt und manchmal ca.
> die dreifache Geschwindigkeit hat, sprich dreimal pro Sek herunterzählt.

So ungenau wiederum ist der RC-Oszillator aber auch nicht.  Du
wirst irgendwelche Spikes auf deinem Signal haben.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Im ATMega ist kein Quarz, sondern ein (Temp.-stabilisierter) 
RC-Oszillator. Dessen Genauigleit ist für viele Anwendungen ausreichend, 
mit einem Quarz aber nie und nimmer vergleichbar.

Dein Problem klingt aber eher nach ungenügender Siebung der 
Betriebsspannung, evtl. im Zusammenhang mit schwankendem Verbrauch 
deiner Anzeige. Ein solches Netzeil ohne Regler ist bei dem geringen 
Strombedarf ein Risiko, die Quasi-Lehrlaufspannung kann kritisch hoch 
werden. Ich würde einen 780x-Reglerchip verwenden.

davon abgesehen - Probier mal Folgendes:

- unmittelbar am ATMega eine Parallelschaltung von 1 yF Elko und 10 nF 
Keramik

- den ATMega über 100 Ohm Widerstand versorgen, getrennt vom Rest der 
Schaltung

Frank

von Peter D. (peda)


Lesenswert?

Olli wrote:
> Kann das an dem Internen Quarz liegen (wäre ganz schön häftig wenn da
> solche unterschiede geben sollte)?

Ne am internen Quarz liegst garantiert nicht, weil kein AVR nen internen 
Quarz hat.
Die AVRs haben nen internen RC-Generator, nach wenigen Minuten sind 
schon mehrere Sekunden Abweichung zu sehen. Für ne Eieruhr gerade noch 
geeignet.


> Oder habt Ihr ne Idee, woran es liegen könnte?

Naja, 9V ist ganz schön heftig.
Es wundert mich, daß der AVR überhaupt noch lebt.


Peter

von Düsentrieb (Gast)


Lesenswert?

9v trafo....und wo is der 5v-regler ???

von crazy horse (Gast)


Lesenswert?

wide-supply-range-Typ verwendet :-)

von Olli (Gast)


Angehängte Dateien:

Lesenswert?

Ok ok,

meinte natürlich den interen RC-Oszillator. Und habe auch vergessen zu 
schreiben, dass ich natürlich einen 7805 mit auf der Schaltung habe. 
Anbei habe ich mal die Schaltung gehängt allerdings ohne Trafo, 
Brückengleichrichter und Glättungselko.

Gruß
Olli

von Olli (Gast)


Lesenswert?

Und noch ein kleiner Fehler, an dem 7805 hängen nicht zwei mal 1µF 
sondern einmal 1µF und einmal 0,1µF

von Michael (Gast)


Lesenswert?

Ich würde die Kondensatoren auf der VCC-Seite erhöhen. Wenn Du da 
wirklich nur einen 100nF hast, dann dürfte das vermutlich nicht reichen. 
Mach noch einen 10uF parallel. Auch auf der 9V Seite würde ich mehr als 
nur 1uF ansetzen.

von Olli (Gast)


Lesenswert?

Ja ja auf der 9V Seite ist ja noch der Glättungselko mit 1000µF das 
reicht dann doch oder? das mit den 10 µ werde ich dann gleich mal 
testen.

von Michael (Gast)


Lesenswert?

Du kannst auch noch einen zusätzlichen 10uF Kondensator nah an die 
Transistoren legen, so dass dieser den kurzfristigen Strombedarf der 
Segmentanzeigen besser abdecken kann.

Es ist schon möglich, dass lokale Spannungsschwankungen durch stark 
unterschiedlichen Strombedarf zu Aussetzern beim Prozessor führen.

Generell solltest Du aber auf jeden Fall eine mögliche Fehlerquelle 
nicht übersehen, Dein Programm. Häufig liegt der Fehler in der Software 
begraben.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich habe UP, DOWN, START und STOP in Verdacht. Mehr Eingänge hat die 
Schaltung ja nicht.

Vom Schaltbild her sieht es so aus, als ob diese Anschlüsse gegen GND 
schalten und ansonsten floaten (auf dem 16-pol. anschluss ist kein Vcc 
für ein Pullup!). Vielleicht fängst du dir ein Dauer-UP/DOWN ein. 
Versuchsweise würde ich diese Eingänge mit internen Pullups versorgen 
(10k Widerstände brücken).

von Olli (Gast)


Lesenswert?

Ok ich habe das ganze jetzt noch mal überarbeitet.

- 10µ Elko am Atmega zischen VCC und GND
- 10µ Elko bei den Transistoren für die Segmentanzeigen
- 100µ Elko beim Transistor für das Relai
- Pullupwiderstände auf VCC bei STRAT, STOP, UP und DOWN

gibt es sonst noch was? Was sollte man mit nicht genuzten PIN machen? 
Bei mir PB6 und PB7? Was ist mit AGND, AVCC und AREF? Kann man die 
einfach offen lassen?

von Olli (Gast)


Angehängte Dateien:

Lesenswert?

Hier die Datein ;-)

von Εrnst B. (ernst)


Lesenswert?

>  Was ist mit AGND, AVCC und AREF? Kann man die einfach offen lassen?

NEIN!
Auch wenn kein ADC verwendet wird, AGND an Masse, AVCC an +5V, und 
nochmal 100nF Kerko dazwischen. AREF kann offen bleiben.

von Olli (Gast)


Angehängte Dateien:

Lesenswert?

So jetzt auch noch 100nF am ADC.

von Εrnst B. (ernst)


Lesenswert?

Besser.

Nochwas ist mir aufgefallen:
Bei der Relais-Ansteuerung nimmst du einen Emitter-Folger. Im Prinzip in 
Ordnung, allerdings hat das Relais dann nur noch so 4.3 V zum Anziehen. 
Reicht das?

von Olli (Gast)


Lesenswert?

Ist an der untern Grenze aber wie würdest du es sonst lösen?

von Εrnst B. (ernst)


Lesenswert?


von Olli (Gast)


Angehängte Dateien:

Lesenswert?

Quasi so?!

von Tobi (Gast)


Lesenswert?

Also mich wundert, dass der µC überhaupt läuft. Der müsste ja im Reset 
sein!
Am Rest-Pin müssen 0V (GND) anliegen, damit der Mega8 läuft.

von Tobi (Gast)


Lesenswert?

Oder steckt dein SPI Stecker immer dran?

von Andreas K. (a-k)


Lesenswert?

Tobi wrote:

> Am Rest-Pin müssen 0V (GND) anliegen, damit der Mega8 läuft.

Nö, das ist ein AVR, kein 8051. Nur sind 1µF ein bischen heftig, je 
dicker der Reset-Kondensator, desto heftiger der Strom durch den 
ISP-Treiber der den Reset auf 0 zieht.

von Tobi (Gast)


Lesenswert?

Stimmt, du hast recht, sorry!

von Εrnst B. (ernst)


Lesenswert?

Ja.

Noch ein paar Kleinigkeiten:

Vor den 7805 einen größeren Kondensator parallel schalten (~ 100µF)

Eine Diode "über" den 7805, damit sich die Kondensatoren auf der 
5V-Seite entladen können, wenn die 12V weg sind, ohne den 7805 zu 
grillen.

der 1µF am Reset-Pin ist vermutlich zu groß, da könnte der ISP Probleme 
kriegen. Eher 100nF.

der 100 Ohm Vorwiderstand für die Power-On-Led ist für meinen Geschmack 
zu klein, hängt aber von der LED-Farbe (Flussspannung) ab. auch mit 330 
oder 470 Ohm wird die Helligkeit nicht wesentlich nachlassen...

von den vielen 10µF Kondensatoren kann man einige einsparen, wenn die 
beim Layout nah beienander liegen. z.B. wenn die drei Segment-Treiber 
nebeneinander auf der Platine sind, reicht einer für alle drei.
Wenn du von denen aber eh eine Tüte voll zum verteilen hast, und Platz 
kein Problem ist, kannst du die auch so lassen.

Wenn du weitere Bauteile sparen willst: die 100Ohm Vorwiderstände vor 
T1-T3 kann man weglassen. Sind aber beim Layouten evtl hilfreich als 
"Drahtbrückenersatz"

Du könntest auch im Layout noch einen Quarz (+Lastkapazitäten) am AVR 
vorsehen, und dann einfach nicht bestücken. Wenns dann zu ungenau ist, 
kann man den einfach nachlöten und die Fuses umstellen, ohne das ein 
neues Layout fällig wird.

von Oszi40 (Gast)


Lesenswert?

Ganz oben las ich "auf Schreibtisch mit einem Schaltnetzteil
ohne Probleme funktioniert. Jetzt mit dem Trafo habe ich das Problem,"..
.....dann sagt meine Glaskugel: Spannungproblem!

Brummen, Störimpulse oder butterweiches Netzteil?

Als Test evtl. Contoller-Logik nochmals aus sauberem Schaltnetzteil 
speisen und nur Anzeige über neues Trafo-Netzteil ?
Später: evtl. Elko hinter 7805 auf 100uF vergößern und Beschaltung des 
7805 mit Schutzdioden (wegen Elko-Entladung nach Ausschalten)?

Eine Ursache könnte auch die räumlche Anordnung des Trafos sein, die 
Störungen im Nahfeld erzeugt.

Gruß Lutz

von Olli (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe gestern das Board noch einmal neu gemacht und es funktioniert 
so weit auch allerdings tritt der Fehler immer noch auf. Mir ist jetzt 
aber folgendes aufgefallen, die Sekunde wird genau gezählt, wenn der 
ISP-Programmer (MkII) angeschlossen ist, wenn ich den Porgammer abziehe, 
läuft meine Sekunde mit doppelter bis dreifacher Geschwindigkeit.
Anbei nochmal die aktuelle Schematic.

Gruß
Olli

PS: Der Quarz ist nicht eingbaut.

von Olli (Gast)


Lesenswert?

Problem gelöst!!!

Und zwar war es doch ein Softwareproblem ;-). Man kann im AVR Studio 
drei verschiedene Einstellungen für den RC-Oszillator bei 8Mhz trefeen:

1. Int.RC Osc 8Mhz;Start-up time 6CK + 0 ms;(CKSEL: 0100 SUT00)
2. Int.RC Osc 8Mhz;Start-up time 6CK + 4 ms;(CKSEL: 0100 SUT01)
3. Int.RC Osc 8Mhz;Start-up time 6CK + 64 0ms;(CKSEL: 0100 SUT10)

Ich hatte die 1. Einstellung gewählt, leider hat die immer nur im 
zusammenspiel mit dem ISP-Porgammer (MkII) funktioniert. Bei den beiden 
letzten (2. und 3.) Einstellungen funktioniert es jetzt auch ohne das 
der Programmer angeschlossen sein muss. Das muss ja was mit den + 4 ms 
bzw. + 64 ms zutun haben. Aber wieso die Verzögerung dort mit eingebaut 
werden muss weiss ich aber immer noch nicht. Vielleicht habt Ihr ja ne 
Idee.

Gruß
Olli

PS: Danke nochmal für die vielen hilfreichen Hardwaretips

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.