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
Und noch ein kleiner Fehler, an dem 7805 hängen nicht zwei mal 1µF sondern einmal 1µF und einmal 0,1µF
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.
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.
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?
Emitter an Masse, Last zw. Kollektor und +5V, Vorwiderstand 1-10kOhm: Relais mit Logik ansteuern http://www.mikrocontroller.net/articles/Transistor#PNP.2FNPN_als_Schalter.2C_wohin_mit_der_Last.3F
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.