Forum: Mikrocontroller und Digitale Elektronik Software I²C Bus


von Stephan Schwarz (Gast)


Lesenswert?

Hallo Leute

Ich will einen I²C Bus aufbauen (Softwaremässig), da mein AT902313
keine I²C Hardwaremässig hat. Ich hab leider auch nicht rausfinden
können welcher AVR das schon integriert hat.
Mich interessiert es aber auch das eben über die Software zu machen.
100kHz ist wohl die obere Grenze, mit der ich den Bus fahren darf.
Ist das wirklich so und wenn, wie kann ich denn diesen Takte ab besten
und stabil erzeugen.
Ich hatte eigentlich vor einfach die Daten auf dir Leitunge zu legen
und dann eine SCL Impuls zu senden. Ungefähr einfach so

cbi (PORTD,2);  //SCL = LOW
sbi (PORTD,3);  //SDA Slave Adresse Bit 6
sbi (PORTD,2);  //SCL = High

Würde das meine Hardware danach akzeptieren? oder ist der regelmässige
Takt wichtig?
Dazu kommt noch, das der Bus ja dann wohl mit der Taktfrequenz der MCU
laufen würde, oder zumindest viel schneller als 100KHz.

Also eigentlich wollte ich einfach nach einem Beispiel zum Software I²C
fragen - hab leider nix gefunde im Forum.

Bis dann Stephan

von leo9 (Gast)


Lesenswert?

1) googlen
2) suche
3) Datenblatt/blätter

*) Auf www.atmel.com gibts eine Übersicht aller (aktuellen) AVRs, die
mit X in der Spalte TWI haben einen hardware i2c-Bus (muß aus
lizenztechnischen Gründen anders benannt werden als bei Philips)

*) 100kHz sind absoluter Nonsens, entweder 10kHz oder 400kHz (hängt von
den Bauteilen ab mit denen du kommunizieren willst. Das sind jeweils
Max. Werte, langsamer ist immer erlaubt. Frequenzstabil braucht das
ganze überhaupt nicht zu sein. Kannst also ruhig in der main Routine
abarbeiten und dich jederzeit von Ints & Co aufhalten lassen.

*) zwischen sbi und cbi kommt ein rcall wait_routine, in der loopst du
halt ein paar hundert nops durch bis du auf tmin bist - oder du taktest
mit einem Uhren-Quarz (ca.32kHz), dann reichen zwei nops und du sparst
viel Strom ;-)

grüsse leo9

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Such mal nach General Driver Lib bei avrfreaks.net
Die Lib von Chris Efstathiou ist große Klasse und enthält nicht nur den
i2c Bus.
http://www.avrfreaks.net/Freaks/freakshow.php?action=2&projectid=59

Grüße
Wolf

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Oder du schaust gleich in die Procyon avrlib, da ist ein SW I2C Bus
Driver drin.

http://hubbard.engr.scu.edu/avr/avrlib/docs/html/index.html

Grüße
Wolf

von Peter D. (peda)


Lesenswert?

"100kHz sind absoluter Nonsens"

Diese Aussage ist absoluter Nonsens !

100kHz ist nämlich die übliche maximale Taktfreqeunz für I2C-Bausteine
von Philips, z.B. PCF8574 (IO-Expander), PCF8591 (ADC), PCF8583 (RTC)
usw.

Inzwischen gibt es aber auch neuere I2C-EEPROMS, die bis zu 400kHz oder
1MHz können.


Peter

von leo9 (Gast)


Lesenswert?

Asche auf mein Haupt, die "alte" i2c-Spezifikation schreibt
tatsächlich 100kHz, ich hätte jede Wette verloren, dass nur 10kHz
erlaubt waren. Mittlerweile sind wohl die 400kHz Standard und
Neuentwicklungen können sogar 3,4MHz.

grüsse leo9

von Stephan Schwarz (Gast)


Lesenswert?

Na vielen dank für die Infos

Ich hab mir die "Procyon avrlib" gezogen, das sieht da sehr
interessant aus. Leider stehe ich nun vor dem gleich Problem wie vor 2
Wochen. Ich weiss nicht, wie und wo ich den Suchpfad für die
Headerdateien im AVR GCC abändern kann.

von Peter D. (peda)


Lesenswert?

Spezielle Header-Dateien fügt man am besten mit in das Projekt mit ein,
damit man das Projekt auch später noch fehlerfrei compilieren kann.

Und dann natürlich:

#include "myheader.h"


Peter

von Stephan Schwarz (Gast)


Lesenswert?

natürlich :-)  Jetzt wo ich die Gänsefüsschen sehe fällt es mir auch
wieder ein.

Danke nochmal    Stephan

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.