Forum: Mikrocontroller und Digitale Elektronik I2C Teil hängt im Atmega.


von Christoph H. (christoph_b)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe ein ziemlich verzwicktes Problem.
Es geht um einen Atmega 16 und I2C.

Habe 2 identische Platinen. 1 Platine funktioniert wie gewünscht. Bei 
der 2 hängt sich immer der I2C Teil im Atmega auf. Der Rest des Atmegas 
funktioniert. Es lassen sich die Fuse auslesen, programmieren und der 
Timer funktioniert auch noch.

Mit viel Glück klappt die Verbindung über I2C für wenige Sekunden. Meist 
ist aber nach einer halben Sekunde Schluss. Erst nach einem Reset klappt 
es wieder.

Ein Software Problem schließe ich aus da die 1 Platine damit einwandfrei 
funktioniert.
Habe schon alles nachgelötet und zwischen den Pins des Atmegas sauber 
gemacht.

Auserdem. Wie kann sich nur ein Teil des Atmegas aufhängen.

PS: Die Pull UP Widerstande sind 2.7k. Die Leitung zwischen den Atmegas 
ist ca 20cm lang.

Strom kommt über USB. Habe es auch schon über den 7805 probiert. Da ist 
das selbe.

Ist der Atmega schrott?
MFG Christoph

von Tier (Gast)


Lesenswert?

Christoph B. schrieb:
> Habe schon alles nachgelötet und zwischen den Pins des Atmegas sauber
> gemacht.
Manchmal hilft es, eine funktionierende und eine nichtfunktionierende 
Platine nebeneinander vor sich hinzulegen und mit einem Ohm-Meter zu 
vergleichen. Bei jeder Messung sollten die Messleitungen auch vertauscht 
werden. Ein Vergleich aller Lötpunktimpedanzen gegen GND und Vcc wären 
in diesem Fall sicher übertrieben, würden aber in Ausnahmefällen auch zu 
Unterschieden führen, so es welche gibt.

von Tim (Gast)


Lesenswert?

>Ist der Atmega schrott?

Nein, Dein Layout.
Der Quarz ist viel viel zu weit weg.
C8-10 haben bei der Entfernung kaum eine Wirkung.
Von der Masseführung fang ich gar nicht erst an.

Also:
Jedes VCC/AVCC Pin bekommt einen C so nah wie möglich an den Pins.
Der Quarz muss auch direkt an den AVR.
Die 10µF nach dem 7805 können weg, die 100nF näher an die Pins.
Pullups vom I2C sind wo?
AREF an VCC ist gefährlich...

> Auserdem. Wie kann sich nur ein Teil des Atmegas aufhängen.

Vermutlich geräht die Statemaschine vom TWI in einen Zustand den
deine Software nicht kennt und bleibt hängen..
Ich Tippe mal auf 0x00 oder 0xF8.
Und wenn er eine Reset macht hilft MCUCSR.

Versuch mal den interner RC ozillator zu verwenden, vermutlich geht es 
dann.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

die 100nF Kerkos sollten sich auf wenigsten 2 Seiten des AVR verteilen 
und so kurz wie möglich mit den Spannungsversorgungspins verbunden sein. 
So wie du C8..C10 verbunden hast, kannst du sie auch weglassen.

andere Frage: was macht man mit so vielen TSOP's an einer Platine?

Sascha

von Christoph H. (christoph_b)


Lesenswert?

ok danke für die Tipps.
Wie sollte man die Kondensatoren am Quarz auslegen.
C = 2·CL – (CP+CI)
Ich kenne aber CL nicht da ich nicht weiß von welchem Hersteller der 
Quarz kommt. Habe einfach mal 22pF genommen. Ist das zu niedrig??

von Tim (Gast)


Lesenswert?

> Habe einfach mal 22pF genommen. Ist das zu niedrig??

Ein Umfangreiches Thema. Im Prinzip sollten die Cs + die
Kapazitäten der Leiterbahnen gleich CL vom Quarz sein,
sonst stimmt die Frequenz nicht.
In Deinem Layout da oben kannst du die Cs eigentlich Weglassen.
Nimm bei einem brauchbaren Layout 22pF und gut is.

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.