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
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.
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.
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
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
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
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.
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.
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).
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?
> 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.
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?
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.
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.
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
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.
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