Hallo zusammen, hab folgendes Problem, ich Kommuniziere zwischen 2 AVR´s Master ATmega 644p Slave ATmega 32, das funktioniert auch tadellos, jetzt wollte ich noch nen DS307 RTC dazu in den I2C hängen und mit dem Maste beide Slaves (DS1307 und Mega32 auslesen (Mega32 funktioniert weiterhin, DS1307 geht nicht) sobald ich den Mega 32 vom I2C trenne läuft auch die Kommunikation zum DS1307! TWI geschwindigkeit schon auf 100khz gestellt, mit den Pullups gespielt aber leider hilft das alles nichts, darum jetzt die Idee mit 2 getrennten I2C am Mega644P, geht das mit Bascom?? wenn ja kann mir jemand weiterhelfen wie ich das angehe? Danke schon mal im Voraus
@ Simon H. (simon24j) >noch nen DS307 RTC dazu in den I2C hängen und mit dem Maste beide Slaves >(DS1307 und Mega32 auslesen (Mega32 funktioniert weiterhin, DS1307 geht >nicht) sobald ich den Mega 32 vom I2C trenne läuft auch die >Kommunikation zum DS1307! Dann stimmt wohl was nicht mit dem Atmega32, der funkt in die Kommunikation mit dem DS1307. Dort musst das Problem suchen und lösen. >aber leider hilft das alles nichts, darum jetzt die Idee mit 2 >getrennten I2C am Mega644P, geht das mit Bascom?? Warum der Murks? I2C kann Dutzende Teilnehmer zusammenschließen! >wenn ja kann mir jemand weiterhelfen wie ich das angehe? Besorg die einen Oszi oder LogicAnalyzer und schau dir die I2C Signale an. Im Extremfall taktet man I2C mit 1Hz (EIN HERTZ) und schaut sich die Siganle mit LEDs an SCL und SDA an (mit Vorwiderständen und low aktiv, Kathode am Signal, Anode über Vorwiderstand an VCC.) Siehe Fehlersuche.
@Falk Danke für deine Antwort, über murks könnnte man sich jetzt streiten, aber egal. hab mit der selben konfiguration auch schon weitere I2C teilnehmer dran gehabt, nen weiteren Mega8 und auch nen PCF mit Display, funktionierte auch alles problemlos, evtl. ist das problem auch das der mega32 3m entfernt ist!?!? den ds1307 hingegen nur 5cm am selben I2C Bus. Wie gesagt die komm zum mega32 problemlos und auch zu weiteren I2C Problemlos, nur die DS1307 will ned :-( darum die Version angedacht die in deinen Augen Murks ist.
ok da stimmt Murks mal auf alle Fälle, aber es funktioniert! Anscheinend hat keiner ne Ahnung ob und wie man mit Bascom 2 getrennte I2C Buse verwenden kann. Schade das man nie ne Antwort auf die gestellte Frage bekommt sonder meist Antworten auf nicht gestellte Fragen.
Simon H. schrieb: > Anscheinend hat keiner ne Ahnung ob und wie man mit Bascom 2 getrennte > I2C Buse verwenden kann. Was steht denn im Bascom-Manual? Ansonsten, ein SW-I2C-Master geht auch ganz leicht mit Bit-Banging.
Wie sieht es mit Pull-up aus (verwendest Du interne oder externe) ? Läuft der I2C Slave im atmega32 richtig ? Passen die Adressen ? Bei größeren Leitungslängen verwende z.B. P82B96 Du kannst die auch mit einem I2C multiplexer trennen z.B. PCA9546
@ Simon H. (simon24j) >auch alles problemlos, evtl. ist das problem auch das der mega32 3m >entfernt ist!?!? Kann sein. Probier es mit deutlich kürzeren leitungen. Wenn es funktioniert, weißt du, dass logisch alles OK ist, aber die Signale wegen der langen Leitungen ein Problem haben. 3m ist zwar nicht gerade die Zielanwendung für I2C, es gaht aber, wenn man es richtig macht. >Problemlos, nur die DS1307 will ned :-( darum die Version angedacht die >in deinen Augen Murks ist. Dann schau dir die Signale an, wenn du mit dem DS1307 redest und lange Leitungen dranhängen, ohne den 2. AVR. Dort wird wahrscheinlich ein Problem sein.
Die Hardware und auch Software steht, und ist eben für I2C gemacht, UART geht über Modbus zum PC Gibt es wirklich keine Möglichkeit bei Bascom zweimal I2C zu machen?
Doch, aber nicht so wie Du das haben möchtest. z.B. Als I2C Master verwendet der Atmega die Hardware SDA und SCL Pin's. Gleichzeitig kannst Du die I2C Slave Lib laufen laussen: Die I2c Slave Lib verwendet Timer0 und Int0 als SCL und SDA. D.h. eine als Master und eine als Slave (nur wenn Deine Hardware schon fix ist. Wo kommen dann die 2 zusätzlichen Pin's für SDA und SCL her ?)
held schrieb: > Als I2C Master verwendet der Atmega die Hardware SDA und SCL Pin's. > > Gleichzeitig kannst Du die I2C Slave Lib laufen laussen: > Die I2c Slave Lib verwendet Timer0 und Int0 als SCL und SDA. Wer kommt denn bloß auf solche verrückte Ideen? Als Slave mußt Du in 4µs reagieren bei 100kBit, bei 400kBit noch schneller. Da der AVR keine Interruptlevel hat, macht Dir jeder andere Interrupt den SW-Slave platt. Umgekehrt wird ein Schuh draus. Der Slave muß immer das HW-I2C benutzen! Und den Master macht man in SW, denn der gibt den Takt vor. Er darf also ruhig Pausen einlegen, wenn der MC grad Interrupts erledigen muß.
Würde aber bedeuten das 2x Master auf einem Controller kein Problem darstellen würde, richtig? aber anscheinend trotzdem in Bascom nicht möglich :-(
Hi >aber anscheinend trotzdem in Bascom nicht möglich :-( Du hast unter BASCOM Zugriff auf alle Register und Assembler geht auch. Also ist es möglich. Nur weil es BASCOM nicht mundgerecht serviert heißt das noch langen nicht, das es nicht geht. Da findest du eine Anleitung für ein Software TWI-Master http://www.avrfreaks.net/index.php?func=viewItem&item_id=75&module=Freaks%20Tools MfG Spess
Hallo zusammen :-) Keine Ahnung, ob der Beitrag hier noch aktuell ist, aber ich wollte mal kurz anmerken, dass man mit einem Atmega und Bascom durchaus mehrere I2C-Kanaele bauen kann, die sogar mit unterschiedlichen Geschwindigkeiten laufen. Nur kann man dafuer die Standard-I2C-Befehle nicht mehr verwenden, dass muss man manuell schreiben. Wer ein Codebeispiel haben will kann mich anschreiben. uwe.janowski at greencore-systems.pl
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.