-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

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

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von iBot
    Registriert seit
    12.05.2008
    Ort
    ca. 20km von Nürnberg
    Beiträge
    160

    Frage bezüglich TWI bzw. I2C-Pegel

    Anzeige

    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).

    Meinen Code für den Slave möchte ich auf dem hier aufbauen:
    http://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


  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    32
    Beiträge
    2.290
    wenn du auf der Seite des Tiny PullUp nach 5V verwendest, kann Strom von der 5V Versorgung zu deinem Raspi 3.3V fließen! Das wäre gefährlich! Außerdem würde je nach größe der Widerstände auf beiden Seiten dann ein Idle-Pegel > 3.3V liegen, was die Pins des Raspi beschädigen könnte!

    Entweder du stellst sicher, dass deine Tiny damit klarkommt dass du nur 3.3V Pegel als "high" lieferst und verzichtest du PullUps am Tiny (nur bei kurzer Leitung) oder du musst die 3.3V mitbringen und am Tiny dann die PullUp anbringen (nur für größere Leitungslänge benötigt)

    Bessere Lösung wäre einen FET als Bidirektionaler Pegelwandler

    Falstad

    die 4.7K Rs sind jeweils am Ende der der entsprechenden Leitung

    Ist ein N-Channel hier die Symbole

    https://en.wikipedia.org/wiki/MOSFET#Circuit_symbols
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von iBot
    Registriert seit
    12.05.2008
    Ort
    ca. 20km von Nürnberg
    Beiträge
    160
    Hallo Ceos,
    danke für deine Antwort.

    Ok alles klar, wird dann wohl auf einen Pegelwandler hinauslaufen.
    Aber nochmal zum Verständnis: Der Tiny gibt zu keinem Zeitpunkt wirklich ein High (5V) auf den Bus oder?


  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    32
    Beiträge
    2.290
    korrekt! aber sicher ist eben sicher
    zum testen gehts auch so mit nur einem Pull Up nach 3.3V, vll. reicht das ja
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.508
    .. einen Tiny85 als Slave und ein Raspberry Pi 2B+ als Master .. Pullup.. auf dem Pi-Board schon drauf ..
    wenn du auf der Seite des Tiny PullUp .. verwendest .. oder du musst die 3.3V mitbringen und am Tiny dann die PullUp anbringen (nur für größere Leitungslänge ..
    PullUps an Master und Slave? Da kenne ich nur ablehnende Meinungen. Kein Wunder, das ist auch nicht die Empfehlung der grundlegenden Spezifikation (THE I2C-BUS SPECIFICATION, VERSION 2.1, JANUARY 2000, Philips Semiconductors).

    .. Der Tiny gibt zu keinem Zeitpunkt wirklich ein High (5V) auf den Bus oder?
    Solche Fragen beantwortet sicher das Datenblatt/I²C-Spezifikation.

    .. wird dann wohl auf einen Pegelwandler hinauslaufen ..
    Ich frage mich, warum der Tiny85 nicht mit 3,3 V betrieben wird. Gibts dafür Gründe in der Beschaltung des tiny? Immerhin ist der tiny85/tiny85V bei 10 MHz bis 2,7V runter spezifiziert (siehe Datenblatt Rev. 2586Q–AVR–08/2013). KÖnnte das nicht Deine Probleme ziemlich einfach lösen ?
    Ciao sagt der JoeamBerg

  6. #6
    Unregistriert
    Gast
    Zitat Zitat von iBot Beitrag anzeigen
    Ok alles klar, wird dann wohl auf einen Pegelwandler hinauslaufen.
    Aber nochmal zum Verständnis: Der Tiny gibt zu keinem Zeitpunkt wirklich ein High (5V) auf den Bus oder?
    Im angesprochenen Code wird in "Usi_twi_slave_initialise:" mit
    SBI PORT_USI, PIN_SCL 'PORT_USI |= (1<<PORT_USI_SCL) // Set SCL high
    SBI PORT_USI, PIN_SDA 'PORT_USI |= (1<<PORT_USI_SDA) // Set SDA high
    SBI DDR_USI, PIN_SCL 'DDR_USI |= (1<<PORT_USI_SCL) // Set SCL as output
    CBI DDR_USI, PIN_SDA 'DDR_USI &= ~(1<<PORT_USI_SDA) // Set SDA as input

    der Pullup von SCL (PIN_SCL) eingeschaltet und dann der Pin im DDR auf output geschaltet. Der Pin ist dann ein Ausgang mit High Potential und damit wird Vcc vom Tiny auf den Bus gelegt. Falls der Tiny mit 5V betrieben wird, kommen die auch auf den Bus.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    32
    Beiträge
    2.290
    also was die Widerstände angeht ist das doch eine Frage der Leitungslänge oder nicht?

    Das mit dem Tiny auf 3.3V betrieben habe ich bewusst weggelassen, weil ich keine Infos dazu habe was der Tiny sonst noch alles steuert ... und die Verlockung die 3.3V aus dem Raspi zu benutzen möchte ich möglichst schnell wieder dämpfen, denn der Regler der diese 3.3V aufbringt ist nicht für übergroße Extralasten ausgelegt wohingegen man die 5V fast unbegrenzt belasten kann

    der Pullup von SCL (PIN_SCL) eingeschaltet und dann der Pin im DDR auf output geschaltet. Der Pin ist dann ein Ausgang mit High Potential und damit wird Vcc vom Tiny auf den Bus gelegt. Falls der Tiny mit 5V betrieben wird, kommen die auch auf den Bus.
    In den Code habe ich jetzt nicht hineingesehen, aber das ist ein böser Fehler!
    Warum zum Geier wird für Slave Init überhaupt die Clock auf Ausgang geschaltet bzw. warum wird der Output für DAta und Clock überhaupt auf high gesetzt?

    Wenn es als Slave mit externem Pull Up läuft sollte in alle 4 Zeilen CBI stehen!

    Generell macht mir der gesamte I2C part in dem Code sorgen, der klingt überhaupt nicht gach konformen I2C der arbeite die ganze Zeit im Push-Pull Mode und nicht im Pull-Down! Das wird so nicht mit nem Raspi funktionieren ... jetzt tendiere ich doch auch zur Empfehlung den Tiny auf 3.3V zu betreiben!
    Geändert von Ceos (06.09.2016 um 13:47 Uhr)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.372
    Zitat Zitat von iBot Beitrag anzeigen
    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...
    So ist es. Die 3,3V reichen nicht als standardkonformes High, da werden 3,5V erwartet. Im praktischen Betrieb wird es aber einfach funktionieren. Bevor du dir die Ohren mit nicht funktionierenden Pegelwandlern brichst, probier es einfach aus. Wenn man so die Threads verfolgt, kommen problematische Pegelwandler viel öfter vor, als zu niedrige High-Pegel.

    Manche I2C Controler können auch einen SM-BUS Mode. Da sind die Pegel TTL-kompatibel und passen perfekt für 3,3V CMOS. Ob der Tiny das auch kann, weiß ich nicht. Viele PICs können es.
    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).
    Das verstehe ich nicht.

    MfG Klebwax

    - - - Aktualisiert - - -

    Zitat Zitat von Unregistriert Beitrag anzeigen
    der Pullup von SCL (PIN_SCL) eingeschaltet und dann der Pin im DDR auf output geschaltet. Der Pin ist dann ein Ausgang mit High Potential und damit wird Vcc vom Tiny auf den Bus gelegt. Falls der Tiny mit 5V betrieben wird, kommen die auch auf den Bus.
    Ich kann den Code nicht nachvollziehen, kenne den Chip nicht. Aber ein I2C Device, daß aktiv ein High auf den Bus legt, wird nicht funktionieren. Ein anderes Device kann zu jeder Zeit aktiv auf Low treiben, das kracht dann. Wenn der Code das wirklich so macht, ab in die Tonne.

    Bitbangig Code macht das normalerweise so: eine 0 ins interne Latch vom Pin schreiben, dann und erst dann auf Ausgang umschalten. Um die Leitung dann wieder High zu bekommen, den Pin auf Input schalten und der Pullup macht das High. So gibt es keine Konflikte.

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

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von iBot
    Registriert seit
    12.05.2008
    Ort
    ca. 20km von Nürnberg
    Beiträge
    160
    Also das mit den 5V hat den Grund dass ich nicht noch mal den Spannungsteiler rumlöten will und noch ein PWM-Kanal mit 5V brauche (da fällt mir ein das kann ich ja mit nem Transistor anpassen...).
    So gesehen wäre es eigentlich mit viel Aufwand möglich auf 3,3V umzusteigen.

    Das mit dem Programm hab ich mir auch irgendwie deutlich einfacher vorgestellt.
    Kenn ihr denn ein Projekt wo das ordenlich realisiert wurde?
    Zum TWI bzw. USI-Slave über Bascom gibts ja im Internet doch recht wenig was mich weiter bringt.

    Hab in der Zwischenzeit (bevor ich gelesen hab dass der Tiny mit ein High gibt) das Raspberry mit dem Tiny verbunden.
    Keine Reaktion vom Tiny.
    Pegel hab ich immer am Oszi gehabt, waren nie über 3,3V.


    Seh ich das richtig, dass die realisierung mit einem Mega8 deutlich einfacher ist?
    http://rn-wissen.de/wiki/index.php/TWI_Praxis
    Werde vermutlich meine Platine noch mal überdenken...
    Geändert von iBot (06.09.2016 um 14:29 Uhr)


  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von iBot
    Registriert seit
    12.05.2008
    Ort
    ca. 20km von Nürnberg
    Beiträge
    160
    Also ich hab jetzt einen Mega8 aufgelötet, alles auf 3,3V umgestellt (auch Spannungsteiler und PWM mit Pegelwandler) und durfte dann feststellen dass ein kleines Drähtchen eine Verbindung zwischen SDA und SCL hergestellt hat, was wohl das Hauptproblem war.

    Konnte inzwischen eine Verbindung mit dem Raspberry herstellen.

    Danke an alle die mitgedacht haben.


Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

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

Berechtigungen

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