mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI = I2C ??


Autor: Cabal2002 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard T (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Cabal2002 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard T (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk H (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard T (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: guenter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: zhangzhongjian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mega8 to mega8 i2c

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.