I2C Teil hängt im Atmega.

OP #2683587
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
Angehängte Dateien:
Gast #2683616
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.
Gast #2683628
>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.
#2683630
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
Gast #2683751
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.