Verwendung des TWI/I2C

OP Persönliche Seite #877237
Hallo,

leider konnte ich trotz Codebeispielen nicht herausfinden, ob es in 
irgendeiner Form von Entscheidung ist, wie ich die SDA und SDC pins 
konfigurieren muss um TWI zu verwenden. Im Datenblatt steht, dass man 
die internen Pullups verwenden kann um in manchen die Verwendung der 
externen zu vermeiden. Das heisst doch aber auch dass die 
Portkonfiguration von Entscheidung ist. Wie sollte ich unter verwendung 
von externen Pullups also diese Pins konfigurieren? Sollte an SDC nach 
dem Setzen des Taktes nicht ein entsprechender Takt zu messen sein? Oder 
messe ich falsch wenn ich zwischen GND und SDC messe?

Spaetestens mit
1
 TWCR = TWINT | TWSTA | TWEN;

sollte doch etwas zu messen sein, oder nicht?

Gruss,
Michael
OP Persönliche Seite #877253
oh man ich Idiot... kommt davon wenn man am Sonntag arbeitet.
OK dann die urspruengliche Frage: Wie isses mit der Portkonfiguration? 
Kann man da was falsch machen oder wird das vom entsprechenden Subsystem 
sowieso unterschrieben?

Hat TWI eigentlich vorgeschriebene Spannungen oder kann man das je nach 
Schaltung selber festlegen (mal 5V mal 3.3V...?)
Gast #877256
Clock ist nur vorhanden Wenn auch Daten übertragen werden. Idle Zustand 
beider Bus-Leitungen ist High.
Port Konfiguration ist bis auf Pull Up/Down egal. PORTxn Register muss 
halt gesetzt/nicht gesetzt sein.

Gruß
#877261
In Datasheet steht für jedes einzelne Portbit sehr genau drin, inwieweit 
welche Portsteuerfunktionen wirksam sind, wenn das Portbit für ein 
Funktionsmodul wie UART,SPI,... verwendet wird. Ist nur nicht ganz so 
leicht zu lesen, weil nicht in Prosa.
Gast #877270
Michael G. wrote:
> Hat TWI eigentlich vorgeschriebene Spannungen oder kann man das je nach
> Schaltung selber festlegen (mal 5V mal 3.3V...?)

Ist egal, müssen nur halt alle Busteilnehmer mit der Spannung betrieben 
werden ;) Ansonsten hab ich hier auch schon mal eine Umsetzung 5V<->3.3V 
für TWI gesehen (suche benutzen) wenn unterschiedliche Busteilnehmer zum 
Einsatz kommen.

PS: Wenn externe Pullups vorhanden sind, dürfen die internen natürlich 
nicht gestzt werden ;)
Mit den Internen sollte der Takt auch nicht zu hoch sein, siehe 
Datenblatt. Verwende selbst zum testen immer 10kHz damit gehts super :)
#877279
Michael G. wrote:

> Das mal wieder typisch... anstatt einfach mal ne klare Antwort (hier:
> ja, nein) zu geben wird sich nur wieder profiliert und der Fragende als
> Idiot hingestellt.

Ich halte es bei solchen Fragestellungen für zielführender, auf die 
Stelle hinzuweisen wo man sowas findet. Dann brauchst du das nächste Mal 
nicht mehr zu fragen.

Das hat nichts mit "Idiot" zu tun. Sorry, wenn das so rübergekommen sein 
sollte. Wenn ich mich damit freilich als "wieder so'n scheiss Lehrer" 
profiliert haben sollte - damit kann ich leben.
Gast #877281
Michael G. wrote:
> 10KHz kannste nicht konfigurieren bei nem Systemtakt von 8MHz, das fasst
> das Register nicht.

Naja, hängt vom TWSR Register ab, da kannst den Prescaler wählen...
Es sollten auch mehr als 10kHz gehen, aber wenn ich mich recht zurück 
erinnere ging es mit den internen pullups nicht bis 100kHz hoch, war 
irgendwo vorher Schluss.
#877284
Ich würde gerne auf die Stelle hinweisen. Das wird aber erheblich 
leichter, wenn ich weiss für welches Datasheet ich die Seite angeben 
soll. Dazu fehlt leider die Angabe, um welchen Controller es sich genau 
handelt.
#877289
Im Datasheet der AVRs gibt es unter "I/O Ports" ein Kapitel "Alternate 
Port Functions". Darin werden zuerst eine Reihe von internen 
Portsteuersignalen beschrieben wie PUOE,PVOE. Weiter hinten sind dann 
Tabellen in denen für jedes Portbit steht, welche dieser Steuersignale 
von welchem Steuerbit abhängig sind.

Mega8: Seiten 56f und 62 in Datasheet Revision 08/07.
OP Persönliche Seite #877291
"These pins interface the AVR TWI with the rest of the MCU system. The 
output drivers contain a slew-rate limiter in order to conform to the 
TWI specification. The input stages contain a spike suppression unit 
removing spikes shorter than 50 ns. Note that the internal pull-ups in 
the AVR pads can be enabled by setting the PORT bits corresponding to 
the SCL and SDA pins, as explained in the I/O Port section. The internal 
pull-ups can in
some systems eliminate the need for external ones."

Das ist alles was ich gefunden habe, da steht aber nichts von der 
Richtung.
Gast #877292
So schwer zu sagen, hängt davon ab was noch so alles am Bus hängt.
Auf jeden Fall mal mit dem Scope schauen, und  vor allem von unten an 
die gewünschte Taktrate heran arbeiten :)

@ Andreas Kaiser (a-k)
Wo steht das den z.B. für den mega8? Habe das aus Interesse gerade mal 
gesucht und bin beim "drüber fliegen" nicht drüber  gestolpert.
--> hat sich erledigt, war zu langsam. Danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.