Forum: Mikrocontroller und Digitale Elektronik Bascom 2 getrennte I2C TWI an einem Controller DS1307


von Simon H. (simon24j)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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.

von Simon H. (simon24j)


Lesenswert?

@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.

von bastelino (Gast)


Lesenswert?

>3m entfernt
Murks++

von Simon H. (simon24j)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Bascom_user (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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.

von Bascom_user (Gast)


Lesenswert?

Und warum nicht UART zwischen den ATMEGA's und I2C mit DS1307 ?

von Simon H. (simon24j)


Lesenswert?

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?

von held (Gast)


Lesenswert?

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 ?)

von Peter D. (peda)


Lesenswert?

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ß.

von Simon (Gast)


Lesenswert?

Würde aber bedeuten das 2x Master auf einem Controller kein Problem 
darstellen würde, richtig? aber anscheinend trotzdem in Bascom nicht 
möglich :-(

von Spess53 (Gast)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.