PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C "Sklave" mit ATTiny 2313



Reissdorf
14.04.2014, 20:48
Hallo zusammen,
ich möchte mir eine Platine zum Experimentieren mit dem ATTiny 2313 machen und habe dazu einen Schaltplan entworfen. Es soll nicht nur der ATTiny drauf sein, sondern auch zwei Taster und ein paar LEDs. Damit soll das ganze dann als Porterweiterung und/oder als Co-Controller verwendet werden können. Die einzelnen Pins sollen über Buchsenleisten ebenfalls erreichbar sein, so sind weitere Versuchsaufbauten möglich.

Was haltet Ihr von dem Schaltplan? Vor allem zu den Widerstände an den beiden I2C-Buchsen würde mich eure Meinung interessieren!

LG, Timo

oderlachs
15.04.2014, 09:02
Hallo Timo !

Nun kann ich meinen schlechten Augen sei wohl gedankt, keine Widerstände bzw I2C Buchsen erkennen so dierekt in dem Foto/Schaltung. Was mir auf Anhieb auffiel waren fehlende Vorwiderstände bei den LEDs, oder hast Du diese dann in der Anschaltung/Verdrahtung vorgesehen ?

Gruss
Gerhard

Nachtrag: habe jetzt da was "Widerstand" wohl erkennen können, aber so richtig nich ...nee, nee,nee iss nix für die schlechten Augen meines Vaters Sohn's ;)

Also ich habe an SDA/SCL je einen 4,7K gegen +5V geschaltet, bei geringer Entfernung geht auch ein 10k, was meine Erfahrungen so sagen.

HannoHupmann
15.04.2014, 09:04
Die Taster müssen anders angeschlossen werden und auch die Widerstände der SDA und SCL Leitung müssen anders verbunden werden.

Taster: Pullup oder Pulldown (etwas Stromsparender) ist egal, aber das Schaltbild sollte so aussehen: http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand
Nur so lässt sich ein sauberer High und Low Pegel erreichen. Deine Schaltung wird gar nicht funktionieren, denn sieh zieht den I/O Kanal von GND über einen Widerstand erneut auf GND! (kommt auf die interne Verschaltung des µC an).

I²C: Pullup d.h. sie gehen auf VCC und sind nicht seriell in die Datenleitung integriert (das würde nur eine Dämpfung bewirken). Siehe i2c Referenzdokumente

Reissdorf
15.04.2014, 11:55
Danke für die Antworten. Das mit der Bildgröße tut mir leid, aber die maximale Breite für Anhänge ist hier 800 Pixel und somit wird das Bild "geschrumpft". Ich habe das Bild unter diesem Link abgelegt: http://timogruss.de/wordpress/wp-content/uploads/2014/04/Schaltplan_I2C-Slave2.png

Jetzt erkläre ich aber mal kurz, was es mit den Widerständen auf sich hat:

Was die Taster betrifft, so sind das keine missglückten Pullup-Widerstände, sondern eher Strombegrenzer. Externe Pullups habe ich hier nicht verwendet, da ich die internen Pullups des ATTiny benutzen möchte. Stellt euch vor, es werden die Pins Int0 und Int1 extern über die Buchsenleiste beschaltet, dann könnte es ja sein, dass auf Int0 Vcc liegt. Drücke ich jetzt versehentlich den Taster S1, würde dies einen Kurzschluss verursachen. R2 begrenzt den Strom in diesem Fall auf ca. 30mA.

Die Widerstände zwischen den I2C-Leitungen sind auch keine Pullups. Diese liegen auf dem Hauptmodul (da habe ich 10k Widerstände drauf) und werden dem Bus von dort zugeschaltet. Die hier in Reihe geschalteten Widerstände sind eher als Schutz und "Trennung" zwischen Busleitungen und Ein-/Ausgängen des ATTiny zu verstehen. Dabei muss ich aber zugeben, dass diese Idee nicht auf meinem Mist gewachsen ist und ich auch schon Schaltpläne ohne diese Widerstände gesehen habe.

Bei den LEDs habe ich mir ein Symbol gezeichnet für Widerstandsnetzwerke. Das sollte ich besser anders machen, eher als Widerstände die nebeneinander angeordnet sind und einen Kasten drumherum haben. Das wäre wesentlich besser zu verstehen! Aber mit anderen Worten, die haben alle drei einen Vorwiderstand von 1k.

Macht der Plan mit diesen Info in euren Augen mehr Sinn? Wo seht ihr noch Verbesserungspotential?

Danke nochmals, Timo

HannoHupmann
16.04.2014, 10:16
Ich bleib dabei und würde die Taster trotzdem über PullUp oder Pulldown verschalten, das ergibt einfach schönere Pegel am I/O Eingang. Die Strombegrenzung hat der µC ja schon intern eingebaut.

Als Schutz für den i2c Bus würde man Optokoppler nehmen aber keine Widerstände, die verfälschen das Signal und dann ist die Flanke nicht mehr so schön. Auch hier halte ich nicht viel davon. Meine bisherigen Boards haben nie derartiges gebraucht und überleben bisher sehr gut.

Die Resetschaltung sieht mir auch ein wenig komisch aus, aber da habe ich jetzt nicht mehr die Standardlösung vor Augen.

dussel07
16.04.2014, 19:15
Hier mal ein Ideenspender - allerdings für den Attiny26

Mit Schaltplänen habe ich es nicht so, aber aus dem Layout kann man ja auch Anschaltung erkennen.27999
Falls Jemand das Layout downloaden möchte? (http://daselektronikerforum.de/viewtopic.php?f=27&t=2496&start=0&sid=3a228c0bfb923eac1b664db254e877ec)
Ziemlich am Ende ist das endgültige Layout -

HannoHupmann
17.04.2014, 07:07
Aus dem Layout schon die Funktionsweise zu erkennen finde ich ziemlich schwierig ;-). Aber es ist wunderschön layoutet, diese Leiterbahnenführung lässt großes künstlerische Talent erkennen. :-D

dussel07
17.04.2014, 18:38
:cheesy:
:cheesy:

Reissdorf
18.04.2014, 14:52
Erstmal Danke für die vielen Tipps. Ich habe versucht diese in meinen neuen Schaltplan einfließen zu lassen. Schaut mal in die angehängte PDF-Datei.
Die Taster haben jetzt Pulldowns und der I2C-Bus hängt direkt am ATTiny ohne die Widerstände. Was die Reset-Schaltung angeht, so war das ziemlich dämlich. Ich hab den Taster komplett vergessen ;) Der ist aber jetzt mit auf dem Board.
Darüber hinaus habe ich auch mal einen Entwurf für eine entsprechende Leiterplatte gemacht. Es soll ca. 40x50mm groß sein.

Der ATTiny 2313 hat einen 20MHz Quarz und eine 6-poligen ISP-Wannensteckerbuchse. Außerdem sind 3 LEDs und 2 Taster auf dem Board (zum Testen und erste kleine Projekte). Jeder Pin des ATTinys ist auf eine Buchsenleiste geführt. Mir war auch noch wichtig zwei I2C-Buchsen auf dem Board zu haben, sodass der Bus zu einem weiteren Modul geführt werden kann.

Über euer Feedback wäre ich echt dankbar.

LG, Timo

oderlachs
18.04.2014, 18:50
Schöne Skitze, aber ich habe die I2C PullUp Widerstände nicht gefunden... auch würde ich die beiden Int-Eingänge nicht voll auf +5V legen, sondern dort 4k7 (für 1mA Strombegenzung) so einfügen..
Ein jeder hat so seine Eigenheiten auch beim Schaltungsentwurf..kann ja durchaus auch falsch mit meiner Theorie liegen, aber bislang habe ich das so gehandelt...

Hoffe ja das ich alles erkannt habe,meine Augen sind nicht die besten bei PDF Betrachtungen

Wünsche viel Spass beim Weiterentwickeln

Frohe Ostern und Gruss

Gerhard

malthy
18.04.2014, 19:56
Nur am Rande: es spricht absolut nichts dagegen einen Pin mit aktiviertem internen pull-up direkt nach Masse zu schalten. Eine eindeutigeres low gibt es nicht. Im offenen Zustand zieht der interne pull-up Widerstand den Pegel dann auf high.

dussel07
18.04.2014, 23:01
Schön kompacktes Board - gefällt mir
aber
die Widerstandswerte für Reset und Pulldown an den Tastern würde ich auf 10k ändern. Ausserdem wird der Platz für die I2C Wannenstecker etwas knapp??
Müssen natürlich nicht sein aber ohne sie sind nur je ein Pin für Gnd und 5V nötig. Pullups für I2C würde ich über Jumper zuschaltbar machen und die LED und Taster nicht direckt mit dem MC verbinden, sondern über Präzisions-Buchsenleisten (die Du ja auch neben dem MC vorgesehen hast?) universell nutzbar machen.
Edit: Habs verstanden - die I2C Stecker sind gewinkelt - -

Klebwax
19.04.2014, 06:49
Wenn man I2C über Kabel führt, sollte man tunlichst vermeiden SCL und SDA auf nebeneinander liegenden Adern zu führen. So vermeidet man Übersprechen. Immer Vcc oder GND dazwischen. Zwei "Reserve-PullUps" als 0805 (oder wenns THT sein soll, stehend) kann man immer unterbringen. Müssen ja nicht bestückt werden. Wobei ich auch schon einen Meter mit den eingebauten PullUps erreicht habe.

MfG Klebwax

Reissdorf
19.04.2014, 12:35
@dussel07: Stimmt, die Widerstandswerte sind mit 1k zu klein. Und das mit den Buchsen ist auch keine schlechte Idee. Muss ich mal drüber nachdenken!!
@Klebwax: Das mit den Leitungen irritiert mich ein wenig. Ich versuche mich an so viele Roboternetz-Spezifikationen zu halten, wie möglich und das die beiden Signale auf den Pins 1 und 3 liegen sollen ist dort so definiert. Hast du denn schon Probleme mit dieser Anordnung gehabt? Aber die Idee mit den Reserve-Pullups finde ich total super. Bei Bedarf bestücken, ansonsten einfach weglassen! So mach ich das! Danke für den Tipp!

dussel07
19.04.2014, 17:26
Am Rande erwähnt:
Sehr gut gemachte Seite, die Du da erstellt hast!!

Klebwax
19.04.2014, 21:27
@Klebwax: Das mit den Leitungen irritiert mich ein wenig. Ich versuche mich an so viele Roboternetz-Spezifikationen zu halten, wie möglich und das die beiden Signale auf den Pins 1 und 3 liegen sollen ist dort so definiert.
Auf die Pins am Stecker kommt es weniger an, es geht um die Anordnung der Leitungen im Kabel und natürlich um die Länge dieses Kabels. Übersprechen ist ein altbekantes Problem und eine Abhilfe ist eine günstige Anordnung der Kabeladern.

Hast du denn schon Probleme mit dieser Anordnung gehabt?
Probleme nicht. Ich hab das mal gemessen: 1m Kabel, SDA und SCL verdrillt, da geht garnichts mehr. Ich hab nicht probiert, wie kurz man das Kabel machen muß, bis das Übersprechen so klein wird, daß man es tollerieren kann. Wenn man aber bei sonst gleichem Aufbau SDA mit GND und SCL mit Vcc (oder SDA mit Vcc und SCL mit GND) verdrillt, sind 5m kein Problem.

MfG Klebwax

Reissdorf
21.04.2014, 23:46
Hallo, ich hoffe Ihr hatte schöne Ostertage!!

Das mit dem Übersprechen finde ich interessant, da ich darüber noch nichts gelesen habe. In diesem Fall handelt es sich um ein Modul, welches mit einem maximal 10cm langen Kabel verbunden wird. Es gibt bereits andere Module und die Kommunikation funktioniert sehr stabil, daher bleibe ich bei der Standard-Anordnung. Aber ich behalte das mal im Hinterkopf, wenn ich größere Entfernungen ausprobiere.

Was meine Schaltung angeht, habe ich die optionalen Pullups als stehende Widerstände drauf. Solange der I2C-Bus schon woanders seinen Pullup hat bleiben die Widerstände weg, ansonsten werden sie bestückt und verlötet. Für einen Jumper zum Zu-/Wegschalten ist leider zuwenig Platz, aber ich glaube, dass es so ganz gut seine Funktion erfüllt. Ach ja, die Pulldowns habe ich nun doch gegen Pullups getauscht. Mir gefällt das so ein wenig besser.

Ich werde mir von diesem Modul ein paar bestellen. Hat jemand Interesse an der ein oder anderen Platine? Ich hab' mal nachgeschaut und der Platinen-Hersteller wird mir 6,5€ pro Leiterplatte (40x50mm, zweilagig, Lötstopp, Positionsdruck, Fräsung) abknöpfen. Die würde ich dann 1:1 weitergeben (auch den Rabatt, wenn es mehr werden).

Alles Gute,
Timo

Reissdorf
29.05.2014, 21:56
So, es gibt ein kleines Update. Die Platinen habe ich noch nicht bestellt. Irgendwie hatte ich das Gefühl, dass es noch nicht so ist, wie es sein sollte. Aber jetzt gefällt es mir viel besser. :)
Im Grunde ist es die gleiche Schaltung, aber 14 Ausgänge werden über eine gewinkelte Stiftleiste herausgeführt, sodass das Board direkt in ein Breadboard gesteckt werden kann. VCC und GND werden dabei direkt mit auf das Board geführt.
Die beiden 10-pol. Buchsen dienen der I2C-Verbindung (und Weiterleitung). Links unten wäre sogar noch etwas Platz für weitere Funktionen/Buchsen.