Forum: Mikrocontroller und Digitale Elektronik Status vom I2C-Bus


von Denny S. (nightstorm99)


Lesenswert?

Hallo!

Wie kann man (am besten in Bascom) den Status vom I2C-Bus abfragen?
Will wissen ob der Bus belegt ist oder nicht.
Es läuft zwar auch so, aber nach einigen Stunden hängt sich dann 
irgendwas auf.

Habe 2 Atmega, ein Ds1307, ein Ultraschallsensor SRF02 und 2 Eeproms 
dran
zu hängen. Beide Atmega soll hin und wieder vom DS lesen und beide 
sollen aus
den Eeproms lesen und schreiben können. Quasi als Multi-Mastersystem.


Gruss

von Falk B. (falk)


Lesenswert?

@ Denny Sandner (nightstorm99)

>Habe 2 Atmega, ein Ds1307, ein Ultraschallsensor SRF02 und 2 Eeproms
>dran
>zu hängen. Beide Atmega soll hin und wieder vom DS lesen und beide
>sollen aus
>den Eeproms lesen und schreiben können. Quasi als Multi-Mastersystem.

Warum beide? Brauchst du für deine Sache WIRKLICH zwei AVRs, die BEIDE 
auf den Bus als Master zugreifen? Wenn BASCOM den Multimasterbetrieb 
nicht direkt unterstützt muss man da vorsichtig sein.

MFG
Falk

von Denny S. (nightstorm99)


Lesenswert?

Falk Brunner wrote:
> @ Denny Sandner (nightstorm99)
>
>>Habe 2 Atmega, ein Ds1307, ein Ultraschallsensor SRF02 und 2 Eeproms
>>dran
>>zu hängen. Beide Atmega soll hin und wieder vom DS lesen und beide
>>sollen aus
>>den Eeproms lesen und schreiben können. Quasi als Multi-Mastersystem.
>
> Warum beide? Brauchst du für deine Sache WIRKLICH zwei AVRs, die BEIDE
> auf den Bus als Master zugreifen? Wenn BASCOM den Multimasterbetrieb
> nicht direkt unterstützt muss man da vorsichtig sein.
>
> MFG
> Falk


Beide sind in unterschiedlichen Zimmer platziert.
Sollen dann mal über 2 Repeater verbunden werden.
Will quasi nur ne Abfrage machen, ob der Bus frei ist oder nicht, das 
sollte reichen.
Wie gesagt es läuft ja ne weile und dann hängt irgendwas.

Gruss

von Falk B. (falk)


Lesenswert?

@ Denny Sandner (nightstorm99)

>Will quasi nur ne Abfrage machen, ob der Bus frei ist oder nicht, das
>sollte reichen.

So einfach ist das nicht. Denn da hängt auch ein relatv knappes Timing 
dahinter. Klar kann man für ein paar us prüfen, ob SCL und SDA auf HIGH 
liegen. ABER! Wenn dann losgelegt wird mit schreiben muss der I2C Master 
nochmal prüfen, ob nicht jemand dazwischen funkt. Und das muss in den 
BASCOM-I2C Routinen eingebaut sein, damit es SICHER funktioniert. Wenn 
nicht, kannst du Multimaster vergessen oder die I2C Routinen neu 
schreiben.

Workaround. Nur EIN AVR ist Master. Der zweite ist Slave und bekommt vom 
ersten eine Kopie der DS1307 Daten.

MfG
Falk

von Denny S. (nightstorm99)


Lesenswert?

Ja das mit der Slave Sache ist ganz schön, nur leider muss man bei 
Bascom dafür extra zahlen.
Und die anderen Sachen die ich im Netz gefunden habe, damit komme ich 
noch nicht
ganz klar.

Habe mal grob gerechnet und im Moment werde ca 20 Abfragen in der 
Sekunden auf den I2C-Bus gemacht.

MfG

von Falk B. (falk)


Lesenswert?

@ Denny Sandner (nightstorm99)

>Ja das mit der Slave Sache ist ganz schön, nur leider muss man bei
>Bascom dafür extra zahlen.

There is no such thing as free lunch.

>Habe mal grob gerechnet und im Moment werde ca 20 Abfragen in der
>Sekunden auf den I2C-Bus gemacht.

Und? Das spielt keine Rolle. Wenn sich das Ding verklemmt, dann klemmt 
es. Wobei eine gute I2C Routine ein Timeout generiert, den Bus wieder 
frei gibt und einen Fehler zurückmeldet.

MfG
Falk

von Michael P. (desilva)


Lesenswert?

ATMEL ist sehr undeutlich in der Feature-Beschreibung. Auf den Seiten 
191 ff. des ATmega 8 Manuals findet man etwas über Multimaster-Betrieb, 
was allerdings auch nach zweimaligem Lesen für mich nicht völlig 
schlüssig klingt.

Das Sicherste wäre zwischen allen potenziellen Mastern eine Art "token 
passing" Protokoll auf Software-Ebene aufzubauen. Blöde ist da immer die 
time-out Behandlung, wenn einer der Master abgeschaltet, kaputt oder 
anderweitig beschäftigt ist...

Aber auch das erfordert die - Geld kostende :-) - 
Slave-Implementierung...

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.