Forum: Mikrocontroller und Digitale Elektronik Si4735 mit I2C


von Bodo M. (bodo_75)


Lesenswert?

Hallo,
ich möchte einen Kurzwellenempfänger mit Si4735 bauen und ihn mit PC und 
VBA oder Python steuern. Beide Programme sind kostenlos und relativ 
einfach. Bisher habe ich nur über Steuerung mit I2C gelesen.

Meine erste Frage: Ist es egal, ob I2C oder SPI?

Zweite Frage: Ist der SI4735 kritisch mit dem I2C-Timing?
Ich nutze die rsapi64.dll, welche I2C Signale aus den Signalen der 
seriellen Schnittstelle zusammenbaut und im dazugehörigen Buch 
steht(sinngemäß): "die meisten Schaltkreise sind tolerant".

Dritte Frage: Mein I2C-Scannerprogramm findet den Schaltkreis auf 11Hex. 
Den Schaltkreis kann ich auf 34Dez ansprechen. Aber nur senden. Der 
Schaltkreis macht was ich will. Hab ich da beim I2C etwas falsch 
verstanden. Wäre genau das doppelte. Muss ich dann Werte auf 36Dez und 
nicht auf 35Dez versuchen einzulesen. Einlesen funktioniert nämlich 
nicht.

Gruß Bodo

von Hmmm (hmmm)


Lesenswert?

Bodo M. schrieb:
> Mein I2C-Scannerprogramm findet den Schaltkreis auf 11Hex.
> Den Schaltkreis kann ich auf 34Dez ansprechen.

Die übliche Verwirrung bei den I2C-Adressen: Die Adresse ist 7 Bit lang, 
und Bit 0 wird bei der Adressierung für Read/Write verwendet.

Deshalb zeigen die einen die nackte I2C-Adresse an, die anderen die um 1 
Bit nach links verschobene (und somit verdoppelte).

von Sebastian R. (sebastian_r569)


Lesenswert?

Bodo M. schrieb:
> Meine erste Frage: Ist es egal, ob I2C oder SPI?

Nein, das sind unterschiedliche Schnittstellen.

Bodo M. schrieb:
> Ist der SI4735 kritisch mit dem I2C-Timing?

Laut Datenblatt kann er bis zu 2.5MHz Clock. Da es eine synchrone 
Schnittstelle ist, gibt es nicht so viel weiteres zu beachten 
(vereinfacht).

Bodo M. schrieb:
> Mein I2C-Scannerprogramm findet den Schaltkreis auf 11Hex.
> Den Schaltkreis kann ich auf 34Dez ansprechen. Aber nur senden.

Ist dein !SEN-Pin auf GND? Dann ist 0x11 korrekt. Das wären allerdings 
17 dezimal.

Bodo M. schrieb:
> Hab ich da beim I2C etwas falsch
> verstanden.

Anscheinend ja. Du musst schon die korrekte Addresse 0x11 bzw. 17dez 
nehmen.

Bodo M. schrieb:
> Muss ich dann Werte auf 36Dez und
> nicht auf 35Dez versuchen einzulesen.

Nein. Zwar ist die Adresse zum Lesen 0x12 (das LSB ist bei Read high), 
aber darum solltest du dich nicht kümmern müssen. Deine Aussagen 
widersprechen so erst einmal der Funktionsweise von I2C.

Bodo M. schrieb:
> Ich nutze die rsapi64.dll, welche I2C Signale aus den Signalen der
> seriellen Schnittstelle zusammenbaut

Dazu die Frage: Welche Hardware hast du zwischen deinem PC und dem 
Si4735? Wie sieht der Schaltplan aus und wie dazu ein Quelltext?
Bonus: Fotos vom Aufbau.


Edit:
Hmmm schrieb:
> Deshalb zeigen die einen die nackte I2C-Adresse an, die anderen die um 1
> Bit nach links verschobene (und somit verdoppelte).

Achja. Das ist eine logische Erklärung, an die ich nicht gedacht habe.

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Bodo M. schrieb:
> Ist es egal, ob I2C oder SPI?

Na SPI ist halt normalerweise schneller. Aber ob es da bei dir drauf 
ankommt weißt nur du.

Bodo M. schrieb:
> Dritte Frage: Mein I2C-Scannerprogramm findet den Schaltkreis auf 11Hex.
> Den Schaltkreis kann ich auf 34Dez ansprechen. Aber nur senden.

Das übliche 7 vs 8Bit Adressen Problem.
0x11 sind 17dez. Schiebt man diese 7 Bit Adresse um ein Bit (auf 8 Bit) 
nach oben, hat man 34dez. Da das untere Bit nicht gesetzt ist also Write 
nicht.
Lesen müsste dann auf 35dez sein.

Edit: zu langsam 😄

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Sebastian R. schrieb:
> Nein, das sind unterschiedliche Schnittstellen.

So wie ich das lese kann er beides. Also 2 oder 3 Wire.

Sebastian R. schrieb:
> Laut Datenblatt kann er bis zu 2.5MHz Clock.

Aber nur 3 Wire. Bei 2 Wire stehen die üblichen 400kHz.

von Daniel D. (danielduese)


Lesenswert?

Es gibt eine Library von Ricardo Lima Caratti. Die ist zwar in C 
geschrieben, aber der Quellcode ist gut kommentiert. Vielleicht kannst 
du was hilfreiches drin finden.

von Frank K. (fchk)


Lesenswert?

Bodo M. schrieb:

> Meine erste Frage: Ist es egal, ob I2C oder SPI?

SPI ist schneller und unkritischer bei größeren Längen, weil jede 
Leitung nach oben und nach unten aktiv getrieben wird.

> Zweite Frage: Ist der SI4735 kritisch mit dem I2C-Timing?
> Ich nutze die rsapi64.dll, welche I2C Signale aus den Signalen der
> seriellen Schnittstelle zusammenbaut und im dazugehörigen Buch
> steht(sinngemäß): "die meisten Schaltkreise sind tolerant".

Na ja, das hört sich nach Pfuschlösung an. Man kann das auch vernünftig 
machen:

Entweder nimmst Du einen FT260:
https://ftdichip.com/products/ft260s/

Da geht normgerechtes Full-Speed USB 2.0 rein, und es kommt 
normgerechtes I2C raus. FTDI hat auch Codebeispiele.

Die andere Möglichkeit is ein NXP SC18IM704. Da gehst Du vom Rechner per 
UART rein, und der Chip implementiert dann einen normgerechten 
I2C-Master. Da dabei echte Daten auf den Datenleitungen übertragen 
werden und nicht irgendwelche Steuerleitungen zu Fuß angesteuert werden, 
ist ein korrektes Timing also garantiert.

https://www.nxp.com/part/SC18IM704PW#/

Da jeder PC USB hat, serielle Ports aber inzwischen selten sind, 
solltest Du für den Betrieb am PC den FT260 wählen.

Für SPI gibts beispielsweise dem MCP2210:
https://www.microchip.com/en-us/product/mcp2210

fchk

von Bodo M. (bodo_75)


Lesenswert?

Hallo,
was ich so lese, sagt mir, das ein richtiger I2C-Master besser ist.
Frank K. schrieb:
> Na ja, das hört sich nach Pfuschlösung an. Man kann das auch vernünftig
> machen:
Nicht so schön, funktioniert aber mit VBA.

Ich habe ein MCP2221-Board gebaut, von dem ich denke, es hat einen 
richtigen I2C-Master, das kann ich aber nicht unter VBA ansprechen. Nur 
unter Python oder VB. VB habe ich probiert. Ich bekomme es nicht hin. 
Python werde ich dann demnächst mal testen. Da muss ich aber noch etwas 
programmieren. HF und Hardware liegen mir besser.

Frank K. schrieb:
> SPI ist schneller und unkritischer bei größeren Längen, weil jede
> Leitung nach oben und nach unten aktiv getrieben wird.
Danke.
Die Schnittstelle ist also nicht das entscheidene Kriterium. 
Geschwindigkeit spielt auch keine Rolle.

Frank K. schrieb:
> Na ja, das hört sich nach Pfuschlösung an. Man kann das auch vernünftig
> machen:

Funktioniert wie verrückt, geht unter VBA und ist gut dokumentiert.

Daniel D. schrieb:
> Es gibt eine Library von Ricardo Lima Caratti. Die ist zwar in C
> geschrieben, aber der Quellcode ist gut kommentiert. Vielleicht kannst
> du was hilfreiches drin finden.

Danke. Kenne ich vom überfliegen. Mal reinschauen.
Ich danke allen die etwas geschrieben haben.
Ich werde mir nochmal I2C zu Gemüte führen.
Gruß Bodo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.