Forum: Mikrocontroller und Digitale Elektronik Attiny mit I2C und ISP gleichzeitig


von Timo (timogruss) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

von Tim  . (cpldcpu)


Lesenswert?

Nimm einen ATtiny841

von Oliver R. (orb)


Lesenswert?

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.

von Tim  . (cpldcpu)


Lesenswert?

Sorry, ich dachte du wolltest I2C und SPI nutzen. I2C und ISP ist kein 
problem.

von Timo (timogruss) Benutzerseite


Angehängte Dateien:

Lesenswert?

@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

von holger (Gast)


Lesenswert?

>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.

von Timo Gruß (Gast)


Lesenswert?

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

von Marian (phiarc) Benutzerseite


Lesenswert?

Nimm doch lieber nen I2C-Bustreiber mit Enable, das funktioniert dann 
noch in ein paar Jahren zuverlässig.

von uwe (Gast)


Lesenswert?

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

von Timo (timogruss) Benutzerseite


Lesenswert?

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

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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" ;-)

von Timo (timogruss) Benutzerseite


Lesenswert?

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!!

von Timo (timogruss) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

von uwe (Gast)


Lesenswert?

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.

von uwe (Gast)


Lesenswert?

Timo, die ICE Fahrt bringt wahrscheinlich Deine grauen Zellen aus dem 
Takt ;-)

von Timo (timogruss) Benutzerseite


Angehängte Dateien:

Lesenswert?

;) 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

von Uwe (Gast)


Lesenswert?

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.

von Timo (timogruss) Benutzerseite


Lesenswert?

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

von B. S. (bestucki)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
Noch kein Account? Hier anmelden.