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
@ 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
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
@ 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
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
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.