PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C :: Grundlegende Fragen



Superhirn
26.03.2006, 18:00
Hi,

Ich will mal generrell wissen, wie ich das mache, wenn ich mehr als 1 Gerät am I²C Bus anschließ. Es geht nicht um den schaltplan (ich denke alles wird parallel angschlossen), sondern um das Ansprechen der geräte. So viel ich mitbekommen habe, hat jedes gerät eine adresse und dann kann ich es dadurch ansprechen, bits schicken und empfangen.

Brauch ich da jetzt noch zwingend die INT leitungen, oder würde das ganze auch vollständig ohne ihnen funktionieren?

generrell sind (geplant) alle Geräte AVRs, welche in C programmiert werden.

Danke im Voraus,
Thomas

PicNick
26.03.2006, 18:22
I2C geht an sich ohne INT.
Das wird nur manchmal verwendet, damit ein Slave den Master aufmerksam machen kann, daß Daten zu holen wären.

lei, lei *g*

Der Gärtner
26.03.2006, 18:26
www.sprut.de ist eine sehr gute erklärung. - und natürlich auch hier im RN-Wissen (https://www.roboternetz.de/wissen/index.php/I2C)!

Im wesentlichen gibt es 2 Leitungen - SDA & SCL und einen Master.
Alle Geräte haben außerdem eine unterschiedliche Adresse. Diese Adresse ist zur hälfte vorgegeben (Geräteabhängig) und die andere Hälfte ist Userdef.

Master->Slave communication:

Master macht eine "Startbedingung" (siege Links)
Master klopft die 8 Bit der Adresse rein
Master wartet auf ACC
Master klopft wieder 8 Bit rein...
...
..
...

Dazwischen kann auch der Slave antworten auch ohne das der Master eine Stopbedingung setzen muss. hängt halt von den befehlen ab, die er bekommt.

Superhirn
26.03.2006, 18:42
Hi Gärtner,
generrell soll dass ja ja zu meinem Wettbewerbsroboter nächstes jahr dazugehören. Und da hab ich etwas angst, dass die Signale zu lange brauchen um von Board zu Board zu wandern. Somit werde ich INT in meiner weiße verwenden.

Dieses Board bekommt normalerweiße immer nur Daten geschickt. Aber andere werden dann oft auch nur daten senden müssen.

Wie hoch darf die I²C Übertragungsrate max sein, wenn mein uC auf 8 MHz liegt? oder auch auf 16MHz? hab ich grad rausgefunden

sigi04
26.03.2006, 21:29
Hi,

wie sieht das eigendlich mit der Zuweisung von Master und Slave beim I2C-Bus aus. Zum Beispiel zwei AVR's über I2C verbinden.

Kann man auch mehrere Master an einen I2C-Bus betreiben?

Gruß Sigi

SprinterSB
26.03.2006, 21:49
Ja, I2C ist multimaster-fähig, und das wird vom TWI der AVRs auch unterstützt. Arbitration und alles was mach braucht, ist in der TWI-Hardware drin.

Wenn ein µC also was zu sagen hat (z.B. neue Messwerte, Ereignis, Weltuntergang, ...) wird er zum Master und unterrichtet einen anderen Busteilnehmer davon oder sogar alle durch einen Rundruf (global Call).

Mehrere Master kommen sich nicht in die Quere, das wird durchI2C-Protokoll geregelt.
Ne Multimaster-Kommunikation ist natürlich etwas mehr Arbeit zu proggen, aber es ist ne feine Sache und die AVR-Manuals beschreiben prima wie es geht und auch I2C selbst ist vorbildlich erklärt.

Der Gärtner
26.03.2006, 22:50
es gibt unterschiedliche Frequenzen, 400khz ist max. aber das hängt auch von den geräten ab!!

SprinterSB
26.03.2006, 23:20
AVR als TWI-Master wird für SCL ein maximaler Takt von

F_CPU / 96 angegeben, bei F_CPU=16MHz sind das ca. 166kHz. Bei neurern AVRs geht's vielleicht höher. Schau dazu doch mal ins Datenblatt.

Bernhard.Erfurt
27.03.2006, 08:00
Schau doch mal hier, vielleicht kannst Du Dir ein paar Anregungen holen:

http://www.mikrocontroller.net/forum/read-4-246060.html

pebisoft
27.03.2006, 11:43
generrell sind (geplant) alle Geräte AVRs, welche in C programmiert werden. ...

der keil-c-compiler ist hervorragend für wettbewerbe.
win-avr-c ist in nicht klar durchschaubar wenn man die ganzen compilereistellungen für die optimierung nicht beherrschen tut.
hat schon manchen wettbewerbskandidaten vom pferd geschnmissen.

den keil-compiler gibt es schon ab 400 euro.

SprinterSB
27.03.2006, 11:53
...Also ich setze dir die Schalter im avg-gcc für weniger als 400€!
Überweise mir einfach 100€ auf mein Konto, und ich verrate dir den Schalter, den du setzen musst ;-)

Los, Jungs! Das ist das Schnäppchen das Jahres! Ihr spart fette 300€!!!

Bernhard.Erfurt
27.03.2006, 12:53
...anfangs habe ich um Assembler auch einen großen Bogen gemacht
und mir standen die Haare zu Berge als ich das erste mal ein Assembler-Code sah.

Aber die Mühe hat sich gelohnt, sich mit dieser Materie zu beschäftigen, da man dadurch die Prozesse im µC wesentlich besser verstehen kann und man "meistens" ;) genau weiß, was er gerade tut...

Superhirn
27.03.2006, 16:40
generrell sind (geplant) alle Geräte AVRs, welche in C programmiert werden. ...

der keil-c-compiler ist hervorragend für wettbewerbe.
win-avr-c ist in nicht klar durchschaubar wenn man die ganzen compilereistellungen für die optimierung nicht beherrschen tut.
hat schon manchen wettbewerbskandidaten vom pferd geschnmissen.

den keil-compiler gibt es schon ab 400 euro.
Also zum Complier: Mit den WinAVR hab ich den 2.Platz bei der Robotchallenge06 (www.robotchallenge.at) gewonnen. Und eine kleine veränderung und ich wär erster geworden. Wer sagt denn da, dass WinAVR schlecht ist?

danke vorerst für eure Antworten.

Nun noch eine Frage: Ist es möglich, dass 1 Slave auf einen PCFxxx (oder was anderes) zugreift? Dass somit der slave der master vom slave PCFxxx ist? Es müsste nur der uC (nicht der Master) auf den zugreifen können.

techboy
27.03.2006, 16:44
Ich selber finde AvrStudio mit WinAVR Plugin besser weil da schon alles in einem ist...
Selbst mit Freeware Programmen kann man gewinnen, wie superhirn geschrieben hat ;)



Mfg.Attila Földes

Bernhard.Erfurt
27.03.2006, 17:32
> ....Es müsste nur der uC (nicht der Master) auf den zugreifen können.

Nur ein Master kann nur auf einen Slave zugreifen,
ein Slave hat nur das zu machen,
was sein Master will.

Andersrum geht es nicht.

So wie Zuhause auch ;)

Superhirn
27.03.2006, 17:59
ich mein, dass ein Slave seine eigene Porterweiterung ansteuern soll. alles ber den I²C

Bernhard.Erfurt
27.03.2006, 18:02
>ich mein, dass ein Slave seine eigene Porterweiterung ansteuern soll. >alles ber den I²C

...dann ist er aber kein Slave mehr, sondern dann arbeitet dann als Master.... :)

Superhirn
27.03.2006, 18:13
Der wird von einem anderen uC als Slave behandelt.

SprinterSB
27.03.2006, 18:16
Wie Berhard schon schreibt, aus einen Slave kann nur ein Master zugreifen.
Aber ein Slave kann durchaus zum Master mutieren (und umgekehrt). Selbst bei I²C ist also jeder seines Glückes Schmied ;-)

@superhirn: Die wichtigste Option dazu ist -O, etwa -Os oder -O2. Aber auch wenn du avr-gcc agressiv optimieren lässt, hilft es nix, wenn man ihm C-Code vorsetzt, bei dem er keine Chancen hat.

Um sehr guten, also schnellen und dichten Code durch avg-gcc zu bekommen, ist mehr Know-How nötig, als ein paar Compilerschalter. Ebenso wichtig ist auch, daß man weiß, was man tut, und die Resultate von avr-gcc (den Assembler-Code) einzuordnen und zu bewerten weiß. Wie man C-Code schreibt, der in effektivem asm resultiert, ist viel Erfahrungssache und man braucht auch etwas Gehirnschmalz und Fleiß.

Wenn man das beherzigt, ist der Code, den avg-gcc erzeugt, sehr gut, und wenn man als Maßstab das Preis/Leistungsverhältnis nimmt konkurrenzlos.

Wenn ich ins asm schaue, dann gibt es nur wenige Stellen, die ich als asm-Progger anders bzw besser machen würde. Und manche Dinge kann man in asm nur mit super viel Aufwand realisieren bzw macht sich nen Wolf dabei.

Gleichwohl fänd ich sehr interesant, mal einen Code-Vergleich unterschiedlicher AVR-Compiler zu sehen (hatte ich im Wiki angeregt, hat sich aber noch nix gatan :-()

Bernhard.Erfurt
27.03.2006, 18:19
>Der wird von einem anderen uC als Slave behandelt.

geht prinzipiell so nicht

Begründung:

- um eine Porterweiterung anzusteuern, kannst Du nur im Mastermodus

- wenn ein anderer Master auf die Porterweiterung zugreifen möchte dann versuchen ja zwei MASTER Daten auszutauschen

und das funktioniert nicht

Superhirn
27.03.2006, 18:32
Wie ist das dann mit dem Multimastermodus? Wie entscheiden sich diese mater, wer dran kommen darf?

SprinterSB
27.03.2006, 18:36
Zwei Master können sich schon unterhalten:

Wenn beide gleichzeitig anfangen zu senden, verliert einer die Arbitration und wird zum Slave. Nachdem der Bus wieder frei ist (und er evtl als Slave Daten erhalten hat) schaltet man ihn wieder als Master und versucht's nochmal, falls der Sendeauftrag aufgrund des Empfangs nicht hinfällig ist.

Man kann also alle Geräte Slaves sein lassen, und wer was sagen will, wird Master und sagt, was er zu sagen hat.

That's it.

Bernhard.Erfurt
27.03.2006, 18:45
@Georg-Johann

>Man kann also alle Geräte Slaves sein lassen, und wer was sagen will, >wird Master und sagt, was er zu sagen hat.

Das stimmt, da hast Du natürlich Recht,

trotzdem ist wieder das Verhältnis MASTER----> SLAVE vorhanden

Mit anderen Worten per Software wird zw. MASTER und SLAVE gewechselt.

Bernhard

SprinterSB
27.03.2006, 19:00
Nicht unbedingt, teilweise macht das schon die TWI-Hardware (steht im Handbuch, das werd ich jetzt nicht abtippseln hier ;-))