www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Spartan als I2C Slave an 5V I2C Bus


Autor: PGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zuammen,

ich möchte einen Spartan 3 an einem 5V I2C als Slave betreiben.

Nun hab ich zwar das Wiki bzgl. Pegelwandlung durchgelesen allerdings 
ist mir nun immer noch nicht klar wie ich praktisch die 
Spannungsanpassung realisieren soll.

Ist nur eine Hobby Anwendung, so dass ich an einer einfachen praktischen 
Lösung interessiert bin.

Kann ich die Spannungsteiler Methode wählen ?

Wie soll ich die Widerstände dimensionieren.

U2 / U1  = R2 / ( R1 + R2 )

ist schon klar. Aber sollen die R sehr hochohmig oder niederohmig sein.

Bitte um praktischen Tipp

Danke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An den Pins des S3 sind Klemmdioden, die den Pegel auf die IO-Spannung 
(vermutlich 3,3V) begrenzen. Die Eingänge des S3 kannst du also mit 
einem einfachen Vorwiderstand 5V-tauglich machen.
Bei I2C ist jetzt allerdings das Problem, dass du am gleichen Pin Ein- 
und Ausgang hast. Und beim Ausgang, der ja "nur" ein Schalter gegen GND 
ist, steht dir dieser Vorwiderstand jetzt im Weg, wenn es darum geht, 
einen "sauberen" 0V-Pegel zu erzeugen.


Ich würde das pro I2C-Leitung aufteilen in:
1 Pin des FPGAs mit Vorwiderstand als Eingang     und
1 Pin mit Transistor in Open-Collector als Ausgang

So etwa:
                                                  o
                                                  |
                                                 .-.
  -----.                                         | |
       |                                         | | I2C-Pullup
       |                                         '-'
       |                                          |
       '       ___                                |
   In  o------|___|--------o----------------------o--------->
       .           10k     |                        SDA / SCL
       |                   |                         
 FPGA  |                   |
       |                   |
       '       ___       |/
   Out o------|___|------|   BC547
       .           10k   |>
       |                   |
       |                  ---
 ------'

Das habe ich schon mit 1-Wire-Bausteinen gemacht (die haben ja auch 
diesen bidirektionalen Bus mit Pullups), und das funktioniert 
reibungslos.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte gerne diesen Beitrag verwenden und keinen neuen anlegen, da 
ich ein vergleichbares Problem habe.

Ich habe mir einen einfachen i2c-Slave Code geschrieben und versuche das 
ganze jetzt auf realer Hardware zu testen. Als FPGA wird ein Xilinx 
Virtex4(XC4VFX12) eingesetzt. Dieser soll an einen I2C-Master, welcher 
sich in einem Microcotroller befindet, angeschlossen. Der 
Microcontroller hat an den bei den Leitung (SCL und SDA) 5V anliegen. 
Weiterhin sind entsprechende Pullup-Widerstände angebracht. Der IC2-Buss 
in Verbindung mit anderen Controllern läuft einwandfrei nur wenn ich mit 
dem FPGA kommunizieren möchte, geht nichts.

Meine Frage: Muss man die oben aufgezeichnete Schaltung auch bei diesem 
FPGA durchführen oder könnte man auf die verzichten?

Was ich beobachten konnte ist, dass nach dem Anschließen des Slaves die 
Spannug auf dem Bus von 5V auf 3.6V sinkt. Weiterhin habe ich getestet 
ob
 der FPGA einen Pegelwechsel erkennen kann, ja er kann es.


MfG
Helmut

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Als FPGA wird ein Xilinx Virtex4(XC4VFX12) eingesetzt.
> Was ich beobachten konnte ist, dass nach dem Anschließen des Slaves die
> Spannug auf dem Bus von 5V auf 3.6V sinkt.
Ja, die Klemmdioden beginnen zu leiten.
Der V4 ist wie der Spartan3 nicht 5V tolerant (gleiche Technik).

Der geht dir auf Dauer einfach kaputt. Im Datenblatt steht da was von 
100 Stunden, das war die krasseste Zeitangabe, die ich jemals gesehen 
habe. Offenbar gibt es laut FAE mit 5V langsame Zersetzungen im IO-Pad, 
die nach 100 Std (in der Summe) dafür sorgen, dass der zwar nicht kaputt 
ist, aber die Spec nicht mehr einhält   :-o

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Infos. Dann mache ich mich mal an die Schaltung.

MfG
Helmut

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mich erinnern, dass die Standardlösung dafür in der offiziellen 
I2C-Spezifikation von Philips beschrieben ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.