Forum: Mikrocontroller und Digitale Elektronik ATMega128 startet nicht bei Kontakt an UART Pins


von Christina A. (christina_a)


Lesenswert?

Hallo,

mein ATMega128 startet einfach nicht wenn etwas in den UART PINs 
"passiert".

An den PINs darf kein USBtoUART, Raspberry GND, VCC oder sonstiges 
anliegen. Nichteinmal als I/O PINs lassen diese nicht nutzen.

Nur wenn die PINs Frei sind startet der Controller.

Es ist auch egal ob man UART oder I/O nutzen möchte... Erst wenn der 
Controller in der Hauptschleife läuft kann man dort etwas anschließen.

Kann sich/mir das jemand erklären?

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


Lesenswert?

Da Äonen von Nutzern die UART am ATmega128 bereits benutzt haben, lässt 
es sich eigentlich ausschließen, dass diese per se kaputt ist.

"Startet nicht" ruft natürlich sofort die Erinnerung an die leidige 
M103C-Fuse in Erinnerung. Hast du die gelöscht?

von Christina A. (christina_a)


Lesenswert?

Ja...

Fuses OK (E:FF, H:D8, L:7F)

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Christina A. schrieb:
> Kann sich/mir das jemand erklären?

Die Spannung darf an (fast) allen Pins maximal 0,5V höher sein, als die 
Versorgungsspannung. Wenn du diese Bedingung nicht einhalten kannst, 
musst du mit Fehlfunktionen leben.

UART Schnittstellen haben im Ruhezustand HIGH Pegel. Wenn dein 
Mikrocontroller keine Stromversorgung hat aber ein UART Signal anliegt, 
ist das eindeutig außerhalb dieser Anforderung.

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


Lesenswert?

Christina A. schrieb:
> Ja...
>
> Fuses OK (E:FF, H:D8, L:7F)

Du hast einen Bootloader aktiviert. Spuckt der vielleicht in die Suppe, 
wenn da was dran ist an den Pins?

von Christina A. (christina_a)


Lesenswert?

Komischerweise ist es ja so...

Ich habe den Bootloader drauf und alle funktioniert wunderbar...

Ich kann Flashen etc.. Beim Reset startet der Bootloader usw...

Dann Flashe ich das Hauptprogramm.. und sobald dann etwas am UART hängt 
startet er einfach nicht...

Auch wenn ich den UART unkonfiguriert lasse.. Ich kann die PINs auch auf 
High oder LOW setzen... hilft nichts....

Nachdem der AVR aber dann in der main ist.. kann ich per UART 
kommunizieren...

von Andre (Gast)


Lesenswert?

Ist die Schaltung sauber? (Ordentliche Versorgung, Kerkos, alle VCC Pins 
versorgt, kein Signal vor VCC anliegend)

Es klingt soweit nach einem Softwareproblem. Vielleicht irgendein 
Interrupt aktiv, ggf. Überreste vom Bootloader?

von Anja (Gast)


Lesenswert?

Christina A. schrieb:
> Kann sich/mir das jemand erklären?

Die Schaltung wird über die UART Pins und die Eingangsschutzdioden im 
ATMEGA dauerversorgt. Dadurch passiert kein ordentlicher Reset.

Eventuell reicht ein Serienwiderstand in der UART-Leitung.
Ansonsten gibt es Puffer wie z.B. CD4050 die anstelle 
Eingangsschutzdioden Z-Dioden verwenden. Oder ggf. ein Pegelwandler mit 
BSS138.

Gruß Anja

von c-hater (Gast)


Lesenswert?

Anja schrieb:

> Die Schaltung wird über die UART Pins und die Eingangsschutzdioden im
> ATMEGA dauerversorgt. Dadurch passiert kein ordentlicher Reset.

So ein Blödsinn. Selbst wenn die Speisung nur vollkommen parasitär ist, 
wenn man Reset auf Low zieht, dann gibt auch einen Reset. Fraglich ist 
nur, ob das Teil danach ordentlich wieder hoch kommt.

Allerdings: wenn ein Bootloader beteiligt ist, dann wird der Reset ja 
i.d.R. nicht über den Reset-Pin ausgelöst (sondern z.B. über den 
Watchdog), möglicherweise gibt es sogar nichtmal einen echten Reset. 
Hängt also alles vom Bootloader ab.

Der kann beliebig Scheiße programmiert sein. Also:

@Christina (vermutlich sowieso nur ein Fake)
Zeig' den verwendeten Bootloader!

von Christina (Gast)


Lesenswert?


von Christina A. (christina_a)


Lesenswert?

Keiner eine Idee?

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


Lesenswert?

Christina A. schrieb:
> Keiner eine Idee?

Ist bisschen umfangreich, um das zu erraten.

JTAG hast du per Fuse ausgeschaltet, ansonsten könnte man da mal mit'm 
Debugger drauf gehen. (Für einen ATmega128 würde ja sogar so'n uralter 
JTAGICE-Clone genügen.)

Außerdem fehlt der Code vom Bootloader, sodass nicht klar ist, ob der 
das System in einem „halbseidenen“ Zustand hinterlässt.

0xF000 ist für einen ATmega128 übrigens keine gültige Booloader-Adresse.

Es wäre sinnvoll, wenn du dein Projekt konsistent hälst. Wenn zu 
twimaster.c ein i2cmaster.h gehört, dann sucht man schon ein wenig. 
Außerdem solltest du dich entscheiden, ob du F_CPU im Makefile oder in 
sytem.h definierst, aber nicht in beiden.

von Christina (Gast)


Lesenswert?

Problem wurde die Nacht behoben.

Eine elektronische Verbindung zwischen Duko (SDA) und Leiterbahnen (TxD) 
war das Problem.

Die Duko ist so nah das die Aura nicht ganz die elektrische Verbindung 
trennt (0.1mm).

Einmal mit dem Cuttermesser entlang der Leiterbahnen und das Problem war 
behoben.

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


Lesenswert?

Christina schrieb:
> Die Duko ist so nah das die Aura nicht ganz die elektrische Verbindung
> trennt (0.1mm).

Und das hat der DRC nicht bemerkt? Der Fertiger auch nicht?

Hmm.

Schön, dass es geht.

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.