Ein Mega88 getaktet mit 7,37MHz Quarz, versorgt mit 5V macht bei
aktiviertem brownout 4,3V Zicken (reset?), die ich nicht nachvollziehen
kann. Es sieht so aus, als ob der Brownout dann und wann zuschlägt, wenn
ungenutzte, offene Pins floaten (ich weiss, das macht man nicht). Das
versuchsweise aktivieren der internen pullup's reduziert nur die
Häufigkeit, stellt aber das Problem nicht gänzlich ab.
Messungen mit dem DSO an der Vcc haben keine Werte unter 4,9V ergeben.
Im Datenblatt steht als obere Schranke für den brownout 4,5V - also
eigentlich selbst im worstcase genug Luft. Am Avcc habe ich stellenweise
einen kurzen Einbruch von 200mV gemessen. (liegt über 100 Ohms an Vcc
und 220nF an Masse) Ist nicht schön, aber laut Datenblatt innerhalb der
zulässigen Grenzen von 0,3V.
Das Ganze lässt sich so auf mehreren Exemplaren nachvollziehen, defekter
Chip ist also eher unwahrscheinlich. Der Aufbau ist sauber, Vcc mit
Kapazitäten abgeblockt, Groundplane. Nimmt man die Fuse für den
brownoutlevel auf 2,6V, läuft alles normal.
Jetzt zur Frage: nimmt der brownout detector seine Spannung etwa am AVCC
ab? Wer zieht hier sporadisch bis zu 20mA aus dem Avcc?
Hat jemand schon ähnliche Erfahrungen gemacht, oder eine Idee was da
passiert und wie man das verhindern kann?
Mit der BOD vom Atmel hab ich noch nicht gearbeitet, kenne aber nen
ähnlichen Effekt von Logikgattern. Speziell beim Pegelwechsel entstehen
kurzzeitige, zum Teil aber erhebliche Spannungseinbrüche, die
beeinflussen die benachbarte Elektronik, das gibt die schönste
Kettenreaktion, weswegen ich jedes Gatter immer mit nem kleinen
Kondensator puffere.
Beim Atmel könnte das ähnlich sein. Offene Pins flattern, dadurch kommt
es zu kurzen Unterspannungen, die die BOD triggern. Normalerweise müßte
das auf dem Oszi aber zu sehen sein, versuch mal, direkt an den Pins vom
Chip zu messen. Ansonsten kanns noch sein, daß nach außen alles okay
scheint, die erwähnten Unterspannungen aber innerhalb des AVR auftreten
und die interne Logik durcheinanderbringen. Warum schließt Du die
offenen Pins nicht einfach nach Masse ab?
Hi Dennis,
die Spannungen sind alle in einem Abstand von weniger als 5mm vom Pin
des Mega88 gemessen. DSO macht 1GS und hat eine 100MHz Bandbreite, ein
Singleshot mit Triggerlevel 4,9V löst über Stunden nicht aus.
Tja, der Abschluss der Pins ist in der Testkonfiguration nur über die
Pullup's möglich, das hatte ich als ausreichend angesehen.
Die Frage bleibt trotzdem, warum löst der brownout hier schon aus. Mit
der Einstellung sollte mein system zuverlässiger werden, jetzt habe ich
das Gegenteil errreicht.
Es gibt doch ein Register, in dem die letzte Reset-Quelle angegeben
wird, sofern es sich nicht Power-On-Reset handelt. Da sollte man
eigentlich feststellen können, ob BOD für den letzten Reset
verantwortlich war.
Das Register muß man natürlich zum Programmstart auslesen (kann es aber
eigentlich auch später machen...).
MCUSR ist das Register. Ich kann die BOD-Probleme bei einem Mega168
nachvollziehen, der ja zum 88er weitestgehend kompatibel ist. Ich hatte
dazu auch schon einmal einen Thread eröffnet - es gab aber niemanden,
der darauf eine Antwort hatte oder dies gar schon einmal erlebt hatte.
Bei meinen Exemplaren war auch mit dem Oszi kein "Loch" in der
Versorgungspannung zu sehen, trotzdem resetete der Controller in
unregelmäßigen Abständen über BrownOut. Nur eine Änderung der
Ansteuerung der angeschlossenen Peripherie brachte Abhilfe (oder aber
das Ausschalten des BrownOut-Detektors). Auf jeden Fall scheint sich der
Controller nicht auf die im Datenblatt angegebenen Mindestpulsbreiten
für einen BrownOut-Reset zu halten.
Das der Mega88 tatsächlich einen brownout reset macht, ist unstrittig
und überprüfbar. Was jetzt nach vielen Messungen fest steht, ist das das
Problem nur Auftritt, wenn bei mir folgende Bedingungen zusammen
herschen:
1. ADC sampelt ADC0 und ADC1 zyklisch alle 0,5mS (jeweils 8-fach
oversampling)
2. Die Spannung am AVCC differiert mehr als ca. 180mV von VCC nach unten
3. ungenutzte Pins sind nur mit dem interen PullUp's beschaltet.
Damit sieht es so aus, als ob die zuverlässige Funktion des brown out
detector stark vom ADC und der AVCC abhängt.
Was bei mir jetzt durch ausprobieren noch herauskam ist, dass das Setzen
des DIDR0 auf $3B das Problem quasi verschwinden lässt. Leider änderen
sich durch diesen Registereintrag, der die digitalen Treiber von den
analog genutzten Eingängen trennt, auch die Spannungseinbrüche auf der
AVCC sodass letztlich kein eindeutiger Schluss auf die Ursache möglich
ist.
Aber was bleibt ist der Verdacht, dass der Chip leider wenig robust auf
Pegel reagiert, die laut Spezifikation durchaus zulässig sind.
Insbesondere AVCC scheint kritisch. Betreibt man den Chip übrigens mit
5,2V VCC, ist das Problem auch nicht mehr sichtbar.
> Am Avcc habe ich stellenweise> einen kurzen Einbruch von 200mV gemessen. (liegt über 100 Ohms an Vcc> und 220nF an Masse) Ist nicht schön, aber laut Datenblatt innerhalb der> zulässigen Grenzen von 0,3V.
Warum verwendest du überhaupt 100 Ohm?
In Datenblatt(seite 252) steht doch etwas anderes, nämlich 10µH und
100n.
Da hast du recht, aber das habe ich als Vorschlag gewertet, und nicht
als Notwendigkeit.
100 Ohm sind zum einen billiger und kleiner als 10uH. Zum Anderen wurden
auf dem Prototypen an AVCC nie Ströme über 0,2mA gemessen. Damit ergibt
sich ein Spannungsabfall über den 100 Ohm von 20mV. Die 300mV sind also
mit 15facher Reserve weit genug weg.
Die Filterwirkung ist mit meiner Beschaltung bei mittleren Frequenzen
eher besser, als mit 10uH und 100nF.
>die Spannungen sind alle in einem Abstand von weniger als 5mm vom Pin>des Mega88 gemessen.
Also sowohl GND und VCC am Atmel abgenommen? Nur VCC am Atmel und GND
irgendwo anders auf der LP abgenommen könnte zu anderen Ergebnissen
führen (Ground bounce). Die Versorgung ist ja auch entsprechend mit
100nF am AVR abgeblockt?
Ich abe zwar noch nicht mit mega88 gearbeitet, nur mit 32,64,128er aber
da habe ich unbenutze Pins irgendwohin gepullt - braucht nur Strom und
Bauteile/Platz.