Forum: Mikrocontroller und Digitale Elektronik I2C


I2C
von Jonas Diemer (Gast)


Lesenswert?

Hallo!

Kann ich den avr at90s1200 direkt an nen i2c bis anschließen (quasi ein 
pin an sda und einen an sdl)?
zum lesen/schreiben würde ich dann jeweils das DDRn umsetzen. geht das?

mfg

von Jürgen (Gast)


Lesenswert?

Bei http://www.atmel.com gibt es fertige app-notes, mit denen es nicht 
mehr schwer ist, sowas zu verwirklichen.

von Robert Budde (Gast)


Lesenswert?

Hallo!

Suchen gerade auf der atmel-Page erfolglos die App-Note. Kann mir
jemand die originale Implementation posten oder eine andere gute
Variante? Habe zwar eine gefunden aber die ist glaub ich eine
selbstgestrickte sehr unflexible ohne Angaben zum Timing usw.

Danke!

Gruß
Robert

von crazy horse (Gast)


Angehängte Dateien:

Lesenswert?

wollte schon wieder meckern, aber die sind tatsächlich nicht mehr da...

von crazy horse (Gast)


Angehängte Dateien:

Lesenswert?

und die zweite

von crazy horse (Gast)


Lesenswert?

ob das die aktuellsten waren, weiss ich nicht, die schlummern schon ein
paar Jahre in den letzten clustern. Die master-implementation habe ich
mal benutzt, die hat funktioniert.

von Steffen Borkowski (Gast)


Lesenswert?

@crazy horse
Ich habe vor einiger Zeit die AppNotes 320 und 322 heruntergeladen und
mit 300 und 302 verglichen. Die einzige Änderung: die Zeichenfolge I2C
wurde gegen SPI ausgetauscht. Der Rest ist identisch.

Steffen

von günter (Gast)


Lesenswert?

Hallo Steffen

I2C und SPI sind zwei unterschiedliche Verbindungs-Möglichkeiten
(u.a./ z.B. I2C benötigt nur 2 Leitungen / bei SPI muß man für jeden
Slave eine extra Leitung schalten, usw. )

Günter

von Steffen Borkowski (Gast)


Lesenswert?

Hallo Günter
Mein Posting war wohl zu sehr aus dem hohlen Bauch heraus.
Ich habe jetzt nochmal gewühlt, um zu sehen, was ich nun eigentlich
verglichen habe. Und zwar handelte es sich um die AppNotes 300 und 302.
Allerdings aus verschiedenen Jahren. In der Version von 1997 ging es um
I²C Anwendungen, und in der Version von 2003 um TWI- Master und Slave.
Für beide Versionen gilt das oben gesagte (Ich übernehme aber keine
Garantie dafür!).

Steffen

von Robert Budde (Gast)


Lesenswert?

Hallo!

Also ich hab mir jetzt die ganzen Quellcodes angeguckt. Dann nochmal
das Datenblatt des Tiny26 studiert und das USI gesehen. Durch das
automatisierte Shiften und den Zähler sollte es ja wesentlich
rationeller gehen. Allerdings sind da tausend und eine Möglichkeiten
und ich blicke im Momment noch nicht durch wie ich effizient eine
Start- bzw. Stop-Condition generiere und gleichzeitig das USI ausnutze.
Kann mit da jemand mit ein paar Zeilen aushelfen? Selbe austesten wird
sehr kompliziert da ich weder Eingabe noch LCD-Ausgabe habe und somit
nur die Leds des STK500 nutzen kann um zu sehen obs funzt.

Danke!

Gruß
Robert

von günter (Gast)


Lesenswert?

Hallo Steffen

TWI (Two-Wire-Interface) entspricht I²C (Inter-IC-Bus) oder auch
IIC-Bus
... alles das gleiche

Atmel verwendet die Bezeichnung TWI
Phillips (die Entwickler des Inter-IC-Bus)verwendet I²C

Nur nochmals zu Komplettierung

Falls weitere / gezielte Fragen (Software / Hardware)zu I²C ... bittte
melden

Günter

von Robert Budde (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

So, hab es jetzt mal mit dem App-Note 300 versucht ohne das USI. Leider
funzt das ganze nicht wirklich. Infos: Tiny26 (auch mal nen anderen
genommen) angeschlossen an STK500. Darüber soll entweder ein Fehler
oder der Inhalt der Speicherzelle $0000 ausgegeben werden die zuvor
beschrieben wurde. Taktfrequenz ist 1 Mhz onchip. Der Tiny läuft auch.
Verkabelt ist soweit ich das sehe alles korrekt. Wäre sehr nett wenn
mal jemand den Code überfliegen könnte. Beim schreiben schmeißt er wohl
keinen Fehler raus, dafür aber komplett beim Lesen. Das kann auch
eigentlich schon aufgrund der ähnlichen Sequenzen nicht sein.

Gruß
Robert

von thkais (Gast)


Lesenswert?

Ich habs Programm nur überflogen, sieht nicht schlecht aus. Nur zu
beachten: Nach dem Schreibbefehl ist das EEPROM für ca. 5ms "tot",
d.h. meldet sich nicht mit ACK zurück. Das ist die Zeit, die es zum
Schreiben braucht. Im Datenblatt steht zwar nur drin, daß das nACK nur
bei einer Schreiboperation zurückgegeben würde, ich denke aber, bei
einem Lesezugriff ist das genauso. Mach mal eine Verzögerungsschleife
von min. 5 ms zwischen Schreib- und Lesezugriff, dann sollte es
klappen.

von Robert Budde (Gast)


Angehängte Dateien:

Lesenswert?

Danke!

Also ich hab jetzt per Warteschleife eine exakt 7,5ms dauernde Pause
zwischen dem Lese- und dem Schreib-Zugriff eingefügt. Jetzt habe ich
$FF als Ergebnis. Das hatte ich vorher auch schon wenn ich die
Fehler-Abfragen nicht drin hatte. Problem: Nun habe ich überhaupt keine
Anhaltpunkte mehr was falsch sein könnte...

Gruß
Robert

von crazy horse (Gast)


Lesenswert?

welches EEPROM hast du denn dran? Gibt welche mit write-protect-Eingang.
Ausserdem Adressierung beachtet?

von Robert Budde (Gast)


Lesenswert?

Hi!

Also das EEPROM ist ein neues 24C65 von Microchip. Es hat keinen
Writeprotect-Pin und die Adressierung ist 000 (alle Ax-Pins mit Masse
verbunden). Das EEPROM hat programmierbare Schreibschutz-Möglichkeiten,
aber da dürfte ja nichts aktiviert sein.

Gruß
Robert

von thkais (Gast)


Lesenswert?

Ich habe noch irgendwo einen I²C-Code für einen 2313 herumliegen, da
kann man über die serielle Schnittstelle Kommandos ans EEPROM schicken.
Ich such Dirs am Wochenende mal raus (in den Tiefen der Festplatte
....)

von Robert Budde (Gast)


Lesenswert?

Hallo thkais!

Wenn das klappen würde wäre das wirklich sehr sehr nett! 2313er habe
ich auch da so dass ich das direkt testen könnte.

Vielen Dank!
Robert

von thkais (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
im Anhang das Programm.
Aber bitte nicht auf den Stil schauen - das ist eines meiner ältesten
Programme, außerdem habe ich es aus einer anderen Anwendung
herausgeschält. Fehlermeldungen werden nicht ausgegeben, der I²C-Bus
erwartet ein EEPROM mit der Adresse $A0.
Ich habe das Programm mit einem 24C256 getestet, es funktioniert.
r = lesen, anschließend vierstellig Adresse und zweistellig die Anzahl
w = schreiben, s.o.
e = löschen.
Alle Zahlenangaben in Hex.
Beispiel:
r000010 (die Bildschirmausgabe ist dann R-0000-10) liest ab Adresse
$0000 16 Bytes.

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.