Forum: Mikrocontroller und Digitale Elektronik SI4735 findet keine Sender beim automatischen Suchlauf


von derLemmi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community, ich habe folgendes Problem. Oben seht Ihr meine 
Beschaltung des Radiochips SI4735. Die Steuerleitungen gehen Links zum 
Atmega8. Mit einem I2C Busscanner findet der Atmega den Radiochip auf 
Adresse 34. Soweit alles in Ordnung. Wenn ich jetzt aber einen 
automatischen Sendersuchlauf starte, Steht im Display sowohl für 
Frequenz, als auch für RSSI und SNR eine 0.

Also sind die Register leer denke ich mal.

Aus dem Lautsprecher kommt nur rauschen.

Der Chip findet einfach keine sinnvollen Frequenzen.

Hier der Code, den ich für den automatischen Suchlauf verwende. Laut 
Datenblatt des SI sollten die Befehle die richtigen sein.
1
Sub Aufwaertssuche()
2
  I2cstart                               ' I2C Kommunikation aufbauen
3
  I2cwbyte 34                            ' I2C Adresse vom SI4735 schreiben
4
  I2cwbyte &H21                          ' FM_Seek_Start Command
5
  I2cwbyte &H0C                          ' Seek up and Wrap
6
  I2cstop                                ' I2C Kommunikation abbauen

Vielleicht weiss ja einer von Euch woran das liegen kann, ich bin so 
langsam am Verzweifeln.

Vielen Dank im Voraus schonmal

mfg

von Karl (Gast)


Lesenswert?

Da kann an so vielen Dingen liegen...

Ist hardwareseitig alles richtig angeschlossen? Was ist mit "erst mal 
nicht aufgebaut?

Ich kenne jetzt die Details nicht, aber Du wirst die Befehle schon 
richtig abgetippt haben. Bleibt noch BASCOM I2C. Wie initialisierst Du 
I2C?

Ansonsten gibt es hier einen funktionierenden Code:

http://www.elektronik-labor.de/AVR/Heimradio2.html

Und hier einen Schaltplan:

http://www.elexs.de/SI4735h.html

von derLemmi (Gast)


Lesenswert?

Die I2C Initialisierung klappt, sonst würde der Chip ja nicht antworten 
und das Programm würde sich aufhängen. Und per I2C Scanner ( Scannt alle 
I2C Adressen ab und wartet auf Antwort von den Slaves) antwortet der SI 
ja mit seiner Adresse (34). Daher gehe ich davon aus, dass die I2C 
Kommunikation klappt.

Erstmal nicht aufgebaut heisst einfach nur, dass ich vorerst nur FM 
testen will und AM aussen vor lasse. An diesem Projekt aus dem ELEXS 
habe ich mich orientiert.

Ich habe die Anschlüsse am Radiochip bzw am Sockel dafür mehrfach 
durchgeklingelt und kontrolliert. Alles richtig verdrahtet.

Ich merk schon, das ist garnicht so einfach, ich dachte vielleicht hatte 
jemand das gleiche oder ähnliche Problem schonmal mit dem SI Chip

Vielen Dank aber schonmal für die schnelle Antwort

mfg

von Karl (Gast)


Lesenswert?

Ich stelle gelegentlich Probleme fest (insbesondere bei 
Lochrasteraufbauten), wenn ich (trotz richtiger Pinbelegung) 
Hardware-TWI verwende ($lib "i2c_twi.lbx"). Da gibt es auch kein 
Problem, die richtige Adresse zu finden, die Kommunikation klappt aber 
nicht. Mit "Config I2cdelay" könntest Du auch etwas spielen. Probleme 
kann es auch geben, wenn in $crystal eine falsche Frequenz angegeben 
wurde.

von derLemmi (Gast)


Lesenswert?

Ich programmiere in BasCom und nicht in C . Das mit dem Crystal werde 
ich nochmal übeprüfen. Ansonsten heisst es weiter suchen. Was mir 
aufgefallen ist, wenn ich an PB1 den Timer aktiviere und auf PWM stelle, 
dann emfängt der Radiochip wirre Frequenzen. Wahrscheinlich die 
Störfrequenzen von dem PWM Pin. Vielleicht muss ich den Chip noch besser 
abschirmen. Ja ist auf Lochraster aufgebaut.

Gruß

von Karl (Gast)


Lesenswert?

derLemmi schrieb:
> Ich programmiere in BasCom und nicht in C

Ich weiß, mein Beitrag bezog sich auf BASCOM. Immerhin kann man 
Hardware-TWI als Fehlerquelle ausschließen.

derLemmi schrieb:
> emfängt der Radiochip wirre Frequenzen

Kannst Du den den Chip auf eine bestimmte Frequenz eines starken 
Radiosenders in Deiner Nähe einstellen? Vielleicht kannst Du dann besser 
nach Störungen suchen.

von derLemmi (Gast)


Lesenswert?

Die Frequenz ist Standardmässig auf 87,0 eingestellt, von da an sucht 
der Chip den Frequenzbereich ab. Ich werde das nochmal testen mit einer 
festen Frequenz. Auch werde ich nochmal eine längere Antenne austesten, 
da ich hier sozusagen in einem "Bunker" sitze. Bzw. ich werde die 
Antenne mal aus dem Fenster hängen.

Ich habe in der BasCom Hilfe keinen Befehl I2Cdelay gefunden. Ich muss 
dazu aber auch sagen, dass ich erst seit ca 3 Monaten in BasCom 
programmiere.

Gruß

von Karl (Gast)


Lesenswert?

derLemmi schrieb:
> Auch werde ich nochmal eine längere Antenne austesten,
> da ich hier sozusagen in einem "Bunker" sitze.

Hmm, bin jetzt davon ausgegangen, dass Du das schon getestet hast.

derLemmi schrieb:
> Ich habe in der BasCom Hilfe keinen Befehl I2Cdelay gefunden.

Auch da kann ich helfen. ;-)

http://avrhelp.mcselec.com/index.html?config_i2cdelay.htm

von Asko B. (dg2brs)


Lesenswert?

Hallo

Ueberpruefe mal Deine Quarzbeschaltung !
Auf dem Schaltplan sieht das sehr "einseitig" aus.
Wie soll da was schwingen ?

Gruss Asko

von Old P. (Gast)


Lesenswert?

Ja, die Quarzbeschaltung ist vollkommen falsch und wenn Du mit "erstmal 
nicht aufgebaut" den Kondensator am FMI nicht bestückst, wie soll da 
jemals ein Antennensignal in den Chip gelangen.

Also, nochmal hinsetzen und die Grundschaltungen üben ;-)

Old-Papa

von derLemmi (Gast)


Lesenswert?

So die Quarzbeschaltung korrigiert und an den DCLK Pin mit 
angeschlossen. Die Bürdekondensatoren am Quarz auf 22pF geändert ... er 
findet jetzt zumindest schonmal Sender, die werden aber auf dem LCD mit 
komplett falschen Frequenzen angezeigt.

Vielleicht habt ihr ja hier auch noch einen Tip für mich.

Vielen Dank schonmal

mfg

von Karl (Gast)


Lesenswert?

Na, hätte schon fast geglaubt, Du meldest Dich nicht mehr. Ohne den Code 
zu sehen, wird man da kaum helfen können. Welche Frequenz ist 
eingestellt und was wird angezeigt?

von derLemmi (Gast)


Lesenswert?

Den Quelltext habe ich eigentlich 1zu1 aus dem ELEXS Projekt übernommen.
1
Sub Fm_tune_status()
2
  I2cstart
3
  I2cwbyte 34                          ' I2C Adresse vom SI4735 schreiben
4
  I2cwbyte &H22
5
  I2cwbyte &H03
6
  I2cstop
7
  I2cstart
8
  I2cwbyte 35                          ' I2C Adresse vom SI4735 lesen
9
  I2crbyte Status , Ack
10
  I2crbyte R1 , Ack                    
11
  I2crbyte R2 , Ack                    
12
  I2crbyte R3 , Ack
13
  I2crbyte R4 , Ack
14
  I2crbyte R5 , Ack
15
  I2crbyte R6 , Ack
16
  I2crbyte R7 , Nack
17
  Freq = 256 * R2                    'Freq aus R2 und R3 berechnen
18
  Freq = Freq + R3
19
  Rssi = R4
20
  Snr = R5
21
  Cls                          'Ausgabe der ausgelesenen Werte auf dem LCD
22
  Locate 1 , 1
23
  Lcd Freq
24
  Lcd "  "
25
  Locate 2 , 1
26
  Lcd "Freq"
27
  Locate 1 , 8
28
  Lcd Rssi
29
  Lcd "   "
30
  Locate 2 , 7
31
  Lcd "RSSI"
32
  Locate 1 , 12
33
  Lcd Snr
34
  Lcd " "
35
  Locate 2 , 12
36
  Lcd "SNR"
37
  I2cstop
38
End Sub

zum Einstellen der Frequenz verwende ich
1
Sub Fm_tune_freq();
2
  I2cstart
3
  I2cwbyte 34                 ' I2C Adresse vom SI4735 schreiben
4
  I2cwbyte &H20               ' FM_Tune_Freq Command
5
  I2cwbyte &H00
6
  H = High(ffm)               ' Startfrequenz ins H und L Byte schreiben
7
  L = Low(ffm)
8
  I2cwbyte H
9
  I2cwbyte L                  ' 88.8 MHz
10
  I2cwbyte &H00
11
  I2cstop                     ' I2C Kommunikation abbauen
12
End Sub

Wenn ich ne feste Frequenz von z.B. 88.8 ( bei uns N-Joy) zeigt er auf 
dem Display 43957 an.

Irgendwie seh ich da keinen Zusammenhang.

Vielen Dank im Voraus

mfg

von Karl (Gast)


Lesenswert?

Bei 88.8 müsstest Du 8880 auf dem Display sehen. R2 wäre &H22 (34) und 
R3 wäre &HB0 (176). Lass Dir mal R2 und R3 ausgeben. Du kannst auch 
schreiben:

Freq = MAKEINT(R3,R2)

von derLemmi (Gast)


Lesenswert?

Wenn ich als Frequenz .. also die Variable ffm mit 8880 deklariere, 
steht auf dem Display 46507

R2 ist 171 und R3 ist 181 (bei der standardberechnung stimmt das 
Ergebnis auch wenn es unsinnig ist) mit dem Makeint Befehl stimmt die 
Rechung dann nicht mehr.

Gruß

von derLemmi (Gast)


Lesenswert?

Nachtrag:

Einen Sender ( Also Musik) findet er bei der fest eingegebenen Frequenz 
auch nicht. Bei 88.8 ist aber definitiv ein Sender. Mit anderem fertigen 
Radio getestet. mit dem Suchlauf findet er den Sender. Wenn ich dann 
aber aufwärtssuche und dann wieder abwärts, ist die Musik zu hören, also 
der Sender wird empfangen, aber R2 und R3 ändern sich jedes mal.

Ich verzweifle langsam an diesem Projekt :(

Gruß

von Karl (Gast)


Lesenswert?

Ok, probier mal freq in einen String umzuwandeln und dann auf dem LCD 
auszugeben:

Str(freq)

von derLemmi (Gast)


Lesenswert?

Jetzt steht auf dem Display bei der festen Frequenz 8880 auf dem Display 
47090 für R2 steht 183 und für R3 steht 242 .

Ich glaube nicht, dass das an der Formatierung der Ausgabe liegt, aber 
ich habe leider keine Ahnung woran sonst :(

Kann das immer noch was mit den 32,78 kHz vom Quarz zu tun haben ?

Gruß

von Daniel P. (ppowers)


Lesenswert?

derLemmi schrieb:
> Kann das immer noch was mit den 32,78 kHz vom Quarz zu tun haben ?
Sicherlich!
Du musst dem Chip auch bei der Initialisierung mitteilen, welche 
Frequenz das Ref-Clock Signal hat. Tust Du das? Überhaupt wäre die 
Initialisierung mal ganz interessant zu sehen.

Stell bitte auch mal ein aktuelles Schaltbild hier rein. Das oben 
gezeigte hat einfach zu viele Fehler! Wenn Du z.B. RFGND immer noch 
nicht mit GND verbunden hast, würde es mich auch nicht wundern, dass der 
Chip nicht vernünftig tickt...

gruß
daniel

von derLemmi (Gast)


Angehängte Dateien:

Lesenswert?

Anbei der Code zur Initialisierung .. auch aus dem ELEXS Projekt
1
Sub Init_fm()
2
  I2cstart
3
  I2cwbyte 34                            ' I2C Adresse vom SI4735
4
  I2cwbyte &H01                          ' Powerup Command
5
  I2cwbyte &H10                          ' '00 FM, 01 AM, 10 32-kHz-Osz
6
  I2cwbyte &H05                          ' Powerup Analog Output
7
  I2cstop
8
End Sub

Der RFGND wird laut Datenblatt nur bei AM Betrieb benötigt und 
beschaltet.

Ich habe jetzt die Frequenz fest auf 9400 engestellt, da ich dort weiss 
welcher Sender läuft ( auf dem Display steht 14076) .. Am Anfang des 
Programms lasse ich diese Frequenz einstellen. Er findet keinen Sender 
.. Wenn ich dann noch einmal Aufwaertssuche per Code starte, findet er 
den gewollten Sender und zeigt auf dem Display 14076 an, also genau das 
was vorher auch stand.

Zur Einstellung der Refclock verwende ich folgenden Code:
1
Refclk = 32768                           'Quarz 32.768KHz
2
3
  Call Set_property(&H0201 , Refclk)     'REFCLK_FREQ
4
5
  Call Set_property(&H1400 , 8750)       'FM_SEEK_BAND_BOTTOM
6
  Call Set_property(&H1401 , 10800)      'FM_SEEK_BAND_TOP
7
  'Call Set_property(&H1501 , 4)         'RDS_INT_FIFO_COUNT
8
  'Call Set_property(&H1502 , 1)         'RDS_CONFIG
9
  Call Set_property(&H1404 , 15)         'FM_SEEK_TUNE_RSSI_THRESHOLD

Gruß

von Karl (Gast)


Lesenswert?

derLemmi schrieb:
> Sub Fm_tune_status()
>   I2cstart
>...
>   I2cstop
> End Sub

Sehe gerade, dass Du die LCD-Ausgabe noch in der I2C-Routine machst. 
Setz mal I2Cstop direkt hinter "I2crbyte R7 , Nack".

von derLemmi (Gast)


Lesenswert?

macht auf jeden Fall Sinn.. ich denke mal das i2cstop ist irgendeinem 
Änderungsversuch zum Opfer gefallen. Hat aber leider nichts an den 
falschen Frequenzen geändert. Aber zumindest bleibt bei dem fest 
eingestellten Sender jetzt R2 und R3 gleich. :P

Vielen Dank nochmal euch Allen für die Hilfe

Gruß

von derLemmi (Gast)


Lesenswert?

RFGND ist nun auf Masse .. Antennenanschluss für AM ist nun auch 
vorgesehen.

Frequenzen immer noch Sch***e. Schaltungstechnisch nochmal alles 
kontrolliert und mit Beschaltung aus dem Datenblatt verglichen .... 
Check.

Sender werden empfangen.. Musik kommt raus .. Frequenzen werden immer 
noch falsch angezeigt.
Es sollte auf dem Display 9400 stehen .. es steht 14076 mit R2 = 54 und 
R3 = 252.

Gruß

von derLemmi (Gast)


Lesenswert?

Hat noch jemand eine Idee für das Problem mit den falschen Frequenzen ?

Vielen Dank im Voraus

Gruß

von Daniel P. (ppowers)


Lesenswert?

Hallo,
ich habe mal mit meinem eigenen Code verglichen und kann auf Anhieb 
keinen Fehler ausmachen. Du könntest höchstens die Initialisierung noch 
wie folgt erweitern:
1
// Setup Tuner Parameters
2
si4735_setProperty(REFCLK_FREQ, REFCLOCK_FREQUENCY);  // set refclock input  
3
si4735_setProperty(REFCLK_PRESCALE, 0x0001);  // set refclock prescaler to 1
4
si4735_setProperty(FM_DEEMPHASIS, 0x0001);  // set deemphasis to 50µs (Europe)
5
si4735_setProperty(FM_SEEK_FREQ_SPACING, 0x0005);  // set frequency spacing to 5kHz

An Deinem eigentlichen Problem wird sich aber dadurch vermutlich nichts 
ändern.

Daher solltest Du mal versuchen, die Kommunikation systematisch zu 
checken:
setze den Wert eines Register und lies diesen Register anschließend 
wieder aus. Sind beide Werte gleich?
Hast Du überhaupt mal versucht, andere Register des Chips zu lesen? Du 
kannst ja z.B. auch die Chip-ID auslesen, soweit ich mich erinnere. Wenn 
Du da schon schwachsinnige Werte erhälst, dann weißt Du, dass mit der 
Kommunikation (zumindestens im Lesemodus) grundlegend etwas nicht 
stimmt.

Gruß
Daniel

von Karl (Gast)


Lesenswert?

derLemmi schrieb:
> Hat noch jemand eine Idee für das Problem mit den falschen Frequenzen ?
>
> Vielen Dank im Voraus
>
> Gruß

Tja, so richtig weiß ich auch nicht mehr weiter. Schau mal nach dem, was 
Daniel P. schrieb, und ich verweise auf meine Antwort weiter oben. Spiel 
mal etwas mit "Config I2cdelay", vielleicht hilft das ja.

Falls vorhanden, "Config Twi = 400000" herausnehmen.

Falls vorhanden,  $lib "i2c_twi.lbx" herausnehmen.

Setze hinter jeden "I2CStop" Befehl den Befehl "Print Err" oder LCD Err 
und schau Dir die Ausgabe an. Wenn Err=0 ist, sollt die Kommunikation ok 
sein.

von derLemmi (Gast)


Lesenswert?

hmm ich habe die 10k Pullups vom I2C Bus nochmal durch 4,7k geändert. 
Jetzt steht bei Frequenz 65535 und bei RSSI, SNR , R2, R3 255

Also Alle Werte auf Maximum :(

Gruß

von MWS (Gast)


Lesenswert?

derLemmi schrieb:
> Chipbeschaltung.png

Die I2C-Beschaltung passt nicht, da dürfen kein 10k Widerstände (R2/R4) 
in den SCL/SDA Leitungen vorhanden sein, wie soll der Slave da was 
vernünftig auf Low ziehen können ? Sollte das ein Pegelwandler werden ?

Bei Verwendung von $lib "i2c_twi.lbx" wird Hardware-I2C genutzt und dann 
schaltet der Bascom-Befehl I2CInit die µC-internen Pullups (~20k) ein. 
Etwas anderes macht der Befehl übrigens nicht.

Wenn der Slave SDA auf Low ziehen möchte, ergibt R2/R13 & interner 
Pullup einen Spannungsteiler, das I2C-Interface des ATM8 sieht dann um 
die 2,3V und kann das sicherlich nicht als Low betrachten.

Der korrekte Weg wäre vom SI4735 direkt zum ATM8 zu gehen, 2 Pullups auf 
3,3V zu setzen und die internen Pullups im ATM8 aus zu lassen, also 
I2CInit wegzulassen.

von Frank aus Köln (Gast)


Lesenswert?

@derLemmi

ich hatte letztens auch mal ein bisschen mit dem SI-4735 rumgespielt,
was mir dabei aufgefallen ist, ist das der 32KHz Quarz des öfteren nicht 
sauber anschwingt. Lag vielleicht auch am Steckbrett. Nachdem ich den 
Ozsillator auf 4MHz umgebaut hatte, lief der SI-4735 einwandfrei.
Ich hatte im übrigen die selbe Fehlererscheinung wie bei dir
(falsche Frequenzanzeige).
Schau dir vielleicht das mal an: http://www.elexs.de/SI4735b.html

Gruß

Frank aus Köln

von MWS (Gast)


Lesenswert?

Hier ist SDA/SCL richtig beschaltet: http://www.elexs.de/SI4735h.html

Hier nicht: http://www.elexs.de/SI4735a.html

Und das hier zeugt davon, dass der Erbauer den I2C-Bus nicht verstanden 
hat, Zitat von SI4735a.html:
> Das Interface zum UM232R verwendet drei Widerstände. Zwei der Leitungen
> könnten zwar auch direkt verbunden werden, aber so wird eine größere
> Fehlersicherheit erreicht.

Das Einzige was er damit tatsächlich erzeugt sind Fehler.

von Frank aus Köln (Gast)


Lesenswert?

@MWS

Ich muss gestehen die anderen Seiten von denen habe ich mir nicht 
angeschaut,
aber das mit dem 32KHz Quarz kann ich bestätigen, nachdem ich mit 4MHz 
Clocksignal aus einem Quarzoszillator gearbeitet hatte, stimmte die 
Frequenzanzeige auch nach jedem einschalten.

Gruß aus Köln

Frank

von Karl (Gast)


Lesenswert?

MWS schrieb:
> Die I2C-Beschaltung passt nicht, da dürfen kein 10k Widerstände (R2/R4)
> in den SCL/SDA Leitungen vorhanden sein, wie soll der Slave da was
> vernünftig auf Low ziehen können ? Sollte das ein Pegelwandler werden ?

Würde mal meinen, dass es in Richtung Pegelwandler gehen sollte. Würde 
ich persönlich nicht so machen.

MWS schrieb:
> Hier ist SDA/SCL richtig beschaltet: http://www.elexs.de/SI4735h.html

Setzt aber voraus, dass der Mikrocontroller mit 3,3V betrieben wird.

von MWS (Gast)


Lesenswert?

Karl schrieb:
> Setzt aber voraus, dass der Mikrocontroller mit 3,3V betrieben wird.

Nein, das ist nicht die Voraussetzung. Bei I2C kommunizieren sowohl 
Master als auch Slave indem der Pegel aktiv auf Low gezogen wird, der 
High-Pegel stellt sich nur über die Pullups ein, also eine Open 
Collector Schaltung.

Wenn die Pullups auf 3,3V ziehen, dann sieht der Master als High-Pegel 
nicht mehr als diese 3,3V, was für die Funktion ausreicht.

Solange man keine internen Pullups im µC aktiviert, welche dann 
zusätzlich auf 5V ziehen würden, liefert der Master somit keine Spannung 
auf den Bus, welche die Specs des Slave überschreiten würde.

von derLemmi (Gast)


Lesenswert?

Wenn ich aber einen 4MHZ Ozillator ( ist auf der Platine schon drauf für 
den Atmega) verwende, muss ich ihm einen Refclk Prescaler von 122 
mitteilen oder ? Ich werde erstmal die 10k Widerstände in der SCL und 
SDA Leitung rausnehmen. Genau auf den oben genannten ELEXS Artikel bin 
ich dann wohl reingefallen, dass das die Fehlersicherheit erhöhen soll 
:(

Vielen Dank nochmal Euch Allen für die vielen Tipps.

Ich werde weiter berichten, was sich ergeben hat.

Gruß

von Frank aus Köln (Gast)


Lesenswert?

@derLemmi

ich weiss es leider nicht mehr aus dem Kopf, muss heute aben mal zu 
Hause nachschauen, aber die machen das in Bascom so:

Private Sub Xtal()
    Prop &H202, 125   '4 MHz / 125 = 32 kHz
    Prop &H201, 32000
    DELAY 100
End Sub

Ich weiss nicht ob das so richtig ist. (unzuverlässige Quelle)

Gruß aus Köln

Frank

von Karl (Gast)


Lesenswert?

MWS schrieb:
> Nein, das ist nicht die Voraussetzung. Bei I2C kommunizieren sowohl
> Master als auch Slave indem der Pegel aktiv auf Low gezogen wird, der
> High-Pegel stellt sich nur über die Pullups ein, also eine Open
> Collector Schaltung.

Mein Kommentar bezog sich eher auf den gesamten Schaltplan.

Trotzdem, ich dachte immer, man müsste ein "Level shifting" wie hier 
machen:

http://www.nxp.com/documents/application_note/AN10441.pdf

von MWS (Gast)


Lesenswert?

derLemmi schrieb:
> dass das die Fehlersicherheit erhöhen soll

Du musst natürlich vorsichtig sein, denn wenn Du etwas falsch 
konfigurierst, kannst Du den SI4735 in der Tat schreddern.

D.h. Du musst in Deinem Code darauf achten, dass die Portpins für SCL 
und SDA niemals auf High und Ausgang konfiguriert werden.

Die Bascom Hardware-I2C I2CInit hat da speziell für Deinen Fall 'ne 
kleine Schwäche, da sie erst PORT auf High (also Pullups ein) und dann 
erst DDR auf Low setzt. Wenn in dieser Konstellation die Pins bereits 
Ausgänge waren, liegen für 2/3 Zyklen die Portpins auf 5V.

Aber wie schon gesagt solltest Du die I2CInit sowieso nicht verwenden.

Beim Startup sind die Portpins immer Eingänge, da passiert nichts.

Und selbst wenn Du unter Bascom tatsächlich ein I2CInit reinschreiben 
würdest, wärst Du mit 4,7k externen Pullups auf 3,3V und angenommenen 
20k internen Pullups mit 3,62V gerade grenzwertig über dem erlaubten 
Bereich VD +0,3V. Dass dabei bereits etwas kaputt ginge, glaube ich 
kaum.

Wenn Du dagegen aktiv 5V reinhämmerst, wird's ein toter Käfer.

von derLemmi (Gast)


Lesenswert?

Deshalb habe ich die Jumper vorgesehen. Sieht man noch am linken 
Bildrand einen Teil von. Das habe ich auch schon gelesen, dass man den 
SI4735 schnell ins Nirvana befördern kann. Jedesmal wenn ich flashe, 
nehme ich die Jumper ab.


Übrigens VIELEN VIELEN VIELEN DANK an MWS. die 10k Widerstände in der 
SCL und SDA Leitung rausgenommen und er zeigt die richtigen Frequenzen 
an freu

Gruß

von MWS (Gast)


Lesenswert?

Karl schrieb:
> Trotzdem, ich dachte immer, man müsste ein "Level shifting" wie hier
> machen:

Ja, sicher so wär's richtig wenn Du einen 3,3V Bus mit einem 5V Bus 
verbindest, da kannst Du nicht sicher sein, ob die 5V Devices mit dem 
3,3V Level klarkommen. Hier ist's aber überschaubar, ein Master und ein 
Slave, der High-Pegel des Slave muss sicher über und der Low-Level 
sicher unter der jeweiligen Threshold des Masters liegen.

Lt. DB des ATM8 liegt bei VCC = 5V die Threshold für High bei ~1,8V, bei 
Low bei~1,3V.

Mit 3,3V für High liegt man sicher drüber.

Hab's mal mit ein paar Widerständen und der Schaltung wie oben 
simuliert, da kommen folgende Spannungen wie sie der Master sieht raus:

Ohne zusätzliche interne Pullups, also kein I2CInit:
Slave SDA offen:      3,3V
Slave SDA zieht low:  1,65V

Mit zusätzlichen Pullups 20k per I2CInit:
Slave SDA offen:      3,87V
Slave SDA zieht low:  2,32V

Simulation ist idealisiert, wenn also der SI4735 bei Low nicht auf 0V, 
sondern z.B. 0,6V zieht, dann ändern sich die Pegel nochmal.

Man sieht daran, dass es mit 10k und ohne interne Pullups eigentlich 
schon nicht mehr funktioniert, mit internen Pullups geht's zuverlässig 
nicht mehr.

Wenn man noch 'ne kleine Sicherheit haben möchte, dass ein falsch 
gesetzter Pin nicht zum Tod des SI4735 führt, könnte man noch über die 
Verkleinerung von R2/R4 auf 3k3 nachdenken, da sind die Pegel dann 
vorteilhafter, Low 1,27V, High 3,3V und der maximale Strom bei 5V wäre 
begrenzt. Ob's tatsächlich hilft - keine Ahnung. Dazu müsste man wissen, 
ob Clamp-Dioden an den SI4735-Eingängen die Überspannung ableiten 
können.

derLemmi schrieb:
> Das habe ich auch schon gelesen, dass man den
> SI4735 schnell ins Nirvana befördern kann.

Eigentlich dürfte während des Flashens nichts passieren, da die Pins 
dabei Eingänge sind.

> zeigt die richtigen Frequenzen

Prima :D

von Karl (Gast)


Lesenswert?

MWS schrieb:
> Lt. DB des ATM8 liegt bei VCC = 5V die Threshold für High bei ~1,8V, bei
> Low bei~1,3V.

Ja, das macht Sinn. Vielen Dank auch von mir für die Erläuterung.

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.