Forum: Mikrocontroller und Digitale Elektronik TWI = I2C ??


von Cabal2002 (Gast)


Lesenswert?

Hallo

ich wollte bei meinem nächsten Projekt was mit I2C machen. Auf der Atmel 
Homepage steht "TWI compatible to i2c" hat das schon mal jemand 
getestet. Ich wollte den Atmega8 zusammen mit ein paar Philips PCF 8574 
benutzen. Wäre super wenn mir jemand mal ein paar Zeilen code zuschieben 
könnte aus dem ersichtlich ist wie man das TWI benutzt vorzugsweise in 
Assembler.

Gruss Cabal

von Bernhard T (Gast)


Lesenswert?

Codeschnipsel in Asm und C gibts in dem 2Kbyte großem Atmega8 Pdf 
(S.172)

von Markus (Gast)


Lesenswert?

http://www.atmel.com/atmel/products/prod201.htm
Hier müsste es eine AppNote dazu geben.
TWI kann man so konfigurieren, das es als I2C arbeitet.

Gruß
Markus

von Cabal2002 (Gast)


Lesenswert?

Apllication Node AVR300 hilft mir wirklich weiter.

Aber was mich wundert Atmel schreibt in dem PDF zur AppNote300 "The AVR 
microcontroller family does not have dedicated hardware for TWI 
operation."

Nur seltsam das unter http://www.atmel.com/atmel/products/prod199.htm 
fast alle Megas bei TWI eine 1 stehen haben. Was stimmt denn nun ??

Gruss Cabal

von Markus (Gast)


Lesenswert?

AVR300 ist älteren Datums und bezieht sich auf einen Softwareemulierten 
I2C Master Port für die alten AVR. Die haben noch kein TWI.
Hm, bei den AppNotes scheint es tatsächlich nichts zu geben. Aber schau 
mal in die Datenblätter, insbesondere in das zum Mega128. Da stehen 
jetzt immer Codebeispiele drin. Müsste auch was für I2C dabei sein.

Gruß
Markus

von Dirk (Gast)


Lesenswert?

Hatte das gleiche Problem. Aber in den Datasheet zum Atmega8 Seite 172 
solltest du genau das finden was du brauchst.
Bei mir gings nur nicht, weil ich mir die beiden Ports durch meine 
fehlerhaftes Layout wohl zerschossen hatte. (Ja 12V direkt auf dem Port, 
das war wohl zuviel des guten). Aber nun klappts auch.

von Bernhard T (Gast)


Lesenswert?

Dirk du progst doch in C oder ?
Meinst du du könntest mal was posten. Ich bin nicht gerade Fit in C will 
mich aber auch gerade mit TWI (MEGA8) beschäftigen. Ein konkretes 
Beispiel wär da sehr nützlich.
Gruss Bernhard

von Dirk H (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bernhard,

als Anhang eine kleine Beispiel. TWI als Master. Aufruf 
Send_Data_Master_Mode_TWI( Slave_Addresse an die gesendet werden soll, 
anzahl der daten, char* daten).
Is mit sicherheit nicht der schönste Code, da ich auch der fiteste bin. 
Die asm("nop") habe icht drinnen, da zwischen dem initialisieren und dem 
setzen des TWINT etwas Zeit gebraucht wird. PS: Sind vielleicht ein paar 
zuviel drinnen.

von Peter D. (peda)


Lesenswert?

Die TWI-Hardware ist nur nötig, wenn man solche Schweinereien, wie 
Multimasterarbitrierung oder Slaves machen muß.

Um als Single-Master den PCF 8574 und andere anzusteuern, ist es viel 
einfacher, es direkt in Software zu machen.
Das ergibt auch weniger Code und läuft an jedem Pin und jedem µC, auch 
wenn der kein TWI hat.

Hier mein Beispiel:

http://www.specs.de/~danni/appl/soft/c51/eeprom/index.htm

Der einzige Unterschied, beim AVR muß man das Port-Bit ständig auf 0 
setzten und statt dessen das Direction-Bit setzten (=0) bzw. löschen 
(=1) und Einlesen vom Pin-Bit. Und mehr NOPs oder Delay-Loops.


Peter

von Bernhard T (Gast)


Lesenswert?

Hallo Dirk vielen Dank für dein Beispiel.
Werd mich da gleich am Wochenende dransetzen.
@ Peter auch dir  vielen Dank. Als C - Anfänger kann man ja gar nicht 
genügend Beispiele bekommen. Ich glaube aber wenn man das mit der TWI 
mal in den Griff bekommet ist das sicher ganz fein. Wenn ich mich 
erinnere wie nervig das mit nem Software Usart ist im vergleich zum HW.
Gruß Bernhard

von guenter (Gast)


Lesenswert?

Hallo

Schon mal an eine Realisierung mit BASCOM-AVR
gedacht ?

BASCOM hat sehr 'mächtige' Sprachelemente für die
Einbindung einer TWI (I²C)-Lösung

Gruß Günter

von Schmittchen (Gast)


Lesenswert?

> Wenn ich mich erinnere wie nervig das mit nem Software Usart ist im vergleich 
zum HW.

Moment. Beim UART mußt du auch das Timing ganz genau einhalten. Ein 
ungünstiger Interrupt dazwischen, oder eine Routine dazwischen 
ausführen, die etwas länger dauert - das is hier leider nicht möglich. 
Das ist das nervige daran.

Beim Software-I2C gibst du ja den Takt vor! Du mußt nicht irgendwelche 
Flag des AVRs ablesen und auswerten und kannst außerdem jeden Portpin 
dafür verwenden (das du allerdings mit einer geringfügig größerem 
Codeumfang erkaufst). Die TWI-Lösung kann allerdings auch in 
Multi-Master-Umgebungen eingesetzt werden (im Gegensatz zu einem 
einfachen SoftI2C).

Schmittchen.

von zhangzhongjian (Gast)


Lesenswert?

mega8 to mega8 i2c

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.