Forum: Mikrocontroller und Digitale Elektronik Atmega644 Frequenz auf PORT PINS mit gelöschtem Flash Startfehler


von Simon S. (zen_chaos)


Lesenswert?

Hallo,

folgenden Sachverhalt kann ich mir nicht erklären und hoffe deswegen 
hier Hilfe zu finden.

Hardware:

48 Volt werden an einen LT1641-2 Hot-Swap-Controller geliefert der 
wiederum einen TPS54160DGQR (Abwärts(-Wandler) Buck) speist welcher 5 
Volt generiert die dann mit dem Linear Regler REG1117-3.3 auf 3.3 Volt 
zum Atmega644 gelangen.
Der reset des 644 hängt mit 10k an 3.3V.

Jetzt zum Phänomen.
Ich lösche über isp den flash und schalte die 48V hart ein dann liegen 
auf einmal an PortD 0-6 verschiedene Frequenzen an mit 3.3V Pegel.
Wenn ich jetzt kurz den Reset auf Masse lege sind die Frequenzen wieder 
weg.
Dreh ich die Spannung langsam hoch sind auch keine Frequenzen da also 
das normale verhalten eines gelöschten Atmega.
Das Jtag fuse ist aus und es ist egal ob ich internen oder externen 
Oszillator verwende. Jedoch ändert sich mit dem Oscillator auch die 
Frequenz an PortD.
Das verhalten kann unterdrückt werden wenn ich am reset einen 25uF 
Kondensator nach Masse hänge (einfach in den ISP header).
Wenn ich das Flash lese nach dem löschen und es mit dem nach dem 
Frequenz-Erzeugen Vergleiche ist kein unterschied in der Datei.
Ich habe ein zweites pcb was das selbe Phänomen aufweist.
Ich habe alle Spannungen Oszilloskopiert und kann keine Störungen 
ausfindig machen. Wenn der Controller einmal startet laufen die 
Programme ganz normal.
Das müsste ja ein EMV problem sein ?! Wohin springt der Atmega644 nach 
diesem Störer ohne Programm ??

Vielen Dank und beste Grüße

von Markus H. (traumflug)


Lesenswert?

Simon S. schrieb:
> Wohin springt der Atmega644 nach
> diesem Störer ohne Programm ??

Ein leerer ATmega mit 64k Flash läuft immer im Kreis herum. 0xFF is 
No-Op, da läuft er früher oder später in den Bootloader, falls 
vorhanden, oder per Überlauf des Programmzählers wieder zum Anfang.

Das bedeutet allerdings nicht, dass alle Peripherie (Timer, UART, etc.) 
abgeschaltet ist. Wenn er beim starten aufgrund zu geringer 
Versorgungsspannung verrückt spielt, kann alles Mögliche passieren. Den 
Brown-Out-Detektor per Fuses auf 2,7V zu setzen sollte da Abhilfe 
schaffen.

von Simon S. (zen_chaos)


Lesenswert?

Vielen Dank für die Antwort.
Heißt das also:
Wenn ein Leerer Atmega, anfangs eine zu geringe Spannung bekommt und 
daraufhin verrückt spielt, das er sich wenn die Spannung wieder im 
Normalen Bereich befindet, sich trotzdem nicht mehr einkriegt ??
Brown Out hatte ich auf 1.8V.

Den Bootloader benötige ich ja nicht. Der Bootflashsize in der 
einstellung ist dann egal ?
Kann er in diesem Bootflash irgendwie hängen ? Der müßte doch auch FF 
sein ?!
Beim Flash auslesen ist alles FF.

Bis jetzt war es egal wie langsam die Spannung anstieg ich hatte noch 
nie so ein Problem.
Evtl liegt es an den Atmega644 vlt ham die nen Bug??

Die Peripherie wird doch immer durch Konfiguration aktiviert und ist 
default immer aus ? Also FF->NOP dann aus.

Kann es nicht sein das durch einen EMV impuls sich der Flash selbst 
beschreibt und wenn ich den dann auslese wird der vom reset wieder 
zurückgesetzt.

Ich würde es ja den Lesern gerne vorführen da das alles echt abstrus 
klingt. Aber an einem leeren Atmega ein schönes 24kHz Rechteck zu messen 
ist doch irgendwie ?? NE !!

von Markus H. (traumflug)


Lesenswert?

Simon S. schrieb:
> Wenn ein Leerer Atmega, anfangs eine zu geringe Spannung bekommt und
> daraufhin verrückt spielt, das er sich wenn die Spannung wieder im
> Normalen Bereich befindet, sich trotzdem nicht mehr einkriegt ??

Bei Unterspannung kann alles Mögliche passieren. Inklusive 
Flash-Selbstprogrammierung.

Bei einem Projekt von mir hat sich ohne BOD des Öfteren die Firmware 
beim ausschalten zerschossen. Die musste man in manchen Umgebungen 
(unterschiedliches EMV) nach jedem zweiten Einschalten neu 
programmieren, in anderen Umgebungen ging es hunderte Male gut.

> Den Bootloader benötige ich ja nicht. Der Bootflashsize in der
> einstellung ist dann egal ?

Ist ein Bootloader in den Fuses programmiert, springt er nach dem Reset 
zum Bootloader. Von da per PC-Überlauf zur Adresse 0x00, also zum 
Reset-Vektor. Direkt zum Reset-Vektor ist besser.

Ich finde diese Untersuchungen auch ein bisschen müssig, denn irgendwann 
wird der Chip ja mal eine Firmware bekommen. Hat er die, weiss man auch, 
was wo läuft. Mikrocontroller ohne Programm sind irgendwie so redundant 
...

von Simon S. (zen_chaos)


Lesenswert?

Danke Markus,

das mit dem leeren Programm habe ich nur gemacht um zu zeigen das es 
nicht an einem Programmierfehler liegt.
Wenn ich ein Programm drauf-spiele kommt es anfangs zu den selben 
Fehlern, nach einiger Zeit läuft dann das Prog normal.

Das einzige was den normalen zustand dann sofort herstellt ist ein 
reset.

Bei der Flash Selbstprogrammierung müsste doch das Programm bei erneutem 
auslesen Unterschiede aufweisen.

Oder kann die EMV Störung den Controller in einen undefinierbaren 
zustand bringen der nach einem reset wieder weg ist.

Zusätzlich ist mir aufgefallen solange ich den AVR ISP MK|| an dem Board 
angeschlossen habe ist der Fehler nicht aufgetreten.

Wie konntest du das mit dem zerschossenen Programm den feststellen ?
Ging es einfach nicht und nach Neuprogrammierung lief es wieder.

Würdest du den reset zusätzlich mit einem Kondensator filtern z.b 10nF 
und 10k nach Vcc ?

von spess53 (Gast)


Lesenswert?

Hi

>das mit dem leeren Programm habe ich nur gemacht um zu zeigen das es
>nicht an einem Programmierfehler liegt.
>Wenn ich ein Programm drauf-spiele kommt es anfangs zu den selben
>Fehlern, nach einiger Zeit läuft dann das Prog normal.

An einem leeren AVR rührt sich an den Pins nichts.

>Bei der Flash Selbstprogrammierung müsste doch das Programm bei erneutem
>auslesen Unterschiede aufweisen.

Ja. Allerdings ist mir in 17 Jahren mit AVRs so etwas nicht vorgekommen.

>Oder kann die EMV Störung den Controller in einen undefinierbaren
>zustand bringen der nach einem reset wieder weg ist.

Welche Störung durch EMV hast du denn?

>Zusätzlich ist mir aufgefallen solange ich den AVR ISP MK|| an dem Board
>angeschlossen habe ist der Fehler nicht aufgetreten.

Das deutet darauf hin, das deine Hardware eine Macke hat.

Um welchen ATMega644 handelt es sich überhaupt?

MfG Spess

von Peter D. (peda)


Lesenswert?

Vielleicht ist ein Fehler in der Schaltung oder im Layout und ein 48V 
Puls kommt irgendwie direkt auf den MC.

Klemm mal den Regler und die 48V ab und schaltet direkt die 5V ein und 
aus.

Was MCs garnicht mögen, wenn ein IO-Pin noch vor dem VCC-Pin Spannung 
kriegt.
VCC muß immer der erste und der letzte Pin sein, der Spannung sieht.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Peter Dannegger schrieb:
> Was MCs garnicht mögen, wenn ein IO-Pin noch vor dem VCC-Pin Spannung
> kriegt.

grundsätzlich richtig und unterschreibe ich aber ein AVR macht wohl 
gerne eine Ausnahme durch seine interne Schutzbeschaltung die alle Ports 
über Dioden nach VCC und GND ableitet

http://wiki.neo-guerillaz.de/mediawiki/images/thumb/e/eb/Protpin.jpg/400px-Protpin.jpg

Peter Dannegger schrieb:
> VCC muß immer der erste und der letzte Pin sein, der Spannung sieht.

Ausnahmen bestätigen die Regel:

Die Leerlaufspannung ist hoch genug um einen Kondi aufzuladen und den MC 
arbeiten zu lassen, der Strom ist gering genug um nix zu zerstören, 
funktioniert offensichtlich:

http://www.doc-diy.net/photo/hdr-jack/

: Bearbeitet durch User
von Simon S. (zen_chaos)


Lesenswert?

Hallo,
es handelt sich um ATMEGA644-20AU.

Ich wollte den BOD jetzt auf 2.7V stellen da lief das Programm nicht 
mehr. Also wieder auf 1,8 Volt dann gings. Die Betriebspannung an VCC 
ist 3,2V jedoch wenn ich ein Pin High setze unbelastet kommt nur 2.69V 
an.
Wahrscheinlich sind die Frequenzen durch dauernde interne reset's 
zustande gekommen ?! Komisch nur das das zum teil so stabil lief.
Wenn ich jetzt ein externes Netzteil direkt am MicroC hab dann ist die 
pin Spannung immer ca. 0,6 Volt niedriger. Bei 3V zieht er dann so 20mA 
...

Also der hat dann doch ein schlag weg ?! Wohin verschwinden nur die 0,6 
Volt?

von Simon S. (zen_chaos)


Lesenswert?

Hi,
so hab jetzt den 644 runtergföhnt und nen anderen drauf.
Um ihn nicht gleich zu zerballern hab ich die Betriebspannung langsam
direckt an Vcc hochgedreht. Und trotzdem ist die Pin High spannung nur 
auf 2.2V bei 3V Vcc. Hä ?!

von Martin S. (led_martin)


Lesenswert?

Resettet der veilleicht immernoch andauernd, und die 2,2V sind 
eigentlich eine ungewollte PWM? Gerade die ATmegas haben ja recht starke 
Ports, und ziehen Die, auch unter Last, recht nah an die 
Versorgungsspannung. Oder misst Du an einem Port-Pin, der 
fälschlicherweise doch ein Eingang ist, und dort nur der interne Pull-Up 
anliegt?

Mit freundlichen Grüßen - Martin

von holger (Gast)


Lesenswert?

>Wohin verschwinden nur die 0,6 Volt?

AVCC angeschlossen sowie ALLE GND?

von c-hater (Gast)


Lesenswert?

spess53 schrieb:

>>Bei der Flash Selbstprogrammierung müsste doch das Programm bei erneutem
>>auslesen Unterschiede aufweisen.
>
> Ja. Allerdings ist mir in 17 Jahren mit AVRs so etwas nicht vorgekommen.

Ich habe so etwas schon beobachten können. Die Wahrscheinlichkeit dafür 
steigt rasant, wenn der Code regulär Code zum Flashen enthält, wie es 
naturgemäß bei vorhandenen Bootloadern der Fall ist.

Aber auch die vollständige Abwesenheit solchen Codes schützt nicht 
davor, daß es passiert.

Und wenn dir das noch niemals passiert ist, dann wird es vielleicht 
Zeit, daß du es mal provozierst, um eine Vorstellung davon zu bekommen, 
wie relevant das Problem ist.

Und die Provokation ist ganz einfach: BOD lahmlegen und verschiedene 
Kurven des Spannungsabfalls gezielt durchlaufen. Natürlich mit 
entsprechendem Testprogramm im Client, welches immer nur eins macht: 
Checksum über den gesamten Flash und Aussenden dieser CS über eine 
Debug-Schnittstelle.

Du wirst dich erschrecken, wie wahrscheinlich Flash-Korruption werden 
kann. Man kann das über die Spannungskurve fast so genau steuern, wie 
ein Virus seinen Schadcode in den Stack von PC-Programmen spreaden kann. 
Ich fand es jedenfalls ziemlich erschreckend.

Andererseits wird es dich erfreuen, daß der BOD seinen Job i.A sehr gut 
tut. Jedem, der unerklärliche Probleme hat, kann also als erste Maßnahme 
nur die Aktivierung von selbigem mit sinnvoller Triggerschwelle 
empfohlen werden...

von Joachim B. (jar)


Lesenswert?

Simon S. schrieb:
> Ich wollte den BOD jetzt auf 2.7V stellen da lief das Programm nicht
> mehr. Also wieder auf 1,8 Volt dann gings.

soweit ich weiss doch nur die P Typen! und du hast keinen.

Peter Dannegger schrieb:
> Vielleicht ist ein Fehler in der Schaltung oder im Layout

das wohl eher oder falsch gefust

Simon S. schrieb:
> so hab jetzt den 644 runtergföhnt und nen anderen drauf.

P oder nicht, welche Arbeitsfrequenz? alle VCC nah abgeblockt?

von spess53 (Gast)


Lesenswert?

Hi

>soweit ich weiss doch nur die P Typen! und du hast keinen.

Der ATMega644 hat die BODLEVEL 1.8, 2.7 und 4.3V.

MfG Spess

von Joachim B. (jar)


Lesenswert?

spess53 schrieb:
>>soweit ich weiss doch nur die P Typen! und du hast keinen.
>
> Der ATMega644 hat die BODLEVEL 1.8, 2.7 und 4.3V.

und das reicht um das fehlende P zu erklären?

OK darüber streite ich ja nicht, mir war so nur die Erkärung von P Typen 
in Erinnerung......

http://www.mikrocontroller.net/articles/AVR_Typen

L/V   „Low-Voltage“: Speziell für niedrigere Taktraten (8 bzw. 10 MHz) 
sowie niedrigere Eingangsspannungen (1,8 bzw. 2,7 V) selektierte 
Bausteine

von Markus H. (traumflug)


Lesenswert?

Simon S. schrieb:
> Wie konntest du das mit dem zerschossenen Programm den feststellen ?
> Ging es einfach nicht und nach Neuprogrammierung lief es wieder.

Genau. Einen habe ich auch mal ausgelesen, da waren 1 oder 2 kB 
verändert.

> Würdest du den reset zusätzlich mit einem Kondensator filtern z.b 10nF
> und 10k nach Vcc ?

Da ich selber nicht gerade ein Experte in Analog-Elektronik bin, gucke 
ich mir solche Sachen einfach bei bewährten Boards an, z.B. bei einem 
Arduino. Der ist ja Open Source.

von Markus H. (traumflug)


Lesenswert?

Simon S. schrieb:
> Ich wollte den BOD jetzt auf 2.7V stellen da lief das Programm nicht
> mehr.

Das würde ich als ein deutliches Zeichen einer unsauberen 
Versorgungsspannung werten.

von Markus H. (traumflug)


Lesenswert?

Joachim B. schrieb:
> mir war so nur die Erkärung von P Typen
> in Erinnerung......
>
> http://www.mikrocontroller.net/articles/AVR_Typen
>
> L/V   „Low-Voltage“:

Warum guckst Du in dieser Tabelle bei L/V und nicht bei P/PA, wenn Du 
nach dem Sinn des "P" suchst?

Die P-Varianten sind Stromspar-Varianten, verbrauchen ein paar Milliwatt 
weniger. Ansonsten sind die genau gleich.

von Joachim B. (jar)


Lesenswert?

Markus H. schrieb:
> Warum guckst Du in dieser Tabelle bei L/V und nicht bei P/PA, wenn Du
> nach dem Sinn des "P" suchst?

das ist dein Text, ich habe natürlich die ganze Tabelle geschaut und P 
ist picopower mit weniger Stromaufnahme und sagt noch nix über 1,8V 
Verwendbarkeit, das gilt erst ab L/V wobei die das wohl nicht so genau 
nehmen sonst hätte die Bezeichnung ja

Simon S. schrieb:
> Hallo,
> es handelt sich um ATMEGA644-20AU.

+ L/V lauten müssen wenn man BOD auf 1,8V einstellen kann

oder der TO verschweigt was.

von spess53 (Gast)


Lesenswert?

Hi

>+ L/V lauten müssen wenn man BOD auf 1,8V einstellen kann

>oder der TO verschweigt was.

Es gibt/gab den ATMega644, den ATMega644P, den ATMega644A und den 
ATMega644PA. Und alle haben die o.g. Bodlevel. Siehe

http://www.atmel.com/products/microcontrollers/avr/megaavr.aspx

MfG Spess

von Joachim B. (jar)


Lesenswert?

spess53 schrieb:
> Es gibt/gab den ATMega644, den ATMega644P, den ATMega644A und den
> ATMega644PA. Und alle haben die o.g. Bodlevel.

ist klar aber müssten die dann nicht den Anhang L/V haben?

siehe:
http://www.atmel.com/Images/doc2593.pdf Seite 318
Figure 26-1. Maximum Frequency vs. VCC, ATmega644 V

: Bearbeitet durch User
von Simon S. (zen_chaos)


Lesenswert?

Hallo Leute Sorry,

nach stundenlangem suchen und messen bis kurz zur Verzweiflung hab ich 
jetzt den Fehler!!

An alle die auf eine unsaubere Versorgung getippt haben kann ich nur 
sagen "Ihr hattet recht".

Da ich den Ad Wandler nicht benötigte ging AVCC über einen Kondensator 
nach Masse dann über den Ferrit nach VCC. Den Ferrit ließ ich weg !! 
ALso hat sich der AVCC über seine Schutzdiode auf ca 2,6V aufgeladen.
(sihe oben  Joachim B.)
Anscheinend hängt die gesamte reset Logic auch an AVCC.

AVCC ist jetzt natürlich 'Weak' und dadurch anfällig !!

Wodurch dann dieses Frequenz erzeugen an den anderen Ports hervorgerufen 
wird.

Und ich hatte ja immer diese mysteriösen 2.2V am PortA bei 3V Vcc.
Sobald ich den Port belastet hatte brachen die dann auch relativ schnell 
ein auf 2.0. PortA wird nämlich auch von AVCC gespeist !!

Für die Zukunft zumindest gut zu wissen:
1)
if ->[PORT 'High' < ( VCC-supply - 0,6) ]
than -> VccPort is NOT CONNECTED  and uses the internal protection 
diodes.
2)
@ Atmega644 -> [Reset & BOD Logic & PortA & AD]supplyed from AVCC.
and -> AVCC must externally connected to VCC

Laut Datenblatt seite 10:
AVCC:
AVCC is the supply voltage pin for Port F and the A/D Converter.
It should be externally connected
to VCC.

ALso sollte(should) ist meiner meinung nach hier absolut falsch!!
Genauso wie Port F der am 644 nicht existiert !! Es ist Port A.

Beim Atmega1280 steht der selbe text und der hat Port F also nen Copy 
Paste Fehler

Vlt hilft es jemanden ?!

Vielen Dank an alle.

Mfg Simon

von Paul B. (paul_baumann)


Lesenswert?

Simon S. schrieb:
> ALso sollte(should) ist meiner meinung nach hier absolut falsch!!

Ich habe die Erfahrung gemacht, daß "sollte" in diesen Daten*büchern*
immer "muß" ist, damit es funktioniert.

*Ja, Bücher, denn Datenblatt ist m.E.n. bei mehreren Hundert Seiten der 
falsche Begriff

MfG Paul

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.