Hallo,
Ich habe eine kleine Vernetzung von µC per I2C Bus vorgenommen.
Nun habe ich ein Problem welches ich nicht lösen kann.
Ich hab einen Master(atmega32), 2 Slave(atmega328P u atmega32) und ein
DS1307 Modul.
Der Master soll die Daten der Uhr empfangen, der Slave1 die Steuerung
des Master übernehmen da der Master die anzeige und Slave1 der
Touchscreen ist.
der Slave2 soll Meßwerte an den Master übergeben der sie dann je nach
Auswahl des Slave1, darstellt.
Alles klappt auch soweit einzeln.
Slave1 an Master und Uhr Modul Problemlos...nur wenn ich den Slave2
dazunehme und die Daten an den Master sende geht mein Uhr Signal
verloren.
Hier die verkürzten Quellcodes der einzelnen Controller:
Master Code
In den Code dieses "int bx" kommt daher das dieses CMS hier meine
indexierung als Spam erkennt...daher das 'x' am index
im Anhang ist noch ein Bild meiner Vernetzung...
Vielen Dank schonmal
mfg StefanP
Hallo,
mittlerweile konnte ich das Problem beheben.
Habe nun pro Busleitung einen 4,7 kOhm Widerstände benutzt und die gegen
Masse gezogen.
Eigentlich gegen VCC ?!?
Aufbau ist wie folgt:
atmega32 (Master)
atmega32 (Slave1)
atmega32 (Slave2)
DS1307 (Slave)
Am 328p lag es nicht..habe es auch mit dem und nen mega2560, mit dieser
Schaltung gegen Masse, erfolgreich zu laufen bekommen..
Stromversorgung war übrigens auch ok...betreibe das an nen großen
Netzteil.
gruß
Stefan Pyplo schrieb:> Habe nun pro Busleitung einen 4,7 kOhm Widerstände benutzt und die gegen> Masse gezogen.
Also das verstösst eigentlich gegen I2C Spezifizierung.
Gegen VCC war schon richtig.
Aus deinem Code geht leider nicht hervor wie der I2C - Bus im
detail angesprochen wird.
Benutzt du eine fertige Wire.h lib oder hast die selber programmiert.
Hast du ein Oszi?
So wie es aussieht scheint einer der Teilnehmer die SDA-Leitung ständig
auf Low zu ziehen bzw. nicht freigeben.
Stefan Pyplo schrieb:> nur wenn ich den Slave2> dazunehme und die Daten an den Master sende geht mein Uhr Signal> verloren.
Schau dir Slave2 mal genauer an. Vllt. ein Adressierungsproblem.
Es kann ja nur immer ein Teilnehmer abgefragt werden also niemals
gleichzeitig.
Hi.
Ja überall die wire.h Lib wie im Code zu sehen.
Ja ich hab ein computer oszi...
Das nur von einem empfangen werden kann das weiß ich ja nur komisch ist,
dass wenn ich wie geschrieben slave2 dranhänge geht das Signal der uhr
verloren aber slave1 sendet Problemlos weiter bzw Master empfängt es von
slave2...und natürlich von slave1 auch. Ich werd mal ein Bild vom oszi
machen und das hier anhängen. Muss ich erst herauswühlen:)
Danke schonmal
Gruß
@Stefan Pyplo
slaveAddress = 8; vs. ownAddress = 8;
Das hier ist schon mal eine Adresskollision.
Im Datenblatt steht für den DS1307 D0h = 11010000b.
Du sendest aber nur ne 8h.
Da stellt sich nun die Frage wie es sein kann, das du vom RTC gültige
werte bekommst?
So ein I2C Baustein hat immer eine feste Adresse und bei einige
Bausteine die man selber Hardwaremäßig einstellen kann.
Im Datenblatt steht auch das zum Schreiben D0h gesendet werden muss und
zum lesen D1h.
Wie ist das nun mit deinen Atmegas? Welche Adressen haben die?
Dann nochmal die Frage: Ist die Wire.h von dir selber programmiert
worden?