-
-
Erfahrener Benutzer
Robotik Einstein
Es braucht dazu nur 2 Widerstände um die Leitungen mit 'nem Pullup zu versehen. ansonsten mind. drei Kabel um zwei I2C Bauteile miteinander zu verbinden.
-
Erfahrener Benutzer
Robotik Einstein
Hallo,
zum Thema TWI habe ich wieder eine Seite gebaut:
https://www.roboternetz.de/wissen/index.php/TWI_Praxis
Darin enthalten sind erstmal nur die Grundkommunikationsarten, an einem der folgenden Wochenenden wird das wieder erweitert.
-
Erfahrener Benutzer
Roboter Genie
also klappt das jetzt reintheoretisch nur mit dem chip den du da hast ?
-
Erfahrener Benutzer
Robotik Einstein
Warum theoretisch ?
Bei mir gehts auch praktisch,
ich hab einen Mega 32 und einen Mega8 zusammengehängt,
geht in beide Richtungen, also egal wer der Slave/Master ist.
Wenns mehr als 2 Teilnehmer werden sollen, muss man nur auf die Slaveadressen achten, damit da schon keine doppelt ist, gibt ansonsten keine Probleme.
Verwenden kann man das mit allen AVR Megas die TWI haben:
http://www.atmel.com/dyn/products/pa...&Direction=ASC
Wenn man die Codeschnipsel von dieser Seite richtig zusammenbringt, kann man alle möglichen kombinationnen der I2C-Kommunikation damit in einem Programm machen:
https://www.roboternetz.de/wissen/index.php/TWI_Praxis
So wie die Programme auf der Seite jetzt sind, kann man nur das machen wie's dort dabei steht.
-
Erfahrener Benutzer
Roboter Genie
ja das ist schon klar wollte das nur nochmal hören ok
gut gut werde das dann auch mal probieren
-
Erfahrener Benutzer
Roboter Genie
hallo
praktisch könnte man bei dem master dann doch das input y weg lassen und es würde doch trotzdem klappen oder?
und wie sieht das aus dem Slave könnte ich da öfters Twdr und INCR schreiben nur mit anderen buchstaben die dann andere zahlen ausgibt müsste doch klappen oder muss man das anders hinschreiben?
etwa so
Twdr = C
Twdr = D
Twdr = E ' neue Daten ausgeben
Incr E
Incr D
Incr C
oder so
i2cinit
i2cstart
i2cwbyte(slaveid)
i2cwbyte(wert1)
i2cwbyte(wert2)
i2cstop
gruß
patrick
-
Erfahrener Benutzer
Robotik Einstein
Du kannst immer nur ein Byte senden, wenn das TWDR ein paar mal hintereiander beschrieben wird, stört das zwar nicht, wird aber deshalb noch nicht übertragen, erst wenn man im TWCR das Bit setzt, wird ein Byte gesendet, dann muss man warten auf den nächsten Status, dann kann das nächste Byte kommen.
Man kann sich da also eine schleife bauen, die man beliebieg oft wiederholen kann um ein Byte zu senden, aber nur solange der Status nach jedem einzelnen Byte stimmt.
-
Erfahrener Benutzer
Roboter Genie
hmmmmm............ haste ein beispiel wie sone schleife aussehen könnte mir würde im moment nur so was einfallen:
Twdr = E
Incr E
waitms 10
twdr = d
incr d
meinste sowas?
stehe im moment etwas auf dem schlauch
gruß
patrick
-
Erfahrener Benutzer
Robotik Einstein
Da schleift noch nix !
Schleife hab ich grad keine da.
So wie Du oben mit den i2c-befehlen gemacht hast sollte es für den Master gehen.
Und wait gehört da auf keine Fall hin, denn das Blockiert dann den ganzen Bus für die Zeit ! [-X
Und wie gesagt, wenn man nur ein paarmal hintereinander ins TWDR schreibt passiert sonst noch nix, es wird so nix versendet!
Damit der Wert in TWDR auch raus geht muss in TWCR das Bit TWINT gesetzt werden, und dann wieder warten bis es wirklich draussen ist, dann Status abfragen, usw.
-
Erfahrener Benutzer
Roboter Genie
ok mal sehen wie ich das hin bekomme wenn nicht melde ich mich nochmal.
gruß
patrick
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen