Hallo, ich stelle gerade ein paar Überlegungen an, wie ich einen I2C-Sklaven mit einem Attiny2313 hinbekomme. Dabei stelle ich mir die Frage, wie das in der Praxis mit dem USI funktioniert. Da hängen ja I2C und ISP gleichzeitig dran und ich bin mir nicht sicher, ob es wirklich so einfach sein soll (was die Hardware betrifft) Ich wäre acht froh, wenn ihr euch mal den angehängten Schaltplan anschauen und mir sagen könntet, ob die Hardware so OK ist und wo es noch Verbesserungspotential gibt. LG, Timo
Da Du nie ISP und I2C gleichzeitig nutzt muß der Programmieradapter nur mit der Last auf den I2C-Leitungen klar kommen. Schau Dir mal in http://www.atmel.com/images/atmel-2521-avr-hardware-design-considerations_application-note_avr042.pdf Punkt 3.1.1 (Gilt analog für I2C) an.
Sorry, ich dachte du wolltest I2C und SPI nutzen. I2C und ISP ist kein problem.
@Oliver: Danke für den Link, der war sehr hilfreich. Wenn ich das richtig verstanden habe, dann muss ich einfach 4,7k Widerstande in Reihe zu den I2C Leitungen schalten (siehe Anhang) und dann klappt es, oder? LG, Timo
>Wenn ich das >richtig verstanden habe, dann muss ich einfach 4,7k Widerstande in Reihe >zu den I2C Leitungen schalten (siehe Anhang) und dann klappt es, oder? Nein, dann stimmen deine I2C Pegel nicht mehr. Rechne dir doch einfach mal die Spannung bei Lowpegel aus.
OK, dann mal los! Vcc = 5V I2C Uhigh = 0,7 * Vcc = 3,5V (Minimum) I2C Ulow = 0,3 * Vcc = 1,5V (Minimum) I2C Strom = 3mA (hoffentlich richtig) R = U/I = 1,5V/0,003A = 500 Ohm Ich schließe daraus, dass der Widerstand maximal 500 Ohm groß sein darf, damit der Spannungsabfall den High-Pegel nicht unter 0,7 * Vcc drückt. Wenn das richtig sein sollte, mach ich einen Salto ;) LG, Timo
Nimm doch lieber nen I2C-Bustreiber mit Enable, das funktioniert dann noch in ein paar Jahren zuverlässig.
Hallo Timo, wir haben unseren Hausbus auch mit ATtiny realisiert. Allerdings mit dem 26iger. Lade mal das Handbuch runter (Hardware Band 0 usw. [haus-computer.de] dort unter download), da sind die Schaltpläne drin zum Vergleich für Dich. Wir verwenden allerdings einen modifizierten I2C Bus, wegen der gößeren Reichweite. Die hex-Files für die beiden Anwendungen (Schalten und Messen) gibt es auch unter der Adresse... Ich weiß ja nicht, was Du letztlich machen willst, aber wir sind mit unserem Ergebnis (Zuverlässigkeit) sehr zufrieden! uwe
Hallo Uwe, danke für den Link. Hab es gestern nur kurz überflogen und lese mich heute oder morgen mal ein. Es sieht aber ziemlich interessant aus, daher bin ich gespannt, was ich davon lernen kann! Eine konkrete Anwendung hab ich noch nicht im Kopf. Es handelt sich mehr um "Grundlagenforschung" zum Thema ATTiny als I2C Slave. Wenn ich einmal weiß wie es geht, dann sind die Anwendungsmöglichkeiten bestimmt sehr vielfältig. Meine initiale Fragestellung war, warum ich einen PCF8574 für die Porterweiterung nehmen soll, wenn der Tiny viel mehr kann und der Kleine (mit Quarz und Co.) maximal einen Euro mehr kostet. LG, Timo
Timo Gruß schrieb: > … > Meine initiale Fragestellung war, warum ich einen PCF8574 > für die Porterweiterung nehmen soll, wenn der Tiny viel mehr kann und > der Kleine (mit Quarz und Co.) maximal einen Euro mehr kostet. Es sind ja nicht nur die Kosten der Bauteile, sondern auch der Programmierung (inkl. Qualitätssicherung, resp. Fehlersuche). So gibt es Port-Erweiterung von Maxim oder anderen, die gleich Keyscanning können und/ oder den RAM erweitern und/ oder Anzeigen treiben. Programmieraufwand: 0.
Boris, wie recht Du hast! Unsere Programmierung mit dem ATtiny26 hat jetzt ca. 3 Jahre praktische (Bus-) Erfahrungen hinter sich. Man meint alles ist super und korrekt programmiert, und dann gibt es einen dummen Zufall ;-) Qualität ist eben nur durch hohen Testaufwand oder langjährige Erfahrung zu bekommen. Aber auch Firmen können schludern: bestes Beispiel ist der Temperatursensor LM75 - kommt zwar seeehr selten vor, aber wenn der schlecht drauf ist wird die SDA Leitung dauerhaft gen Masse gezogen und der gesamte Bus verabschiedet sich! Timo, lass Dich bitte von alten Hasen nicht beirren, beschäftige Dich mit dem, was Du vor hast aber sieh auch über den "Gartenzaun" ;-)
Hallo ihr zwei, danke für die Hinweise, die werde ich mir zu Herzen nehmen! Da habe ich sicher Äpfel mit Birnen verglichen. Der ATTiny ist kein Ersatz für den PCF8574, dass sollte nicht meine Botschaft sein. Da ich mit dem PCF8574 schon gearbeitet habe, dachte ich mir aber, dass der ATTiny als I2C Sklave der logische, weitere Schritt ist. Ich sitze heute für 3,5 Std. im Zug und werde mir da die Hausbus-Unterlagen durchlesen. Ich bin sehr gespannt!!
So! An meiner alten Heimat (Köln) bin ich vorbei und Frankfurt liegt kurz vor mir. Ich wusste nicht, dass intensives Lesen auch im ICE Übelkeit verursacht. Puh :( Aber ich hab mir den Teil 0 und Teil 1 angeschaut um was über die I2C-Verbindung und die Parallelwiderstände rauszubekommen. Ich habe Uwes Schaltung für meine Zwecke übernommen. Lediglich die beiden Z-Dioden scheinen mir in meinem Fall überflüssig. Bei dir wird das wohl wegen möglicher Spannungsänderungen auf dem Bus nötig geworden sein, oder? Ansonsten würde ich es jetzt mal mit einem Parallelwiderstand von 110 Ohm versuchen. LG, Timo
Timo, dass mit den Widerständen bei Dir verstehe ich nicht. Die 110 Ohm Widerstände sind in Reihe und dienen bei mir in Verbindung mit den Z-Dioden als Begrenzer, da auf dem Bus (bei mir) Spannungspegel von +/- 12V erlaubt sind (serielle Schnittstelle beim Master). Gleichzeitig werden damit induzierte Fremdspannungsimpulse auf die zulässigen Pegel begrenzt. Bei einem Hausbus über viele Meter ist das nicht zu vernachlässigen! Also erst die Widerstände und dann direkt am IC die Z-Dioden. So, wie Du die Widerstände eingezeichnet hast, mache sie eigentlich keinen Sinn, es sei denn, Du rechnest mit den IC-internen Bauelementen. R2 bis R4 sind auch an der Plus-Seite miteinander verbunden - wenn Du mehrere Slaves parallel betreiben willst ist das ein Fehler. Denke daran, dass immer nur ein Buswiderstand für die entsprechende Leitung für den ganzen Bus notwendig ist. Also entweder die Widerstände einzeln an den Connector führen oder nicht bestücken oder DIP Schalter vorsehen.
Timo, die ICE Fahrt bringt wahrscheinlich Deine grauen Zellen aus dem Takt ;-)
;) Daran wird es gelegen haben! Bestimmt! Was ich gerne realisieren möchte, ist einfach eine kleine Leiterplatte, auf der ein ATTiny2313 sitzt, der z.B. eine LED und einen Taster schaltet/erfasst. Der Master, auf einer separaten Platine, ist ca. 10cm entfernt und kommuniziert mit dem Tiny über den Bus (10-pol. Flachbandkabel). Mehr steckt da zur Zeit nicht dahinter. Aus diesem Grund (und weil nur 5V im Speil sind) lasse ich die Z-Dioden weg. Die in Reihe geschalteten Widerstände habe ich dem Link ganz zu Beginn entnommen. Dort schreibt Atmel, dass diese für einen SPI-Bus(!) benötigt werden (siehe angehängtes Bild [Figure 3-2]). Ich habe nun, blauäugig wie ich bin, angenommen, die braucht es für den I2C-Bus auch. Und noch blauäugiger, dass das die 110 Ohm Widerstände aus dem Hauscomputer-Handbuch sind. Was die Pullups angeht, so sind die nur darauf, falls es mal einen Master gibt, der die nicht mit auf der Platine hat. Normalerweise würde ich den Jumper auf den Slaves immer ausgeschaltet lassen. Was hälst du/ihr, vor diesem Hintergrund, von der Schaltung? Hab im angehängten Bild die Z-Dioden mal raus genommen. Vielen Dank für die super Unterstützung!! Timo
Die Reihen-Widerstände dienen dem Schutz des Masters und des ATtinys, wenn die Pins des ATtinys, aus welchen Gründen auch immer, als Ausgänge aktiv werden und gegen den Master arbeiten. Im Atmel Dokument heist es: "if additional devices are connected to the ISP lines, the programmer must be protected from any device, other than the AVR, that may try to drive the lines.. Applying series resistors on the SPI lines, as depicted in Figure 3-2, is the easiest way to achieve this." 500 Ohm sind dafür bei (5V) ok. Der max. Spannungsabfall über die Widerstände im Normalbetrieb ist vernachlässigbar und der Strom im Falle des "Gegeneinanderarbeitens" wird auf 4.5/500=9mA begrenzt.
Dann war meine Berechnung weiter oben gar nicht mal so verkehrt. Das freut mich :) Jetzt wage ich mich mal an eine kleine Testschaltung und mache meine ersten I2C-Slave-Schritte. Vielen Dank für die Hilfe und vor allem für die Geduld. Das war echt toll von dir und hat mich wirklich weitergebracht! LG, Timo
Falls du eine geeignete Lösung gefunden hast, könntest du das Wiki erweitern: http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#ISP-Pins_am_AVR_auch_f.C3.BCr_andere_Zwecke_nutzen Dort gibt es nur Hinweise für die Verwendung von SPI an den ISP Pins.
Um den alten Thread doch noch zu beantworten: Der ATTiny167 (LIN-Bus) hat ISP ausnahmsweise nicht auf den gleichen Pins wie USI. Ein als I2C-Slave arbeitender Tiny kann folglich im System programmiert werden, ohne mit laufendem I2C in Konflikt zu kommen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.