Moin
Mal wieder eine Frage zum i2c. Ich hab ein Master slave System. Master
ist Atmega644 und slave ist attiny45.
Attiny und Mega laufen auf 8MHz. Benutzt wird die Peter fleury lib.
Lasse ich den Master auf 1mhz mit folgenden Einstellungen laufen dann
kann ich lesen und schreiben auf dem Bus:
F_CPU 1000000UL
SCL 100000L
Nun möchte ich den Master aber auf 8MHz laufen lassen. Folgende
Einstellungen:
F_CPU 8000000UL
SCL 100000L
Damit kann ich weder lesen noch schreiben.
Stelle ich scl auf 800000L kann ich schreiben aber nicht lesen. Welche
Einstellungen müssen vorgenommen werden und vorallem warum?
Was du hinter solchen Namen versteckst ist weitgehend irrelevant. Ok,
die Delay-Routinen lassen sich von F_CPU direkt beeindrucken. Aber nicht
die CPU. Der ist das egal.
Wichtig ist, mit welchem Takt der Prozessor wirklich läuft und wie man
den Takt von I2C wirklich konfiguriert hat. Und wie sieht das aus?
Ein verstellen des F_CPU ändert aber nicht die Taktfrequenz des AVR.
Dafür müssen FuseBits verändert werden. Das ist Dir bewusst? F_CPU ist
lediglich für den Code wichtig, um zu wissen, welche Taktfrequenz
eingestellt ist und folglich die Teiler für die abgeleiteten Takte
richtig berechnen zu können.
http://www.engbedded.com/fusecalc/
Sei bitte vorsichtig mit der Einstellung der Taktquelle. Mit "External
Clock" legst du den AVR lahm.
Grüße Oliver
Wie gesagt wenn der Master auf 8MHz läuft (fuse div8 nicht gesetzt) dann
kann ich schreiben wenn der scl auf 800000 steht. Aber leider nicht vom
bis lesen. Wenn der Master auf 1mhz läuft also Füße gesetzt dann kann
ich lesen und schreiben wenn scl auf 100000 steht.
Oliver Ju. schrieb:> Ein verstellen des F_CPU ändert aber nicht die Taktfrequenz des> AVR. Dafür müssen FuseBits verändert werden. Das ist Dir bewusst? F_CPU> ist lediglich für den Code wichtig, um zu wissen, welche Taktfrequenz> eingestellt ist und folglich die Teiler für die abgeleiteten Takte> richtig berechnen zu können.>> http://www.engbedded.com/fusecalc/>> Sei bitte vorsichtig mit der Einstellung der Taktquelle. Mit "External> Clock" legst du den AVR lahm.>> Grüße Oliver
Ja das ist mir bewusst. Ich passe das F_CPU nur der realen
Geschwindigkeit an. Scl steht auf 100khz. Dies ist ja der Takt des Bus.
Ich setze lediglich die div8 fuse somit habe ich immer noch zugriff auf
den AVR
A. K. schrieb:> Taktet SCL mit 100kHz oder hättest du gerne, dass SCL mit 100kHz taktet?> Denn von alleine passiert das nicht, da muss man was einstellen.
Nicht zwingend.
Da steht: ((F_CPU/SCL_CLOCK)-16)/2
und must be > 10 for stable operation
Bei 1MHz/100kHz steht da (10-16)/2, also -3. Was immer das als Takt
ergibt, 100kHz werden es wohl kaum sein.
Peter M. schrieb:> Lasse ich den Master auf 1mhz mit folgenden Einstellungen laufen dann> kann ich lesen und schreiben auf dem Bus:> F_CPU 1000000UL
...
> Nun möchte ich den Master aber auf 8MHz ....> Einstellungen:> F_CPU 8000000UL
Dir ist klar, dass der Unterschied zwischen 1mHz und 8MHz etwa 9,9
Größenordnungen beträgt, deine Angaben für F_CPU sich aber nur um 0,9
unterscheiden? Das passt nicht zusammen ;-)
A. K. schrieb:> Bei 1MHz/100kHz steht da (10-16)/2, also -3. Was immer das als Takt> ergibt, 100kHz werden es wohl kaum sein.
Dann ist die Bitrate also nicht möglich.
Meckerziege schrieb:> Dir ist klar, dass der Unterschied zwischen 1mHz und 8MHz etwa 9,9> Größenordnungen beträgt, deine Angaben für F_CPU sich aber nur um 0,9> unterscheiden? Das passt nicht zusammen ;-)
Ohh der Thread wurde wohl mit "-pedantic" gebaut.
Peter M. schrieb:> Stelle ich scl auf 800000L kann ich schreiben aber nicht lesen. Welche> Einstellungen müssen vorgenommen werden und vorallem warum?
wie soll das gehen?
Joachim B. schrieb:> wie soll das gehen?
Hier ist SCL zwar 8x schneller als bei 1MHz, aber immer noch weit unter
100kHz, weil im I2C Taktregister genau wie bei 1MHz/100kHz der Wert 253
steht.
Die Berechnung setzt doch nicht die I2C Geschwindigkeit fest oder?
Was könnte es denn am slave sein? Dieser läuft auf 8 MHz.
Das merkwürdige ist ja das es funktioniert wenn der Master auf 1 MHz
läuft und scl auf 100khz definiert ist.
Meckerziege schrieb:> Peter M. schrieb:> Lasse ich den Master auf 1mhz mit folgenden Einstellungen laufen dann> kann ich lesen und schreiben auf dem Bus:> F_CPU 1000000UL>> ...> Nun möchte ich den Master aber auf 8MHz ....> Einstellungen:> F_CPU 8000000UL>> Dir ist klar, dass der Unterschied zwischen 1mHz und 8MHz etwa 9,9> Größenordnungen beträgt, deine Angaben für F_CPU sich aber nur um 0,9> unterscheiden? Das passt nicht zusammen ;-)
Sorry aber ich meinte nicht mHz sondern MHz :)
Peter M. schrieb:> Die Berechnung setzt doch nicht die I2C Geschwindigkeit fest oder?
Doch.
> Das merkwürdige ist ja das es funktioniert wenn der Master auf 1 MHz> läuft und scl auf 100khz definiert ist.
Dein Slave funktioniert bei sehr niedrig getakteten SCL (1MHz/100kHz)
vollständig. Bei höherem Takt (8MHz/800kHz) nur noch halb, bei vollem
Takt (8MHz/100kHz) überhaupt nicht.
Code vom Slave, Takt vom Slave? Wird das USI verwendet?
Peter M. schrieb:> Die Berechnung setzt doch nicht die I2C Geschwindigkeit fest oder?
Natürlich tut sie das! Schau doch mal ins Datenblatt und rechne dir doch
mal die realen Bitraten für diverse Takt-Defines aus.
Grüße Oliver
Peter M. schrieb:> Sorry aber ich finde das leider nicht! Wo genau hast du clock stretching> gefunden? Und was bewirkt dies?
War Unsinn. Ist nicht sonderlich übersichtlich, dieser Code.
Nochmal was zum Aufbau:
Scl und sda haben keine externen pull ups sondern ich benutze die
internen.
Die Leitungen zu den slaves: vom Master ca 30 cm auf eine Verteiler
Platine. Von dort aus ca 40 cm zu jedem slave.
Vielleicht hilft das bei der Fehler suche weiter. Nach einiger googlen
habe ich nur raus gefunden das die Master lib von fleury und die usi
slave lib von jtronics gut zusammen funktionieren.
So habe den Fehler gefunden. Liegt an den Leitungen
Wie gesagt vom Master 30 cm zur Verteiler Platine und von dort 30 cm zu
jedem slave. Und es gibt 100 slaves.Somit erhält man eine gesamt
Kabellänge von: 30,3 Meter.
Was kann ich tun um das ganze mit dieser Kabellänge zum laufen zu
bekommen?
Peter M. schrieb:> Scl und sda haben keine externen pull ups sondern ich benutze die> internen.
Und die Signale sehen sauber aus?
Peter M. schrieb:> Was kann ich tun um das ganze mit dieser Kabellänge zum laufen zu> bekommen?
Signaltreiber, notfalls aufspalten mit einem Multiplexer. Die AN11084
von NXP "Very large I2C-bus systems and long buses" kennst du?
http://www.nxp.com/documents/application_note/AN11084.pdf
Meckerziege schrieb:> Peter M. schrieb:>> Lasse ich den Master auf 1mhz mit folgenden Einstellungen laufen dann>> kann ich lesen und schreiben auf dem Bus:>> F_CPU 1000000UL>> ...>> Nun möchte ich den Master aber auf 8MHz ....>> Einstellungen:>> F_CPU 8000000UL>> Dir ist klar, dass der Unterschied zwischen 1mHz und 8MHz etwa 9,9> Größenordnungen beträgt, deine Angaben für F_CPU sich aber nur um 0,9> unterscheiden? Das passt nicht zusammen ;-)
Kauf Dir ne neue Brille.
Peter M. schrieb:> Scl und sda haben keine externen pull ups sondern ich benutze die> internen.> Die Leitungen zu den slaves: vom Master ca 30 cm
Vergiss das. Es ist ein Wunder daß es jemals überhaupt funktioniert hat.
Mach da die benötigten Pullups dran, vorher brauchst Du gar nicht erst
weiterexperimentieren.
Peter M. schrieb:> Und es gibt 100 slaves.
Dir ist schon klar daß die lib von JTronics in der unmodifizierten
Variante nur mit der unteren Hälfte des I²C Adressraums (also nur 64
verschiedenen Adressen) funktioniert? Das sieht man wenn man sich mal
anschaut wie dort der Code im Interrupt den Unterschied zwischen einer
Startbedingung und einer Stopbedingung festzustellen versucht: Das
höchste Adressbit muss null sein sonst funktioniert das nicht.
Peter M. schrieb:> Wie gesagt vom Master 30 cm zur Verteiler Platine und von dort 30 cm zu> jedem slave. Und es gibt 100 slaves.Somit erhält man eine gesamt> Kabellänge von: 30,3 Meter.
Gewöhnlich versucht man, bei Problemen die Komplexität der Situation zu
reduzieren. Wenn es also in einem derartigen Gesamtsystem Ärger gibt,
dann probiert man es mit 1-2 Slaves statt 100. Und man nimmt es ganz
bestimmt nicht gleich mit 100 Slaves in Betrieb, ohne vorher die
Grundfunktion kontrolliert zu haben.
Bernd K. schrieb:> Es ist ein Wunder daß es jemals überhaupt funktioniert hat.
Nö. Aus TWBR=253 und 1MHz Takt ergeben sich reale 2kHz SCL. So geruhsam
getaktet kann das tatsächlich funktionieren.
Bei 8MHz CPU Takt und 800kHz SCL-Wunschvorstellung ging das reale SCL
entsprechend auf 16kHz hoch, und es ging nur noch ein Bisschen. Passt
ganz gut ins Bild.
Treibermässig kann er dabei bleiben, wenn er mit reduziertem SCL Takt
leben kann - diesmal mit Absicht. Da die AVRs mindestens bei 5V
robustere Pin-Treiber haben als I2C vorsieht kann er in einem reinem
5V-AVR-Netz die Pullups auch weiter reduzieren als I2C offiziell
zulässt.
Also das System wurde mit 2 slaves getestet jedoch waren die Leitungen
für die anderen slaves schon verlegt und auch angeschlossen jedoch ohne
den slave am ende der Leitung.
Ob die Signale sauber sind kann ich nicht Sagen Sagen dafür fehlt mir
das nötige messmittel :/
Ich hab gestern Nacht noch einen einzigen slave an den Master
angeschlossen (restlichen 99 Leitungen auch abgeklemmt) und siehe da der
Bus läuft auf 400khz bei einer Prozessor Geschwindigkeit von 8 MHz.
Durch eine bestimmte testprogrammierung kann ich nur vermuten das in dem
Fall die Signale sauber sind. Sind alle 100 Leitungen dran, der
Prozessor auf 1mhz und der Takt auf 100khz sind die Signale meiner
Meinung nach nicht sauber und es gibt Übertragungsfehler.
Wie weit würden mir externe Pull ups and scl sda an beiden Seiten des
Busses bringen?
Ich habe den pca9600 gefunden. Wenn ich ein solchen Baustein jedoch vor
jeden slave schalte bin ich pleite. Da ab 30 cm die Leitungen parallel
abzweigen und ich somit 100 enden habe. Kann dieser auch als Verstärker
genutzt werde, also auf der Hälfte des Weges?
Dann würde ich nur 4 benötigen denn vom Master geht eine Leitung auf
einen 4er Verteiler und von diesem vierer Verteiler auf jeweils einen 25
Verteiler. und meine Idee wäre es jeweils einen Verstarkter an den
Anfang eines jeden 25 Verteilers zu geben
Peter M. schrieb:> Wie weit würden mir externe Pull ups and scl sda an beiden Seiten des> Busses bringen?
Viel. Ein R pro Leitung, nicht zwei. 5V: 470 Ohm, 3,3V: 560 Ohm. Sollten
dann aber nur AVRs am I2C hängen.
Hintergrund: Dieser Widerstand läd bei 0=>1 um die 1-2nF Buslast durch
Leitungen und Slaves auf. Dein interner Pullup mit seinen um die 30K
braucht dafür viel zu lang.
Ok dann fahre ich gleich los und besorge mal 2 470 Ohm. Die schalte ich
dann direkt am Master zwischen scl und 5v und zwischen sda und 5v.
Ich werde über Erfolg oder Misserfolg berichten. Zu dem pca9600 kann
niemand sonst was sagen?
Wenn ich die externen Pullups ein löte muss ich die internen im master
raus nehmen richtig? Muss die Pins dann Eingänge oder Ausgänge sein?
Wie sieht das beim slave aus?
I2C Problem schrieb:> Wenn ich die externen Pullups ein löte muss ich die internen im master> raus nehmen richtig? Muss die Pins dann Eingänge oder Ausgänge sein?
Ob die internen AVR-Pullups vom Master dann aktiv sind oder nicht spielt
keine Rolle, 470 Ohm parallel 30K Ohm...
> Wie sieht das beim slave aus?
Stimmt, die hatte ich nicht auf der Rechnung. Der verwendete USI Code
schaltet die der Einfachheit der Pinsteuerung halber ein, weil man
normalerweise nur eine 1stellige Anzahl Slaves dran hat und es dann egal
ist. Bei 100 Slaves läppert sich das jedoch. Na, schaun wir mal was
rauskommt.
I2C Problem schrieb:> Wie sieht das beim slave aus?
I2C Pullups int nur 1x am Bus vorgesehen, nicht pro Node.
Bei aktivem USI/TWI sind die internen Pullups automatisch abgeschaltet.
Erstmal danke für die gute Hilfe:)
Noch mal eine zwischen fragen. Das aufgebaute Master-Slave-System lief
schon fast einwandfrei außer ein paar programmier fehlern.
Die einstellungen waren CPU Tack von Master und Slave 1 MHz also DIV8
Fuse gesetzt.
Als Freuquenz im Programm war allerdings schon 8 MHz angegeben. Und als
SCL 100kHz.
Funktionierte das nur durch zufall?
A. K. schrieb:> Viel. Ein R pro Leitung, nicht zwei. 5V: 470 Ohm, 3,3V: 560 Ohm. Sollten> dann aber nur AVRs am I2C hängen.
100 Slaves mit ja 30kΩ Pull-Up ergeben zusammen einen Pull-Up von 300Ω
an den Bus-Leitungen. Da ist der treibende Ausgangs schon gefordert. So
gesehen könnte ein 470Ω-Widerstand dann besser sein? Falls die Leitung
allerdings nicht in Stern-Topologie verlegt ist, wäre wegen
Signalreflektionen die Aufteilung des Pull-Ups auf die Leitungsenden
günstiger.
Wenn natürlich die Verkabelung für 100 Slaves von nur zwei/drei Slaves
hoch gezogen werden soll, muss das schief gehen.
Peter M. schrieb:> Ob die Signale sauber sind kann ich nicht Sagen Sagen dafür fehlt mir> das nötige messmittel :/
Es sind nicht die besten Voraussetzungen, um soetwas stabil zum Laufen
zu bringen.
Wolfgang schrieb:> 100 Slaves mit ja 30kΩ Pull-Up ergeben zusammen einen Pull-Up von 300Ω> an den Bus-Leitungen. Da ist der treibende Ausgangs schon gefordert.
Weshalb ich nochmal nachgesehen habe. Egal was der Code programmiert,
USI schaltet die internen Pullups ab.
> allerdings nicht in Stern-Topologie verlegt ist, wäre wegen> Signalreflektionen die Aufteilung des Pull-Ups auf die Leitungsenden
Die sind in erster Linie bei SCL interessant, aber da sind es 70cm bis
zu den Slaves und das ist üblichen Rahmen von I2C. Der Master hat dank
vollständigem TWI ausserdem einen slew-rate limiter drin.
I2C Problem schrieb:> Funktionierte das nur durch zufall?
Gewissermassen. Durch die 1MHz/100kHz Konfiguration wurde SCL
unbeabsichtigt auf 2kHz gedrosselt. Und damit lief es trotz extrem
schwacher Pullups.
Wolfgang schrieb:> Wenn natürlich die Verkabelung für 100 Slaves von nur zwei/drei Slaves> hoch gezogen werden soll, muss das schief gehen.
Die Pullups vom Master. Bei dessen TWI greift die Programmierung der
Portregister und evtl. programmierte interne Pullups sind aktiv. Beim
USI ist das anders.
Keine Persönlichkeitsstorung ;) Projekt zu zweit würde ich das nennen ?
Also 470 ohm pull up auf scl und sda sind drin. Eine Besserung zeigt
sich und zwar das jetzt der Master auf 8 MHz läuft und scl_Clock auf
100khz und sich nicht mehr aufhängt. Allerdings ist die Übertragung
fehlerhaft.
Wenn ich einen slave allein also ohne die restlichen 99 toten Leitungen
anschließe läuft es super ohne feststellbare Übertragungsfehler.
Also einen kleinen Erfolg haben die Pull ups gebracht. Was könnte ich
noch tun?
Peter M. schrieb:> Also einen kleinen Erfolg haben die Pull ups gebracht. Was könnte ich> noch tun?
Geh mal mit dem SCL Takt runter. Vielleicht gibts eine Rate, mit der es
sowohl funktioniert also auch für die Anwendung schnell genug ist.
A. K. schrieb:> Die sind in erster Linie bei SCL interessant, aber da sind es 70cm bis> zu den Slaves und das ist üblichen Rahmen von I2C. Der Master hat dank> vollständigem TWI ausserdem einen slew-rate limiter drin.
Der Abstand spielt nur für Laufzeiteffekte/Reflektionen eine Rolle.
Trotzdem muss die kapazitive Last der ganzen Kabelage umgeladen werden.
A. K. schrieb:> Weshalb ich nochmal nachgesehen habe. Egal was der Code programmiert,> USI schaltet die internen Pullups ab.Peter M. schrieb:> Scl und sda haben keine externen pull ups sondern ich benutze die> internen.
Damit scheint das Thema interne Pull-up der Slaves aus der Welt und der
Bus hat ewig gebrauchen, um auf High-Pegel umzuschalten.
Wozu wurden eigentlich Oszis erfunden?
I2C Problem schrieb:> Muss die Pins dann Eingänge oder Ausgänge sein?
Das schaltet der Master während des Betriebes permanent um:
SCL:
- Wenn er Low ausgeben will dann schaltet er auf Ausgang und Low
- Wenn er High ausgeben will dann schaltet er auf Eingang und wartet
bis die SCL auch tatsächlich auf High geht (clock stretching)
SDA:
- Wenn er Low ausgeben will dann schaltet er auf Ausgang und Low
- Wenn er High ausgeben will dann schaltet er auf Eingang und beim
neunten Bit prüft er dann ob ACK oder NACK vom Slave.
- Wenn er Daten vom Slave liest ist SDA auf Eingang, es sei denn es
kommt das neunte Bit und er will ACK sagen.
ich habe leider zur zeit nicht das nötige Kleingeld für Oszilloskop.
Also zu meiner Bewertung der Übertragung:
Slave schreibt in txbuffer eine 1 oder 0 je nachdem wie der
fototransistor schaltet. Auswertung kann im Code eingesehen werden und
funktioniert bei einem einzigen Pixel super.
Master liest dann aus dem buffer. Bei 1 sendet er rot an die led auf dem
slave bei 0 blau. Wie gesagt bei einem slaveadresse funktioniert es
super.
Wenn ich jetzt allerdings die kabelage komplett dran hänge und dann
einen slave dran hänge dann kriegt die led keinen stabilen Zustand.
Ich weiß das ist keine gute Art und Weise eine Übertragung zu prüfen
aber wie gesagt ich habe leider kein Oszilloskop.
Kurz gesagt die led schaltet richtig bei einem slave und keiner
kabelage. Bei einem slave und restlicher kabelage habe ich keine
stabilen Zustände.
Ich hab eben auch mal die Hälfte der Leitungen abgeklemmt somit nur noch
die kabelage von 50 slaves dran und man merkt eine Verbesserung. Wenn
ich nur 25 dran habe wird es noch besser.
Peter M. schrieb:> Ich habe den pca9600 gefunden. Wenn ich ein solchen Baustein jedoch vor> jeden slave schalte bin ich pleite.
Sollst du ja nicht. Der PCA9600 dient dazu, größere Segmente (egal ob
lange Leitung oder viele Devices) zu treiben. Also jeweils einen für
eine bestimmte Zahl von Geräten (max. 4000pF Kapazität auf dem Bus).
> Da ab 30 cm die Leitungen parallel> abzweigen und ich somit 100 enden habe. Kann dieser auch als Verstärker> genutzt werde, also auf der Hälfte des Weges?> Dann würde ich nur 4 benötigen denn vom Master geht eine Leitung auf> einen 4er Verteiler und von diesem vierer Verteiler auf jeweils einen 25> Verteiler. und meine Idee wäre es jeweils einen Verstarkter an den> Anfang eines jeden 25 Verteilers zu geben
Yep, ein PCA9600 pro 25er-Verteiler sollte prinzipiell gehen (falls
einer reicht - rechne die kapazitive Belastung aus). Allerdings darfst
du die PCA9600 nicht direkt parallel schalten (-> Datenblatt lesen!),
daher würde ich da im 4er-Verteiler noch einen PCA9516 als Hub vorsehen.
Diese Kombination ist laut Datenblatt auch zulässig und es gibt von NXP
auch extra eine Application Note dazu.
Wo ich grad LED lese: Kann es sein, dass direkt neben den I2C-Leitungen
mörderische Transienten irgendwelcher damit geschalteter Power-LEDs auf
Stromversorgungsleitungen spazieren gehen?
Mach ein Bild von dem Aufbau, bzw. wahrscheinlich mehere.
Du hast also weniger als 1 Byte an zu übertragendem Informationsgehalt
pro Slave und hast 100 Slaves und willst die wahrscheinlich alle
permanent zyklisch abfragen?
Alternativ-Vorschlag: SPI Daisychain.
Also ich will zyklisch 1 Byte lesen und 3 Byte senden (aus Sicht der
Master)
Ich versuche mal eine Skizze vom Aufbau hochzuladen. Bei Bildern wäre
das glaube ich nicht so eindeutig.
Peter M. schrieb:> Bei Bildern wäre das glaube ich nicht so eindeutig.
Bilder sind zusätzlich zum Schaltplan wegen der Art der Verkabelung von
Signal und Strom nützlich.
Wolfgang schrieb:> Ralf Döblitz schrieb:>> und es gibt von NXP auch extra eine Application Note dazu.>> Und welche meinst du da genau?
Im Datenblatt zum PCA9516 heißt es:
Please see Application Note AN255 “I2C & SMBus Repeaters, Hubs
and Expanders” for additional information on sizing resistors and
precautions when using more than one PCA9515/PCA9516 in a
system or using the PCA9515/16 in conjunction with the P82B96.
Zum einen beudetet das, daß man den PCA9516 mit dem PCA9600 (der P82B96
war der Vorgänger) kombinieren kann, zum anderen führt das zu konkreten
Dimensionierungshinweisen für die Pullups:
http://www.nxp.com/documents/application_note/AN255.pdf
Schaltpläne habe ich leider keine aktuellen Grad.
Der stand ist jetzt:
Eine Leitung mit einem slave am Master. Perfekte schaltzustände. Master
und slave laufen auf 8MHz und scl_Clock ist 50kHz
25 slave Leitungen mit einem slave am Master. Ständig toggelnder
Zustand. Master, slave und scl_Clock mit den selben Einstellungen.
Ich überlege Grad wie weit mich die Kondensatoren bringen würden bei 100
slaveleitungen wenn ich schon bei 25 derbe Probleme habe.
(Hardwareaufwand = groß)(Funktion fragwürdig)
Meine andere Überlegung ist ob es 4 Treiber Stufen auf den 4 Verteilern
bringen werden.
(Hardwareaufwand=gering)(Funktion fragwürdig)
Und eine ganz andere Überlegung wäre die Auswertung
Des schaltzustands über den slave laufen zu lassen und den Bus nur in
eine Richtung zu nutzen.
(softwareaufwand = groß)(Funktion eventuell eingeschränkt)
Was meint ihr?
A. K. schrieb:> Wo ich grad LED lese: Kann es sein, dass direkt neben den I2C-Leitungen> mörderische Transienten irgendwelcher damit geschalteter Power-LEDs auf> Stromversorgungsleitungen spazieren gehen?
Ein gängiges Problem ist, daß sich I2C selbst stört: Crosstalk zwischen
SCL und SDA. Wer es besonders gut meint, verdrillt beide auch noch.
MfG Klaus
Peter M. schrieb:> Was meint ihr?
Die Frage ist doch, wie lange man im Dunkeln tappt, wenn man ohne Oszi
versucht, den Bus irgendwie zum Laufen zu bringen.
> Ich überlege Grad wie weit mich die Kondensatoren bringen würden bei 100> slaveleitungen wenn ich schon bei 25 derbe Probleme habe.
Da sollte man gar nicht überlegen. Jeder Slave sollte mindestens seinen
100nF Kondensator über der Versorgung haben. Vorher würde ich mich über
keinerlei Fehlverhalten wundern. Ein Streifen (z.B. 100nF/50V 0805) und
die Sache ist erledigt.
Ok ich probiere das dann. Für Ein C zwischen Vcc und GND ist auf den
Platinen noch genug platz.
Bestelle jetzt bei reichelt und werde auch gleich dazu noch 4 Treiber
Stufen pca9600 mitbestellen.
Jemand noch eine Idee was ich gleich mitbestellen kann was auch eine
Lösung sein könnte?
Peter M. schrieb:> Bestelle jetzt bei reichelt und werde ....
Wie kann man eigentlich etwas entwickeln, wenn man ein paar
Kondensatoren erst bestellen muß. Wenn man ein Brett annageln will,
bestellt man sich dann auch zwei Nägel, oder doch besser drei, falls man
einen krumm schlägt?
MfG Klaus
Peter M. schrieb:> Für Ein C zwischen Vcc und GND ist auf den Platinen noch genug platz.
Davon kann man wohl ausgehen. Bei einem X7R-G0603 100N von Reichelt
wirst du Sorgen haben, den zwischen deinen Streifen wieder zu finden,
falls dort VCC und Gnd auf benachbarten Bahnen liegen. Bei einem
X7R-G0805 100N ist da etwas einfacher ;-)
Klaus hast du zu viel Langeweile das du hier dein dummen Kommentar
hinterlässt? Wenn das deine Meinung ist dann behalte sie für dich und
mach dir nicht noch die mühe diese mit allen Teilen zu müssen. Such dir
Hobbys wie zb einen Sport etc. Soll für Ausgleich im leben sorgen.
Und um doch auf deine Frage zurück zu kommen ( nimm die Antwort so hin
und Fang keine Diskussion wie ein 10 jähriger an, es sei denn du bist
es)
Ich bin kein Bauteil Lager der tonnenweise alle möglichen Bauteile zur
Verfügung hat. Ich scheiße kein Geld um mir alles mögliche parat zu
Legen. Ich plane und bestelle dann. Diesmal habe ich etwas vergessen und
bestelle nach. Was ein Tragödie! Fehler macht man eben und aus denen
sollte man lernen.
Danke Wolfgang ich hatte eigentlich vor die große Bauform zu nehmen mit
dem Rastermaß 5mm.
Da aber Vcc und GND neben einander liegen nehme ich lieber diese hier:
X7R-G1206 100N
@Peter aber du hast Ohne Schaltplan, Ohne Ahnung von Programmieren, ohne
Ahnung von Elektronik, ohne Messmittel einfach mal was zusammengebastelt
und das Forum soll das jetzt reparieren.
Also immer schön freundlich bleiben
Schaltpläne sind vorhanden leider keine aktuellen. Ich weiß was an denen
geändert wurde leider bringt euch das nicht viel.
Anhang von programmieren ist drin bzw ein Verweis.
Und was meinst du mit Elektronik Anhang? Ich glaube das nötigste bis
auf Schaltplan hab ich drin um mein Problem zu beschreiben.
Das forum soll mir überhaupt nichts reparieren sondern ein paar Tips zur
Fehlerbeseitigung geben.
Was ist denn heute los? Tag der Langeweile oder was? Ich habe viel
brauchbare und ernstgemeinte antworten erhalten und bin dankbar über
jede einzelne.
Also Lies Nochmal die letzten posts und Überleg DiR wer unfreundlich
geworden ist!!!!
An A.K: Schaltpläne aktualisier ich gleich und lade sie hoch.
Wenn ich angeblich keine Ahnung vom Elektronik und keine Ahnung.Vom
programmieren habe wie bin ich dann.Soweit gekommen das ein Prototyp mit
wenigen slaves einwandfrei läuft?
Such dir Hobbys oder eine Frau scheint dir wohl an beidem zu mangeln.
Peter M. schrieb:> Wenn ich angeblich keine Ahnung vom Elektronik und keine Ahnung.Vom> programmieren habe wie bin ich dann.Soweit gekommen das ein Prototyp mit> wenigen slaves einwandfrei läuft?
Nichts für ungut, aber bevor man ein Bussystem mit ~100 Teilnehmern
aufbaut, sollte man zumindest mal was von Abblockkondensatoren gehört
haben.
1. Das ist mein erstes Projekt mit einem I2c
2. Dadurch das dass beim Prototypen nicht aufgefallen habe ich nicht
dran gedacht.
Ich bin ja nicht allwissend und will mit dem Projekt auch was lernen.
Und dank dem Hinweis mit den blockkondensatoren habe ich was
dazugelernt.
I2C Problem schrieb:
Beim ATmega muss Pin31 auch an Gnd gelegt werden.
> Hier die Schaltpläne des slaves ...
Deine LED-Beschaltung solltest du noch mal überdenken. So ist eigentlich
gar nicht einzusehen, warum die irgendwann mal leuchten sollten ;-)
Und die Abblockkondensatoren - wo sind die?
Der Strom der GND leitung an der klemme mit s1 s2 s3 s4 fließt also
durch den AVR durch? Gewagte konstruktion. ich kann mir auch nicht
erklären, wie die leds jemals leuchten sollen.
flip
Ja Sorry beim überarbeiten habe ich glatt die GND verbindung vergessen.
Ja ich weiß bei beiden :D
Abblockkondensatoren sind ja aktuell noch nicht drin. Sind aber bestellt
und werden direkt verbaut sobald sie da sind.
Ich mache Meldung sobald es weiter geht.
Erstmal kümmere ich mich jetzt um die Touch geschichte ;)
Hat jemand schonmal mit dem PCA9600 gearbeitet? Habe diese jetzt mal
gleich mitbestellt ;)
Ich habe nun die pca 9600 bekommen. Ich bin mir allerdings nicht ganz
sicher wie ich diese einbauen soll.
Meine Idee wäre:
Vcc und GND ist klar.
Jetzt die sda nach dem Master auftrenne. Also sda vom Master auf sx. RX
und tx Brücken und von dort aus zu den slaves.
Bei scl das selbe Spiel nur Halt alles mit sy und ty und ry.
Vor und nach dem pca natürlich noch pull-ups.
I2C Problem schrieb:> Hier die Schaltpläne des slaves und masters;)
AVCC ist zwingend nötig für korrekte Funktion des dadurch versorgten
Ports, egal ob der ADC verwendet wird oder nicht. Also AVCC=VCC und
GND=GND.
A. K. schrieb:> I2C Problem schrieb:> Hier die Schaltpläne des slaves und masters;)>> AVCC ist zwingend nötig für korrekte Funktion des dadurch versorgten> Ports, egal ob der ADC verwendet wird oder nicht. Also AVCC=VCC und> GND=GND.
Ok wurde bereits erledigt. Ist mir auch aufgefallen. Trotzdem danke für
den Hinweis. Was sagst du zu den pca9600? Bzw zu meiner Idee?
Peter M. schrieb:> Leider funktioniert es nicht so wie ich es mir gedacht habe. Bzw gar> nicht. Ist beim Aufbau was grundlegendes falsch?
Wenn du mehrere PCA9600 parallel schaltest: Ja, natürlich. Im Datenblatt
des PCA9600 steht auf Seite 5 ganz klar und deutlich:
"Remark: Two or more SX or SY I/Os must not be interconnected. The
PCA9600 design does not support this configuration."
Das impliziert, daß du für mehrere PCA9600 vorher einen I2C-Hub
benötigst, zum Beispiel eben den PCA9516, der rein zufällig 5 Kanäle
(ein Master und vier Slave-Stränge via PCA9600 in deinem Fall)
unterstützt.
Peter M. schrieb:> Ist beim Aufbau was grundlegendes falsch?
Wenn die Pläne die aktuelle Version repräsentieren, allerdings. Es
fehlen immer noch die Sch*$$ Abblockkondensatoren, ohne die kein CMOS IC
richtig will.
Ich habs vor ein paar Tagen mal erklärt und schreib nicht alles nochmal:
Beitrag "Re: 74HC595 Störanfälligkeit"
Die Hersteller geben in ihren Applikationen das auch alles an, das
machen die nicht aus Langeweile. Und beim Mega64 kannst du auch beim
nächsten Fusen mal die JTAG Fuse abschalten, denn du wirst PORT C vllt.
als Port benutzen wollen.
Ok danke. Dann probiere ich es mal mit einem einzigen pca9600 aus.
Vielleicht bringt das ja auch schon Abhilfe.
Zu den blockkondensatoren: die sind bereits drin, da wo ich die Pläne
rejngestellt habe waren sie noch nicht drin.
Was mir eben noch aufgefallen ist:
Hat der Master nur einen Slave und beide laufen auf 8MHz und der
scl_Clock steht auf 100khz so liest er zwar aus aber leider nicht
stabil.
Wenn ich den scl_Clock langsamer mache sollte ich doch eigentlich eine
bessere Übertragung hinbrkommen oder?
Ok erster Erfolg:
Mit einem pca9600 30cm nach dem Master kann ich auf jeden Fall schon mal
"sauber" den slave schreiben und lesen. Ich werde es später noch mit 50
dann mit 75 und schlussendlich mit 100 slaves probieren.
Kurze Rückmeldung:
I2C läuft soweit stabil auf 100khz. Ein denk bzw Programmierfehler hat
sich eingeschlichen. Der Fehler lag nicht somit die ganze Zeit nicht
beim I2C.
Die Touch Funktion des Tisches funktioniert auch muss nur noch bei
verschiedenen Tageslicht Zuständen getestet werden und aus dieser
Erkenntnis dann ein Algorithmus zur Auswertung geschrieben werden.
Master programm mit Animationen, spielen und LcD Menü steht bereits
genauso wie die Windows software. Sobald das zum laufen gebracht wurde
wird eine Android App folgen.
Bilder, Videos und eine dokumentation zum Projekt werden dann auch
veröffentlicht.
Danke an dieser Stelle für jegliche Unterstützung.
LG
Peter M. schrieb:> 1. Das ist mein erstes Projekt mit einem I2c
was bedeutet das?
es ist nicht dein erstes Projekt mit IC?
ich wundere mich auch, seit der Computersteinzeit 1977 hat jedes digital
IC nach Abblockkondensatoren verlangt, was sollte sich da ändern?
Das ist immer die erste Regel beim Planen und Bauen, ergo hat man
100nF-470nF Kerko immer parat und selten 2-3 Stück.
scnr aber das musste hier nochmal auch für andere gesagt werden.
ja und genau für solche tipps bin ich ja dankbar. ich hab es schlichweg
vergessen und nicht dran gedacht. Ein paar hatte ich ja zu hause nur
keine 120 Stück mehr.
Ich habe schon öfter mal kleinere Sachen mit ICs gemacht. Und ja ich
weiß auch das Abblockkondensatoren ran müssen. Das letzte Projekt lag
auch schon einige Zeit zurück.
Und da ich hier im Forum schon öfter gesehen habe das manche gerne einen
Touch realisieren wollen aber nicht gerne die knapp 3 euro für einen
sharp is471F ausgeben wollen. Ich weiß abhilfe und habe es mit dem temic
k153p paar hinbekommen. Ist zwar bisschen Programmieraufwendiger aber es
funktioniert einwandfrei und bei der preisersparnis finde ich das super.