- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Frage bezüglich TWI bzw. I2C-Pegel

  1. #11
    HaWe
    Gast
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ich kann es bestätigen, zumindest bei 5V Arduinos (Uno und Nano, beide selber getestet) sind weder Level-Shifter noch zusätzliche Pullups nötig, wenn beide am selben Bus hängen und der Raspi Master ist, denn beide 1,8k Pullups des Raspi ziehen ja den Bus bereits auf +3,3V.
    Das bestätigen auch Links im Web:
    https://oscarliang.com/raspberry-pi-...connected-i2c/

    Bild hier  

    Man könnte daher davon ausgehen, dass es auch mit anderen 5V AVRs genau so einfach funktioniert.

    Beim Arduino Mega ist es problematischer, weil der selber eingebaute Pullups auf 5V besitzt (sowohl auf dem Chip (die müsste man vorher rauslöten) als auch auf dem Board (die kann man jederzeit in twi.c disabeln) ).

    (Anm.: Allerdings gab es i2c-Kommunikationsprobleme, die auf clock stretching durch den Arduino zurückzuführen waren, die der Raspi (in C programmiert) nicht vertrug. Das muss aber nicht für andere AVRs gelten. )

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    warte warte warte ... der Raspi kann kein Clock Stretching? ... das ist schwach, da les ich mich nochmal genauer zu ein wenn ich Zeit habe
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #13
    HaWe
    Gast
    Genau, sag ich doch, zumindest nicht mit dem damaligen Kernel (bis Anfang April dieses Jahres). Dazu gibt es sogar hier im Forum ein Topic.
    Das clock stretching wurde wohl durch den AVR Arduino verursacht (was viele auch im raspi Forum für die Ursache der I2C Datenübertragungsfehler hielten), und eben das vertrug der Raspi nicht, daher konnten mal keine großen Datenblöcke auf einmal übertragen werden und ein anderes Mal schmiss der Raspi sogar den Arduino aus seinem I2C Bus und erkannte ihn gar nicht mehr als I2C device unter seiner Busadresse.
    Seit dem 10.4. gibt es allerdings einen neuen Kernel, vlt kann der mehr als der vorhergehende, seitdem habe ich die AVRs aber nicht mehr am Raspi-i2c-Bus getestet..
    Mit dem Aruino DUE (andere berichteten, glaube ich, auch mit demZero) funkionierte aber vorher schon I2C immer außerordentlich zuverlässig.

    ich bezog mich auch auf den "echten" I2C Modus, wie er unter C/C++ mit pigpio und wiringPi benutzt wird (mit Arduino per 100kHz, ansonsten mind. bis 400kHz), der wohl langsamere smbus-Modus als auch Software-Bitbanging waren in dieser Hinsicht toleranter. Auch zum letzteren gab es im besagten Topic Beispiele.

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    das smbus Protokoll definiert ja clock stretching, logisch dass es da verwendet wird.
    Aber ich bin mir ziemlich sicher dass jedwede Hardware I2C Logik (also das peripheral im raspi SoC) auch dazu in der Lage ist aber die I2C-Libs das notwendigeFflag nicht einschalten .... einer der Gründe warum ich meistens doch lieber Bare Metal programmiere wenns ordentlich werden soll, Bibliotheken scheitern immer an DEtails die der Erfinder nicht bedacht hat.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #15
    HaWe
    Gast
    ...was erklärt, dass damals schon viele Raspi-"Fachleute" (Gordon Henderson, joan u.a.) das Problem schon kannten, samt möglicher Workarounds, und auch davon sprachen, dass ebenfalls die .org Entwickler das auch schon auf dem Schirm hatten und in "einer der nächsten" Kernel-Upgrades mit ändern wollten. Ich selber verstehe die hardwaremäßigen oder Programmier-technischen Einzelheiten nicht, ich kam nur drauf, dass ich es versuchte PI + Arduino zu verbinden, es aber nicht störungsfrei mit den AVRs funktionierte.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von HaWe Beitrag anzeigen
    ...was erklärt, dass damals schon viele Raspi-"Fachleute" (Gordon Henderson, joan u.a.) das Problem schon kannten, samt möglicher Workarounds, und auch davon sprachen, dass ebenfalls die .org Entwickler das auch schon auf dem Schirm hatten und in "einer der nächsten" Kernel-Upgrades mit ändern wollten. Ich selber verstehe die hardwaremäßigen oder Programmier-technischen Einzelheiten nicht, ich kam nur drauf, dass ich es versuchte PI + Arduino zu verbinden, es aber nicht störungsfrei mit den AVRs funktionierte.
    Wenn ich mich recht erinnere ist bzw. war das so:
    Der Prozessor im Raspi unterstützt schon Clock stretching, der Treiber ebenfalls. Es gab aber einen Bug im Chip der dazu führt, daß in einem bestimmten Zeitfenster nach dem ACK-Bit das Clock stretching nicht erkannt wurde. Das ist aber nun genau die Stelle, die am kritischsten ist, nach dem ACK-Bit passiert das am häufigsten.

    Da der Raspi nicht mein Ding ist, hab ich keinen Link aufgehoben und kann das nicht mehr nachvollziehen. Ob inzwischen der Chip gefixt ist oder eine Reparatur in Software möglich ist, hab ich nicht verfolgt.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #17
    HaWe
    Gast
    das führt uns jetzt zwar von dem 5V/3.3V I2C Problem mit/ohne Pullups u/o Levelshiftern weg, würde aber dann sicher bedeuten, dass es bei einem Chip-Hardware-Bug nicht allein durch ein Jessie-Kernel-Upgrade gelöst werden kann, oder?
    Außerdem wäre interessant zu wissen, welche Chips von diesem Bug betroffen waren - da ich den Pi2 habe, mit dem es diese Probleme gab, wäre zu vermuten, dass es dann möglicherweise nicht unbedingt auch mit dem B+ oder Pi3 der Fall ist/war oder sein muss?
    Geändert von HaWe (08.09.2016 um 19:36 Uhr)

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von HaWe Beitrag anzeigen
    das führt uns jetzt zwar von dem 5V/3.3V I2C Problem mit Pullups u/o Levelshiftern weg, würde aber dann sicher bedeuten, dass es bei einem Chip-Hardware-Bug nicht allein durch ein Jessie-Kernel-Upgrade gelöst werden kann, oder?
    Außerdem wäre interessant zu wissen, welche Chips von diesem Bug betroffen waren - da ich den Pi2 habe, mitt dem es diese Perobleme gab, wre zu vermuten, dass es dann möglicherweise nicht unebsingt auch mit dem B+ oder Pi3 der Fall ist/war oder sein muss?
    Ob das in SW gefixt werden kann, weiß ich nicht. Der Floating Point Bug in einer Version der Pentiums ließ sich in SW umgehen, bis die Chips OK waren. Da ich mich nicht besonders um den Pi und seinen Prozessor gekümmert habe, kann ich nicht mehr sagen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    Hallo miteinander,

    ich möchte einen Tiny85 als Slave und ein Raspberry Pi 2B+ als Master an einem TWI-Bus betreiben.
    Pullup-Widerstände sind ja auf dem Pi-Board schon drauf (nach meinen Messungen sind die gegen 3,3V).
    Da die Eingänge vom Pi ja auch nur 3,3V vertragen.

    Jetzt meine Frage:
    Was genau macht die Hardware im Tiny? Hab ich den TWI-Bus richtig verstanden, dass der eigentlich nur entweder in der Luft hängt oder gegen GND zieht?
    Deswegen doch auch die Pullups...
    Somit wäre es ja kein Problem den Tiny trotzdem mit 5V zu versorgen (bei 3,3V hätte ich probleme mit der Auslegung von nem Spannungsteiler an nem ADC).
    In der Luft sollte der nicht hängen denn dafür gibs ja die Pullups. Diese werden benötigt da I2C OpenCollector ist, somit sind auch unterschiedliche Versorgungsspannungen der Einzelgeräte möglich. Wenn, wie in deinem Falle Master mit 3,3V und der Tiny mit 5V betrieben wird, ist das unkritisch. Die Pulls hängen für beide an 3,3V und für den Tiny85 bedeutet:

    3,3V
    Lowpegel 0V - 0,5V
    Highpegel 2,5V - VCC

    5V
    Lowpegel 0V - 0,6V
    Highpegel 2,5V - VCC

    Auf seite 161 unter Vol / Voh nachzulesen.

    Ist zwar nicht die 100% Lösung und man müsste sich mal das LogicLevel des PI's anschauen

    Der Tiny85 hat eine USI, die ein wenig mehr an Modes kann. Seite 112 ist mal für die USI beschrieben welche Möglichkeiten bestehn.
    http://i2c2p.twibright.com/spec/i2c.pdf
    Auf Seite 42 mal die Widerstände und 43 die Möglichkeit 100%kompatibel zu sein.

    Meinen Code für den Slave möchte ich auf dem hier aufbauen:
    https://www.roboternetz.de/community/...l=1#post384610
    (Muss zugeben dass ich den Code noch nicht zu 100% verstanden habe)

    Wäre wirklich genial wenn mir da jemande einen Rat geben könnte.

    MfG iBot
    https://www.roboternetz.de/community...iny-2313/page3

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo iBot,
    Zitat Zitat von iBot Beitrag anzeigen
    Jetzt meine Frage:
    Was genau macht die Hardware im Tiny? Hab ich den TWI-Bus richtig verstanden, dass der eigentlich nur entweder in der Luft hängt oder gegen GND zieht?
    Deswegen doch auch die Pullups...
    Nennt sich dann wired-OR oder wired-AND, je nachdem wie die Pegel definiert sind.

    Technisch hat es den Vorteil, dass es keinen Kurzschluss auf dem Bus geben kann, wenn unterschiedliche Pegel gleichzeitig ausgegeben werden. Zudem kann man Leitungen sparen.

    Der Nachteil liegt darin, dass die Buslänge die Geschwindigkeit beeinflusst.
    Jede Leitung hat eine Kapazität, je länger um so grösser ist diese. Beim Sprung von 0 auf 1 wird diese Kapazität nur über den PullUp geladen, man bekommt also diese e-Funktion als Spannungsverlauf. Schneller kann man werden, indem man die PullUps oder/oder die Kapazität kleiner macht. Das wird aber schnell unwirtschaftlich.

    Beim I2C wird dies z.B. beim Clock-Streching verwendet, da spart man eine Leitung. Der Master gibt den Clock aus. Kommt der Slave nicht mit, zieht er einfach den Clock gegen Masse und verhindert so den nächsten Takt. Der Master erkennt, dass er zwar den Clock auf 1 gesetzt hat, dieser aber immer noch auf 0 liegt. Somit muss der Master dann warten, bis der Clock auf 1 geht.

    MfG Peter(TOO)


    Eine typische Anwendung war z.B. ein Interrupt-Eingang. Jede Einheit zieht einfach die Leitung gegen Masse, dabei ist es egal wann und wie viele Einheiten angeschlossen sind. Die ISR sucht dann die erste Einheit, welche den Interrupt aktiviert hat, bedient diese und die Einheit hört auf die Leitung nach Masse zu ziehen. War es der einzige Interrupt geht dann die Leitung auch auf 1. Andernfalls stehen noch weitere Interrupts an.
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Frage bezüglich Diode
    Von _Johannes_ im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 25.07.2013, 15:20
  2. Frage Bezüglich ldi R24
    Von demmy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 12.08.2011, 23:18
  3. Frage bezüglich BTM222
    Von Mixer im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 01.09.2010, 18:59
  4. Frage bezüglich LCD mit AT892051
    Von semicolon im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 23.10.2005, 21:30
  5. Frage bezüglich LCD aus Camcorder
    Von Andree-HB im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.01.2005, 09:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen